Aidez nous a financer le site: Joignez l'utile à l'agréable et profitez d'FR-Minecraft sans publicités en
devenant VIP ! Ou ajoutez FR-Minecraft dans vos exceptions, nous n'abusons pas des pubs
Comme vous le savez déjà, Dinnerbone est actuellement en train de réécrire le système de gestion des commandes dans Minecraft, il en profite donc pour améliorer la plupart des commandes existantes. Il nous a déjà présenté une partie des changements cet été:
Voici la suite des changements annoncés:
/difficulty
Outre
sa nouvelle syntaxe, la commande peut maintenant être écrite sans paramètre, dans ce cas elle affichera le mode de difficulté actuelle du joueur qui tape la commande.
/effect
Outre
sa nouvelle syntaxe, la commande a maintenant certaines limitations:
-
Certains mobs sont immunisés contre les effets (par exemple l')
-
Il n'est plus possible d'affecté un effet de niveau faible si le mob/joueur possède déjà le même effet mais avec un niveau supérieur
/enchant
La commande a été purement et simplement supprimé, remplacé par la nouvelle commande plus générale
/modifyitem.
/execute
La commande est probablement la commande qui a subit le plus de changement. Elle était déjà une grosse commande très complète, elle le sera maintenant encore plus. Ces dernières semaines les annonces au sujet de cette commande ce sont succédées, des annonces parfois contradictoires, il était donc difficile de s'y retrouvé.
Voyons donc les différentes syntaxes de cette commande d'après les annonces de Dinnerbone aujourd'hui.
Les modificateur de /execute:
La commande execute est maintenant découpé en sous-commande. Chaque sous-commande peut être enchainé pour associé leur effet. Les sous-commandes suivantes permettent de modifier l'identité et des propriétés de l'entité qui exécute la commande:
-
/execute as <entité> <sous-commande(s)> : Exécute une commande en utilisant l'identité de "<entité>" (mais sans reprendre sa position)
-
/execute at <entité> <sous-commande(s)> : Exécute une commande en utilisant la position de "<entité>" (mais sans reprendre son identité)
-
/execute offset <x y z> <sous-commande(s)> : Exécute une commande en utilisant la position de base <x y z>
-
/execute align <axes> <sous-commande(s)> :Exécute une commande après avoir arrondit les coordonnées au centre d'un bloc sur les axes choisit. Le paramètre axe est une combinaison des lettres "x", "y", et "z".
Les conditions sous-commandes de /execute:
Les sous-commande de /execute permettent également d'effectuer des test sur des conditions. Il est possible d’enchaîner les conditions avec plusieurs /execute imbriqué. Le paramètre "if" indique la commande commande sera executé sur la condition est vrai. Le paramètre "unless" indique l'inverse, la commande sera executé sur la condition est fausse. Voici les tests conditionnels disponibles:
-
/execute (if|unless) block <x y z> <block> <sous-commande(s)> : Exécute une commande si (ou sauf si) le bloc à la position <x y z> est bien le bloc indiqué par <block>
-
/execute (if|unless) blocks <début> <fin> <destination> (all|masked) <sous-commande(s)> : Exécute une commande si (ou sauf si) la zone entre les positions <début> et <fin> sont identique à <destination>
-
/execute (if|unless) entity <entity> <sous-commande(s)> : Exécute une commande si (ou sauf si) l'entité <entity> existe (c'est à dire s'il y a 1 ou plusieurs entités qui correspondent au critère)
-
/execute (if|unless) score <cible> <objectif_cible> (<|<=|=|>=|>) <source> <objectif_source> <sous-commande(s)> : Exécute une commande si (ou sauf si) le score de l'entité <cible> score est inférieur/égal/supérieur au score de l'entité <source>
Suppression de /stats:
La commande est supprimé, remplacé par une nouvelle sous-commande de /execute:
/execute store (result|success) <scorebaord> <objectif> <sous-commande(s)>
-
"result" indique qu'on souhaite stoquer le résultat de la commande, cela remplace les anciens paramètres de la commande /stats: AffectedBlocks, AffectedEntities, AffectedItems, QueryResult
-
"success" indique qu'on souhaite enregistrer le nombre de succès de la commande. En général cette valeur vos 0 (echec) ou 1 (succes), mais peut prendre une valeur supérieure pour les commandes multiples (par exemple lorsqu'on utilise le sélecteur )
-
Comme avec la commande /stats, le résultat est enregistré dans l'objectif <objectif> du <scoreboard>
-
L'objectif doit exister (la commande ne le créera pas), par contre il n'est pas obligatoire qu'il possède déjà une valeur (contrairement à /stats)
-
Si une commande échoue ("success" à 0), le "result" sera toujours égal à 0
Enchainement et exécution:
Vous l'avez compris, toutes les conditions et actions ci-dessus peuvent être combiner avant l'execution de la commande finale. Il existe une dernière sous-commande: celle permettant d'exécuter la commande finale ! (car ne l'oublions pas, /execute sert avant tout a exécuter une autre commande):
/execute run <commande>
La sous-commande "run" devra toujours être la dernière sous-commande.
La chaine est une succession de commande /execute, sans besoin de rappeller le mot "execute". Par exemple:
/execute as Tronics at Tronics run say Salut
Chaque changement de couleur indique une sous-commande différente.
Quelques exemples de commande, avec
l'ancienne syntaxe, puis avec
la nouvelle syntaxe:
-
/execute @e ~ ~ ~ detect ~ ~ ~ stone 0 say Stone! -> /execute as @e at @s if block ~ ~ ~ stone run say Stone!
-
/execute @e ~ ~ ~ detect ~ ~ ~ grass summon pig -> /execute at @e if block ~ ~ ~ grass run summon pig
-
/execute @e ~ ~ ~ say Hello! -> /execute as @e run say Hello!
/experience
La commande /experience est nouvelle, elle remplace la commande . La commande /xp n'a cependant pas été supprimé, elle est maintenant un alias de cette nouvelle commande. La syntaxe a en revanche était entièrement revu, plus souple, complète et facile a comprendre:
-
/experience add <joueurs> <nombre> [points|levels] : Ajoute <nombre> de points ou de levels d'xp au <joueurs> désignés
-
/experience set <players> <amount> [points|levels] : Défini le nombre de points ou de levels d'xp du <joueurs> désignés à la valeur <nombre>
-
/experience query <joueur> (points|levels) : Permet de connaitre le nombre de point ou de level d'XP du <joueur> désigné
Quelques précisions:
-
Pour chaque commande il est possible d'indiquer si on souhaite modifier le nombre de point d'XP, ou le level d'XP, pour cela il faut indiqué à la fin de la commande les paramètres "points" ou "levels". Si on ne l'indique pas, le jeu utilisera les points d'XP par défaut.
-
Si le nombre de point ajouté dépasse le niveau maximum du level courant, naturellement le(s) joueur(s) vont gagner un/des level(s).
-
Il est possible de donner des valeurs négatives pour soustraire des points ou levels d'XP
-
Lorsqu'on définit un level, la barre de progression d'XP restera remplit au même pourcentage qu'avant la commande.
/scoreboard
La commande a subit a découpage drastique:
-
est remplacé par la nouvelle commande /tag
-
est remplacé par la nouvelle commande /team
-
est supprimé, il est maintenant possible de faire la même chose en utilisant les nouveaux sélecteurs (cf en fin d'article).
/stopsound
La commande accepte maintenant la valeur spéciale "*" pour stopper tous les sons simultanément.
/trigger
Pas de gros changement pour la commande , mais un nouveau raccourcit: lorsqu'on souhaite simplement incrémenter un compteur, il est possible d'écrire seulement:
/trigger <objective>
Qui est l'équivalent de l'ancienne commande:
/trigger <objective> add 1
/weather
Pas de gros changement non plus pour la commande , mais plus de déterminisme: Si aucune durée n'est spécifié pour la commande, la durée par défaut est maintenant de 5min (auparavent la durée était aléatoire).
Les sélecteurs
Les ont déjà subit plusieurs modifications pour Minecraft 1.13 (
ici et
la). Cette fois Dinnerbone présente de nouvelle possibilité de filtrage:
Filtrage par scoreboard
Il est maintenant possible de filtrer les sélecteurs par score (/scoreboard). Voici la syntaxe:
scores={foo=1,bar=1..5}
Avec:
-
"foo" et "bar" des noms d'objectifs
-
"1" une valeur fixe pour le score
-
"1..5" un interval pour le score
Filtrage par advancement
Il est maintenant également possible de filtrer les sélecteurs par advancement (
progrès). Voici la syntaxe:
advancements={foo=true,bar=false,custom:something={criterion:true}}
Avec:
-
"foo" et "bar" des noms d'advancement interne à Minecraft
-
"custom:something" un advancement issu d'un data pack
-
"true" pour indiquer que le joueur a remporter l'advancement, ou "false" pour indiquer qu'il ne l'a pas encore
-
"{criterion:true}" permet de tester un critère uniquement (pour les advancements avec plusieurs critères, par exemple pour l'advancement "" (l'exploration de tous les biomes), il est possible de sélectionner uniquement un biome en particulier, même si l'advancement n'est pas encore terminé)
Exemple complet d'un nouveau sélecteur:
@p[scores={vie=3},advancements={story/mine_stone=true}]
==> Sélectionne le joueur le plus proche ayant:
-
3 vie (scoreboard avec l'objectif nommé "vie" ayant la valeur "3")
-
gagné le progrès [advancement=story/mine_stone]L'âge de pierre[/advancement]
Si tout se passe comme prévu les commandes pourraient être disponible dans la prochaine snapshot, c'est à dire dès aujourd'hui !
J'aime beaucoup ce qu'est devenu la commande /execute, commande très souple d'utilisation, très complète. Il aura fallu pas mal de test et de négociation avec la communauté, mais le résultat est convainquant je trouve.
Pour les sélecteurs c'est une bonne chose de les éteindre encore, mais je trouve que la syntaxe est mal fichu, ça reste vraiment compliqué, dommage :-( C'est bien pensé en tout cas de permettre de sélectionné les entités en fonction d'un critère d'advancement uniquement, c'est une excellente idée !