Minecraft【Java版/統合版】
炎の盾。(オフハンド検知)

2022-09-29

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

Java版1.19.2、統合版はv1.19.22で動作確認。

【Java版】では、アイテム名とオフハンド検知してエフェクトコマンドを実行。
【統合版】では、clearやreplaceitemを駆使して、装備スロット検知。
さらにオフハンドを検知して、エフェクトコマンドを実行。
コマンドブロックは多くなりますが、Java版と同じような動作が出来ました。
※hasitemが使えるともう少し楽になりそうですが、通常版ではまだ使えないようです。

 

完成動画

 

 

更新履歴
2022-9-22/
Java版→❷炎の作成装置 ②ブロックを条件付きに修正。
統合版→❻炎の盾 効果 ②replaceitemの「r」が抜けていたので修正。

 

 

目次

1.炎の盾【Java版】
・アイテム名の変更。
・Java版のコマンド作成。

2.炎の盾【統合版】
・アイテム名の変更。
・統合版のコマンド作成。

 

炎の盾【Java版】

盾で敵の攻撃をガードすると、相手を燃やす。
炎はしばらく待つか、盾をメインハンドに持ち替えると消える。

 

アイテム名の変更。

Java版では名前を変更したアイテムを、コマンドから直接出せるので便利です。
※メモ帳やテキストエディタでコマンドを作っておくと便利。

①名前を付けた盾を入手するコマンドを作成。
コマンドの作り方は「魔女の剣」と同じなので割愛します。
LV10の火炎耐性と耐久力を付け、チャットコマンドで入手します。

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

 

Java版のコマンド作成。

コマンドの作り方は「魔女の剣」と同じなので、解説は割愛します。

画像を参考に、ブロックを配置。
◎配置したコマンドブロックの状態/すべて無条件

コマンドブロックの色 ブロックの種類 レッドストーン
黄色 インパルス 動力が必要
青色 チェーン 常時実行
紫色 リピート 常時実行

 

③は、動力が必要に変更。

 

❶炎の盾起動装置

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

①炎の盾を、オフハンドに装備しているプレイヤーを検知。
②スコアボード「f_skill」を作成。レッドストーントーチを付けておきます。
③スコアボード「f_skill」にを1足していきます。(タイマー用)
④盾ダメージを検知するスコアボード「shield」を作成。 盾がダメージを受けると、スコアが1上がる。

 

②は、条件付きに変更。

 

❷炎の作成装置
炎の盾を、オフハンドに装備しているプレイヤー対象。

①execute at @a[scores={shield=1..},nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] at @e[distance=..10,type=!player,sort=nearest,limit=3] run fill ~ ~ ~ ~ ~ ~ minecraft:fire
②scoreboard players reset @a shield
③execute at @a[nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] at @e[distance=..10,type=!player,nbt={HurtTime:1s}] run summon armor_stand ~ ~ ~ {CustomName:"\"fire\"",Invisible:1b}
④effect give @a[nbt={Inventory:[{Slot:-106b,tag:{display:{Name:"\"炎の盾\"",Lore:["\"説明文\""]}}}]}] fire_resistance 20 10

①盾がダメージを受けた時、10ブロック以内にいる近くのエンティティを3体を燃やす。(プレイヤー以外)
②スコアボード「shield」をリセット。
③プレイヤーの10ブロック以内で、エンティティがダメージを受けた時(プレイヤー以外)、透明の防具立て「fire」を召喚。
④プレイヤーにLV10の火炎耐性を20秒与える。

 

❸炎タイマー

①execute if score 炎 f_skill matches 200..
②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 players set 炎 f_skill 1

①スコアボード「f_skill」の炎が200以上になったら信号を出す。
②防具立て「fire」周辺の炎を空気に置き換える。
③防具立て「fire」を消す。
④スコアボード「f_skill」の炎を1にセット。

 

❹炎の盾終了装置

①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 f_skill
④coreboard objectives remove shield

①防具立て「fire」周辺の炎を空気に置き換える。
②防具立て「fire」を消す。
③スコアボード「f_skill」を削除。
④スコアボード「shield」を削除。

炎の盾がオフハンドにないと、コマンドは実行されません。
※マルチプレイにも対応していますが、近くのプレイヤーにもコマンドが反映されます。
完全に個別にしたい場合は、タグなどを追加してプレイヤー指定する必要があります。

 

炎の盾【統合版】

統合版の場合、オフハンド検知だけではうまく動作出来ないので、装備検知と組み合わせて使います。

【炎の盾】チャート
①炎の盾(鉄のヘルメット)を装備すると盾を召喚。
②召喚した盾で敵の攻撃をガードすると、相手を燃やす。
③炎はしばらく待つか、炎の盾(鉄のヘルメット)を脱ぐと消える。

装置の仕様上、通常のチェストには入れられないので、「盾ケース」を作ります。(タグ消し)

 

アイテム名の変更。

統合版ではアイテム名での検知や、名前を付けたアイテムをコマンドで出せないので手順が増えます。

①鉄のヘルメットをコマンドで入手。(データ値580)

/give @s iron_helmet 1 580

②金床を使ってチェストと鉄のヘルメットの名前を変更しておきます。(2個)

チェスト→盾ケース
鉄のヘルメット(データ値580)→炎の盾

※鉄のヘルメットに付けるエンチャントは、消滅の呪い以外はダミーになります。
説明文など付けてもOKです。

 

統合版のコマンド作成。

コマンドブロック数は多いですが、簡単なコマンドの繰り返しで作れます。

画像を参考に、ブロックを配置。
◎配置したコマンドブロックの状態/すべて無条件

