前往
大廳
主題

Function Macro

| 2023-08-03 11:59:46 | 巴幣 2 | 人氣 134

活了沒幾個版本的指令方塊邪教廢了。

Function macro是23w31a (1.20.2)的新東西。
基本上就是之前做的拼接指令,但比較快。

在function檔案內用$開頭標記這行是macro,然後用$(variable)把變數替換進來。
例如
$damage @p $(value)

呼叫這個function的時候,用NBT的格式傳參數
function f {value: 3}
或是指定NBT資料來源
function f with storage name path
(跟data get一樣,也可以with block或with entity)

變數只能是普通的名稱,不能用.指定路徑,所以參數都要放在最上層。

function macro是超純的字串拼接,如果給{value: 3.0d},上面那個macro拼湊出來的指令就會變成
damage @p 3.0d
然後執行失敗。
所以小數要事先取substring [0, -1)轉成字串再傳。
更:Mojang發現這個很麻煩,現在會幫忙刪掉字尾了。

甚至離譜一點,macro寫成
$$(command)
也沒問題,參數傳一條完整的指令就會動了。

聽說有人測試,即使macro比普通的function指令慢,也還是比以前的execute if指令樹快。
所以是個能用的新科技。

列舉幾個應用方式

用變數值當指令參數(例如damage

可翻譯的tellraw遊戲劇情
用類似story.dialogue24_$(counter)的翻譯字串ID搭配計分板算句數,可維護性會比較高

仿伺服器的sidebar用法
包括動態標題、用分數排序假玩家名
更:謝謝Mojang,現在有score display可以做排序顯示了

剩下的小事,某些QOL更新把我的隨機數資料包報廢了,可疑的燉湯走入歷史。

創作回應

更多創作