パイセンのマイクラ攻略教室

マインクラフトのコマンドについて解説していくブログです。エトセトラパーティーというグループでコマンド紹介動画も投稿しています。

【マイクラ】全方向に発射!魔法弾コマンドの解説、炎・氷・風属性の魔法弾も!【1.13~】

f:id:hollys-command-lecture:20180508125401p:plain



※このコマンドはsnapshot 18w03b(1.13のベータ版)で作成しました。それ以外の環境で正常に動作するかは保証できないので注意!

 

snapshotの導入方法はコチラ

hollys-command-lecture.hatenablog.com

 

どうも!エトセトラパーティーのパイセンです。

 

今回はyoutubeに投稿した「【マイクラ】コマンド6つで全方向対応の魔術弾!炎・氷・風の魔法も作成!」の解説をしていきます。

 

動画はコチラ

 

 

コマンドの中身はコチラ

docs.google.com

 

 

 

 

 f:id:hollys-command-lecture:20180121041808p:plain

チャット欄で入力するコマンド

/scoreboard objectives add useRod minecraft.used:minecraft.carrot_on_a_stick

 

コマンドブロックに入力するコマンド

① /execute as @a[scores={useRod=1..}] at @s run summon minecraft:armor_stand ~ ~ ~ {NoGravity:1b,Marker:1b,Invisible:1b,Tags:["magicalBall"]}

② /execute as @a[scores={useRod=1..}] at @s run tp @e[tag=magicalBall,limit=1,sort=nearest] ~ ~ ~ ~ ~

③ /execute as @e[type=armor_stand,tag=magicalBall] at @s run tp ^ ^ ^1.0

④ /scoreboard players set @a[scores={useRod=1..}] useRod 0

⑤ /execute as @e[tag=magicalBall] at @s run particle flame ~ ~1.5 ~ 0.1 0.1 0.1 0.02 5

⑥ /execute as @e[tag=magicalBall] at @s run effect give @e[distance=..1.5] instant_damage 1 0

①はリピート、②~⑥はチェーン、いずれも無条件・常時実行

 

 

全体の流れ

まず、解説に入る前にコマンドの流れを確認しておきましょう。

f:id:hollys-command-lecture:20180121020850p:plain

と、このような感じです。

防具置きが魔法弾の正体でした。

 

それでは、解説していきます!

 

1.ニンジン棒の使用を検知する

 

まずは、ニンジン棒の使用の検知からです。

 

 なぜニンジン棒?と最初は誰もが思います。

実は、コマンドでキー入力を検知するのに一番簡単なんです。

 

今は「へー、そうなんだー」程度の認識で良いです。他にもキー入力を検知する方法はあるんですが、ちょっと複雑で面倒なので・・・。

 

ニンジン棒を持って右クリックすると、見た目の変化はありませんが、ニンジン棒の使用回数がカウントされています。

 

 

そのためにはscoreboardコマンドを使ってチェックします。

 

/scoreboard objectives add useRod minecraft.used:minecraft.carrot_on_a_stick

 

 

このコマンドを最初に実行すると、ニンジン棒を持って右クリックするたびに「useRod」という名前のカウントが1増えます。

 

 

これで、ニンジン棒の使用の検知ができるようになりました!

※scoreboardコマンドについては後日ブログで解説しようと思っています。今はただ、右クリックの検知に必要なコマンド、と覚えるだけでOKです。

 

 

2.プレイヤーの位置に防具置きを召喚する

 次は、もしニンジン棒を使用したら、そのプレイヤーの位置に防具置きを召喚するようにします。

 

「もし○○をしたら××を召喚する」というようなコマンドを作りたいときは、executeコマンドsummonコマンドを使います。

 

 

すると、このような形になります。

 

/execute as @a[scores={useRod=1..}] at @s run summon minecraft:armor_stand ~ ~ ~ {NoGravity:1b,Marker:1b,Invisible:1b,Tags:["magicalBall"]}

 

 

これで、右クリックをおしてニンジン棒を使うと、そのプレイヤーの位置に透明の防具置き(=魔法の正体)が召喚できます!

 

 

※ここで注意しなければならないのが、後でuseRodの値を0に無理やり戻さないといけないことです。

