「コマンド detect」で検索したあなたは、この記事を読むことを推奨します。【第3回応用コマンド講座】


どうも、執筆担当のとれんさーです。今回も、前回に引き続き/executeの複数使用についてやっていきますよ!

前回の記事はこちら!

detectについて

まず、detectについて説明します。当ブログ基礎コマンド講座担当のTosyunさんがどのように書くかはわかりませんが、よく「detectコマンド」と説明しているサイトや動画を見かけます。しかし…

/detectというコマンドは存在しません!

「detectコマンド」というのは、/fillコマンドのreplaceを「replaceコマンド」と言ってるようなものなのです。

今説明した通り、detectとは
/fill→replace,outline、/tp→facing、/clone→masked といったように/execute付け加える追加コンテンツのようなものであり、それ自体はコマンドになり得ません!
それらを踏まえた上で本題の、detectを含めた/execute複数使用の紹介に入りましょう。

作り方

/executeに続ける次のコマンドでは、@sを使うことでその前のexecuteの対象を指定し直すことができます。ここまではコマンド基礎のお話ですね。おさらいしておきましょう。
そして、今回は実際の応用例として、

プレイヤーがダイヤモンドブロックに完全に乗っているときスピードエフェクトを与えるコマンド

を作っていきます。
完全に乗っているときというのは、プレイヤーが乗っているブロックの四辺から当たり判定がはみ出していないとき、ということです。

当たり判定とは?


プレイヤーの当たり判定は、底面が一辺0.6ブロック(m)の正方形の直方体型になっています。
よって、/executeでプレイヤーを中心にとった場合、各方向は0.3ブロック(m)分の当たり判定があることになるので、当たり判定の端である4点がすべてダイヤモンドブロックに乗っていることがスピードエフェクトを与える条件となります。

つまり、

/execute @a ~ ~ ~ detect ~0.3 ~-0.1 ~0.3 diamond_block 0

に続けて…

(/)execute @s ~ ~ ~ detect ~0.3 ~-0.1 ~-0.3 diamond_block 0

そしてさらに続けて…

(/)execute @s ~ ~ ~ detect ~-0.3 ~-0.1 ~0.3 diamond_block 0

さらにさらに続けて…

(/)execute @s ~ ~ ~ detect ~-0.3 ~-0.1 ~-0.3 diamond_block 0

最後に以上のexecuteのdetectが成功したときに動作する…

(/)effect @s speed 0 true

のこれら5つのコマンドで動作します。
ということは…

/execute @a ~ ~ ~ detect ~0.3 ~-0.1 ~0.3 diamond_block 0 execute @s ~ ~ ~ detect ~0.3 ~-0.1 ~-0.3 diamond_block 0 execute @s ~ ~ ~ detect ~-0.3 ~-0.1 ~0.3 diamond_block 0 execute @s ~ ~ ~ detect ~-0.3 ~-0.1 ~-0.3 diamond_block 0 effect @s speed 0 true

…と、1つのコマンドで「プレイヤーがダイヤモンドブロックに完全に乗っているときスピードエフェクトを与える」と言う機構を作ることができるのです!一文だけで嫌になる程長いですが
理解できましたでしょうか?/executeを複数使用することで、プレイヤーのまわりのブロックがどういう状態なのかを細かく検知することができるようになります。

まとめ

どうでしたか?/executeを使って、ものすごく複雑な挙動も作り出すことができる、ということがわかっていただけたら嬉しいです。
次回は、「コマンドの安定、不安定」について書く予定です。

質問やリクエストがあればぜひコメントへ。それではまた次回!!

(執筆協力 よっしー)


前回(第2回応用コマンド講座)↓

次回(第4回応用コマンド講座)↓