Minecraft【武器・防具・道具】炎の盾。(オフハンド検知)

2024-02-16

Java版1.19.4、統合版はv1.19.83で動作確認。

攻撃されると相手を燃やす。

炎の盾。

【Java版】では、オフハンドと盾ダメージを検知して、近くのエンティティを燃やします。また、盾をメインハンドに持ち替えると炎を消します。マルチプレイでもアイテムを受け渡して使えますが、近くのプレイヤーにもコマンドが反映されます。

【統合版】では、アイテムを投げて「炎の盾」を召喚。盾が壊れた時を検知して、近くのエンティティを燃やします。マルチプレイでは、盾ケース(チェスト)でタグを切り替えて使う事が出来ます。キーボード、コントローラー推奨。

※統合版の新コマンド「hasitem」は、名前を変更したアイテムや装備の耐久値を検知出来ないので使用しません。

 

◻︎装置の特徴
【Java版】
・オフハンド検知。
・盾ダメージ検知。
【統合版】
・ヘッドスロット検知で「炎の盾」の召喚と解除。
・clear、replaceitem、execute if entity、データ値を使ったアイテム検知。
・防具立てを使った炎の消化。

 

完成動画(旧式)

 

更新履歴
2023-5-26/統合版のターゲットの絞り込みを、専用コマンド「family」に変更しました。
2023-4-1/Java版のコマンドを変更しました。
2023-3-25/統合版v1.19.70以降のコマンドに対応! 複雑な装備検知をやめ、アイテム名から動作するように変更しました。Java版も、コマンドの調整と装置を簡略化しました。

 

 

目次

1.作成準備
・フラットワールド。
・チャットコマンド。
2.コマンドブロックの設置
3.炎の盾【Java版】
・名前を付けた盾。
・Java版のコマンド作成。
4.炎の盾【統合版】
・アイテム名の変更。
・タグ付け装置。
・ステータス効果(AND回路)。
・炎の盾の効果とヘルメットの追尾。
・ヘッドスロット検知。
5.ワールドデータ
・完成データのダウンロード。

※一部Java版と統合版のコマンドに違いがあるので気をつけてください。

 

作成準備

フラットワールド。

マインクラフトのバージョンも上がり、フラットワールドの作成が簡単になりました。 詳しくは、下記の関連記事を参考に作成してください。

 

 

 

チャットコマンド。

チャットに大量のコマンドログが流れ、装置作成の邪魔になるのでログを非表示にしておきます。 ※Java版では、新規ワールド作成時にも非表示に出来ます。

◻︎コマンドログの非表示 ※表示する場合 「false」を「true」に変更。

/gamerule commandBlockOutput false

装置作成に必要なコマンドブロックを手に入れます。

◻︎コマンドブロックの入手

/give @s command_block

 

コマンドブロックの設置

Java版と統合版では、コマンドやブロックの名称など違いがあります。装置の解説はJava版の名称で統一しています。

コマンドブロックは画像に合わせて配置。「ブロックの種類」「レッドストーン」を変更します。変更がある場合は、個別に解説していきます。

配置したコマンドブロックの状態/すべて無条件 ※()内は統合版の名称。

コマンドブロックの色 ブロックの種類 レッドストーン
黄色 インパルス
(衝撃)
動力が必要
(レッドストーンが必要)
青色 チェーン 常時実行
(常にアクティブ)
紫色 リピート
(反復)
常時実行
(常にアクティブ)

 

装置は開始点座標(0 -60 0)を基準に、南が正面がになるよう設置にしています。座標を合わせてブロックを設置していくと、コマンドはコピー&ペーストで作れます。

◻︎南向きを確認するには
ストラクチャーブロックを設置して、境界線の青い線が伸びる方が南。※赤い線は東。
/give @s structure_block

 

炎の盾【Java版】

「炎の盾」を持つと火炎耐性が20秒付き、盾がダメージを受けると、近くのエンティティを3体燃やします。火炎耐性が消える前に、盾をメインハンドに持ち替えると、炎が消え火炎耐性が延長出来ます。

Java版ではアイテム名の変更はもちろん、エンチャントや説明文を追加した装備も検知可能。装備はダメージを受け壊れると無くなります。※「炎の盾」がオフハンドにないと、コマンドは実行されません。

 

名前を付けた盾。

Java版では名前や説明文を付けた装備を、コマンドから直接出す事が出来ます。※コマンドは長くなるので、メモ帳やテキストエディタを使うと作りやすいです。

【盾】
①盾を1個入手するコマンド。

/give @s minecraft:shield 1

【アイテム名と説明文】
②アイテム名や説明文を追加します。