コマンドブロックの色 ブロックの種類 レッドストーン
黄色 衝撃 レッドストーンが必要
青色 チェーン 常にアクティブ
紫色 反復 常にアクティブ

 

◻︎炎の盾装置の仕組み
装置は大きく分けて【盾ケース】【装備検知装置】の2種類で設計してあります。
仕組みは「魔女の剣」と同じなので、変更箇所以外の解説は割愛します。

【盾ケース】
炎の盾(鉄のヘルメット)専用ケース。タグを付けたり消したりする装置。

【装備検知装置】
炎の盾を検知して盾を差し替えたり、炎を作る装置。

 

矢印はチェストの向き。「A」と「B」には盾ケースを設置して炎の盾(鉄のヘルメット)を入れておきます。

 

❶盾ケース付、タグ装置。

①testforblocks ~~~ ~~~ ~~~
②tag @a remove f_shield
③clear @a iron_helmet 580
④tag @p add f_shield

①「~~~」には「A」の座標(2回)。 後ろの「~~~」には「B」の座標を入れます。

 

❷装備スロットの検知とヘルメットの置き換え装置

①replaceitem entity @a[tag=f_shield] slot.armor.head 0 keep air
②clear @a[tag=f_shield] iron_helmet 580 1
③replaceitem entity @a[tag=f_shield] slot.armor.head 0 keep iron_helmet 1 600
④give @a[tag=f_shield] iron_helmet 1 580
⑤setblock ~~~ air
⑥setblock ~~~ redstone_block

⑤⑥は、❹盾召喚装置「あ」レッドストーンブロックの座標。

 

❸ヘルメットの置き換え装置2

①clear @a[tag=f_shield] iron_helmet 600 0
②clear @a[tag=f_shield] iron_helmet 600 1
③replaceitem entity @a[tag=f_shield] slot.armor.head 0 keep iron_helmet 1 580
④clear @a[tag=f_shield] iron_helmet 580 1

 

2段目、通常のピストンを向かい合わせにして、レッドストーンブロックを設置。

 

❹盾召喚、火消し装置

タグ付きプレイヤー対象

①replaceitem entity @a[tag=f_shield] slot.weapon.offhand 0 keep shield 1 1000
②clear @a[tag=f_shield] shield 1000 1
③execute @e[type=armor_stand,name=] ~~~ fill ~-10 ~ ~-10 ~10 ~10 ~10 air 0 replace minecraft:fire
④kill @e[type=armor_stand,name=]

①プレイヤーのオフハンドに盾を設置。(データ値1000)
②プレイヤーから盾を1個削除。(データ値1000)
③防具立て「」周辺の炎を空気ブロックに置き換える。
④防具立て「」を削除します。

 

3段目にコマンドブロックを設置。

 

❺ヘルメットの差し替え(名前付きヘルメットに戻す)

①execute @a[tag=f_shield] ~~~ clone ~~~ ~~~ ~~1~
②execute @a[tag=f_shield] ~~~ setblock ~~1~ air 0 destroy
③kill @e[name=盾ケース]
④clear @a[tag=f_shield] iron_helmet 580 1

①「~~~」には「A」の座標(2回)。プレイヤーの頭上にチェストをクローンさせます。

 

①と③は、レッドストーンが必要に変更。
3段目にコマンドブロックを設置。

 

❻炎の盾 効果

タグ付きプレイヤー対象

①clear @a[tag=f_shield] shield 1000 0
②replaceitem entity @a[tag=f_shield] slot.weapon.offhand 0 keep shield 1 1000
③execute @e[type=!player,type=!item,type=!armor_stand,c=3] ~~~ fill ~~~ ~~~ minecraft:fire
④effect @a[tag=f_shield] fire_resistance 20 10

①プレイヤーが盾を持っているか確認。(データ値1000)
②盾が壊れた時、オフハンドに盾を設置。(データ値1000)
③盾が壊れた時、近くのエンティティ3体を燃やす。(プレイヤー、アイテム、防具立てを除く)
④プレイヤーにLV10の火炎耐性を20秒与える。

 

③ティックの遅延を400に変更。(1秒20tickで計算。約20秒)
3段目にコマンドブロックを設置。

 

❼防具立て召喚と火消しタイマー

①execute @e[tag=f_shield] ~~~ summon armor_stand 炎 ~~~
②effect @e[type=armor_stand,name=] invisibility 100 0 true
③execute @e[type=armor_stand,name=] ~~~ fill ~-10 ~ ~-10 ~10 ~10 ~10 air 0 replace minecraft:fire
④kill @e[type=armor_stand,name=]

①盾が壊れた時、プレイヤーに防具立て「」を召喚。
②防具立て「」を100秒間透明にする。
③約20秒後、防具立て「」周辺の炎を空気ブロックに置き換える。
④防具立て「」を削除します。

 

注意点

敵から攻撃を受けると一撃で装備が壊れますが「f_shield」のタグが付いている間は、すぐに装備がクローンされます。なので敵に装備を解除される感じになります。
※一度に複数の敵に襲われると、防御が間に合わず装備が解除されやすくなります。

マルチプレイでも動作しますが、タグ「f_shield」が重複しているとうまく動作しません。
同時に使いたい場合は、タグ名を変えて人数分の装置を作る必要があります。

炎の盾(鉄のヘルメット)を無くしても、タグ「f_shield」が付いている間は、通常ヘルメットを被っても炎の盾(鉄のヘルメット)が手に入ります。
無限ヘルメットを止めるには、炎の盾(鉄のヘルメット)を盾ケースに入れ、プレイヤーのタグを消す必要があります。

 

 

おすすめ記事もどうぞ!