/execute: por qué importa el orden as/at y cómo funciona realmente store
La mayoría de las cadenas de execute rotas vienen de confundir quién ejecuta el comando con dónde se ejecuta. Esto es lo que cambia cada subcomando, y el orden que lo soluciona.
/execute es un solo comando que pretende ser un lenguaje de scripting. Casi todos los fallos se remontan a dos subcomandos que suenan como si hicieran lo mismo, y no lo hacen.
as cambia QUIÉN. at cambia DÓNDE.
as <target>— intercambia el ejecutor.@sahora significa esa entidad. La posición no se mueve.at <target>— intercambia la posición, la rotación y la dimensión. El ejecutor no cambia.
Así que esto no hace nada útil:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Se ejecuta una vez por zombi, pero siempre a tus pies, así que coloca un bloque una y otra vez. La solución es usar ambos:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s vuelve a anclarse al zombi que as acaba de seleccionar. as … at @s es la combinación más común de todo el comando, y olvidar at @s es el error más frecuente.
El orden es de izquierda a derecha, y se acumula
Los subcomandos se ejecutan en secuencia, y cada uno modifica el contexto que ve el siguiente:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— una pasada por jugadorat @s— muévete a ese jugadorpositioned ^ ^ ^3— 3 bloques delante de donde está mirando
Si intercambias los pasos 2 y 3, positioned ^ ^ ^3 se calcula desde tu posición y orientación — y luego at @s lo descarta al volver a ajustar al jugador, así que el desplazamiento se pierde por completo.
Caret frente a tilde
~ ~ ~— relativo a la posición, alineado con los ejes del mundo^ ^ ^— relativo a la orientación: izquierda, arriba, adelante
Las coordenadas caret son la razón de que positioned ^ ^ ^3 signifique "delante de" y ~ ~ ~3 signifique "3 bloques al sur". Mezclar las dos notaciones en una misma terna de coordenadas es un error de sintaxis.
store es un valor de retorno, no una variable
store captura lo que el comando devuelve — normalmente un recuento de éxitos o un valor de resultado:
execute store result score @s Count run data get entity @s Inventory
Dos cosas que la gente suele hacer mal:
resultfrente asuccess.resultes el número que produce el comando;successes 1 o 0 según si se ejecutó. Para contar entidades hace faltaresult.storeva antes derun, y se aplica al comando que va después derun, no a la cadena de subcomandos.
if frente a unless cortocircuitan
if y unless filtran — la cadena se detiene ahí cuando la comprobación falla. Varias cláusulas if son un AND. No hay OR; eso requiere dos comandos separados o un predicado.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Construye la cadena subcomando a subcomando, con el contexto mostrado en cada paso, en el Advanced Command Builder — también cubre data, item, loot, schedule, particle y playsound desde el mismo formulario.