Cet article fait partie d’une série servant à enseigner l’art du développement sur Minecraft. Vous pourrez retrouver l’introduction et le sommaire en cliquant ici.
Après avoir parlé des différents objets et de la façon d’exécuter les commandes sur ces derniers, nous allons voir comment regrouper les entités qui nous intéressent de façon totalement personnalisée, afin d’appliquer des actions sur ce groupe.
Il existe énormément de possibilités à travers les sélecteurs pour faire cela car il suffit que toutes les entités qui nous intéressent possèdent une caractéristique en commun (position, nom, type…). Mais le fait de passer par tout cela afin d’appliquer des actions à nos entités peut vite devenir contraignant. Supposons par exemple que nous souhaitions exécuter sur tous les moutons rose ayant pour nom “Beep”, se trouvant à la hauteur 70 et ayant une rotation en X comprise entre 50 et 65 une série de commandes, voici ce que cela pourrait donner :
/execute as @e[type=sheep,nbt={Color:6},name=”Beep”,y=70,dy=0,x_rotation=50..65] run say Je suis
/execute as @e[type=sheep,nbt={Color:6},name=Beep,y=70,dy=0,x_rotation=50..65] run say un mouton
/execute as @e[type=sheep,nbt={Color:6},name=Beep,y=70,dy=0,x_rotation=50..65] run say rose
Nous pouvons constater une chose : notre sélecteur est très long !
Cela peut poser plusieurs problèmes comme le fait que ce genre de commandes est difficile à lire, répétitif (et donc faisant perdre du temps) et donc difficile à déboguer. Afin de palier à ce problème, nous pouvons utiliser deux solutions différentes, apportant chacun leur lot d’avantages : les Teams, et les Tags.
Les Teams
Les Teams (ou équipe en français) permettent de réunir les entités au sein d’une (et une seule) équipe. Cette dernière peut posséder des propriétés particulières comme les dégâts aux alliés désactivés, le fait de voir les alliés invisibles, pouvoir leur passer au traver sans être génés par leur hitbox et même modifier la couleur du pseudo.
Dans le cas de notre petit exemple, ça donnait ça:
/team join MoutonRose @e[type=sheep,nbt={Color:6},name=Beep,y=70,dy=0,x_rotation=50..65]
/execute as @e[team=MoutonRose] run say Je suis
/execute as @e[team=MoutonRose] run say un mouton
/execute as @e[team=MoutonRose] run say rose
Ah ! Tout de suite, on y voit plus clair ! Certain se diront que c’est de l’ordre du détail, mais croyez-nous sur parole, quand vous relirez voire que vous déboguerez tous vos systèmes (qui seront parfois très gros), vos yeux vous remercieront d’avoir fait cet effort.
Certes, il serait très simple de ne pas passer par une team comme on a pu le voir dans l’exemple juste avant. Cependant là où les teams (et les tags) deviennent vraiment intéressant, c’est qu’il persistent jusqu’à ce que vous les retirez (ou que l’entité soit détruite) et qu’ils ne sont pas limités (si votre groupe doit être constitué des entités nommées “Jean” et des entitées nommées “Jacques” vous ne pourrez pas faire un sélecteur prenant ces deux noms. Vous serez donc obligé de dupliquer toutes vos commandes à moins d’utiliser ces teams et tags.
Pour ajouter ou retirer une entité dans un groupe, il vous suffit d’utiliser la commande:
/team <join/leave> <Équipe> <Entité>
On a parlé tout à l’heure de propriété des teams, mais comment les modifier ? Pour cela vous pourrez utiliser la commande:
/team modify <Équipe> <Propriété> <Valeur>
Propriétés:
Propriété |
Valeur |
Description |
color |
black, dark_blue, dark_green, dark_aqua, dark_red, dark_purple, gold, gray, dark_gray, blue, green, aqua, red, light_purple, yellow, white, reset |
Permet de définir la couleur de l’équipe (et donc du pseudo de l’entité). |
friendlyFire |
true, false |
Permet ou non aux joueurs d’une même équipe de s’infliger mutuellement des dégâts. |
seeFriendlyInvisibles |
true, false |
Permet ou non aux joueurs d’une même équipe de voir si l’un d’eux est invisible. Le joueur en question paraîtra alors transparent aux yeux des autres membres. |
collisionRule |
always, never, pushOtherTeams, pushOwnTeam |
Permet de définir la règle de collision si collision il y a entre les entités appartenant à des équipes. (toujours activé, jamais, seulement entre les entités n’étant pas de la même équipe, seulement entre les entités étant dans la même équipe). |
deathMessageVisibility |
alway, never, hideForOtherTeams, hideForOwnTeam |
Permet de cacher ou non les messages de mort par rapport à l’équipe (toujours les cacher, jamais, cacher pour les autres équipes, cacher pour sa propre équipe). |
nametagVisibility |
alway, never, hideForOtherTeams, hideForOwnTeam |
Permet de cacher le nametag (pseudo au-dessus de la tête du joueur) par rapport à l’équipe. Les valeurs sont les mêmes que deathMessageVisibility. |
displayName |
<valeur json> |
Permet de changer le nom d’affichage de l’équipe (peut être différent du nom d’usage dans les commandes). Comme la valeur est en JSON, permet de définir des couleurs et autres mises en forme (voir chapitre sur le JSON) |
prefix |
<valeur json> |
Permet de changer le préfixe d’une équipe. Ce préfixe se placera devant le pseudo du joueur à l’affichage de ce dernier (chat, liste…). La valeur est du JSON. |
suffix |
<valeur json> |
Permet de changer le suffixe d’une équipe. Ce suffixe se placera derrière le pseudo du joueur à l’affichage de ce dernier (chat, liste…). La valeur est du JSON. |
Les tags
Les Tags (ou étiquette en français) permettent d’assigner une entité à un ou plusieurs groupes. Leur fonctionnement est on ne peut plus simple: si l’entité possède le tag (une simple chaine de caractère), elle appartient au groupe, sinon… non. Contrairement aux teams, le fait de posséder un tag ne permet pas d’avoir des propriétés particulières (auquel cas ces dernières pourraient entrer en conflit si l’entité possède plusieurs tags qui donneraient des propriétés incompatibles). Ils permettent juste l’identification rapide des entités d’un même groupe.
/tag @e[type=sheep,nbt={Color:6},name=Beep,y=70,dy=0,x_rotation=50..65] add MoutonRose
/execute as @e[tag=MoutonRose] run say Je suis
/execute as @e[tag=MoutonRose] run say un mouton
/execute as @e[tag=MoutonRose] run say rose
Tout comme pour les Teams, les Tags perdureront sur l’entité jusqu’à ce que l’entité meurt ou que l’on décide de le supprimer.
Voici donc la structure de la commande :
/tag <Entité> <add|remove> <Tag>
/tag <Entité> list
L’argument “list” permet de lister tous les tags que possèdent l’entité spécifiée, très utile pour déboguer !