Si vous manipulez un peu les commandes dans Minecraft, vous connaissez sans doute la commande dont je vais vous parler: le /tellraw. Initialement implantée pour afficher du texte de manière totalement libre, cette commande est devenue de plus en plus riche pour permettre le plus de choses possibles.
Le tutoriel qui suit est complet et peut être lu par un néophyte.
I - Généralités
Tout d'abord, sachez qu'il existe des logiciels permettant de générer des commandes tellraw pré-faites ... C'est sympa, mais vous êtes limité par le logiciel et ça ne vous aide clairement pas à comprendre comment ça marche. On va donc commencer pas à pas avec tout d'abord comment faire un texte basique puis comment utiliser le format json pour exploiter au mieux cette commande. Peut-être que vous finirez pas comprendre pourquoi cette commande est aussi importante.
Si votre objectif avec cette commande est juste d'afficher un texte blanc, sans mise en forme particulière, la commande peut être simplifiée à l'extrême de la manière suivante:
Code (cpp):
/ tellraw @a { "text" : "Le texte à afficher" }
Notez que l'on peut choisir chez qui le texte doit s'afficher, chose qui n'est pas possible avec un /say et le tellraw à l'avantage de ne pas mettre de "[@]" avant votre texte.
Afficher un texte simple et en choisissant chez qui cela doit apparaître, c'est bien et même mieux que le /w et /say réunis. Mais il est possible d'aller beaucoup plus loin grâce au format json. Ce format à l'avantage d'être très simple à utiliser et une fois qu'on comprend son fonctionnement, on peut facilement faire ce qu'on veut.
Dans la commande précédente, vous avez vu que l'on a mis "text" pour signaler que c'était du texte que l'on souhaitait afficher, mais il est possible de remplacer ce "text" par d'autres arguments pour afficher des scores ou les noms des joueurs. En plus de cela, on peut ajouter à ce texte des fonctions pour changer la mise en forme ou encore les actions quand on clique sur ce texte.
II - Mise en forme
Pas trop perdu ? Il est temps de voir comment changer la couleur et utiliser autre chose que du texte dans les commandes tellraw comme des objectifs ou des noms de joueur.
Le texte que vous allez afficher peut être en italique, en gras, souligné, barré, brouillé ou en couleur. Pour cela, il suffit juste de préciser ce que vous voulez entre les accolades de la manière suivante:
Code (cpp):
/ tellraw @a { "text" : "Texte à afficher" ,"color" : "blue" ,"underlined" : true }
Le texte sera donc affiché en bleu et sera souligné.
Voici la liste des couleurs utilisable:
black, dark_blue, dark_green, dark_aqua, dark_red, dark_purple, gold, gray, dark_gray, blue, green, aqua, red, light_purple, yellow
Cliquez pour agrandir...
Et la liste des formats:
underlined (souligné ), strikethrough (barré ), bold (gras ), italic (italique ), obfuscated (texte aléatoire)
Cliquez pour agrandir...
Pour les formats, vous devez à chaque fois mettre "nom du format":true. Par défaut, tout les formats sont sur false et vous n'avez pas besoin d'écrire "nom du format":false sauf dans quelques rares cas.
Astuce: Vous pouvez faire un passage à la ligne dans du code json en ajoutant un \n.
Code (cpp):
/ tellraw @a { "text" : "Ceci est un texte\n sur deux lignes" }
B. Insertion de variable (1.8)
Maintenant, le format json permet aussi d'intégrer un score ou le nom d'un (voire plusieurs) joueur(s).
Pour intégrer un score, la syntaxe est la suivante:
Code (cpp):
/ tellraw @a { "score" : { "objective" : "<objectif>" ,"name" : "<joueur>" } }
Et vous devez remplacer <objectif> par le nom de l'objectif et <joueur> par le nom du joueur dont on doit faire apparaître l'objectif.
Exemple:
Code (cpp):
/ tellraw @a { "score" : { "objective" : "kill" ,"name" : "Mlakuss" } }
La commande affiche alors le nombre de kill du joueur Mlakuss.
Vous pouvez mettre @p à la place du nom du joueur.
Si vous voulez afficher l'objectif de chaque joueur, vous devez mettre un joker '*' à la place du nom du joueur.
Exemple:
Code (cpp):
/ tellraw @a { "score" : { "objective" : "kill" ,"name" : "*" } }
Cette commande affiche à chaque joueur le nombre de monstres qu'il a tué.
Pour intégrer un nom ou plusieurs nom de joueur, l'argument s'appelle selector et fonctionne comme ceci:
Code (cpp):
/ tellraw @a { "selector" : "@p" }
La commande affiche alors le nom du joueur le plus proche.
Vous pouvez aussi écrire @a[score_kill_min=5] pour lister les joueurs ayant plus de 5 à l'objectif "kill". Quand plusieurs joueurs sont "touchés", ils sont affiché comme ceci: "joueur 1, joueur 2 et joueur 3"
C. Une phrase, différents formats
Stop ! S'il faut remplacer le "text" pour afficher le nom d'un joueur ou un score, on fait comment pour afficher un texte et un score ?
Tout simplement, il suffit de faire ce qu'on appelle une concaténation. Ce mot barbare désigne simplement le fait de mettre plusieurs chaînes de caractères dans une seule. Et au lieu de faire trois commandes pour afficher un texte, un nom et un objectif, on met tout dans une seule commande.
La solution la plus simple pour faire cette opération consiste à écrire les différentes accolades et à les mettre dans une liste. Si vous ne comprenez pas, voici un exemple:
Je veux afficher "M. Bidule, le joueur le plus proche de l'arrivée à un score de X" en supposant que l'objectif soit appelé "score"
Pour "M. Bidule", la commande donnerait ceci: {"selector":"@p"}
Pour le texte, on aurait ceci: {"text":" a un score de "}
Et pour le score: {"score":{"name":"@p","obective":"score"}}
Et pour tout mettre dans une seule commande, on a alors ceci:
Code (cpp):
/ tellraw @a [ { "selector" : "@p" } ,{ "text" : " a un score de " } ,{ "score" : { "name" : "@p" ,"obective" : "score" } } ]
Les différents textes sont mis les uns après les autres, séparés par des virgule et le tout est entre crochet pour dire "le tout forme une seule chaîne".
Si jamais vous voulez appliquer une couleur ou une mise en forme dans la première accolade , les accolades suivantes hériteront de la même mise en forme sauf si vous préciser une nouvelle mise en forme / couleur. Si vous voulez que seule la première partie soit soulignée par exemple, vous devrez mettre "underlined:false" dans toutes les accolades sauf la première où vous devrez mettre "underlined:true"
III - Arguments complexes
Un texte qu'on peut afficher avec plusieurs couleurs, dans différents format et en intégrant des noms ou des variables... c'est super chouette, non ? La partie suivante l'est encore plus... mais elle est aussi plus complexe. On va voir comment faire pour rendre un texte vivant, ajouter le possibilité de cliquer dessus ou encore de le traduire. Une toute petite partie sera consacrée au jeu vanilla avec des astuces fonctionnant sur les serveurs, même si vous n'avez pas accès aux commandes.
Il existe trois types d'événement que l'on peut associer à un texte: clickEvent et hoverEvent et insertion (je ne parle pas du dernier, c'est volontaire, les joueurs ont déjà assez de mal à comprendre qu'ils peuvent cliquer sur certains textes alors dire qu'ils peuvent faire shift+clic pour autre chose...). Le premier réalise une action que vous cliquez sur le texte et le second juste lorsque vous passez votre souris sur le texte. Vous ne pouvez mettre qu'un seul clickEvent et qu'un seul hoverEvent par texte.
Les deux événements s'écrivent de la même manière:
Code (cpp):
/ tellraw @a { "text" : "votre texte" ,"hoverEvent" : { "action" : "<action>" ,"value" : "valeur" } ,"clickEvent" : { "action" : "<action>" ,"value" : "valeur" } }
Il vous suffit de remplacer <action> par l'une des actions suivantes et de mettre ce qu'il faut à la palce de valeur.
Le clickEvent permet de faire au choix:
Insérer du texte dans le chat (suggest_command) - Quand vous cliquez sur le texte tout ce qui se trouve dans "valeur" apparaît dans le chat.
Exécuter une commande (run_command) - Exécute la commande située dans "valeur", ne pas oublier le '/'
Ouvrir un lien (open_url) - Ouvre le lien situé dans "valeur" dans votre navigateur. Par défaut, un popup vous demande si vous voulez vraiment ouvrir le lien
Le hoverEvent permet de faire au choix:
Montrer du texte (show_text) - Montre le texte situé dans "valeur"
Montrer un objet (show_item) - Montre l'objet situé dans "valeur" (ex {"id":"minecraft:stone"})
Montrer un succès (show_achievement) - Montre le succès situé dans "valeur"
Montrer une entité (show_entity) - Montre l'entité situé dans "valeur"
Au final, ça revient plus ou moins au même et je vous conseille de toujours utiliser le "show_text", il est beaucoup plus maniable.
Si vous souhaitez mettre un retour à la ligne dans votre show_text, il faut mettre \n. Si vous souhaitez mettre de la couleur, il faut écrire \u00A7 suivi du chiffre ou de la lettre correspondant à la couleur souhaitée. Le \u00A7 correspond au code unicode du caractère paragraphe (§).
Exemple:
Code (cpp):
/ tellraw @a { "text" : "Passe ta souris ici" ,"hoverEvent" : { "action" : "show_text" ,"value" : "Je suis un texte\n sur plusieurs lignes\n \u00A7 6et en couleur!" } }
Le plus simple avec ces exemples, c'est de les recopier et de voir ce qu'ils font en jeu.
Code (cpp):
/ tellraw @a { "text" : "Téléchargez la dernière version de la map" ,"hoverEvent" : { "action" : "show_text" ,"value" : "Cliquez pour être redirigé sur mon site web" } ,clickEvent: { "action" : "open_url" ,"value" : "http://www.google.com" } }
Un exemple de lien pour aller sur un site web.
Code (cpp):
tellraw @a [ { "text" : "Que voulez vous faire ? " } ,{ "color" : "blue" ,"text" : " [Arrêter la pluie] " ,"clickEvent" : { "action" : "run_command" ,"value" : "/weather clear 1000000" } } ,{ "color" : "gold" ,"text" : " [Aller au spawn] " ,"clickEvent" : { "action" : "run_command" ,"value" : "/tp @p 0 64 0" } } ]
Le genre de commande qui peut être pratique pour réaliser des actions régulières.
Dès que vous commencez à avoir des commandes longues, pensez à bien séparer/espacer les différents blocs d'accolades voire à écrire les commandes dans un logiciel comme NotePad++ qui vous permettra de voir directement si vous n'avez pas oublié une accolade ou un crochet.
À la base, je faisais ce tutoriel pour cette partie spécifique. Elle s'adresse aux personnes ayant des gros serveurs ou voulant exporter des maps aventure à travers le monde.
Vous avez sans doute déjà remarqué qu'on pouvait choisir une langue dans les options, non ? Et qu'en fonction de la langue, les textes changeaient. Et bien vous pouvez exploiter ceci avec la commande /tellraw
Code (cpp):
/ tellraw @a { "translate" : "achievement.snipeSkeleton" }
Là on affiche "Duel de snipers" chez ceux qui ont le jeu en français et "Snipers duel" chez ceux qui ont le jeu en anglais.
Si vous voulez utilisez les traductions "vanilla", elles sont toutes ici .
Mais il est aussi possible de créer un pack de ressource avec un fichier .lang pour ajouter vos propres traductions.
Pour une map "français/anglais", vous allez créer deux fichiers .lang: en_US.lang et fr_FR.lang à mettre au bon endroit dans votre pack de ressource.
Dans en_US.lang vous mettrez ceci:
Et dans le fr_FR.lang:
Une fois dans votre map, vous pourrez alors faire:
Code (cpp):
/ tellraw @a { "translate" : "Pomme" }
Et les français verront "Pomme" tandis que les anglais verront "Apple"
Si vous faites
Code (cpp):
/ tellraw @a { "translate" : "Moi pas changer assiette pour fromage" }
Les anglais verront "My tailor is rich" et les français: "Les français sont les meilleurs". Et pour les autres langues, ils verront "Moi pas changer assiette pour fromage" - C'est pour cela que je recommande de mettre les textes en anglais par défaut.
Dans le cas où vous vous retrouvez avec une commande complexe qui doit contenir un texte en json dans un texte en json (on rencontre souvent ceci pour les pancartes) ou tout simplement lorsque vous souhaitez utiliser le caractère guillemet dans votre texte, il faut rajouter une barre oblique inversée.
Exemples:
Code (cpp):
/ tellraw @a { "text" : "Ceci est un mot \" entre guillemets\" " }
/ tellraw @a { "text" : "Cliquez moi" ,"clickEvent" : { "action" : "run_command" ,"value" : "/setblock ~ ~-1 ~ command_block 0 replace {Command:\" Je suis sous tes pieds\" }" } }
Pour les échappements multiples, vous devez augmenter le nombre de barre oblique inversée à chaque fois. (\", \\\", \\\\\", \\\\\\\\\")
Tout les textes dans le chat sont en fait des commandes tellraw complexes fonctionnant à partir du "translate" et certaines contiennent même des événements dont on se sert trop peu souvent.
- Envoyer un message privé
Pour envoyer un message privé, la commande est /w nomDuJoueur, mais vous pouvez aller encore plus vite en cliquant sur le nom du joueur dans le chat.
- Insérer le nom d'un joueur (1.8)
La touche tabulation permet d'auto-compléter le nom d'un joueur quand vous tapez dans le chat, mais il est aussi possible de faire shift+clic sur le nom d'un joueur pour l'insérer dans votre barre d'écriture. Utile pour bannir un joueur qui vient juste de se déconnecter et dont le nom est très long.
- Informations sur les objets
Si vous passez votre souris sur le nom d'un objet dans le chat, vous pourrez voir les enchantements de cet objet. La prochaine fois que votre voisin vous tuera avec son "Arc en mousse ", vous pourrez vérifier sa puissance réelle plutôt que de faire confiance au nom affiché dans le chat.
IV - Du json partout !
Le /tellraw n'est pas la seule commande à utiliser le format json. Il est désormais possible d'utiliser ce merveilleux format pour les titres (/title), les pancartes (via un /blockdata ou un /give) ou encore les livres !
Je laisse donc cette section avec seulements quelques exemples pour que vous puissiez comparer et voir comment cela marche.
Code (cpp):
/ give @p sign 1 0 { BlockEntityTag: { Text1: "[{\" text\" :\" Hey \" ,\" bold\" :true},{\" selector\" :\" @p\" },{\" text\" :\" !\" }]" ,Text2: "{\" text\" :\" \" }" ,Text3: "{\" text\" :\" \" }" ,Text4: "{\" text\" :\" Clique moi!\" ,\" clickEvent\" :{\" action\" :\" run_command\" ,\" value\" :\" tellraw @p {\\ \" text\\ \" :\\ \" Essayes de cliquer là\\ \" ,\\ \" color\\ \" :\\ \" gold\\ \" ,\\ \" hoverEvent\\ \" :{\\ \" action\\ \" :\\ \" show_text\\ \" ,\\ \" value\\ \" :\\ \" \u00A7 5Oseras-tu cliquer ?\\ \" },\\ \" clickEvent\\ \" :{\\ \" action\\ \" :\\ \" open_url\\ \" ,\\ \" value\\ \" :\\ \" http://forum.minecraft-france.fr/threads/le-mashup-de-tuto-by-mlakuss.22916/\\ \" }}\" }}" } }
Les pancartes
Les pancartes peuvent utiliser le json mais faites très attention. Le bloc pancarte utilise 4 tags différents, un pour chaque ligne, appelés Text1, Text2, Text3 et Text4. Ces tags sont des chaînes de caractères et doivent donc être entre guillemet. Cela siginifie donc que vous devrez mettre un échappement supplémentaire dans tout votre texte (cf. la commande ci-dessus).
Les livres
Les livres possèdent une action supplémentaire dans les clickEvent, le "change_page". En valeur, il vous suffit de mettre le numéro d'une page et lorsque vous cliquez dessus, vous arrivez directement à la page indiquée. Pratique pour faire des menus.
En conclusion
Le /tellraw est fantastique et permet de presque tout faire (sauf le café) et c'est aussi cette commande qui a marquée l'arrivée du json dans Minecraft. Sachez que presque tout est au format json désormais dans le jeu et avoir un idée de la syntaxe est une excellente chose (la liste des joueurs bannis, le fichier contenant la version du jeu, certains fichiers pour les packs de ressources... tout ça, c'est en json maintenant !). La commande /title utilise aussi du texte au format json et ce que vous avez pu lire là est globalement valable pour le /title.
Mojang envisage même de supprimer le caractère '§' pour du json mais là, ça risque de prendre du temps. Le '§' a un nombre assez incroyable d'avantages et ça serait se tirer une balle dans le pied que de le retirer maintenant.
Utilisateurs de NotePad, jetez un oeil à ce plugin .
Passage de Minecraft 1.8 à Minecraft 1.9: Pourquoi les commandes ne fonctionnent plus ?
En 1.9, le json lenient n'est plus possible, il faut utiliser du json strict. Tous les textes, y compris les arguments doivent être entre guillemets. Les apostrophes ne fonctionnent plus pour faire de l'échappement. Skyliner a tenté de faire un outil pour convertir les commandes,
disponible ici .