一新されたexecuteとサブコマンド

    最近のアップデートにより試験的に試せる、Java版と同様になった仕様のexecuteコマンド。

※2022/11/24 更新。


   ※自分が解釈した表現が実際のものと間違う場合があることをご了承ください。


   ざっくり言うと...

”/execute <条件指定の羅列> <実行するコマンド>”

    ”条件指定の羅列”に下記サブコマンドを連ね、必ず最後に run で”実行するコマンド”を決める。

    きっとこの認識でうまくいくはず

サブコマンドの詳細

以下の方法で様々な条件が設定でき、連続で指定できる。
それぞれの対象や条件、座標などは以前のものが参照される。コマンドブロックをつなげるイメージ。

  • as - そのエンティティが実行者とする。座標は参照されない。
    • /execute as <ターゲット> <追加のサブコマンド>
  • at - そのエンティティの座標を実行元とする。指定したエンティティは実行者にされない。
    • /execute at <ターゲット> <追加のサブコマンド>
  • in - 指定したディメンションで実行。
    • /execute in nether <追加のサブコマンド>
    • /execute in overworld <追加のサブコマンド>
    • /execute in the_end <追加のサブコマンド>
  • align - 指定した軸がブロック座標に調整される。座標の小数点を切り捨てる感じ
    • /execute align x <追加のサブコマンド>
    • /execute align zx <追加のサブコマンド>
    • /execute align xyz <追加のサブコマンド>
  • anchored - 以降の視点を参照する条件が目元もしくは足元を基準にする。デフォルトは足元(feet)
    • /execute anchored eyes <追加のサブコマンド>
    • /execute anchored feet <追加のサブコマンド>
  • facing - 指定した座標もしくはエンティティを向いていることになる。
    • /execute facing <座標xyz> <追加のサブコマンド>
    • /execute facing entity <ターゲット> <eyes|feet> <追加のサブコマンド>
  • positioned - 指定した座標もしくはエンティティの座標を基準にする。
    • /execute positioned <座標xyz> <追加のサブコマンド>
    • /execute positioned as <ターゲット> <追加のサブコマンド>
  • rotated - 指定した座標もしくはエンティティと同じ方角を向いていることになる。
    • /execute rotated <横軸> <縦軸> <追加のサブコマンド>
    • /execute rotated as <ターゲット> <追加のサブコマンド>
  • if - ブロック、エンティティ、スコアのいずれかを条件指定して、揃う場合実行する。
    • /execute if block <座標xyz> <ブロック> <データ値> <追加のサブコマンド>
    • /execute if block <座標xyz> <ブロック> <ステータス> <追加のサブコマンド>
    • /execute if blocks <始点座標xyz> <終点座標xyz> <チェック座標xyz> <モード> <追加のサブコマンド>
    • /execute if entity <ターゲット> <追加のサブコマンド>
    • /execute if score <ターゲット> <スコア枠名> "<,<=,=,>,>=" <参照するターゲット> <参照するスコア枠名> <追加のサブコマンド>
    • /execute if score <ターゲット> <スコア枠名> matches <数値> <追加のサブコマンド>
  • unless - ブロック、エンティティ、スコアのいずれかを条件指定して、揃わない場合実行する。
    • ifと同様に設定できる。
  • run - 以前の条件で次のコマンドを実行する。これ以降にサブコマンドを連ねることはない。
    • /execute run <実行するコマンド>
    • /execute <サブコマンド> run <実行するコマンド>

