アイテムコンポーネントとは
アイテムコンポーネントとはプレイヤーが持つアイテムに特殊な機能を持たせることで、主にアドベンチャーモードでのプレイに用いられます。
アイテムコンポーネントを付与することで、脱出マップなどでよく用いられる特定のブロックを破壊できるアイテムや特定のブロックに隣接する場所に設置できるアイテムを用意することができます。
アイテムコンポーネントの種類
統合版では以下のアイテムコンポーネントを設定することができます。
can_destroy: アドベンチャーモード時でも特定のブロックを破壊できる
can_place_on: アドベンチャーモード時でも特定のブロックに隣接する場所に設置できる
keep_on_death: プレイヤー死亡時にロストしない
item_lock: インベントリにアイテムが固定され、クラフトやアイテムを投げることが出来なくなる
アイテムコンポーネントを付与したアイテムの入手方法
アイテムコンポーネントを付与したアイテムを入手するにはgiveコマンドが必要になります。giveコマンドのコマンド構文は以下のようになっています。
/give <player:target> <itemName:Item> [amount:int] [data:int] [components:json]
このコマンド構文の最後にある[components:json]の部分に特定の文章を記述することで、アイテムコンポーネント付与することができます。
例えば石ブロックを壊せるダイヤピッケルを入手したい場合は以下のようなコマンドになります。
/give @p diamond_pickaxe 1 0 {"minecraft:can_destroy":{"blocks":["stone"]}}
この{“minecraft:can_destroy”:{“blocks”:[“stone”]}}がアイテムコンポーネントを記述している部分となります。
各コンポーネントの詳細
以下では各コンポーネントの主な仕様と記述方法を記載しています。紹介している各コンポーネント文はコピペしてgiveコマンドの最後尾に付け加えることで利用できます。
can_destroy
can_destroyはアドベンチャーモードでも指定したブロックを破壊できるようになるコンポーネントです。
このコンポーネントは英語のブロック名(fillコマンドなどで用いられる名前)で指定することで破壊できるブロックを設定します。例えば「石ブロック」を破壊できるコンポーネント文は以下のようになります。
{"minecraft:can_destroy":{"blocks":["stone"]}}
また破壊できるブロックを複数にすることもでき、例えば「石ブロック」と「土ブロック」と「草ブロック」を指定する場合は以下のようになります。
{"minecraft:can_destroy":{"blocks":["stone","dirt","grass"]}}
can_place_on
can_place_onはアドベンチャーモード時でも指定したブロックに隣接する場所にブロックを設置できるようになるコンポーネントです。
このコンポーネントもcan_destroyと同様に英語のブロック名で指定することで設置できるブロックを設定します。「石ブロック」に対して設置できるコンポーネント文は以下のようになります
{"minecraft:can_place_on":{"blocks":["stone"]}}
「石ブロック」と「土ブロック」と「草ブロック」を指定する場合は以下のようになります。
{"minecraft:can_place_on":{"blocks":["stone","dirt","grass"]}}
keep_on_death
keep_on_deathはプレイヤー死亡時でもアイテムがインベントリに残り続き、ロストしなくなるコンポーネントです。
keep_on_death のコンポーネント文は以下のように書きます。
{"minecraft:keep_on_death":{}}
keep_on_death が設定されていると、インベントリでアイテムを確認すると「このアイテムは死亡してもなくなりません」というテキストが追加されます。
item_lock
item_lock は インベントリにアイテムが固定され、クラフトやアイテムを投げることが出来なくなるコンポーネントです。
item_lock は モードが二種類あり、lock_in_inventory か lock_in_slot のどちらかを指定します。この二つのモードの違いは「インベントリ間の移動はできる」か「インベントリのスロットまで固定される」かの違いになります。
lock_in_inventory を指定する場合はコンポーネントJSONは以下のように書きます。
{"minecraft:item_lock":{"mode":"lock_in_inventory"}}
lock_in_inventory が設定されると画像のように黄色の三角がスロットの左上につき、文章が追加されます。
lock_in_slot を指定する場合は lock_in_inventory のところを書き換えます。
{"minecraft:item_lock":{"mode":"lock_in_slot"}}
lock_in_slot が設定されると画像のように赤色の三角がスロットの左上につき、文章が追加されます。
なおどちらのモードでも、一度アイテムを入手すると消費アイテム(食べ物等)以外はclearコマンドによる削除かプレイヤー死亡によるアイテムロストくらいでしかインベントリからアイテムをなくすことはできません。
複数のコンポーネントを指定する
上記のコンポーネントは各アイテムに一つというわけではなく複数指定することもできます。
例えば「石ブロックを破壊でき、死亡してもロストせず、インベントリから捨てることはできない」という複数条件を一つのアイテムに付与したい場合、以下のようなコンポーネント文になります。
{"minecraft:can_place_on":{"blocks":["stone"]},"minecraft:item_lock":{"mode":"lock_in_slot"},"minecraft:keep_on_death":{}}
赤い文字の部分が石ブロックを破壊するコンポーネント、青い文字の部分が死亡してもロストしなくなるコンポーネント、緑の部分がアイテムロックのコンポーネントになります。一番外側の{}を除いた部分を「,」で各コンポーネントを区切り書いていきます。