ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド解説番外編-コンポーネント編-

  投稿日:2021/08/14

最終更新日:2021/08/14

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドで用いる要素の1つである『コンポーネント』について解説をしていきます。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

  

今回の内容は?

今回はコンポーネントについての解説です。コンポーネントjson形式の文章で記述されるオプション設定の1つで、アイテムに何らかの機能的制約を与えられるというものです。

コンポーネントが使用できるコマンドは以下の通りです。

  • /give
  • /replaceitem

これらのコマンドそのものの解説は ↓ のページをご覧下さい。

 

コンポーネントの概要

コンポーネントは /give か /replaceitem で使用することができます。そしてこのコンポーネントを用いれば、特定のブロックしか破壊できないツールや、特定のブロックにのみ設置できるブロックを作り出すことができます。

注意点としては、これらコンポーネントを付与したブロックを一度設置すると、その設置したブロックを破壊して再びアイテム化した時にはコンポーネントが全て消えています。この点は見落としがちなので要注意です。

さて、ここで少し /give と /replaceitem の構文を思い出してみましょう。

 

/give <セレクター> <アイテムID> <個数(int)> <データ値(int)> <コンポーネント>

 

/replaceitem block <座標(int)> slot.container <スロットID(int)> <アイテムID> <個数(int)> <データ値(int)> <コンポーネント>

/replaceitem entity <セレクター> <スロットタイプ> <スロットID(int)> <アイテムID> <個数(int)> <データ値(int)> <コンポーネント>

 

どちらも一番最後に<コンポーネント>とありますね。これが今回解説するコンポーネントを記述する位置です。

 

コンポーネントの記述法

 

現在(v1.17.11)時点で使用できるコンポーネントは以下の4種類で、コンポーネント毎に記述法が少し異なります。

1. can_place_on

そのブロックを特定のブロックに向かってのみ設置できるようにします。ただし、アドベンチャーモードのプレイヤーにのみ有効です。

また、このコンポーネントitem_lockkeep_on_death と共存できます。

皆さんがブロックを設置する時は、何かしらのブロックをターゲッティングして設置すると思うのですが、そのターゲッティング先のブロックを制限していると考えると理解しやすいと思います。

少し気を付けなければならないのは、データ値でブロックの種類を絞ることが出来ない点です。stone なんかはデータ値でブロックの種類を変えている訳ですが、そういったブロックの場合は全てまとめられてしまいますので注意しましょう。

構文は以下の通りです。

 

{"can_place_on":{"blocks":["<ブロックID>"]}}

 

<ブロックID>で指定したブロックに向かってのみ設置できるようにします。なお、以下のようにすれば複数のブロックに対応させられますが、指定の上限数は不明です。情報求む!

 

{"can_place_on":{"blocks":["<ブロックID>","<ブロックID>"]}}

 

「" (ダブルクォーテーション)」で囲った<ブロックID>同士を「, (カンマ)」で連結している形です。要素同士を「, (カンマ)」で連結するのはjson記述の基本ですので、覚えておいて下さい。

 

2. can_destroy

そのアイテムを特定のブロックのみ破壊できるようにします。ただし、アドベンチャーモードのプレイヤーにのみ有効です。そのため必然的に、ブロックを適正破壊できるシャベルやツルハシ、オノ等のみに有効なコンポーネントとなります。

また、このコンポーネントitem_lockkeep_on_death と共存できます。

そして can_place_on と同様に、データ値でブロックの種類を絞ることは出来ませんので注意しましょう。

構文は以下の通りです。

 

{"can_destroy":{"blocks":["<ブロックID>"]}}

 

<ブロックID>で指定したブロックのみを破壊できるようにします。なお、以下のようにすれば複数のブロックに対応させられますが、指定の上限数は不明です。情報求む!

 

{"can_destroy":{"blocks":["<ブロックID>","<ブロックID>"]}}

 

3. keep_on_death

そのアイテムを死んでもドロップせず、インベントリに残るようにします。そのため必然的に、クリエイティブモードの以外のプレイヤーにのみ有効です。

また、このコンポーネントitem_lockcan_place_oncan_destroyと共存できます。

似たようなものに /gamerule で操作できるゲームルールの1つ「keepinventory」がありますが、あれのアイテム単体バージョンのようなものです。

構文は以下の通りです。

 

{"keep_on_death":{}}

 

4. item_lock

そのアイテムをドロップ・削除(別のエンティティ・ブロックインベントリへの移動も含む)・クラフトへの使用を不可にします。このコンポーネントにはモードが2つあり、lock_in_slot を選ぶとこれらに加えてさらにアイテムのインベントリ内移動も出来なくします。このコンポーネントが付与されたアイテムがチェスト等に入っている場合、そのアイテムを手に取った(そのアイテムを自由に移動できる状態にした)瞬間からこれらの制約が適用されます。

また、このコンポーネントkeep_on_deathcan_place_oncan_destroy と共存できます。

このコンポーネントは少々厄介で、普通に捨てる(PC版ならQキー)ことや、クラフト素材にすることクリエイティブでアイテム欄に戻したりすることが一切できなくなります。通常であれば死ぬとドロップして手放せますが、keepinventory が true であったり、そのアイテムに keep_on_death が一緒に付与されているコマンドでの消去しか出来なくなりますので要注意です。

構文は以下の通りです。

 

