/execute: as/atの順番が重要な理由とstoreの仕組み
executeコマンドの失敗のほとんどは、コマンドを実行する「誰」と「どこ」を混同することから生じます。ここでは、各サブコマンドが何を変更し、どのような順序で修正すればよいかを説明します。
/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は「前方」を意味し、~ ~ ~3は「南に3ブロック」を意味します。1つの座標トリプルで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つずつチェーンを構築してください。同じフォームから、データ、アイテム、ルート、スケジュール、パーティクル、playsoundもカバーしています。