更新日:
何が変わったのか
1.20.4までは、アイテムの追加情報を{...}のNBTでまとめて書いていました。1.20.5からは、名前、エンチャント、耐久値などが一つひとつ独立した「コンポーネント」になり、アイテムIDの直後の[...]に書きます。
| 1.20.4まで(NBT) | 1.20.5から(components) | |
|---|---|---|
| 書く場所 | IDの後ろの { } | IDの直後の [ ] |
| 区切り | : | = |
| エンチャント | Enchantments:[{id:"sharpness",lvl:5}] | enchantments={sharpness:5}(1.21.5以降) |
| 壊れない | Unbreakable:1b | unbreakable={} |
| 名前 | display:{Name:'...'} | custom_name=... |
giveでの比較
# 1.20.4まで
/give @p diamond_sword{Enchantments:[{id:"sharpness",lvl:5}],Unbreakable:1b} 1
# 1.21.5以降
/give @p diamond_sword[enchantments={sharpness:5},unbreakable={}] 1
1.20.5〜1.21.4の間は、エンチャントをenchantments={levels:{sharpness:5}}と書くなど、さらに細かい違いがあります。版ごとの違いを手で追うのは大変なので、Giveジェネレーターで版を選んで作るのがおすすめです。
componentsのよいところ
- 項目ごとに名前が決まっているので、どの値が何を表すかがわかりやすくなりました。
- 食べ物にする、最大スタック数を変えるなど、以前はできなかった変更ができるようになりました。
- clearやexecuteでアイテムの条件を指定するときにも、同じ名前で条件を書けます。
エンティティやブロックはNBTのまま
components になったのはアイテムだけです。summonでMobに付けるデータ({NoAI:1b}など)や、チェストの中身のようなブロックのデータは、今もNBTで書きます。ただし、Mobに持たせるアイテムの部分はcomponentsの形になります。
/summon zombie ~ ~ ~ {NoAI:1b}
今持っているアイテムのデータを確認する
Java版では次のコマンドで、手に持っているアイテムのIDとコンポーネントを表示できます。
/data get entity @s SelectedItem
実際のアイテムがどう書かれているかを見ると、giveの書き方の参考になります。
統合版は関係ある?
NBTからcomponentsへの変更はJava版の話です。統合版のgiveは、個数とデータ値の後ろにJSON形式でcan_destroyなどの限られた項目を指定する、別の仕組みです。
よくある質問
古いワールドのアイテムは消えますか?
消えません。ワールドを新しい版で開くと、アイテムのNBTは自動でcomponentsに変換されます。変わるのはコマンドで書くときの形です。
データパックの関数も書き直しが必要ですか?
アイテムのNBTを使っている部分(give、clear、itemのコマンドや、条件の指定)は書き直しが必要です。エンティティのNBTだけを使っている部分はそのまま動くことが多いです。
componentsの一覧はどこで見られますか?
入力中にTabキーで候補が表示されます。主な項目はGiveジェネレーターの入力欄として用意しています。