{"item_lock":{"mode":"lock_in_inventory"}}

 

{"item_lock":{"mode":"lock_in_slot"}}

 

なお、このコンポーネントのみ、このコンポーネントを付与されたアイテムのインベントリ上での表示が以下のように変わります。

左上の謎の三角形の色が黄色なら lock_in_inventory、赤なら lock_in_slot です。

f:id:YukimiD1999:20210814155748p:plain

スロットの左上に謎の三角形が現れている

 

コンポーネントの共存

これらのコンポーネントは共存できるものもあります。その場合は以下の例のように記述します(例では can_place_on と keep_on_death を共存させている)。

 

{"can_place_on":{"blocks":["bedrock","stone"]},"keep_on_death":{}}

 

json記述を見やすくする

ここまでの解説を見て思ったかもしれませんが「 { } 」とか「 [ ] 」が沢山並んでいて訳がわからないと思います。これからの解説でもjson記述を使用するものが出て来ますので、わかりやすくする方法をお教えします。

ズバリ、インテンドを付けて整理してみましょう。

 

ここまで出て来た構文をいくつかインテンドを付けて整理してみます。

 

1. can_place_on

{

  "can_place_on":{

    "blocks":[

      "<ブロックID>",

      "<ブロックID>"

    ]

  }

}

 

2. can_destroy

{

  "can_destroy":{

    "blocks":[

      "ブロックID",

      "ブロックID"

    ]

  }

}

 

3. keep_on_death

{

  "keep_on_death":{

  }

}

 

4. item_lock

{

  "item_lock":{

    "mode":{

      "lock_in_inventory"

    }

  }

}

 

5. (コンポーネントの共存)

{

  "can_place_on":{

    "blocks":[

      "bedrock",

      "stone"

    ]

  },

  "keep_on_death":{

  }

}

 

こうしてみると、それぞれの「 { } 」や「 [ ] 」の役割がわかりやすいのではないでしょうか。最初はこのようにインテンドを付けてメモしておいて、実際にコマンドとして入力する時には空白と改行を消す、とするとミスが減ると思います。

 

実行例

例1)

コマンド:/give @p crafting_table 1 0 {"can_place_on":{"blocks":["bedrock"]}}

実行結果:基準座標から1番近いプレイヤーに、岩盤(bedrock)にのみ設置可能な作業台(crafting_table)を1つ付与する。

 

例2)

コマンド:/replaceitem entity @a slot.hotbar 4 iron_pickaxe 1 0 {"can_destroy":{"blocks":["stone","iron_ore"]}}

実行結果:全てのプレイヤーのホットバーの4番スロット(中央のスロット)を、石(stone)と鉄鉱石(iron_ore)のみ破壊可能な鉄のツルハシ(iron_pickaxe)に置換する。

 

例3)

コマンド:/give @p bow 1 0 {"keep_on_death":{}}

実行結果:基準座標から1番近いプレイヤーに、死亡時にドロップしない弓(bow)を1つ付与する。

 

例4)

コマンド:/give @p planks 4 0 {"item_lock":{"mode":"lock_in_inventory"}}

実行結果:基準座標から1番近いプレイヤーに、ドロップ・削除・クラフトへの使用ができない樫の木材(planks 0)を4つ付与する。

 

例5)

コマンド:/give @p iron_pickaxe 1 0 {"can_destroy":{"blocks":["stone","iron_ore"]},"keep_on_death":{}}

実行結果:基準座標から1番近いプレイヤーに、死亡時にドロップせず、石(stone)と鉄鉱石(iron_ore)のみ破壊可能な鉄のツルハシ(iron_pickaxe)を1つ付与する。

 

 

コンポーネントの強み・使い道

ゲーム制作においては、以下のように非常に様々な使い道を考えることができます。

1. can_place_on

特定の場所にしか置くことのできないブロックとすることで、/testforblock や /testforblocks と併せて謎解きゲームの鍵を作ることができます。

 

2. can_destroy

特定のブロックのみを破壊できるようにすることで、ステージを破壊することによる想定外のショートカットを防ぎつつ、ブロック破壊をギミックに取り込むことができます。

 

3. keep_on_death

特定のアイテムだけを死亡時に保持したい場合に使えます。要は小回りの利く「keepinventory」ですね。

 

4. item_lock ( lock_in_inventory )

単体でクラフトできてしまうアイテムのクラフトを防げます。または、捨てられると困るアイテムの保持にも使えます。

 

5. item_lock ( lock_in_slot )

/replaceitem と組み合わせれば、プレイヤーが保持できるアイテム数を制限できます。さらに他のコマンドと組み合わせて、特定のアイテムを使用するとその制限を解除していくことができる、みたいなシステムがあっても良いかもしれませんね。

 

これらはあくまで一例ですので、各自で色々な使い方を考えてみて下さい。他のコマンド等と組み合わせれば、さらにできることが増えるはずです。

 

今回のまとめ

  • コンポーネント』はアイテムに機能的制約を与えるもの!
  • 特定のブロックにしか設置できないブロックや、特定のブロックしか破壊できないツールを作れる!

 

関連記事

  • コマンド解説番外編-装飾コード編-
  • コマンド解説番外編-jsonテキスト編-
  • コマンド解説番外編-スポーンイベント編-
  • コマンド解説番外編-パーティクル編-
  • コマンド解説番外編-アニメーション編-

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。