作者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/m.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