MC Toolkit

Guias / Comandos e dados

/execute: por que a ordem as/at importa e como o store realmente funciona

A maioria das cadeias de execute quebradas vem de confundir quem executa o comando com onde ele é executado. Veja o que cada subcomando altera e qual ordem resolve o problema.

/execute é um único comando fingindo ser uma linguagem de script. Quase toda falha vem de dois subcomandos que parecem fazer a mesma coisa, mas não fazem.

as muda QUEM. at muda ONDE.

  • as <target> — troca o executor. @s agora significa aquela entidade. A posição não se move.
  • at <target> — troca a posição, a rotação e a dimensão. O executor não muda.

Então isto não faz nada de útil:

execute as @e[type=zombie] run setblock ~ ~ ~ stone

Ele roda uma vez por zumbi, mas sempre aos seus pés, então coloca um bloco em cima do outro repetidamente. A correção é usar os dois:

execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone

at @s reancora no zumbi que as acabou de selecionar. as … at @s é a combinação mais comum em todo o comando, e esquecer at @s é o bug mais comum.

A ordem é da esquerda para a direita, e ela se acumula

Os subcomandos rodam em sequência, cada um modificando o contexto que o próximo enxerga:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — uma passagem por jogador
  2. at @s — move até aquele jogador
  3. positioned ^ ^ ^3 — 3 blocos à frente de onde ele está olhando

Inverta os passos 2 e 3 e positioned ^ ^ ^3 será calculado a partir da sua posição e direção — depois at @s joga isso fora ao voltar para o jogador, então o deslocamento se perde por completo.

Circunflexo versus til

  • ~ ~ ~ — relativo à posição, alinhado aos eixos do mundo
  • ^ ^ ^ — relativo à direção: esquerda, cima, frente

As coordenadas com circunflexo são o motivo de positioned ^ ^ ^3 significar "à frente" e ~ ~ ~3 significar "3 blocos ao sul". Misturar as duas notações em uma mesma tripla de coordenadas é 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:

  • result versus success. result é o número que o comando produz; success é 1 ou 0 conforme ele tenha rodado ou não. Contar entidades exige result.
  • store vem antes de run, e se aplica ao comando depois de run, não à cadeia de subcomandos.

if versus unless interrompem a cadeia

if e unless filtram — a cadeia para ali quando o teste falha. Várias cláusulas if funcionam como E. Não existe OU; para isso são necessários dois comandos separados ou um predicate.

execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...

Monte a cadeia um subcomando por vez, com o contexto exibido a cada passo, no Construtor de Comandos Avançados — ele também cobre data, item, loot, schedule, particle e playsound no mesmo formulário.

Gerador de comandos avançados — /execute e /data →

Mais guias

Ver todos →