{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]},

【エンチャント】
③LV10の火炎耐性と耐久力を追加します。

Enchantments:[{id:fire_protection,lvl:10},{id:unbreaking,lvl:10}]}

コマンドの結合
②③のコマンドを繋げ、①のshieldの後ろにコマンドを繋げます。

/give @s minecraft:shield
{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]},
Enchantments:[{id:fire_protection,lvl:10},{id:unbreaking,lvl:10}]} 1

改行無しの1行で、チャットに入力して「炎の盾」を入手します。

 

Java版のコマンド作成。

オフハンド検知で信号を出し、装置を起動します。同じ色の「ターゲットセレクター」後ろのNBTフォーマットは共通です。コマンドは長くなるので分けています。

②にはレッドストーントーチを設置。⑤は条件付きに変更。

【オフハンド検知】

①execute if entity @a[nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}]
②scoreboard objectives add shield minecraft.custom:minecraft.damage_blocked_by_shield
③effect give @a[nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] fire_resistance 20 10

【オフハンド検知】
①「炎の盾」がオフハンドにある時、信号を出す。
【スコアボード】
②盾ダメージを検知するスコアボード「shield」を作成(レッドストーントーチを設置)。
【ステータス効果】
③「炎の盾」がオフハンドにあるプレイヤーに、LV10の火炎耐性を20秒与える。

【盾ダメージと炎】

④execute at @a[scores={shield=1..},nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] at @e[type=!villager,type=!item,type=!player,type=!armor_stand,type=!arrow,type=!potion,type=!item_frame, distance=..10,sort=nearest,limit=3] run fill ~ ~ ~ ~ ~ ~ minecraft:fire
⑤scoreboard players reset @a shield
⑥execute at @e[type=!player,nbt={HurtTime:1s}] as @a[distance=..10,nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] run summon armor_stand ~ ~ ~ {CustomName:"\"fire\"",Invisible:1b}

【盾ダメージ検知】
④「炎の盾」がダメージを受けた時、10ブロック以内で、近くのエンティティを3体燃やします。(村人、アイテム、プレイヤー、防具立て、矢、ポーション、額縁除く)
【スコアボード】
⑤④が実行された時、スコアボード「shield」をリセット。
【ステータス効果】
⑥「炎の盾」をメインハンドに持っているプレイヤーから10ブロック以内で、 ダメージを受けたエンティティがいる時、透明な防具立て「fire」を設置。(プレイヤーを除く)

※④動物など、燃やしたく無いエンティティがいる場合、IDを追加してください。

【火消しとリセット】

⑦execute as @e[type=armor_stand,name=fire] at @s run fill ~-10 ~ ~-10 ~10 ~10 ~10 air replace minecraft:fire
⑧kill @e[type=armor_stand,name=fire]
⑨scoreboard objectives remove shield

【火消し】
⑦信号がある時、防具立て「fire」周辺の炎を空気に置き換える。
【リセット】
⑧⑦が実行された時、防具立て「fire」を消す。
⑨スコアボード「shield」を削除。

 

炎の盾【統合版】

「炎の盾」(鉄のヘルメット)を投げると火炎耐性が20秒間付き、鉄のヘルメット(ダミー)を被ります。 鉄のヘルメット(ダミー)を被った時、盾(データ値1,000)を召喚。盾(データ値1,000)が壊れると 近くのエンティティを3体燃やします。火炎耐性が消える前に、鉄のヘルメット(ダミー)を脱ぐと炎が消え、 もう一度「炎の盾」を投げると火炎耐性が延長出来ます。

また、使用中にダメージを受けた時、盾(データ値1,000)は解除され「炎の盾」(鉄のヘルメット)はアイテム化します。 マルチプレイでも使えるように、タグの解除と「炎の盾」(鉄のヘルメット)が受け渡しが出来る、盾ケースを作ります。

※プレイヤーにタグが残っていると効果が重複します。

 

アイテム名の変更。

金床を使ってチェストと鉄のヘルメットの名前を変更します。

鉄のヘルメット→「炎の盾」を2個作成。

 

チェスト→「盾ケース」を2個作成。

 

タグ付け装置。

装備を出し入れする時に、プレイヤーにタグを付けたり消したりします。

開始点は座標(0 -60 0)。「A」は座標(1 -60 0)、「B」は座標(1 -60 6)。

【統合版】

①execute if blocks 1 -60 0 1 -60 0 1 -60 6 all
②tag @a remove f_shield
③tag @p add f_shield

①「A」と「B」のチェストの中身が同じ時、信号を出す。
②信号がある時、全てのプレイヤーからタグ「f_shield」を削除。
③信号がない時、近くのプレイヤーにタグ「f_shield」を追加。

