Minecraft【武器・防具・道具】連射の弓。(ダメージ検知)

2024-02-16

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

矢の雨を降らせる。

連射の弓。

【Java版】では、メインハンドとダメージを検知して矢を降らせます。連射効果は1体づつですが、連続使用可能。マルチプレイでもアイテムを受け渡して使えますが、近くのプレイヤーにもコマンドが反映されます。

【統合版】では「連射の弓」(オウムガイ)を投げて弓(ダミー)を召喚。射った矢の周辺のモブに矢を降らせます。弓(ダミー)を召喚するまで次の矢は射れません。マルチプレイでは、弓ケース(チェスト)でタグを切り替えて使う事が出来ます。

※統合版の新コマンド「hasitem」は、名前を変更したアイテムや装備の耐久値を検知出来ないので使用しません。記事内容を大幅に変更しました。うまく表示されない場合は、ブラウザのキャッシュをクリアしてください。

◻︎装置の特徴
・ターゲット絞った矢の召喚。
【Java版】
・メインハンド検知。
・HurtTimeを使ったダメージ検知。
【統合版】
・オフハンドスロット検知で「連射の弓」の召喚と解除。
・clear、replaceitem、execute if entity、データ値を使った矢やアイテム検知。
・tpを使った装備の追尾。

 

完成動画(旧式)

 

更新履歴
2023-5-26/統合版の矢の検知方法、ターゲットの絞り込みを、専用コマンド「family」に変更しました。
2023-4-1/統合版の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版】

「連射の弓」を持っている時、エンティティがダメージを受けると矢が連続で降ります(パーティクルあり)。Java版ではアイテム名の変更はもちろん、エンチャントや説明文を追加した装備も検知可能。装備は耐久力が減ると壊れます。※「連射の弓」を手にしていない時は、コマンドは実行されません。

※マルチプレイにも対応していますが、、近くのプレイヤーにもコマンドが反映されます。

 

名前を付けた弓。

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

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

/give @s minecraft:bow 1

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

{display:{Name:"\"連射の弓\"",Lore:["\"説明文\""]},

【エンチャント】
③LV1の射撃ダメージ増加を追加します。

Enchantments:[{id:power,lvl:1}]}

コマンドの結合

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

/give @s minecraft:bow
{display:{Name:"\"連射の弓\"",Lore:["\"説明文\""]},
Enchantments:[{id:power,lvl:1}]} 1

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

 

Java版のコマンド作成。

メインハンド検知で信号を出し、矢の召喚やパーティクルを再生します。同じ色の「ターゲットセレクター」後ろのNBTフォーマットは共通です。コマンドは長くなるので分けています。

②は動力が必要に変更。

 

【メインハンド検知】

①execute if entity @a[nbt={SelectedItem:{tag:{display:{Name:"\"連射の弓\"",Lore:["\"説明文\""]}}}}]

①「連射の弓」をメインハンドに持っている時、信号を出す。

【矢の召喚】

②execute at @e[type=!player,nbt={HurtTime:1s}] as @a[distance=..20,nbt={SelectedItem:{tag:{display:{Name:"\"連射の弓\"",Lore:["\"説明文\""]}}}}] run summon arrow ~ ~3 ~

②「連射の弓」をメインハンドに持っているプレイヤーから20ブロック以内で、 ダメージを受けたエンティティの頭上に矢を召喚。(プレイヤーを除く)

【パーティクル効果】

③execute at @e[nbt={HurtTime:1s}] as @a[distance=..20,nbt={SelectedItem:{tag:{display:{Name:"\"連射の弓\"",Lore:["\"説明文\""]}}}}] run particle minecraft:happy_villager ~ ~ ~ 1 1 1 0 6 force

③「連射の弓」をメインハンドに持っているプレイヤーから20ブロック以内で、
ダメージを受けたエンティティにパーティクルを再生。

 

連射の弓【統合版】

「連射の弓」(オウムガイ)を投げると、オフハンドにオウムガイ(ダミー)を持ちます。オウムガイ(ダミー)を持った時、 弓(データ値800)を召喚。矢が射られた時、近くのエンティティ3体に矢が連続で降ります。 弓(データ値800)は一度で壊れますが、オウムガイを持っている間は再召喚されます。オフハンドからオウムガイ(ダミー) を外すと「連射の弓」(オウムガイ)が戻ってきます。

