更新日:
executeの基本の形
/execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run effect give @s minecraft:speed 1 1
| 部分 | 意味 |
|---|---|
as @a | 全プレイヤー一人ひとりを実行者にする |
at @s | 実行位置をその人の場所にする |
if block ~ ~-1 ~ gold_block | 足元が金ブロックのときだけ続ける |
run ... | 実行するコマンド |
左から順番に処理されます。この例は「金ブロックの上に立っている人にスピードを付ける」という意味です。
よくあるミス1:runを付け忘れる
/execute as @a at @s say helloはエラーになります。実行したいコマンドの前には必ずrunが必要です。
逆に、Java版でrunなしの/execute if entity @e[type=zombie]は、条件の判定だけを行い「Test passed」や「Test failed」と表示します。条件が正しく書けているか確かめるときに便利です。
よくあるミス2:asだけで位置が変わると思っている
asは実行者だけを変え、位置は変えません。コマンドブロックで/execute as @a run setblock ~ ~-1 ~ stoneとすると、全員の足元ではなくブロックの下が何度も石になります。位置も変えたいときはat @sを加えます。
| 書き方 | 実行者 | 位置 |
|---|---|---|
as @a run | 各プレイヤー | 元の位置のまま |
at @a run | 元の実行者のまま | 各プレイヤーの位置 |
as @a at @s run | 各プレイヤー | 各プレイヤーの位置 |
違いの詳しい説明はexecute as と execute at の違いにあります。
よくあるミス3:統合版の旧構文を使っている
統合版は1.19.50でexecuteの書き方がJava版と同じ形に変わりました。古い解説の/execute @a ~ ~ ~ detect ~ ~-1 ~ gold_block 0 effect @s speedのような形は、今の統合版では新しい形に書き直します。
/execute as @a at @s if block ~ ~-1 ~ gold_block run effect @s speed 1 1
よくあるミス4:ifの条件の書き方
if entityは「その対象が1つでもいるか」、if blockは「その座標のブロックが何か」を調べます。- スコアの比較は
if score @s money matches 100..です。100..は100以上、..9は9以下、10..20は10から20の間です。 - 「ではないとき」は
unlessを使います。unless entity @e[type=zombie]はゾンビが1体もいないときに続けます。
エラーが出ないのに何も起きないとき
executeは、asで選ばれた対象が0人だと、エラーにならずに何もしないで終わります。セレクターの範囲が狭すぎないか、ifの条件が厳しすぎないかを、1つずつ外して確かめます。
# 1. 対象が選ばれているか確認
/execute as @a at @s run say 選ばれた
# 2. 条件を足して確認
/execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run say 条件も成立
sayで名前が表示されれば、そこまでは正しく動いています。
よくある質問
runの後にexecuteを続けてもいいですか?
使えますが、run execute ...と書く必要はありません。asやatはrunの前にいくつでも並べられます。
@pと@sのどちらを使えばいいですか?
asで実行者を切り替えた後は、その人を指すのは@sです。@pを使うと「その位置に一番近いプレイヤー」になり、別の人が選ばれることがあります。
executeで実行したコマンドの結果をスコアに入れたいです。
Java版ではexecute store result score @s 目的名 run ...で、コマンドの結果の数値をスコアに保存できます。