/execute - 自分以外を基準にしてコマンドを実行する

/execute - 自分以外を基準にしてコマンドを実行する

自分以外を基準にしてコマンドを実行し、複雑な処理を行うことができます。

/execute通常モードdetectモードの2つがあります。 detectモードでは通常モードの機能に加え特別な条件を加えた操作を行えます。

まずは通常モードから例文を通して学んでいきましょう。

通常モード

ニワトリをそのニワトリ自身の上空に移動させる

事前準備としてニワトリを呼び出しておきます。

# ニワトリを5匹呼び出す
/summon chicken
/summon chicken
/summon chicken
/summon chicken
/summon chicken

次に/tpの使い方のおさらいです。次の場合は自分を20ブロック上に移動させます。

/tp @s ~ ~20 ~

次はtypeを使ってニワトリ (chiken)に絞り込んで実行してみましょう。

/tp @e[type=chiken] ~ ~20 ~

この場合ニワトリ達はプレイヤーの上に移動します。移動先の~ ~20 ~実行者であるプレイヤーを基準にしているからです。

目的の操作はニワトリを、そのニワトリ自身の上空に移動させることでした。プレイヤーの上ではありません。/tpの動作を考えると、/tpをニワトリ達自身に実行させればうまくいきそうです。

ここで出てくるのが/executeです。/executeはコマンドの実行者を自分以外にするコマンドです。

/execute @e[type=chicken] ~ ~ ~ tp ~ ~20 ~

ニワトリ達がプレイヤーの上ではなく、ニワトリそれぞれの上に移動すれば成功です。@e[type=chicken]で選ばれたそれぞれの対象自身が、/tp ~ ~20 ~を実行した形になります。

このコマンドは次の2つに分けることができます。

  • @e[type=chicken] ~ ~ ~: コマンドを実行させる対象
  • tp ~ ~20 ~: 使用させるコマンド(最初のスラッシュは不要)

このように、自分以外のエンティティをコマンドの実行者にしないとできないような操作するのが/executeです。

クリーパーに雷を落とす

この場合は次の通りになります。

/execute @e[type=creeper] ~ ~ ~ summon lightning_bolt

雷はエンティティ扱いなので/summonで呼び出せます。

自分で/summonを使った場合は呼び出す場所を座標しか指定できません。雷を動いているクリーパーに当てるのは難しいですが、/executeを使って対象から自分自身に落とさせれば必ず命中させることができます。

detectモード

/executeにはもう1つdetect(検知)モードという使い方があります。指定の場所に特定のブロックが存在するかを判定して、コマンドを実行するかを決める使い方です。

クリーパーの"足元が草ブロックなら"雷を落とす

# 対象の足元が草ブロックなら雷を落とす
/execute @e[type=creeper] ~ ~ ~ detect ~ ~-1 ~ grass 0 summon lightning_bolt
# 参考: detectモードを使わない場合(ブロックの状態に関係なく実行)
/execute @e[type=creeper] ~ ~ ~                        summon lightning_bolt

このコマンドの中で次の部分がdetectモードで使用する箇所です。

detect ~ ~-1 ~ grass 0

この部分を通常モードの間に追加することでdetectモードになります。

  • detect: detectモードを使用する
  • ~ ~-1 ~: その対象からの座標
  • grass 0: 検知するブロック名とデータ値

この条件が満たされた場合(対象の足元が草ブロック)にのみ、以降のコマンドが実行されます。

"足元が砂ブロックなら"移動速度を遅くする

この場合は、ずっと判定し続けて欲しいのでコマンドブロックの反復モードで使用します。

# コマンドブロックの反復モードで使用
# 対象の足元が砂ブロックなら移動速度を遅くする
/execute @e ~ ~ ~ detect ~ ~-1 ~ sand -1 effect @s slowness 1 0 true
# 参考: detectモードを使わない場合
/execute @e ~ ~ ~                        effect @s slowness 1 0 true
次のページへ
/tickingarea - ティック領域を管理する