レッドストーンなしで遅延を作ろう#2 〜防具立ての角度〜【第6回応用コマンド講座】

どうも、執筆担当のとれんさーです。前回は、mobのHPを利用した遅延コマンドを紹介していきました。覚えていますでしょうか??

前回の記事はこちら!

さて今回は、そんなレッドストーン回路を使わずに遅延を生み出す、遅延コマンド紹介の第2回となります。今回もよろしくお願いします!


レッドストーンなしで遅延を作る⁈

全3回

#1 〜mobのHPを利用する〜

上のリンクからぜひお読みください!

#2 〜アマスタの回転を利用する〜

この記事です

#3 〜プレイヤーの経験値を利用する〜

上のリンクからぜひお読みください!

#4 〜プレイヤーのスコアを利用する〜

上のリンクからぜひお読みください!


#2 〜防具立ての角度を利用する〜

防具立てを使うメリット・デメリット

今回は防具立て(armor_stand)を使った遅延コマンドを紹介していきますが、まずはメリットデメリットを説明しておきます。

メリット

  • 遅延時間の設定・調整が簡単にできる
  • 設定できる遅延時間に制限がない

デメリット

  • 作成が大変で難しい
  • マルチ対応時に不具合が起きる可能性がある

前回同様、デメリットの内「マルチ対応時に不具合が起きる可能性がある」ということについてはコマンド紹介の際に説明します。

防具立ての角度の利用方法

今回の遅延コマンドでは、あらかじめコマンド構文で遅延させたい時間に見合った角度を2つ指定する必要があります。
遅延させたい時間によって、コマンド構文に入力する2つの角度は指定されています。その詳しい内容については、あとで具体的な活用方法をご紹介するときに説明しますね。
そして、遅延コマンドの動作開始と同時にプレイヤーの上空に防具立て(armor_stand)を出現させ、決められた向きになったことを検知することで出力します。

具体的な活用例

やはり文章では分かりやすくお伝えするのが難しいですね…。ということで、毎度おなじみの例を用いた紹介に入りますよ!

今回の活用例も、mobのHPを利用した時と同じように、

釣竿を使うと5m先にスケルトンがスポーンし、一定時間使えなくなる

というものにしていきます。この方がそれぞれの遅延コマンドの比較がしやすいかなと思いますのでね。
ちなみに前回も紹介しましたが、釣竿を使ったプレイヤーの5m先にスケルトンを出すコマンドは第2回応用コマンド講座で紹介しています。そちらを先に読んでからの方が、今回のコマンドの理解が深まるかも…?

先ほど2つの角度の指定が必要、と書きましたが、ここではそれをABとおくことにしますね。
具体的な数値は最後に説明を交えて紹介していきます。

ではコマンドを見ていきましょう。今回も、前回同様8つのコマンドブロックを使用します。

①/execute @e[type=fishing_hook] ~~~ execute @p ~~~ summon ^^^5
釣り針から一番近いプレイヤーの5m先にスケルトンを出す

ここは今まで通り。次に、

②/execute @e[type=fishing_hook] ~~~ execute @p ~~~ summon armor_stand ~~100~
釣り針から一番近いプレイヤーの100m上に防具立て(armor_stand)を出す

このコマンドで回転させる防具立てを出します。そして、

③/execute @e[type=fishing_hook] ~~~ execute @p ~~100~ tp @e[type=armor_stand,c=1,ry=0,rym=0] ~~~ ~1
釣り針から一番近いプレイヤーの100m上から一番近い、0度を向いた防具立て(armor_stand)を時計回りに1度回転させる

と、結構複雑なコマンドとなります。簡単に言うと、プレイヤーの真上に出した防具立てを落下させないようにし、さらに最初に一回だけ1度回転させる、という感じです。

ちなみに先ほどデメリットであった「不具合」ですが、ここが原因となります。プレイヤー同士が同じ座標に重なってしまった場合、お互いの防具立てが入れ替わってしまい、遅延がおかしくなったりこれ以後のコマンドに影響が出る恐れがあるのです。

そして次に、

④/execute @e[type=fishing_hook] ~~~ clear @p fishing_rod
釣り針から一番近いプレイヤーから釣竿を剥奪

ここで釣竿を剥奪し、クールタイムが終了するまで釣竿を使えないようにします。続いて、

⑤/execute @e[type=armor_stand] ~~100~ execute @p ~~100~ tp @e[type=armor_stand,c=1] ~~~ ~A
防具立ての100m下から一番近いプレイヤーの100m上から一番近い防具立て(armor_stand)を時計回りにA度回転させる

これまた複雑そうなコマンドですね。こちらは簡単に言うと、プレイヤーの真上にある防具立てを毎tickA度ずつ(つまり毎秒{20×A}度)回転させる、という感じです。このA度が、時間調整に関与してきます。

そして次は、

⑥/execute @e[type=armor_stand,ry=B,rym=B] ~~100~ give @p fishing_rod
B度を向いている防具立て(armor_stand)の100m下から一番近いプレイヤーに釣竿を与える

これで、回転していた防具立てがB度の方向に向いたときにクールタイムが終了、ということになります。
さらに続けて、

⑦/kill @e[type=armor_stand,ry=B,rym=B]
B度を向いている防具立てをkill

と、クールタイム終了と同時に防具立てを即時killします。そして最後に、

⑧/kill @e[type=fishing_hook]
釣り針をkill

チェーンで繋いできたコマンドの一番最後に釣り針をkillするコマンドをつけ、マルチ環境下でのこんがらがりを防止します。


さて、ここまでコマンドを紹介していきましたが、肝心の指定が必要な角度 AB について詳しく説明していきます。

まず、設定したいクールタイムを決めてください。今回の遅延コマンドでは、0.05秒単位でクールタイムを設定することができます。3秒や20秒などはもちろん、1.5秒や0.75秒のクールタイムなども設定できますよ。
設定したいクールタイムを決めたら、以下の表を参考にABの値を、先ほどのコマンドの構文に入れてください。

このとき注意していただきたいのは、Bの数値は小数を含まないものになっている必要がある、という点です。Bの数値はセレクタのry,rym引数の数値として使用されるものですが、これらの引数には小数を含む数値は使うことができません
もし計算してBの数値が0.512.25のように小数を含むものになってしまった場合、

  • 計算を間違えているか
  • クールタイムを0.05秒単位で設定していないか

のどちらかが考えられます。修正しないと正常に動作しませんので、正しい数値になるように確認をしっかり行いましょう。
ちなみにAの数値に関しては、/tpコマンドの角度を変える数値なので、数値が小数を含んでいても問題はありませんよ。

終わりに

さてさて、解説は以上となります。今回は長くなってしまいましたし、結構難しい内容だったかと思います。ですが、コマンドではこういった細かい指定ができるシステムというのも自在に作ることができるんです。今回はそれを皆さんに知っていただきたく、少し難しめのものを紹介してみました!
分からないところやコマンド内容についての疑問点などありましたら、ぜひコメントでお寄せくださいね。

また遅延コマンドについては次回以降も紹介します。ぜひ他の遅延コマンド機構も見てみてくださいね!
それではまた第7回でお会いしましょう。


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

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