例文

  • 実行方法:チャット入力もしくはコマンドブロック 概要:ランダムなプレイヤーの位置を基準に 全てのプレイヤーは10マス上にテレポートする。
    • /execute at @r run tp @a ~ ~10 ~

  • 実行方法:チャット入力もしくはコマンドブロック 概要:実行した場所から近いプレイヤーを実行として 実行者自身の座標を基準に すべてのプレイヤー内から最も遠い1人にリンゴを与える。
    • /execute as @p at @s run give @a[c=-1] apple

  • 実行方法:チャット入力 概要:実行地点の座標を xyz軸をブロック座標に調整して アーマースタンドを実行地点の位置から~0.5 ~ ~0.5で召喚する。
    • /execute align xyz run summon armor_stand ~0.5 ~ ~0.5

  • 実行方法:コマンドブロック 概要:全てのプレイヤーを実行者として それぞれの人自身の座標を基準に 視点による判定は目線に設定して 目線1マス先でパーティクルを再生する。
    • /execute as @a at @s anchored eyes run particle minecraft:basic_crit_particle ^ ^ ^1

  • 実行方法:コマンドブロック 概要:タグ(A)を持つ全てのプレイヤーを実行地点として タグ(B)を持つ最も近い1人を向いているものとして 1マス先にパーティクルを再生する。
    • /execute at @a[tag=A] facing entity @e[tag=B,c=1] eyes run particle minecraft:balloon_gas_particle ^ ^ ^1

  • 実行方法:チャット入力 概要:タグ(chat)を持つ全てのプレイヤーを実行地点として 視点による判定は目線に設定して 目線5マス先に実行地点をずらし、 タグ(chat)を持たない近くのプレイヤーにメッセージを送る。
    • /execute as @a[tag=chat] at @s anchored eyes positioned  ^ ^ ^5 run msg @p[tag=!chat] nyan!

  • 実行方法:チャット入力 概要:実行地点から1マス下に TNTが設置されている場合は 1マス下を空気にする。 
    • /execute if block ~ ~-1 ~ tnt run setblock ~ ~-1 ~ air 0 destroy

  • 実行方法:チャット入力 概要:実行地点に TNTが設置されてない場合は その場にTNTを設置する。 
    • /execute unless block ~ ~ ~ tnt run setblock ~ ~ ~ tnt

  • 実行方法:チャット入力 概要:最も近くのタグ(A)を持ちこだまの欠片を64個持っているプレイヤーは 自身の位置から 最も近くのリカバリーコンパスを持ち、タグ(A)を持たないプレイヤー存在する場合は次に  実行者もリカバリーコンパスを持っている場合は次に 最も近くのリカバリーコンパスを持ち、タグ(A)を持たないプレイヤーへメッセージを送る。
    • /execute as @p[tag=A,hasitem=[{item=echo_shard,quantity=64}]] at @s if entity @p[tag=!A,hasitem=[{item=recovery_compass}]] if entity @s[hasitem=[{item=recovery_compass}]] run msg @p[tag=!A,hasitem=[{item=recovery_compass}]] metoo!

以前の仕様と比較

  • ターゲットの位置を基準に動作させる
旧:/execute @p ~~~ tp @s ~ ~10 ~
新:/execute at @p run tp @s ~ ~10 ~
新しい方法で実行位置を相対座標でずらす場合はpositionedを使います。

  • 視点方向による相対座標を使う
旧:/execute @s ^^^3 particle minecraft:balloon_gas_particle ~ ~1 ~
新:/execute positioned ^^^3 run particle minecraft:balloon_gas_particle ~ ~1 ~
facingを使うと指定した場所を向いている判定にできる。anchoredを使用して判定を調整できる。

  • ブロック検知の存在を検知する
旧:/execute @s ~~~ detect ~ ~-1 ~ diamond_block 0 msg @a diamond!
新:/execute if block ~ ~-1 ~ diamond_block 0 run msg @a diamond!
unlessでは指定した条件が揃わなかった時、実行される。

  • 条件が揃うと実行する
旧:/execute @a[tag=A] ~~~ execute @s[scores={score_A=1..100}] ~~~ give @s[tag=ok] apple
新:/execute as @a[tag=A] if score @s score_A matches 1..100 run give @s[tag=ok] apple
新しい方法ではより詳細に直感的に条件指定できる。