/execute : pourquoi l'ordre de as/at est important et comment store fonctionne réellement
La plupart des chaînes execute défectueuses proviennent d'une confusion entre qui exécute la commande et où elle est exécutée. Voici ce que chaque sous-commande modifie, et l'ordre qui corrige le problème.
/execute est une commande qui se fait passer pour un langage de script. Presque toutes les erreurs proviennent de deux sous-commandes qui semblent faire la même chose, mais ce n'est pas le cas.
as change QUI. at change OÙ.
as <target>— échange l'exécuteur.@sdésigne maintenant cette entité. **La position
ne bouge pas.**
at <target>— échange la position, la rotation et la dimension. **L'exécuteur ne
change pas.**
Donc, ceci ne sert à rien :
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Elle s'exécute une fois par zombie, mais toujours à vos pieds, donc elle place un bloc encore et encore. La solution est les deux :
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s se ré-ancre au zombie que as vient de sélectionner. as … at @s est la combinaison la plus courante dans toute la commande, et oublier at @s est le bug le plus courant.
L'ordre est de gauche à droite, et il est cumulatif
Les sous-commandes s'exécutent en séquence, chacune modifiant le contexte que la suivante voit :
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— un passage par Joueurat @s— se déplacer vers ce Joueurpositioned ^ ^ ^3— 3 blocs devant l'endroit où ils regardent
Échangez les étapes 2 et 3 et le décalage du curseur est mesuré à partir de votre rotation au lieu de la leur.
Curseur versus tilde
~ ~ ~— relatif à la position, aligné sur les axes du monde^ ^ ^— relatif à la direction : gauche, haut, avant
Les coordonnées du curseur expliquent pourquoi positioned ^ ^ ^3 signifie "devant" et ~ ~ ~3 signifie "3 blocs au sud". Mélanger les deux notations dans un seul triplet de coordonnées est une erreur de syntaxe.
store est une valeur de retour, pas une variable
store capture ce que la commande retourne — généralement un nombre de succès ou une valeur de résultat :
execute store result score @s Count run data get entity @s Inventory
Deux choses que les gens se trompent :
resultversussuccess.resultest le nombre produit par la commande ;success
est 1 ou 0 selon qu'elle a été exécutée ou non. Le comptage des entités nécessite result.
storeprécèderun, et il s'applique à la commande aprèsrun, et non à la
chaîne de sous-commandes.
if versus unless court-circuite
if et unless filtrent — la chaîne s'arrête là si le test échoue. Plusieurs clauses if sont un ET. Il n'y a pas de OU ; cela nécessite deux commandes séparées ou un prédicat.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Construisez la chaîne une sous-commande à la fois, avec le contexte affiché à chaque étape, dans le Advanced Command Builder — il couvre également les données, les objets, le butin, les horaires, les particules et les sons à partir du même formulaire.