/execute: por que a ordem de as/at importa e como store realmente funciona
A maioria das cadeias de execute quebradas vem da confusão entre quem executa o comando e onde ele é executado. Veja o que cada subcomando muda e a ordem que corrige isso.
/execute é um comando que se comporta como uma linguagem de script. Quase todas as falhas podem ser rastreadas até dois subcomandos que parecem fazer a mesma coisa, mas não fazem.
as muda QUEM. at muda ONDE.
as <target>— troca o executor.@sagora significa aquela entidade. A posição não se move.at <target>— troca a posição, rotação e dimensão. O executor não muda.
Então, isso não faz nada útil:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Ele é executado uma vez por zumbi, mas sempre aos seus pés, então ele coloca um bloco repetidamente. A correção é usar ambos:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s se ancora novamente ao zumbi que as acabou de selecionar. as … at @s é o par mais comum em todo o comando, e esquecer at @s é o bug mais comum.
A ordem é da esquerda para a direita e é cumulativa
Os subcomandos são executados em sequência, cada um modificando o contexto que o próximo vê:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— uma passada por jogadorat @s— move para aquele jogadorpositioned ^ ^ ^3— 3 blocos à frente de onde eles estão olhando
Troque os passos 2 e 3 e o deslocamento do acento circunflexo será medido a partir da sua rotação, em vez da deles.
Acento circunflexo versus til
~ ~ ~— relativo à posição, alinhado aos eixos do mundo^ ^ ^— relativo ao olhar: esquerda, cima, frente
As coordenadas com acento circunflexo são o motivo pelo qual positioned ^ ^ ^3 significa "à frente" e ~ ~ ~3 significa "3 blocos ao sul". Misturar as duas notações em um único trio de coordenadas é um erro de sintaxe.
store é um valor de retorno, não uma variável
store captura o que o comando retorna — geralmente uma contagem de sucesso ou um valor de resultado:
execute store result score @s Count run data get entity @s Inventory
Duas coisas que as pessoas erram:
resultversussuccess.resulté o número que o comando produz;successé 1 ou 0 para indicar se ele foi executado. Contar entidades requerresult.storevem antes derun, e se aplica ao comando depois derun, não à cadeia de subcomandos.
if versus unless de curto-circuito
if e unless filtram — a cadeia para ali quando o teste falha. Múltiplas cláusulas if são um E. Não há OU; isso requer dois comandos separados ou um predicado.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Construa a cadeia um subcomando por vez, com o contexto mostrado em cada etapa, no Construtor de Comandos Avançados — ele também cobre dados, itens, saques, agendamento, partículas e sons do mesmo formulário.