/execute: por qué el orden de as/at importa y cómo funciona store
La mayoría de las cadenas de execute rotas provienen de confundir quién ejecuta el comando con dónde se ejecuta. Aquí te explicamos qué cambia cada subcomando y el orden que lo soluciona.
/execute es un comando que simula ser un lenguaje de scripting. Casi todos los errores se remontan a dos subcomandos que suenan como si hicieran lo mismo, pero no es así.
as cambia QUIÉN. at cambia DÓNDE.
as <target>— intercambia el ejecutor.@sahora se refiere a esa entidad. La posición no se mueve.at <target>— intercambia la posición, rotación y 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, por lo 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 se reancla al zombi que as acaba de seleccionar. as … at @s es la combinación más común en todo el comando, y olvidar at @s es el error más común.
El orden es de izquierda a derecha y es acumulativo
Los subcomandos se ejecutan en secuencia, cada uno modificando el contexto que ve el siguiente:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— una pasada por cada Jugadorat @s— se mueve a ese Jugadorpositioned ^ ^ ^3— 3 bloques delante de donde están mirando
Si se intercambian los pasos 2 y 3, el desplazamiento del cursor se mide desde tu rotación en lugar de la suya.
Caret versus tilde
~ ~ ~— relativo a la posición, alineado con los ejes del mundo^ ^ ^— relativo a la orientación: izquierda, arriba, adelante
Las coordenadas de caret son la razón por la que positioned ^ ^ ^3 significa "delante de" y ~ ~ ~3 significa "3 bloques al sur". Mezclar las dos notaciones en una tripleta de coordenadas es un error de sintaxis.
store es un valor de retorno, no una variable
store captura lo que el comando devuelve — usualmente un conteo de éxito o un valor de resultado:
execute store result score @s Count run data get entity @s Inventory
Dos cosas que la gente suele confundir:
resultversussuccess.resultes el número que produce el comando;successes 1 o 0 dependiendo de si se ejecutó. Contar entidades requiereresult.storeva antes derun, y se aplica al comando después derun, no a la cadena de subcomandos.
if versus unless de cortocircuito
if y unless filtran — la cadena se detiene allí cuando la prueba falla. Múltiples 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 un subcomando a la vez, con el contexto mostrado en cada paso, en el Constructor de Comandos Avanzado — también cubre datos, ítems, botín, programación, partículas y sonidos (playsound) desde el mismo formulario.