Minecraft【テクニック】アイテム検知を使って、コマンド実行。2-2

2025-01-12

Java版1.21.4-、統合版v1.21.51-で動作確認。

Java版、統合版で使えるアイテム検知のまとめ。

アイテム検知を使って、コマンド実行。

ゲーム装置に欠かせない、アイテム検知をまとめました。アイテム検知を使えば、装置の起動・武器・魔法などの単体道具、クイズ・パズル・RPGなどで使う選択式の項目、スロットマシンなど複数のアイテムを同時に扱う高度なディスプレイも作る事が出来ます。操作性も含めて、ゲームを面白く作れるかの重要なポイントになります。※今回は、プレイヤーとアイテムエンティティを対象にしています。

 

 

目次

1.アイテム検知(Java版)
・アイテムの入手と削除。
・コンポーネント(部品)。
・メインハンド検知。
・オフハンド検知。
・インベントリ検知。
・落ちてるアイテム検知。

2.アイテム検知(統合版)
・hasitem。
・アイテムID。
・データ値。
・アイテム数。
・メインハンド検知。
・オフハンド検知。
・インベントリ検知。
・落ちてるアイテム検知。

 

 

アイテム検知(Java版)

近年大幅な変更があり、tagからcomponents(コンポーネント)で管理されるようになりました。難易度は上がりましたが、項目を選ぶだけでコマンド作成してくれる外部サイトもあります。ゲーム内のコマンドガイドも優秀なので、心配はいりません。

アイテムの入手と削除。

Java版では、名前を変えたアイテムをコマンドから入手出来ます。※名前以外にも、色を変えたり、説明分など様々なコンポーネントを追加出来ます。

◻︎コマンド 例

①give @s wooden_shovel[minecraft:custom_name="ポッキー"]
②clear @s wooden_shovel[minecraft:custom_name="ポッキー"]

①ポッキーと名前を付けた、木のシャベルを入手。
②「give」と内容は同じ。※木のシャベルを全て消したい時は、コンポーネントは不要。

 

コンポーネント(部品)。

カスタム名を使ったアイテム検知はよく使います。「custom_name」は金床で名前が変更可能。「item_name」はコマンドでしか入手出来ないので、ターゲットを絞って使う事が出来ます。アイテムIDも不要になります。

◻︎components 例

components:{"minecraft:custom_name":'"ポッキー"'}

 

メインハンド検知。

良く聞く検知方法ですが、単体では使いにくいので、スニークなどと併用して使います。検知コマンドに、コンポーネントを追加します。※他の検知コマンドも同様です。

◻︎コマンド 例