マルチプレイでも使えるように、タグの解除と「連射の弓」(オウムガイ)が受け渡しが出来る、弓ケースを作ります。 ※「連射の弓」の使用中は、矢を使う他のエンティティ(スケルトンなど)も矢を連射します。

 

アイテム名の変更。

金床を使ってチェストとオウムガイの名前を変更します。※弓だと誤射で耐久度が減るので、オフハンドにも設置可能なオウムガイを使用しています。

オウムガイ→「連射の弓」を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 r_bow
③tag @p add r_bow

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

「あ」にはチェストの中身が分かるように、額縁に「連射の弓」(オウムガイ)を入れておきます。②にはレッドストーンランプを設置。「A」と「B」のチェストの中身が同じ時点灯。

 

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

タグ付きプレイヤーが「連射の弓」(オウムガイ)を投げた時、オウムガイ(データ値500)をオフハンドに設置します。

③は地面下。

【統合版】

①execute if entity @e[type=item,name=連射の弓]
②execute if entity @a[tag=r_bow]
③replaceitem entity @a[tag=r_bow] slot.weapon.offhand 0 keep nautilus_shell 1 500
④give @a[tag=r_bow] bow 1 800
⑤enchant @a[tag=r_bow] Infinity

【AND回路】
①「連射の弓」(オウムガイ)が落ちている時、信号を出す。
②プレイヤーにタグ「r_bow」がある時、信号を出す。
【弓の召喚】
③タグ付きプレイヤーのオフハンドスロットに、オウムガイ(データ値500)を設置。
④タグ付きプレイヤーに、弓(データ値800)を与える。
⑤弓(データ値800)に、無限のエンチャントを追加。

※「連射の弓」(オウムガイ)を投げた時、ホットバーのスロット枠を急に移動させてしまうと、 無限エンチャントが付きません。

 

連射の弓の効果とオウムガイの追尾。

プレイヤーがオウムガイ(データ値500)を持っているかを検知して、頭上に「連射の弓」(オウムガイ)を追尾させます。※頭上に追尾しているアイテムは、5分後に自然消滅するので注意。

②③④⑥はレッドストーンが必要に変更。「い」には、レッドストーンのたいまつを設置。④はティックの遅延10、⑤は遅延40、⑦は遅延30。

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

①clear @a[tag=r_bow] nautilus_shell 500 0
②execute as @e[tag=r_bow] at @s run tp @e[type=item,name=連射の弓] ~~3~
③execute if entity @e[type=arrow]
④execute at @e[type=!villager,type=!armor_stand,family=mob] as @e[type=arrow,c=1,r=10] run summon arrow ~~3~
⑤kill @e[type=arrow]
⑥clear @a[tag=r_bow] bow 800 0
⑦give @a[tag=r_bow] bow 1 800
⑧enchant @a[tag=r_bow] Infinity

【インベントリ検知と「連射の弓」(オウムガイ)の追尾】
①オウムガイ(データ値500)を持っている時、信号を出す。
②信号がある時、プレイヤーの頭上に「連射の弓」(オウムガイ)を追尾。
【矢の検知と「連射の弓」の効果】
③矢が落ちている時、信号を出す。
④信号がある時、射った矢の周辺(10ブロック内)のモブの頭上に、矢を連続召喚。(村人、防具立てを除く)(遅延10)
⑤矢を削除。(遅延40)
【弓の召喚】
⑥弓(データ値800)を持っている時、信号を出す。
⑦タグ付きプレイヤーに、弓(データ値800)を与える。(遅延30)
⑧弓(データ値800)に、無限のエンチャントを追加。

※④⑤の遅延時間を変更すると、矢の連射時間が変わります。スケルトンの矢にも反応します。プレイヤーが射る矢に「tag」付けすると精度が上がります。

 

オフハンドスロット検知。

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

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

【統合版】

①replaceitem entity @a[tag=r_bow] slot.weapon.offhand 0 keep air
②clear @a nautilus_shell 500
③clear @a bow 800

【オフハンドスロット検知】
①タグ付きプレイヤーのオフハンドスロットが空の時、信号を出す。
②全てのプレイヤーからオウムガイ(データ値500)を削除。
③全てのプレイヤーから弓(データ値800)を削除。(遅延8)

 

ワールドデータ

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

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

ダウンロード/連射の弓.mcworld

 

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

ダウンロード/連射の弓.zip

※二次配布は禁止です。