この記事では、Minecraft Java Edition(バージョン1.17.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
矢を打ったら雷が降るようにしたいマインクラフター
「コマンドを使って、矢が着地した場所に雷を降らせたい。どういうコマンドを組めばいいのかな? 雷を降らす代わりに爆発させるとかもやってみたい!」
こんな疑問を解決します!
- 矢が刺さった場所に雷を降らすコマンド
- 実行されるコマンドを爆発に変える
こんにちは!
マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ
今回は矢を放って、それが刺さった場所に雷を降らすコマンドを解説していきます。
また、それに合わせて雷を降らすのではなく爆発するようにするコマンドも紹介。
どちらも演出が派手なうえに通常のサバイバルでは体験できないので、かなり楽しいです。
雷を降らす場合はコマンド1つで、爆発させる場合はコマンドが2つあれば再現可能。
かなり簡単なので、コマンドにあまり触れたことのないという初心者の方でも分かりやすいかと思います。
それでは、さっそく見ていきましょう!
矢が刺さった場所に雷を降らすコマンド
矢が着地した場所に雷を降らすには、まずsummonコマンドで雷を降らせましょう。
ただし、そのままではただただ雷が降るだけですので、雷が降る条件やその位置をexecuteコマンドで条件として付与しましょう。
なので、やることとしては雷を降らすというコマンドを打ちこむことと、その雷に関する条件を指定するだけです。
弓を引いて放った矢が移動している場合と、矢が着地して動かなくなった場合の違いを判別するために、今回はlifeという項目を使います。
このlifeという項目は矢が着地してからの経過時間を示しているので、移動している矢は0という値を示し、動かなくなった矢は0からだんだんと数字を増やしていくことになります。
この値の違いを条件に指定しようというわけですね。
また、雷を降らす位置はexecuteコマンドのatを使って、矢が着地した場所に雷が降るようにします。
というわけで、具体的なコマンドは以下の通り。
リピートコマンドブロックに打ち込んで、無条件、常時実行にします。
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:lightning_bolt ~ ~ ~
コマンドの解説
“as @e[type=minecraft:arrow,nbt={life:1s}]”では、asを使っているのでコマンドの実行者を変更しています。
type=minecraft:arrowで矢であること、nbt={life:1s}は先ほども解説したように着地してからの時間を示しているので、着地して一瞬だけ経過した矢が上記コマンドの実行者であることを指示しています。
lifeは着地してから常に数字を増やしていくので、life:1sである状態は1回しか存在しないのもポイントです。
繰り返し雷が降ることが無くなります。
そして、コマンドを実行している場所は”at @s”と打ちこんでいるので、@sがいる座標と同じになります。
@sはコマンドの実行者であることを示しているので、つまりは「着地して一瞬だけ経過した矢」のある場所と同じということですね。
このコマンドを実行している場所の変更は、後述するsummonコマンドの雷を降らす位置を指定する方法に関係してきます。
最後に雷を降らすコマンドがsummonコマンドで書かれているだけです。
座標部分の”~”はコマンドが実行されている場所と同じ座標を示すので、「着地して一瞬だけ経過した矢」と同じ場所ということになります。
このコマンド1つで矢の着地点に雷が降るようになるので、非常に簡単ですよ。
プレイヤーに当たった場合、機能しない
注意点としては、プレイヤーに当たると雷が降りません。
これはlifeがカウントされていないことが原因で、プレイヤーに当たった場合にでも同様に雷を振らせたかったのですが、現状筆者の実力では再現できませんでした。
お力になれず申し訳ありません。
一応、複雑なコマンドを組めばできなくもないだろうという感覚は掴めているので、再現出来次第記載いたします。
lifeの値を0sにする
lifeの値を0sにすると、移動している状態の矢に対しても雷が降るようになります。
0sにした場合は、着地してから経過した時間をカウントする必要がないということなので、移動中の矢に対しても対象となります。
こんなこともできるよという紹介でした。
というわけで、矢が刺さった場所に雷を落とすコマンドについて解説しました。
通常のマイクラでは再現不可能なので、非常に新鮮味が溢れますね。
実行されるコマンドを爆発に変える
実行されるコマンドで雷を降らすのではなく、着火されたTNTを召喚する内容に変更すれば矢が着地した場所に爆発を起こすこともできます。
その際は上記で紹介したコマンドのrun以降を変更すればOKです。
runに続くコマンドが実行されるコマンドになっています。
着火されたTNTを召喚するには、summonコマンドでminecraft:tntと指定すれば良いだけですので、以下のようなコマンドになります。
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:tnt ~ ~ ~
雷を降らす場合との差異
雷を降らす場合には地形の変化がないため不便な点が浮かび上がりませんでしたが、爆発して地形が変わる場合はそうはいきません。
というのも、矢が刺さって静止することでコマンドを実行する仕組みになっているので、爆発して地面が削れてしまうと、地面に刺さっていたはずの矢は重力に身を任せて削れた地面に向かって落下していきます。
つまり、爆発したはいいものの地面が削れ再び移動してしまいます。
これはlifeの値が0にリセットされ、再度動きが静止するとlifeのカウントが始まり爆発もまた起こるようになるということです。
爆発と移動を繰り返し、岩盤に到達するほか破壊不能ブロックに刺さるまで延々と掘り下げてしまうわけですね。
これはこれで整地に使え、一見便利なのですが、1度だけ爆発させたい場合にはかなり不便です。
そこで以下のコマンドをリピートコマンドブロックに打ち込みます。
(無条件、常時実行にしておいてください)
kill @e[type=minecraft:arrow,nbt={life:2s}]
killコマンドなので、プレイヤーを倒したり、エンティティを消すコマンドですね。
今回はターゲットセレクタ―を@e(全てのエンティティ)を対象としつつ、条件として[type=minecraft:arrow,nbt={life:2s}]を打ちこみました。
ここまで読んでくれた方にはすぐ理解できるかと思いますが、静止した矢をだけが対象になるよう絞っています。
静止した時間の指定は着火されたTNTを召喚した直後すぐを設定しています。
こうすることで、矢が静止して爆発。
直後に矢をキルして矢が再び地面に刺さって爆発しないようにしています。
地形を壊さないように爆発させるには
矢を放って爆発を起こせるようになったのはいいけど、地形が壊れるのは嫌だなんて方もいるかと思います。
PVPを制作・遊ぶ場合など、毎度毎度地形が破壊されては堪ったものではありませんよね。
ですが、TNTの地形破壊を防ぐ手段はコマンドにはありません。
ただし、クリーパーやエンダーマンなどのmobによる地形破壊を防ぐ手段はありますので、それを利用します。
矢の着地点に、即爆破するクリーパーを召喚する
この記事で紹介してきたコマンドを改変して、矢の着地点にクリーパーを召喚するようにします。
着火されたTNTを召喚するように変更した時と同様に、run以降の部分をクリーパーを召喚するコマンドに置き換えるだけです。
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:creeper ~ ~ ~ {Fuse:0s}
基本的にはクリーパーを召喚するだけに変えただけですが、矢が刺さったのと同時に爆破されるようFuseを設定しています。
Fuseを設定することで爆破するまでの時間を指示することができ、0を指定すると、召喚されてすぐ爆破されるようになります。
mobによる地形破壊を防ぐコマンド
mobによる地形破壊を防ぐコマンドは以下の通りで、チャット欄に打ち込んで実行すればOKです。
/gamerule mobGriefing false
使用しているコマンドはgameruleコマンド。
つまりそのワールドの設定を変更するコマンドと思ってくれれば問題ありません。
今回はmobGriefingというmobによる地形破壊をできないようにするためにfalseに設定しました。
元に戻したい場合は、falseではなくtrueにすればクリーパーなどの爆発で地形が壊れるように変更されます。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- 矢が刺さった場所に雷を降らすコマンド
(プレイヤーに当たった場合、機能しない)
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:lightning_bolt ~ ~ ~
- 矢が刺さった場所を爆発させるコマンド
(すぐ爆破するTNTを召喚する)
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:tnt ~ ~ ~
- 爆発させる場合、地形を壊したくなければすぐに爆破するクリーパーを召喚し、gameruleコマンドでmobによる地形破壊を無効にしておく必要があります。
矢が刺さった場所に、すぐ爆破するクリーパーを召喚するコマンド
execute as @e[type=minecraft:arrow,nbt={life:1s}] at @s run summon minecraft:creeper ~ ~ ~ {Fuse:0s}
mobによる地形破壊を無効にするコマンド
(このコマンドはチャット欄に打ち込んで実行してOK)
/gamerule mobGriefing false
この記事は以上になります。