①execute if entity @p[nbt={SelectedItem:{id:"minecraft:wooden_shovel"}}]
②execute if entity @p[nbt={SelectedItem:{id:"minecraft:wooden_shovel"},components:{"minecraft:custom_name":'"ポッキー"'}}]
③execute if entity @p[nbt={SelectedItem:{components:{"minecraft:item_name":'"ポッキー"'}}]

①シンプルなアイテムID検知。
②アイテムIDと併用。同じ名前の他のアイテムと区別出来ます。
③「item_name」単体。アイテム名だけで検知。

 

オフハンド検知。

Java版ではオフハンドにもアイテムが持てます。コマンドの実行にも使いやすい。「F」キーを押してメインハンドのアイテムと入れ替えが出来ます。※インベントリ扱いとなります。

◻︎コマンド 例

execute if entity @p[nbt={Inventory:[{id:"minecraft:wooden_shovel",Slot:-106b}]}]

Slot:-106b/オフハンド

 

インベントリ検知。

オフハンドと同じく、スロット番号を指定します。Java版では全ての番号をインベントリコマンドで検知出来ます。ホットバーやアーマー番号は、よく使うと思います。※詳しくはwiki参照。

◻︎コマンド 例

execute if entity @p[nbt={Inventory:[{id:"minecraft:wooden_shovel"}]}]

Slot:0b〜8b/ホットバー
Slot:9b〜35b/インベントリ
Slot:100b〜103b/アーマー

 

落ちてるアイテム検知。

所持出来るアイテムは、落ちるとアイテムエンティティとして検知出来ます。アイテムを使った時ではなく、捨てた時に発動する装置も作成可能。

◻︎コマンド 例

①execute if entity @e[nbt={Item:{id:"minecraft:wooden_shovel"}}]
②execute if entity @e[name="木のシャベル"]

①アイテムIDで検知。
②アイテム名で検知。

※削除する時は、「execute if entity」を「kill」に変更。

 

アイテム検知(統合版)

hasitemの登場により、アイテム検知が便利になりました。まだ未完成の部分もありますが、プレイヤータグと併用する事で、カスタムアイテムの区別が出来るようになります(コマンド装置の場合)。難解だったブロックの状態(ステート)も、ゲーム内のガイドで入力出来るようになりました。

hasitem。

統合版専用のコマンドになります。5種類のフィルターを使って、アイテムを検知する事が出来ます。データ値とアイテム数は、他の検知と組み合わせて使う事が出来ます。

◻︎hasitemのフィルター

hasitem={item=<アイテム名(ID)>}
hasitem={data=<アイテムの耐久値(データ値)>}
hasitem={slot=<スロット番号、位置フィルターと一緒に使用>}
hasitem={location=slot.<inventory, weapon.mainhand などを指定(位置フィルター)>}
hasitem={quantity=<アイテム数>}

※<>内は数値、または位置を指定します。

 

データ値。

コマンドでアイテムを区別出来る唯一の方法ですが、バージョンアップで挙動が変わる事があります。R7年1月現在(v1.21.51)では、重ねられないアイテムとマイナス耐久値の武器・防具・道具を区別する事が出来ます。ポーション式もおすすめ。※他の検知と併用可。動作が安定すれば、最強になるかも!?

◻︎コマンド 例

①give @s wooden_shovel 1 100
②clear @s wooden_shovel 1 100
③execute if entity @p[hasitem={item=wooden_shovel,data=100}]

①耐久値(データ値)を変更してアイテムを入手。※武器・防具・道具はマイナス耐久値にしないと、通常使用で入手可能になります。
②「give」と内容は同じ。※木のシャベルを全て消したい時は、データ値は不要。
③hasitem={}内に追加します。

 

アイテム数。

持っているアイテムの個数を検知する事が出来ます。数値を0にする事で、持っていない時も検知可能。アイテム名(ID)が必要です。※他の検知と併用出来ます。

◻︎コマンド 例

execute if entity @p[hasitem={item=wooden_shovel,quantity=0}]

 

メインハンド検知。

Java版と同じく、単体では使いにくい検知方法となります。アイテム数やデータ値と併用するのが簡単です。難易度は上がりますが、スニーク検知との相性も良いです。

◻︎コマンド 例

execute if entity @p[hasitem={item=wooden_shovel,location=slot.weapon.mainhand}]

 

オフハンド検知。

統合版ではオフハンドに持てるアイテムが限られるため、使いにくい検知方法になります。「replaceitem」を使うと設置出来ますが、アイテムを外すにはインベントリを開く必要があります。

◻︎コマンド 例

①replaceitem entity @p slot.weapon.offhand 0 keep wooden_shovel 1
②execute if entity @p[hasitem={item=wooden_shovel,location=slot.weapon.offhand}]

①「give」と同じように、アイテム数やデータ値も変更可能。
②通常は設置出来ないアイテムを使う事で、コマンドの使い分けが出来るようになります。

 

インベントリ検知。

スロット番号と位置フィルターを使って、各種スロットを検知します。統合版では位置で名前が分けられています。ホットバーやアーマー番号は、よく使うと思います。

◻︎コマンド 例

execute if entity @a[hasitem={item=wooden_shovel,location=slot.inventory,slot=0}]

slot=0〜8/ホットバー location=slot.hotbar,slot=0
slot=0〜26/インベントリ location=slot.inventory,slot=0
slot=0〜3/アーマー location=slot.armor,slot=0

 

落ちてるアイテム検知。

アイテムエンティティだけ、名前で検知出来るという、統合版七不思議のひとつ。カスタム名も検知可能です。※データ値やアイテム数など、「hasitem」のフィルターは使えません。チクショー!

◻︎コマンド 例

execute if entity @e[name=木のシャベル]

※削除する時は、「execute if entity」を「kill」に変更。