コマンドでは、ニンジン棒の使用回数が1以上の時、となっているので0に戻さないと永遠に防具置きが召喚されることになってしまいます。

 

3.防具置きの向きをプレイヤーと揃える

詳しくは4の項目で話しますが、召喚した防具置きの向きをプレイヤーと揃えなくてはいけません。

プレイヤーや、モブなどの位置や向きを変更するときはtpコマンドを使います。

 

 /execute as @a[scores={useRod=1..}] at @s run tp @e[tag=magicalBall,limit=1,sort=nearest] ~ ~ ~ ~ ~

 

こちらもexecuteコマンドを使って条件を指定してます。向きを揃えるのは1回だけでいいですからね。

 

もし条件を指定しなかったら、ずっとプレイヤーの位置に魔法弾がテレポートしてくるので、発射されません。

 

 

このコマンドによって、右クリックを押したときのプレイヤーの向きと、発射する魔法弾(防具置き)の向きが一緒になりました。

 

これで、魔法弾の発射準備が整いました!次はいよいよ発射させるコマンドを作っていきます!

 

4.ローカル座標を用いて防具置きを飛ばす

まず、ローカル座標とは?という人が多いので、説明します。

 

 X,Y,Z座標は皆さん知ってると思います。簡単に言うと、Yが縦でX,Zが横ですね。

 

X,Y,Zはワールド座標とも呼ばれています。

 

 

今回使うのはローカル座標と呼ばれるもので、マイクラJEのver.1.13の追加要素とされています。

 

ローカル座標はプレイヤーやゾンビなどエンティティが各々持つ座標系で、エンティティから見て前後、左右、上下が軸となっています。

 

画像にするとこんな感じになります。f:id:hollys-command-lecture:20180121034138p:plain

青の線が見ている方向と一緒になっています。

 

このローカル座標がコマンドで使えることで何ができるようになったかというと、プレイヤーの向いている方向が検知できるようになった、ということです。

 

では、肝心のコマンドを見てみましょう。

/execute as @e[type=armor_stand,tag=magicalBall] at @s run tp ^ ^ ^1.0

 

ローカル座標を使っているのは、runに続いているtpコマンドですね。

ローカル座標は^(ハット)を使って表します。

 

座標は順番にleft,up,forward、つまり赤線緑線青線(向いてる方向)になってます。

 

このコマンドが意味するのは、防具置きが向いてる方向へ1m移動させる、ということになります。

 

防具置きの向きは発射するときのプレイヤーの向きと同じなので、ちゃんと向いてる方向に魔法弾は飛んでくれます。

 

もし、3番のコマンドがなかったら、魔法弾は変な方向に飛んでしまうので注意!

 

 

5.ニンジン棒の使用回数をリセットする

2番で書いたように、ニンジン棒の使用回数を0にしなくては一度ニンジン棒をもって右クリックしたら永遠に防具置きが出てしまいます。

 

なので、scoreboardコマンドを使って使用回数を0にします。

/scoreboard players set @a[scores={useRod=1..}] useRod 0

これで、もう一度右クリックを押さない限り2個目の魔法弾は発射されません!

 

6.ちゃんと魔法っぽくする

これで魔法弾は完成ですが、このままだと魔法弾は透明だし当たってもダメージはないのでなんとかしましょう。

 

 

まずは、見た目を変更します。

動画では、炎の魔法になってました。

 

あのように見た目を変えるにはparticleコマンドを使います。

 

/execute as @e[tag=magicalBall] at @s run particle flame ~ ~1.5 ~ 0.1 0.1 0.1 0.02 5

 

これで魔法弾が(見た目だけ)炎属性になります。

 

 

最後に、当たったらダメージを受けるようにしましょう。

effectコマンドを使って魔法弾の半径1.5m以内のモブにダメージを与えます。

 

execute as @e[tag=magicalBall] at @s run effect give @e[type=!player,distance=..1.5] instant_damage 1 0

 

これで完成!

f:id:hollys-command-lecture:20180121041451p:plain

 

理屈はちょっと複雑ですが、仕組みはシンプルで汎用性のあるコマンドだと思います!自由に改変して使ってください!

 

長文になってしまいましたが、理解できたでしょうか?

もしわからないことがあったらコメントください!できる限り対応します。

 

ご精読ありがとうございました。

もしよかったら、読者登録お願いします!