作者LPH66 (1597463007)
看板Minecraft
标题Re: [讨论] 指令矿车中指令写法问题
时间Sun Dec 7 22:10:02 2014
我们就来一步一步解决你的每一步逆向过程吧
首先是第四步 召唤苔石墙
如推文所说 BlockID: 在 1.8 变成了 Block: 所以要改成 Block:"cobblestone_wall"
而它的 data value 则用 Data: 指定, 你要的是苔石墙所以是 Data:1
因此完整指令就是
summon FallingSand ~1 ~10 ~ {Block:"cobblestone_wall",Data:1,Time:1}
到这里是简单的地方
第三步, 召唤一个指令矿车存有以上指令
召唤指令矿车不难:
summon MinecartCommandBlock ~2 ~ ~ {Command:""}
但问题在於要把指令放进 Command:"" 里
因为指令里有 " 这个字元, 这会跟 Command:"" 的 " 冲突
解法是在这些 " 前面加一个 \ (这叫做跳脱字元)
所以第三步的完整指令是:
summon MinecartCommandBlock ~2 ~ ~ {Command:"summon FallingSand ~1 ~10 ~
{Block:\"cobblestone_wall\",Data:1,Time:1}"}
绿色部份就是第四步指令, 只把 " 代换成 \" 而已
暗红色的 \ 就是字串里的跳脱字元
再来第二步, 设置一个指令方块存有以上指令
同样的设置指令方块不难:
setblock ~2 ~ ~ command_block 0 replace {Command:""}
问题一样在於要把第三步指令放进 Command:"" 里
这里除了 " 这个字有问题之外, \ 这个字也有一样问题
(不然你怎麽告诉麦块说我就是要一个 \ 字在指令里?)
所以 \ 这个字也要加上一个 \ 跳脱
因此第二步的完整指令就是:
setblock ~2 ~ ~ command_block 0 replace {Command:"summon MinecartCommandBlock
~2 ~ ~ {Command:\
"summon FallingSand ~1 ~10 ~ {Block:\
\\
"cobblestone_wall\
\\
",
Data:1,Time:1}\
"}"}
上面的 \ 有两种颜色
普通白色的 \ 是给白色指令看的跳脱字元, 这样才会产生第三步的指令
然後暗红色的 \ 是给红色指令看的跳脱字元, 这样红色指令才会产生第四步的指令
所以最後你要放进最初始的指令矿车中的指令就是上面三行那一串了
--
简单讲就是, 每当这种 NBT Tag 的字串里有你要保留的 " 或 \ 字元
就要在前面加上一个 \ 跳脱它
这里有两层所以最後会出现 \\\" 这种鬼东西, 不过这是必要的
--
LPH [acronym]
= Let Program Heal us
-- New Uncyclopedian Dictionary, Minmei Publishing Co.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.39.85
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Minecraft/M.1417961405.A.BED.html
1F:推 tumourjoke: 大感谢 对於NBT tag一直都不知道说修改相关数值的方法 12/07 22:24
2F:→ tumourjoke: 去找一些地图来拆 没有解释的状态下也还是看无 12/07 22:25
3F:→ tumourjoke: "\" 的作用原先也知道 但就是知道用途不知如何使用 12/07 22:26
4F:→ tumourjoke: 去查中英文的论坛等对这符号的说明不多 实在感谢说明 12/07 22:28
5F:→ LPH66: 事实上 NBT Tag 的指定方式是一个比较宽松的 JSON 表示法 12/07 22:52
6F:→ LPH66: 这个用法也是 JSON 里定的 12/07 22:52
7F:推 tumourjoke: 恩 现在在试回到步骤一 成功了不过叠到了七层"\"www 12/07 23:23
8F:→ tumourjoke: 不过json就看不懂了 没有计算机概论的背景(需要吗? 12/07 23:31
9F:推 lc85301: 要开始写程式了吗,跳脱跳脱,为啥不像python支援 12/07 23:34
10F:→ lc85301: ", '就好了 '_>' 12/07 23:35
11F:→ tumourjoke: 最後成果: 12/08 01:09
12F:→ tumourjoke: summon MinecartCommandBlock ~ ~ ~2 {Command:" 12/08 01:11
13F:→ tumourjoke: setblock ~ ~ ~2 command_block 0 replace {Command:\ 12/08 01:14
14F:→ tumourjoke: "summon MinecartCommandBlock ~ ~ ~2 {Command:\\\" 12/08 01:15
15F:→ tumourjoke: summon FallingSand ~ ~10 ~2 {Block:\\\\\\\" 12/08 01:18
16F:→ tumourjoke: cobblestone_wall\\\\\\\",Data:1,Time:1,DropItem:0} 12/08 01:19
17F:→ tumourjoke: \\\"}\"}"} 12/08 01:20
18F:推 kerwinting: 我本来以为红石逻辑电路已经够麻烦了...直到我看了这 12/08 07:27
19F:推 CP64: 不停的 escape ..... (抹脸 12/08 07:33
20F:→ CP64: 要不要下一版支援在书里写指令 然後可以塞进指令方块好了 12/08 07:34
21F:→ CP64: 还可以缩排 (咦 12/08 07:34
22F:推 dannywei611: 用书本写还可以顺便加注解 12/08 11:04
23F:推 lc85301: 用附魔达成版本控制,喂喂喂 12/08 13:02
24F:推 CP64: 所以要出解除附魔了吗 解除一次附魔退回一个版本 (越来越歪 12/08 13:23
25F:推 mmis1000: 我记得旧版中有bug,///"会被escape成//"耶?不知道修好 12/08 14:11
26F:→ mmis1000: 了没 12/08 14:11
27F:→ mmis1000: 所以一般的json encoder根本不能用 12/08 14:12
28F:→ LPH66: 我实际在 1.8 里试过本文里长达三行的那一串是 OK 的 12/08 21:02
29F:→ LPH66: 所以应该是修好了的样子 12/08 21:02
30F:→ LPH66: 看上面的推文突然想起来, 好像单引号也支援的样子 12/09 02:16
31F:→ LPH66: MC-59504 里有相关讨论 12/09 02:16
32F:推 twosheep0603: 引号处理很麻烦的, 而且一般来说少用到三层以上的递 12/09 17:34
33F:→ twosheep0603: 回, 用单引号是相对容易的解决法 12/09 17:34
34F:→ twosheep0603: 另外前阵子的指令方块笔记可能还得富奸一阵子(逃 12/09 17:35
35F:→ h73o1012: 专业解决麻烦? 12/13 00:58