Les commandes, c'est pas sorcier. C'est surtout une histoire de réflexion et de logique.
Tu peux regarder dans ma signature, j'ai un petit post qui regroupe presque tout sur les commandes.
Si tu débutes vraiment, le plus simple, c'est d'expérimenter.
Le /execute te permet de te mettre dans la peau d'une entité en particulier et de faire comme si c'était elle qui lançait la commande.
Pour commencer, essaye de décrire le plus précisément possible ce que tu souhaites obtenir en découpant le tout en actions "élémentaires". Une bonne connaissance des commandes de base est requise. Dès que tu auras besoin d'un tag spécifique, tu le sauras et tu auras juste à jeter un peil au wiki (Minecraft Chunk Format)
Ensuite, il faut tout hiérarchiser (pour savoir dans quel ordre il faut faire quoi) et enfin tu peux créer le système.
Je prend le cas de ta boule de neige qui tp.
Décomposition
Je lance la boule de neige - il me faut une détection
La boule de neige est en l'air
La boule de neige touche le sol - j'ai besoin de traquer sa position
Le joueur est téléporté
Outils
Pour déctecter le lancement d'une boule de neige, il y a les objectifs de type stat.useItem.minecraft.snowball
Utiliser cette commande une fois seulement pour créer l'objectif.
Code (cpp):
/scoreboard objectives add bouleDeNeige stat.useItem.minecraft.snowball
Je souhaite traquer la position d'une entité juste avant sa disparition: cas des boules de neiges
Il n'y a pas 50 méthodes, il faut téléporter une autre entité à la boule de neige et dès que celle-ci ne bougera plus, alors cela signifiera que la boule de neige est arrivée.
Solution proposée:
Code (cpp):
/summon ArmorStand ~ ~ ~ {Marker:true,CustomName:"bouleDeNeige",NoGravity:true}
/tp @e[name=bouleDeNeige] @e[type=Snowball,c=-1]
Ces commandes vont être réinjectées dans notre horloge "finale".
Pour les flèches, c'est beaucoup plus simple puisqu'on peut détecter quand elles sont dans le sol (inGround:true)
Exécution
Ton exemple est loin d'être un cas simple.
Les commande suivantes sont éxécutées dans une horloge, peu importe l'ordre.
Code (cpp):
/scoreboard players add @a[score_bouleDeNeige_min=1,score_bouleDeNeige=20] bouleDeNeige 1
/execute @a[score_bouleDeNeige=2,score_bouleDeNeige_min=2] ~ ~ ~ summon ArmorStand ~ ~ ~ {Marker:true,CustomName:"bouleDeNeige",NoGravity:true}
/scoreboard players add @e[name=bouleDeNeige] bouleDeNeige 1
/execute @e[type=Snowball] ~ ~ ~ scoreboard players reset @e[name=bouleDeNeige,r=3] bouleDeNeige
/tp @e[name=bouleDeNeige] @e[type=Snowball,c=-1]
/execute @e[name=bouleDeNeige,score_bouleDeNeige_min=20] ~ ~ ~ tp @p[score_bouleDeNeige_min=19] @e[name=bouleDeNeige,score_bouleDeNeige_min=20,r=1]
/execute @e[name=bouleDeNeige,score_bouleDeNeige_min=20] ~ ~ ~ scoreboard players reset @a[r=1] bouleDeNeige
/kill @e[name=bouleDeNeige,score_bouleDeNeige_min=25]
Explications
- Dès que je lance une boule de neige, mon score bouleDeNeige passe à 1 (critère stat.useItem.minecraft.snowball)
- Dès que mon score est à 1 ou plus, je l'augmente régulièrement de 1 jusqu'à atteindre 20 (commande 1)
J'utilise ce score pour temporiser toutes les actions
- Dès que mon score est à 2, j'invoque un ArmorStand (commande 2)
- J'augmente constamment le score bouleDeNeige de mon ArmorStand de 1 (commande 3)
- Les boules de neiges situées à proximité des ArmorStand réinitialisent leur score bouleDeNeige (commande 4)
- Mon ArmorStand est téléporté à la dernière boule de neige créée (commande 5)
On note déjà une faille ici: on est pas sûr que la dernière créée soit la bonne. Correction possible: ajouter un r=5 dans la deuxième partie du /tp.
- Quand mon ArmorStand atteint 20 dans sa valeur bouleDeNeige, je téléporte le joueur. Cette condition n'est possible que si l'ArmorStand n'a pas vu son score réinitialisé par une boule de neige. Comme il est constamment téléporté à côté d'une boule de neige, ce cas n'est possible que lorsqu'il n'y a plus de boule de neige. Mon ArmorStand est donc au point de destination, je peux téléporter le joueur (qui aura lui aussi un score de 20 à bouleDeNeige)
- Le joueur a été téléporté, je peux réinitialiser son score (commande 6)
- L'action est terminée, je peux détruire mon entité en trop (commande 7)
La valeur de "20" comme score max n'est pas choisie par hasard: dans une /fill clock, ça correspond à 1 seconde. En utilisant des horloges plus lentes, il faudrait diminuer cette valeur.
Je le répète: ce n'est pas un exemple facile, mais l'idée est là.
Je compare souvent les commandes à de la programation grafcet qui se base en fait sur des dessins avec des arbres (d'où ma manie d'utiliser un score pour ordonner toutes les actions).