Texte JSON /tellraw : clickEvent, hoverEvent et pourquoi votre message n'apparaît pas
Une simple parenthèse mal placée peut faire échouer tellraw silencieusement. Voici la structure des composants, les actions de clic et de survol qui fonctionnent réellement dans le chat, et la règle d'échappement souvent oubliée.
/tellraw prend un composant de texte JSON, et le mode d'échec est peu utile : un composant malformé ne produit aucun message ni aucune erreur. Tout ce qui suit vise à obtenir la bonne structure du premier coup.
Les trois formes valides
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
La forme de liste est celle à utiliser pour tout ce qui est intéressant, car chaque élément peut avoir son propre formatage. Le formatage du premier élément est hérité par les autres à moins qu'ils ne le remplacent — c'est pourquoi les gens obtiennent un message entier inopinément en or. Commencez une liste par une chaîne vide pour éviter cela :
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Actions de clic
clickEvent prend une action et une valeur :
| Action | Valeur | Note |
|---|---|---|
run_command | /spawn | S'exécute en tant que Joueur, avec son niveau de permission |
suggest_command | /msg Steve | Remplit la boîte de chat, n'envoie pas |
open_url | https://… | Demande confirmation avant d'ouvrir |
copy_to_clipboard | n'importe quel texte | Le plus convivial pour partager des coordonnées |
change_page | numéro de page | Livres uniquement |
run_command est celle qui contient un piège : elle s'exécute avec les permissions du Joueur qui clique, et non celles du Bloc de commande. Un menu qui appelle /gamemode creative ne fait rien pour un Joueur normal.
Actions de survol
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item et show_entity. Notez contents — les anciens guides utilisent value, qui a été remplacé et échoue maintenant silencieusement. Ce simple renommage explique de nombreux infobulles de survol mortes copiées de tutoriels.
L'échappement est la source des problèmes
Le composant entier est un argument de commande, donc les guillemets à l'intérieur doivent survivre à l'analyseur de commandes. Dans un Bloc de commande, tapez-le directement. Dans un fichier de fonction, l'échappement par antislash n'est pas nécessaire. Dans un Livre écrit /give, le JSON est une chaîne à l'intérieur d'une chaîne et nécessite un échappement — c'est le cas qui génère des murs illisibles de \".
Règle générale : si vous imbriquez des composants de texte dans un composant d'objet, construisez-le avec un outil plutôt qu'à la main.
Sélecteurs dans le texte
{"selector":"@p","separator":{"text":", "}}
se résout en noms de Joueurs au moment de l'envoi. {"score":{"name":"@s","objective":"Kills"}} extrait une valeur de tableau de score. Les deux sont préférables à essayer de concaténer les valeurs vous-même.
Les clés de traduction voyagent entre les langues
{"translate":"block.minecraft.crafting_table"}
s'affiche dans la langue de chaque Joueur — 제작대 pour un client coréen, 作業台 pour un client japonais. Pour un serveur multilingue, c'est strictement mieux que de coder en dur l'anglais.
Construisez le composant visuellement, avec les actions de clic et de survol dans leur forme actuelle, dans le Générateur de commandes de texte et d'affichage.