/execute: perché l'ordine di as/at è importante e come funziona davvero store
La maggior parte delle catene execute non funzionanti deriva dal confondere chi esegue il comando con dove viene eseguito. Ecco cosa cambia ogni sottocomando e l'ordine per risolvere il problema.
/execute is one command pretending to be a scripting language. Almost every failure traces to two subcommands that sound like they do the same thing and do not.
as cambia CHI. at cambia DOVE.
as <target>— scambia l'esecutore.@snow means that entity. **The position does
non si muove.**
at <target>— scambia la posizione, la rotazione e la dimensione. **L'esecutore non
cambia.**
Quindi questo non fa nulla di utile:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Viene eseguito una volta per zombi, ma sempre ai tuoi piedi, quindi piazza un blocco ripetutamente. La soluzione è entrambi:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s re-anchors to the zombie that as just selected. as … at @s is the single most common pairing in the whole command, e dimenticare at @s is the single most common bug.
L'ordine è da sinistra a destra e si accumula
I sottocomandi vengono eseguiti in sequenza, ciascuno modificando il contesto visto dal successivo:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— one pass per playerat @s— move to that playerpositioned ^ ^ ^3— 3 blocks in front of where they are guardando
Scambia i passaggi 2 e 3 e l'offset del caret viene misurato dalla tua rotazione invece che dalla loro.
Caret contro tilde
~ ~ ~— relative to posizione, allineato agli assi del mondo^ ^ ^— relative to orientamento: sinistra, su, avanti
Le coordinate caret sono il motivo per cui positioned ^ ^ ^3 means "in front of" and ~ ~ ~3 means "3 blocks south". Mixing the two notations in one coordinate triple is a syntax error.
store è un valore restituito, non una variabile
store captures what the command restituisce — di solito un conteggio dei successi o un valore di risultato:
execute store result score @s Count run data get entity @s Inventory
Due cose su cui si sbaglia:
resultversussuccess.resultis the number the command produces;success
è 1 o 0 a seconda che sia stato eseguito. Per contare le entità serve result.
storegoes beforerun, e si applica al comando doporun, not to the
la catena di sottocomandi.
Cortocircuiti di if rispetto a unless
if and unless filter — the chain stops there when the test fails. Multiple if clauses are an AND. There is no OR; that needs two separate commands or a predicate.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Costruisci la catena un sottocomando alla volta, con il contesto mostrato a ogni passaggio, nel Generatore di comandi avanzato — copre anche data, item, loot, schedule, particle e playsound dallo stesso modulo.