マクロとは
ファンクション内のコマンド行の一部分を未確定にして書き、functionコマンドの実行時に指定したNBTの値から未確定の部分を確定させてファンクションを実行する機能です。
基本の使い方
例えばsetblockコマンドが書かれたファンクションがあるとします。
setblock ~ ~ ~ stone
当たり前ですがこのままでは石以外のブロックを設置することはできません。
そこで設置するブロックの指定部分をマクロで未確定にしてみます。
$setblock ~ ~ ~ $(block)
マクロを使用する行では最初に$
を付けます。
マクロで未確定にする部分は$(任意の名前)
と書きます。
今回このマクロはblock
という名前にしました。
このマクロが含まれたファンクションは次の様なfunctionコマンドから実行します。
function func:setblock {block:"glass"}
{}
で囲われたNBTの中にblock
という名前のタグが入っています。
こうすることで$(block)
の部分が{block:"glass"}
のglass
で確定させられます。
つまり
$setblock ~ ~ ~ $(block)
が
setblock ~ ~ ~ glass
に変換されるため、実行の結果ガラスが設置されます。
withによるNBT参照
functionコマンドで指定するNBTはwith
でストレージなどを参照可能です。
data modify storage strg: setblk set value {block:"glass"}
function func:setblock with storage strg: setblk
$setblock ~ ~ ~ $(block)
setblock ~ ~ ~ glass
そのためストレージに保存されたブロックのデータからsetblockをするなどの
今まで難しかったことが可能になりました。
使用例
dataコマンドでリストのインデックス(何番目かの指定)を動的に変更する
$data get storage strg: list[$(index)]
functionコマンドで実行するファンクションを動的に変更する
$function $(func)