「あ」にはチェストの中身が分かるように、額縁に「炎の盾」(鉄のヘルメット)を入れておきます。②にはレッドストーンランプを設置。「A」と「B」のチェストの中身が同じ時点灯。

 

ステータス効果(AND回路)。

タグ付きプレイヤーが「炎の盾」(鉄のヘルメット)を投げた時、鉄のヘルメット(データ値600)を被ります。

③は地面下。

【統合版】

①execute if entity @e[type=item,name=炎の盾]
②execute if entity @a[tag=f_shield]
③replaceitem entity @a[tag=f_shield] slot.armor.head 0 keep iron_helmet 1 600
④replaceitem entity @a[tag=f_shield] slot.weapon.offhand 0 keep shield 1 1000

【AND回路】
①「炎の盾」(鉄のヘルメット)が落ちている時、信号を出す。
②プレイヤーにタグ「f_shield」がある時、信号を出す。
【ステータス効果】
③タグ付きプレイヤーのヘッドスロットに、鉄のヘルメット(データ値600)を設置。
④タグ付きプレイヤーのオフハンドに、盾(データ値1,000)を設置。

 

炎の盾の効果とヘルメットの追尾。

プレイヤーが鉄のヘルメット(データ値600)を持っているかを検知して、頭上に「炎の盾」(鉄のヘルメット)を追尾させます。 ※頭上に追尾しているアイテムは、5分後に自然消滅するので注意。

②③⑦はレッドストーンが必要に変更。

【統合版】タグ付きプレイヤー対象。

①clear @a[tag=f_shield] iron_helmet 600 0
②replaceitem entity @a[tag=f_shield] slot.weapon.offhand 0 keep air
③execute as @e[tag=w_sword] at @s run tp @e[type=item,name=魔女の剣] ~~3~
④effect @a[tag=f_shield] fire_resistance 20 10
⑤replaceitem entity @a[tag=f_shield] slot.weapon.offhand 0 keep shield 1 1000
⑥execute at @e[family=monster] as @a[tag=f_shield,c=3,r=10] run fill ~~~ ~~~ minecraft:fire
⑦effect @e[type=armor_stand,name=炎] invisibility 100 0 true
⑧execute as @e[tag=f_shield] at @s run summon armor_stand 炎 ~~~

【インベントリ、オフハンド検知】
①鉄のヘルメット(データ値600)を持っている時、信号を出す。
②オフハンドが空の時、信号を出す。
【炎の盾(鉄のヘルメット)を追尾】
③信号がある時、プレイヤーの頭上に「炎の盾」(鉄のヘルメット)を追尾。
【炎の盾の効果】
④信号がある時、Lv10の火炎耐性を20秒与える。
⑤信号がある時、オフハンドに盾(データ値1,000)を設置。
⑥信号がある時、近くのモンスターを3体燃やす(プレイヤーから10ブロック内)。
⑦防具立て「炎」を100秒間、透明にする。
⑧信号がある時、防具立て「炎」を召喚。

※⑥動物など、燃やしたいエンティティがいる場合、IDを追加してください。

 

ヘッドスロット検知。

プレイヤーのヘッドスロットにアイテムがあるかを検知。

④はティックの遅延を8に設定。

【統合版】

①replaceitem entity @a[tag=f_shield] slot.armor.head 0 keep air
②execute at @e[name=炎] as @e[tag=f_shield] run fill ~-10 ~ ~-10 ~10 ~10 ~10 air [] replace minecraft:fire
③clear @a iron_helmet 600
④clear @a shield 1000
⑤kill @e[type=armor_stand,name=炎]

【ヘッドスロット検知】
①タグ付きプレイヤーのヘッドスロットが空の時、信号を出す。
②防具立て「炎」がある時、周辺の炎を空気ブロックに置き換える。
③全てのプレイヤーから鉄のヘルメット(データ値600)を削除。
④全てのプレイヤーから盾(データ値1,000)を削除。(遅延8)
⑤防具立て「炎」を削除。

 

ワールドデータ

完成データのダウンロード。

【統合版】 v1.19.83
完成データでは、座標(0 -61 0)にストラクチャーブロックが埋め込んであります。
アプリで開くから、Minecraftを選びます。

ダウンロード/炎の盾.mcworld

 

【Java版】 v1.19.4
完成データでは、座標(0 -61 8)のチェストに「炎の盾」が入っています。
zipを解凍して、フォルダを「saves」に入れて起動します。

ダウンロード/炎の盾.zip

※二次配布は禁止です。