レッドストーンなしで遅延を作ろう#1 〜mobのHP〜【第5回応用コマンド講座】


どうも、執筆担当のとれんさーです。前回は、コマンドを安定させる ということについてやりましたね。みなさん活用はできていますか?

前回の記事はこちら!

さて今回からは、レッドストーン回路を使わずにコマンドを使って遅延を作る方法を、3回に分けて紹介していきたいと思います!


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

全3回

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

この記事です

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

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

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

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

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

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


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

レッドストーン回路を使わない理由

さて、さっそく今回の遅延機構を紹介していく前に、なぜレッドストーン回路を使わず遅延を作るのかということですが、これはマルチプレイにおいて複数の遅延を同時に使えるようにするためです。
マルチプレイでコマンドに関する遅延を使いたいときにレッドストーンを利用して遅延を作ろうとすると、そのワールドにいる全てのプレイヤー数ぶんの遅延回路が必要になりますよね?各プレイヤーで遅延の発生させるタイミングは違うわけですから。
そこで、コマンドの機構にはコマンドの遅延を使って、プレイヤーごとに動作タイミングが違ってもコマンドがしっかり動作するようにしたいわけです。

mobのHPを使うメリット・デメリット

さて今回の話題に戻りますが、そんな遅延コマンドをmobのHPを利用して作るメリットデメリットはご覧の通りです。

メリット
  • 簡単に作れる
デメリット
  • 細かな遅延時間調整が難しい
  • マルチ対応時に不具合が起きる可能性がある

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

mobのHPの利用方法

今回の遅延コマンドは、なんらかのmobを1種指定して作っていきます。今回はブタを使うことにしていきますが、死ぬときにアイテムをドロップするmobならなんでも構いません。
そのmobに/effectコマンドでダメージを与えていき、死んだ時のドロップアイテムを検知することで出力します。かける効果は、


  • (fatal_poisonのみ、poisonでは死にません)
  • 衰弱
    (wither)
  • 即時ダメージ
    (instant_damage、これは常時実行のみ有効、アンデッドモンスター[ゾンビ、スケルトンなど]には逆効果のためinstant_healthが有効)
    【追記】2018/10/14 20:14
    BEver.1.6.2では、アンデッドmobに対して即時回復(instant_health)の効果が効かないというバグがあり、現在これは使えない状況になっています。ご注意ください。

などが考えられます。

具体的な活用例

こう文章で説明するだけでは分かりづらいと思いますので、今回もいつも通り例を用いて紹介していきましょう!

今回の活用例は、

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

というものです。
ちなみに釣竿使ったプレイヤーのと5m先にスケルトンを出すコマンドは、第2回応用コマンド講座で紹介しています。この仕組みが分からないという方は、その記事の解説を読んでからこちらの記事をお読みくださいね。


一定時間釣竿が使えなくなる」とは、一定時間釣竿をプレイヤーから剥奪し使えなくするクールタイムをつけるという風に置き換えて考えることができます。

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

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

これは以前紹介したのと同じですね。続いて、

②/execute @e[type=fishing_hook] ~~~ execute @p ~~~ summon pig ~~100~
釣り針から一番近いプレイヤーの100m上にブタを出す

このコマンドで、ダメージを与えるためのmobをスポーンさせます。mobのIDは使うmobのものに適宜変更してくださいね。そして、

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

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

④/execute @e[type=pig] ~~100~ execute @p ~~100~ tp @e[type=pig,c=1] ~~~
ブタの100m下から一番近いプレイヤーの100m上から一番近いブタをその場にtp

と、結構複雑なコマンドですね。
簡単にいうと、プレイヤーの真上にいるブタを落下させないようにしている、という感じです。

ちなみに、先程話に出ていた「不具合」ですが、ここで起こり得ます。プレイヤー同士が同じ座標に重なってしまった場合、お互いのブタが入れ替わってしまい、遅延がおかしくなったり、この後のコマンドに支障をきたす可能性があるのです。そこがデメリットというわけですね。

そして、

⑤/execute @e[name=”生の豚肉”] ~~100~ give @p fishing_rod 1
生の豚肉の100m下から一番近いプレイヤーに釣竿をgive

このコマンドは、ブタが死んだときにドロップする生の豚肉に釣竿を渡させるものですね。別のmobを使用する場合は、そのmobが死ぬときにドロップするアイテムの名前を入れましょう。

⑥/effect @e[type=pig] fatal_poison 1 255 true
ブタに致死毒を与える

これはmobにダメージを与えるコマンドを入れましょう。最初のコマンドを常時実行にしている前提なので、効果時間は1で問題ありません。続いて、

⑦/kill @e[name=”生の豚肉”]
生の豚肉をkill

mobのドロップアイテムを即時killします。そして最後に、

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

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

以上でコマンドの紹介は終了です。実際にみなさんもやってみて、動作するかの確認をしてみてくださいね。

まとめ

いかがでしたか?マルチ対応で遅延を使えるのはレッドストーンでは簡単にはできない、コマンドの大きな利点の一つかなと思います。ぜひみなさんも、遅延コマンドを利用して複雑な機構を作ってみてくださいね!

そして、次回以降もほかの遅延コマンドについて解説していきます。そちらもご覧になって、コマンド活用の幅を広げていってください!
質問やリクエストはコメントにてお待ちしております!それではまた第6回でお会いしましょう。


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

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