活了沒(méi)幾個(gè)版本的指令方塊邪教廢了。
Function macro是23w31a (1.20.2)的新東西。
基本上就是之前做的拼接指令,但比較快。
在function檔案內(nèi)用$開(kāi)頭標(biāo)記這行是macro,然後用$(variable)把變數(shù)替換進(jìn)來(lái)。
例如
$damage @p $(value)
呼叫這個(gè)function的時(shí)候,用NBT的格式傳參數(shù)
function f {value: 3}
或是指定NBT資料來(lái)源
function f with storage name path
(跟data get一樣,也可以with block或with entity)
變數(shù)只能是普通的名稱,不能用.指定路徑,所以參數(shù)都要放在最上層。
function macro是超純的字串拼接,如果給{value: 3.0d},上面那個(gè)macro拼湊出來(lái)的指令就會(huì)變成
damage @p 3.0d
然後執(zhí)行失敗。
所以小數(shù)要事先取substring [0, -1)轉(zhuǎn)成字串再傳。
更:Mojang發(fā)現(xiàn)這個(gè)很麻煩,現(xiàn)在會(huì)幫忙刪掉字尾了。
甚至離譜一點(diǎn),macro寫(xiě)成
$$(command)
也沒(méi)問(wèn)題,參數(shù)傳一條完整的指令就會(huì)動(dòng)了。
聽(tīng)說(shuō)有人測(cè)試,即使macro比普通的function指令慢,也還是比以前的execute if指令樹(shù)快。
所以是個(gè)能用的新科技。
列舉幾個(gè)應(yīng)用方式
用變數(shù)值當(dāng)指令參數(shù)(例如damage)
可翻譯的tellraw遊戲劇情
用類(lèi)似story.dialogue24_$(counter)的翻譯字串ID搭配計(jì)分板算句數(shù),可維護(hù)性會(huì)比較高
仿伺服器的sidebar用法
包括動(dòng)態(tài)標(biāo)題、用分?jǐn)?shù)排序假玩家名
更:謝謝Mojang,現(xiàn)在有score display可以做排序顯示了
剩下的小事,某些QOL更新把我的隨機(jī)數(shù)資料包報(bào)廢了,可疑的燉湯走入歷史。