本帖最后由 tzdgreyd 于 2019-1-5 13:22 编辑
写了个Python的代码,用来把一些单个指令合成长指令,或者把一个长指令分割成多个小指令。
这里的长指令就是说把一些代码浓缩到一条指令里、放在一个命令方块里。
用到的方法是把命令方块堆高高+红石块激活+清除的方法,详见MC_taotao发布的教程,教程链接:http://**/thread-15860-1-1.html
更新:之前没考虑命令堆叠造成的Y轴偏移,以及目标区域与命令方块可能有的水平方向偏移的需求。
现在考虑进来了。
话不多说,直接放代码,长指令的合成:复制代码
打开的文件和生成的文件如图所示:

长指令的分解:复制代码
效果和之前是反过来的,这个就不截图啦。
本人编程很渣,有什么错的地方欢迎指出(轻喷)
(真想快点水点经验)
写了个Python的代码,用来把一些单个指令合成长指令,或者把一个长指令分割成多个小指令。
这里的长指令就是说把一些代码浓缩到一条指令里、放在一个命令方块里。
用到的方法是把命令方块堆高高+红石块激活+清除的方法,详见MC_taotao发布的教程,教程链接:http://**/thread-15860-1-1.html
更新:之前没考虑命令堆叠造成的Y轴偏移,以及目标区域与命令方块可能有的水平方向偏移的需求。
现在考虑进来了。
话不多说,直接放代码,长指令的合成:
- import tkinter
- import tkinter.filedialog as tf
- import re
- file1 = open(tf.askopenfilename(),encoding='UTF-8')
- n=0;
- #dx, dy为红石柱的偏移
- dx = 1;
- dz = 0;
- #DX,DY为整个代码要实现位置的偏移量。因为一条指令会产生一柱擎天,所以可能不适用于一些建筑。这里是建筑距离命令方块的距离。
- DX=10;
- DZ=10;
- totalline='';
- def _dealY(matched):
- yi=[];
- y='';
- global n,DX,DZ
- for mg in matched.groups():
- if mg.strip()=='':
- i=0
- else:
- i=int(mg);
- yi.append(i)
- yi[0]=yi[0]+DX;
- yi[1]=yi[1]-n;
- yi[2]=yi[2]+DZ;
- print(n)
- for i in range(0,3):
- y = y+'~'+ str(yi[i])+' '
- return y;
- while True:
- lines = file1.readline().strip('\n').replace('"','\\"');
- lines = re.sub(r'~(-?[0-9]*?) ~(-?[0-9]*?) ~(-?[0-9]*?) ',_dealY,lines);
- if not lines:
- break;
- pass
- n = n + 1;
- if n==1:
- totalline = '/summon falling_block ~ ~5 ~ {Time:1,Block:command_block,TileEntityData:{Command:"' + lines + '"}';
- else:
- totalline = totalline + ',Passengers:[{id:falling_block,Time:1,Block:command_block,TileEntityData:{Command:"'+lines+'"}';
- totalline = totalline + ',Passengers:[{{id:falling_block,Time:1,Block:command_block,TileEntityData:{{Command:"/fill ~{0} ~{1} ~{2} ~{3} ~{4} ~{5} redstone_block"}},Passengers:[{{id:falling_block,Time:1,Block:redstone_block,Passengers:[{{id:falling_block,Time:1,Block:command_block,TileEntityData:{{Command:"/fill ~{6} ~{7} ~{8} ~{9} ~{10} ~{11} air "}},Passengers:[{{id:falling_block,Time:1,Block:redstone_block}}]}}]}}]}}]}}'.format(dx,-n,dz,dx,2,dz,0,-(n+2),0,dx,3,dz)+']}'*(n-1);
- print(totalline)
- with open(file1.name.split('.')[0]+'_LongCommand.txt','w',encoding='UTF-8') as file2:
- file2.write(totalline);
打开的文件和生成的文件如图所示:

长指令的分解:
- import tkinter
- import tkinter.filedialog as tf
- import re
- #file1 = tf.askopenfilename()
- n=0;
- #DX,DY为整个代码要实现位置的偏移量。因为一条指令会产生一柱擎天,所以可能不适用于一些建筑。这里是建筑距离命令方块的距离。
- DX=10;
- DZ=10;
- totallines=[];
- def _dealY(matched):
- yi=[];
- y='';
- global n,DX,DZ
- for mg in matched.groups():
- if mg.strip()=='':
- i=0
- else:
- i=int(mg);
- yi.append(i)
- yi[0]=yi[0]-DX;
- yi[1]=yi[1]+n;
- yi[2]=yi[2]-DZ;
- print(n)
- for i in range(0,3):
- y = y+'~'+ str(yi[i])+' '
- return y;
- file1 = open(tf.askopenfilename(),encoding='UTF-8')
- while True:
- lines = file1.readline().strip('\n');
- if not lines:
- break;
- pass
- searchObj = re.findall( r'(/.*?)(?<!\\)"', lines, re.M|re.I)
- print(searchObj)
- for i in range(1,len(searchObj)):
- searchObj[i] = searchObj[i].replace('\\"','"');
- searchObj[i] = re.sub(r'~(-?[0-9]*?) ~(-?[0-9]*?) ~(-?[0-9]*?) ',_dealY,searchObj[i]);
- print(searchObj[i])
- totallines = totallines+[searchObj[i]];
- n=n+1;
- print(totallines)
- with open(file1.name.split('.')[0]+'_Units.txt','w',encoding='UTF-8') as file2:
- for i in range(0,len(totallines)-2):
- if i==len(totallines)-3:
- file2.write(totallines[i])
- else:
- file2.write(totallines[i]+'\n')
效果和之前是反过来的,这个就不截图啦。
本人编程很渣,有什么错的地方欢迎指出(轻喷)
(真想快点水点经验)
来个人回我一下帖子呀嘤嘤嘤,缺经验
可是,我已经有函数了鸭
可是,我已经有函数了鸭
ruhuasiyu 发表于 2019-1-4 16:43
可是,我已经有函数了鸭
需要把一些远古级别的OOC拆开看的话还是有这个需求的……
本帖最后由 xmdhs 于 2019-1-5 06:50 编辑
停留在1.8........
停留在1.8........
嘤……我完全不知道OOC生成器这种东西……
我就只看了那个一条指令的教程,觉得要是有个程序能帮我合成指令就好了。
于是就自己写了。
我知道现在函数可以很有用啦,但是也有一些特别的情况,比如说到朋友的主机上玩,发现那里非常贫瘠,于是拿出珍藏的一段生成建筑的代码,xiu地一下给他变出来一个房子……
之类的?
我就只看了那个一条指令的教程,觉得要是有个程序能帮我合成指令就好了。
于是就自己写了。
我知道现在函数可以很有用啦,但是也有一些特别的情况,比如说到朋友的主机上玩,发现那里非常贫瘠,于是拿出珍藏的一段生成建筑的代码,xiu地一下给他变出来一个房子……
之类的?