tzdgreyd
本帖最后由 tzdgreyd 于 2019-1-5 13:22 编辑

写了个Python的代码,用来把一些单个指令合成长指令,或者把一个长指令分割成多个小指令。
这里的长指令就是说把一些代码浓缩到一条指令里、放在一个命令方块里。
用到的方法是把命令方块堆高高+红石块激活+清除的方法,详见MC_taotao发布的教程,教程链接:http://**/thread-15860-1-1.html

更新:之前没考虑命令堆叠造成的Y轴偏移,以及目标区域与命令方块可能有的水平方向偏移的需求。
现在考虑进来了。

话不多说,直接放代码,长指令的合成:
  1. import tkinter
  2. import tkinter.filedialog as tf
  3. import re
  4. file1 = open(tf.askopenfilename(),encoding='UTF-8')
  5. n=0;
  6. #dx, dy为红石柱的偏移
  7. dx = 1;
  8. dz = 0;

  9. #DX,DY为整个代码要实现位置的偏移量。因为一条指令会产生一柱擎天,所以可能不适用于一些建筑。这里是建筑距离命令方块的距离。
  10. DX=10;
  11. DZ=10;
  12. totalline='';

  13. def _dealY(matched):
  14.     yi=[];
  15.     y='';
  16.     global n,DX,DZ
  17.     for mg in matched.groups():
  18.         if mg.strip()=='':
  19.             i=0
  20.         else:
  21.             i=int(mg);
  22.         yi.append(i)
  23.     yi[0]=yi[0]+DX;
  24.     yi[1]=yi[1]-n;
  25.     yi[2]=yi[2]+DZ;
  26.     print(n)
  27.     for i in range(0,3):
  28.         y = y+'~'+ str(yi[i])+' '
  29.     return y;

  30. while True:
  31.         lines = file1.readline().strip('\n').replace('"','\\"');
  32.         lines = re.sub(r'~(-?[0-9]*?) ~(-?[0-9]*?) ~(-?[0-9]*?) ',_dealY,lines);
  33.         if not lines:
  34.                 break;
  35.                 pass
  36.         n = n + 1;   
  37.         if n==1:
  38.                 totalline = '/summon falling_block ~ ~5 ~ {Time:1,Block:command_block,TileEntityData:{Command:"' + lines +  '"}';
  39.         else:
  40.                 totalline = totalline + ',Passengers:[{id:falling_block,Time:1,Block:command_block,TileEntityData:{Command:"'+lines+'"}';
  41. 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);
  42. print(totalline)

  43. with open(file1.name.split('.')[0]+'_LongCommand.txt','w',encoding='UTF-8') as file2:
  44.     file2.write(totalline);
复制代码

打开的文件和生成的文件如图所示:


长指令的分解:
  1. import tkinter
  2. import tkinter.filedialog as tf
  3. import re
  4. #file1 = tf.askopenfilename()
  5. n=0;
  6. #DX,DY为整个代码要实现位置的偏移量。因为一条指令会产生一柱擎天,所以可能不适用于一些建筑。这里是建筑距离命令方块的距离。
  7. DX=10;
  8. DZ=10;

  9. totallines=[];

  10. def _dealY(matched):
  11.     yi=[];
  12.     y='';
  13.     global n,DX,DZ
  14.     for mg in matched.groups():
  15.         if mg.strip()=='':
  16.             i=0
  17.         else:
  18.             i=int(mg);
  19.         yi.append(i)
  20.     yi[0]=yi[0]-DX;
  21.     yi[1]=yi[1]+n;
  22.     yi[2]=yi[2]-DZ;
  23.     print(n)
  24.     for i in range(0,3):
  25.         y = y+'~'+ str(yi[i])+' '
  26.     return y;

  27. file1 = open(tf.askopenfilename(),encoding='UTF-8')
  28. while True:
  29.         lines = file1.readline().strip('\n');
  30.         if not lines:
  31.                 break;
  32.                 pass
  33.         searchObj = re.findall( r'(/.*?)(?<!\\)"', lines, re.M|re.I)
  34.         print(searchObj)
  35. for i in range(1,len(searchObj)):
  36.         searchObj[i] = searchObj[i].replace('\\"','"');
  37.         searchObj[i] = re.sub(r'~(-?[0-9]*?) ~(-?[0-9]*?) ~(-?[0-9]*?) ',_dealY,searchObj[i]);
  38.         print(searchObj[i])
  39.         totallines = totallines+[searchObj[i]];
  40.         n=n+1;
  41. print(totallines)
  42. with open(file1.name.split('.')[0]+'_Units.txt','w',encoding='UTF-8') as file2:
  43.     for i in range(0,len(totallines)-2):
  44.         if i==len(totallines)-3:
  45.             file2.write(totallines[i])
  46.         else:
  47.             file2.write(totallines[i]+'\n')
复制代码

效果和之前是反过来的,这个就不截图啦。
本人编程很渣,有什么错的地方欢迎指出(轻喷)

(真想快点水点经验)




tzdgreyd
来个人回我一下帖子呀嘤嘤嘤,缺经验

ruhuasiyu
可是,我已经有函数了鸭

langyo
可是,我已经有函数了鸭

。—。
ruhuasiyu 发表于 2019-1-4 16:43
可是,我已经有函数了鸭

需要把一些远古级别的OOC拆开看的话还是有这个需求的……

xmdhs
本帖最后由 xmdhs 于 2019-1-5 06:50 编辑

停留在1.8........

tzdgreyd
嘤……我完全不知道OOC生成器这种东西……
我就只看了那个一条指令的教程,觉得要是有个程序能帮我合成指令就好了。
于是就自己写了。
我知道现在函数可以很有用啦,但是也有一些特别的情况,比如说到朋友的主机上玩,发现那里非常贫瘠,于是拿出珍藏的一段生成建筑的代码,xiu地一下给他变出来一个房子……
之类的?

第一页 上一页 下一页 最后一页