マルチプレイなら『シン・VPS』がおすすめ!

【コマンド】装備しているアイテムの検知にはInventory

【コマンド】装備しているアイテムの検知にはInventory

この記事では、Minecraft Java Edition(バージョン1.18.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

装備していることを検知させたいマインクラフター
「装備していることを条件にコマンドを実行させたいな。どういうコマンドを使えばいいの? あと、同じ種類の装備でも名前とかエンチャントが違う場合には差別化できる?」

こんな疑問を解決します!

本記事の内容
  • 装備しているアイテムの検知にはInventory
  • NBTタグを細かく指定して、同じ種類の装備でも差別化を図る

こんにちは! マインクラフターのなつめ(@natsume_717b)です。

なつめ

マイクラ歴は5年程で、最近は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ

この記事では、装備していることを検知するコマンドについて解説していきます。
要するに「○○を装備している時にコマンドを実行する」ということが、この記事を読むことで出来るようになります。

そのほかに、同じ種類のアイテムを装備していても名前やエンチャントが異なる場合に、コマンドが実行されるかどうかを差別化することも可能。
なので、同じアイテムIDを持つアイテムでも複数の挙動を用意することができます。

どうしてもコマンドが長くなり、それ故に複雑に見えてしまいますが1つ1つ見ていけば、とても難しいわけではありません。
さっそく見ていきましょう!



装備しているアイテムの検知にはInventory

アイテムを装備していることを検知するには、InventoryというNBTタグを利用します。
具体的には、ターゲットセレクターにInventoryを設定することで「○○を装備しているプレイヤー」をコマンドの対象とすることができます。

元来Invnetoryは手持ちのアイテムを検知するものですが、その対象の中には装備欄も含まれており、今回は装備欄だけに絞って、ヘルメット、チェストプレート、レギンス、ブーツの4か所の検知について解説していきます。

どの装備欄を指定する場合でも基本的なコマンドの構造は同じなので、1つ理解してしまえば他の場所にも応用がききますよ。

実際のコマンド

今回はダイヤモンドを1つ付与するコマンドを基本として解説していきます。

/give @a minecraft:diamond 1

上記のコマンドはターゲットセレクターを@aにしているため、ワールドにいるプレイヤー全員にダイヤモンドが1つ付与されるものです。

このコマンドのターゲットセレクターにInventoryを追記して、特定の装備をしているプレイヤーだけにダイヤモンドが付与されるようにします。

というわけで、以下のように入力します。

/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet"}]}] minecraft:diamond 1

Inventoryを追記したため、「ヘルメット部分にダイヤモンドのヘルメットを装備しているプレイヤー全員にダイヤモンドを1つ付与する」コマンドになりました。
ダイヤモンドのヘルメットを装備していないプレイヤーには、ダイヤモンドはもらえません。

変更点としては、[nbt={Inventory:[{Slot:103b,id:”minecraft:diamond_helmet”}]}]が追加されただけですが、少々難解ですね。

ただし、そこまで難しいことは書いていないので1つ1つ見て、理解していきましょう。

nbt=

nbt=はNBTタグを書きますよという合図です。

NBTタグがなんなのかは完璧に理解しなくてOK。
プレイヤーやエンティティなどが持っている情報という認識だけあれば充分です。

今回は@aについているので、これから入力していくNBTタグを持っているすべてのプレイヤーを対象にすることになります。

{Inventory:[{Slot:103b,id:”minecraft:diamond_helmet”}]}

肝心なのが、このInventoryの部分ですね。
要素としては、Slotとidの2つがあります。

SlotはInventoryの位置を指定しており、idはその部分にあるアイテムのIDを指定しています。
なので、上記のコマンドの場合はヘルメット部分にダイヤモンドのヘルメットを装備していることが条件になっています。

ヘルメット部分は103bですが、そのほかの装備欄は以下の通りです。

装備箇所Slotの値
ヘルメット103b
チェストプレート102b
レギンス101b
ブーツ100b

適宜検知したい場所に合わせてSlotの値を変更すれば、問題なく扱えます。

また、剣を持っていることやオフハンドに装備している場合にはついては、【攻撃を検知】ダメージの計測にはscoreboardコマンドをどうぞ。
「剣を持っている時にダメージを与えた場合」の箇所に、剣を持っていることを検知する方法について記載しています。

そして、idの部分には装備しているアイテムのIDを入力すればよいだけなので、難しいことはないと思います。
今回はダイヤモンドのヘルメットだったので、minecraft:diamond_helmetと入力しましたが、金のヘルメットを検知したいならminecraft:golden_helmetと打ちこめばOKです。

特定の組み合わせの装備を検知したい場合

例えば、ダイヤモンドのヘルメットに金のチェストプレートを装備している場合にコマンドを実行したいという方は、上記で紹介したコマンドを組み合わせればOKです。

具体的には以下の通り。

/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet"},{Slot:102b,id:"minecraft:golden_chestplate"}]}] minecraft:diamond 1

赤文字がダイヤモンドのヘルメットを装備していることを指定し、青文字の部分がチェストプレート部分に金のチェストプレートを装備していることを指定しています。

カンマで区切ってSlotとidを入力するだけなので、難しいことはないかと思います。

NBTタグを細かく指定して、同じ種類の装備でも差別化を図る

同じ種類の装備でも異なるエンチャントや名前が付けられているために、別の挙動を示したい場合には、さらにNBTタグを指定していきます。

今回は名前が異なる場合と異なるエンチャントが付与されている場合の2つを紹介します。
複雑なコマンドなので、コピペして使用することがおすすめです。

名前が異なる装備の場合

名前で差別化を図りたい場合は、tagという項目にdisplayを足して名前が異なることを指示します。
具体的には以下のようなコマンドになります。

/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet",tag:{display:{Name:'{"text":"金剛石の帽子"}'}}}]}] minecraft:diamond 1

nbt=の項目にtagが追加され、さらに名前の表記がどういったものなのかを指定しています。
上記のコマンドでは「金剛石の帽子」という名前であるダイヤモンドのヘルメットを条件としています。

なので、名前がデフォルトのままのダイヤモンドのヘルメットを装備していたとしても、ダイヤモンドを付与されることはありません。

このコマンドをコピペして使用する場合は、”(ダブルクォーテーション)で囲まれている金剛石の帽子という部分を識別させたい名前に変更しましょう。

異なるエンチャントが付与されている装備の場合

異なるエンチャントが付与されていることで差別化したい場合もtagを追加します。
ただし、displayではなくEnchantmentsという項目でエンチャントに関する情報を入力していきます。

/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet",tag:{Enchantments:[{lvl:1s,id:"minecraft:mending"}]}}]}] minecraft:diamond 1

Enchantmentsの項目にはlvlとidが存在し、lvlはエンチャントのレベルを判断しており、idはエンチャントの種類を判別するためのIDが指定されています。

上記のコマンドでは、修繕のエンチャントが付いているかどうかを判別しています。
(修繕にはレベルがないため、lvlは1sとなっている)

もしもダメージ軽減Ⅳのエンチャントが付いているダイヤモンドのヘルメットを識別させたいのならば、lvlには4s、idにはminecraft:protectionを入力する必要があります。

/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet",tag:{Enchantments:[{lvl:4s,id:"minecraft:protection"}]}}]}] minecraft:diamond 1

まとめ

というわけで、今回のまとめです。

今回使ったコマンドはこちら。

今回使ったコマンド
  • ダイヤモンドのヘルメットを被っているプレイヤーだけにダイヤモンドを付与するコマンド
/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet"}]}] minecraft:diamond 1
  • 「金剛石の帽子」という名前のダイヤモンドのヘルメットを装備しているプレイヤーだけにダイヤモンドを付与するコマンド
/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet",tag:{display:{Name:'{"text":"金剛石の帽子"}'}}}]}] minecraft:diamond 1
  • 修繕のエンチャントが付与されているダイヤモンドのヘルメットを装備しているプレイヤーにダイヤモンドを与えるコマンド
/give @a[nbt={Inventory:[{Slot:103b,id:"minecraft:diamond_helmet",tag:{Enchantments:[{lvl:1s,id:"minecraft:mending"}]}}]}] minecraft:diamond 1
ポイント
  • 装備をしていることはNBTタグのInventoryを利用します。
  • Slotが装備欄(インベントリの場所)を指定しており、idはアイテムIDを打ちこめばOKです。
  • 細かく指定したい場合は、tagを追加して追記していきます。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】