/execute:as/atの順序が重要な理由とstoreの実際の仕組み
executeチェーンが壊れる原因のほとんどは、「誰がコマンドを実行するか」と「どこで実行されるか」の混同です。各サブコマンドが何を変えるのか、そしてそれを解決する順序を解説します。asは実行者を、atは位置とディメンションを変更します。
/execute は、スクリプト言語のふりをした単一のコマンドです。失敗のほとんどは、同じことをするように聞こえて実際には違う2つのサブコマンドに起因します。
asは「誰が」を変える。atは「どこで」を変える。
as <target>— 実行者を入れ替えます。@sはそのエンティティを指すようになります。位置は動きません。at <target>— 位置、回転、ディメンションを入れ替えます。実行者は変わりません。
つまり、これは何の役にも立ちません:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
ゾンビごとに1回実行されますが、常にあなたの足元で実行されるため、同じ場所にブロックを置き続けるだけです。修正するには両方が必要です:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s は、as が今選んだゾンビにアンカーを張り直します。as … at @s はコマンド全体で最もよく使われる組み合わせであり、at @s を忘れるのが最もよくあるバグです。
順序は左から右へ、そして累積する
サブコマンドは順番に実行され、それぞれが次のサブコマンドが見るコンテキストを変更します:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— プレイヤーごとに1回at @s— そのプレイヤーへ移動positioned ^ ^ ^3— そのプレイヤーが見ている方向の3ブロック前
手順2と3を入れ替えると、positioned ^ ^ ^3 はあなたの位置と向きから計算されます——そして at @s がプレイヤーに戻すことでそれを捨ててしまうため、オフセットは完全に失われます。
キャレットとチルダ
~ ~ ~— 位置を基準に、ワールドの軸に沿って整列^ ^ ^— 向きを基準に:左、上、前
キャレット座標があるからこそ、positioned ^ ^ ^3 は「の前方」を意味し、~ ~ ~3 は「3ブロック南」を意味します。1つの座標 triple の中で2つの記法を混ぜると構文エラーになります。
storeは変数ではなく戻り値
store はコマンドが返すもの——通常は成功回数か結果値——を取得します:
execute store result score @s Count run data get entity @s Inventory
よくある間違いが2つあります:
resultとsuccessの違い。resultはコマンドが生成する数値で、successは実行されたかどうかを表す1か0です。エンティティを数えるにはresultが必要です。storeはrunの前に置き、runの後のコマンドに適用されるのであって、サブコマンドチェーンには適用されません。
ifとunlessはショートサーキットする
if と unless はフィルタリングします——テストが失敗するとそこでチェーンが止まります。複数の if 節はANDになります。ORは存在せず、それには2つの別々のコマンドか述語が必要です。
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Advanced Command Builder で、各ステップのコンテキストを表示しながらサブコマンドを1つずつチェーンに組み立ててください——同じフォームからdata、item、loot、schedule、particle、playsoundも扱えます。