08.002.Append by set - MCJE-Tech-Community/Datapack-WIki GitHub Wiki
📥 set操作で要素を追加する
まず、listを削除しておきます。
data remove storage _ list
以下のコマンドを実行する度に、listに{result: 0}が追加されます。
data modify storage _ list.[{result: 0b}].result set value 0
また、以下のコマンドを実行する度に、listに{result: (コマンドの結果)}が追加されます。
execute store result storage _ list.[{result: 0b}].result int 1 (結果を返すコマンド)
仕組み
NBTパスを用いたデータの書き換え時には、少なくともNBTパスがターゲットとなるNBTを辿っていけるようにデフォルトのNBTが追加されていきます。
例えば空のストレージ_に対して
data modify storage _ a.b.c set value 0
を実行すると、先述の通りストレージ_は以下のようになります。
{
a: {
b: {
c: 0
}
}
}
次にlist.[{result: 0b}].resultについて考えてみましょう。
list.[{result: 0b}].resultの最後のresultまで辿り着けるためには、listがListTagで、かつその中に{result: 0b}がある必要があります。
そのため、空のストレージ_に対して
data modify storage _ list.[{result: 0b}].result set value 0
を実行すると、ストレージ_の状態は以下のように変化していきます。
-
{ list: [] } -
{ list: [{result: 0b}] } -
{ list: [{result: 0}] }
最終的にlistが{result: 0b}を失っていることに注目してください。
これにより、再び
data modify storage _ list.[{result: 0b}].result set value 0
を実行すると、ストレージ_の状態は以下のように変化していきます。
-
{ list: [{result: 0}] } -
{ list: [{result: 0}, {result: 0b}] } -
{ list: [{result: 0}, {result: 0}] }
これがset操作で要素を追加できる仕組みです。