Colorer son MOTD, son chat et ses panneaux sans tout casser

Pourquoi le même code couleur marche dans le chat et transforme votre MOTD en charabia, ce qu'est vraiment le signe section, et comment écrire un formatage qui survit à server.properties, aux configs de plugins et à /tellraw.

6 minutes de lecture

Vous avez écrit un MOTD, redémarré le serveur, et la liste des serveurs affiche §6§lMon Serveur. Ou pire, §6§lMon Serveur.

Rien n'est cassé. Les codes sont bons. Ils sont simplement dans le mauvais encodage pour le fichier où vous les avez mis, et ce seul détail est derrière presque tous les problèmes de formatage.

Ce qu'est réellement un code couleur

Le formatage Minecraft, c'est un caractère suivi d'un autre. Le premier est le signe section, §, soit U+00A7 en Unicode. Le second dit quoi faire :

§6Texte doré§lTexte gras§cRouge §lgras rouge

C'est tout le système. Seize couleurs, cinq styles, une réinitialisation. La liste complète montre chacun d'eux dessiné avec son propre effet appliqué.

Le § est l'enfant à problèmes. Il n'est pas sur votre clavier, il ne survit pas à un copier-coller à travers tous les logiciels, et surtout ce n'est pas un caractère ASCII. Tout ce qui suit en découle.

La règle qui piège tout le monde : la couleur efface le style

Celle-là vaut la peine d'être gravée, parce qu'elle produit silencieusement un résultat qui ressemble à un bug de votre plugin.

Un code couleur efface tous les styles qui le précèdent.

§lGras §cRouge

Ça donne du texte gras, puis du rouge simple. Pas du rouge gras. Le §c a effacé le gras.

Pour obtenir du rouge gras, la couleur passe en premier :

§c§lRouge gras

Les deux mêmes codes, l'ordre inverse, un résultat complètement différent. Si un préfixe de grade a déjà perdu son gras en cours de route sans que vous compreniez pourquoi, c'est ça. Le générateur de codes couleur dessine le résultat en direct, donc vous le voyez arriver au lieu de le déduire.

§r réinitialise tout, couleur et styles compris, aux valeurs par défaut.

Quatre endroits, quatre écritures

Voici la partie que personne ne dit. Le même message s'écrit différemment selon l'endroit où il va.

Chat, panneaux, livres, commandes

Le signe section littéral, tel quel :

§6§lLe Nether §r§7est ouvert

Ça marche dans /say, dans les livres, sur les panneaux, dans la plupart des saisies de commande. Si vous pouvez taper ou coller §, utilisez-le.

server.properties

C'est celui qui produit du charabia, et voici la vraie raison. server.properties est un fichier de propriétés Java, et la documentation de Java pour Properties.load(InputStream) dit que le flux « is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character », et que les caractères hors Latin-1 « are represented in keys and elements using Unicode escapes ».

Un § littéral enregistré par un éditeur en UTF-8 fait deux octets. Le serveur lit ces deux octets comme deux caractères Latin-1. C'est exactement de là que vient le  parasite.

La solution est un échappement Unicode, qui est de l'ASCII pur et survit donc :

motd=\u00A76\u00A7lLe Nether \u00A7r\u00A77est ouvert

Moche, reconnaissable entre mille, et correct. Tous les MOTD à l'air professionnel que vous avez vus sont écrits comme ça.

Le MOTD est dessiné sur deux lignes. Un vrai retour à la ligne ne peut pas apparaître dans un fichier de propriétés, donc la deuxième ligne est un \n échappé, écrit littéralement. Le wiki prévient aussi que « if the MOTD is over 59 characters, the server list may report a communication error » : les codes de formatage ne comptent pas là-dedans, mais tout ce qui se lit, si.

Configuration de plugin

Presque tous les plugins lisent & au lieu de § et le traduisent pour vous, justement parce que & est de l'ASCII et se tape sans problème :

message: '&6&lLe Nether &r&7est ouvert'

Notez les guillemets simples. En YAML, une valeur qui commence par & est une ancre, pas du texte. Il faut la mettre entre guillemets.

/tellraw et les commandes modernes

/tellraw n'accepte aucun code. Il accepte un composant de texte JSON, où les couleurs et les styles sont des champs nommés :

/tellraw @a ["",{"text":"Le Nether ","color":"gold","bold":true},{"text":"est ouvert","color":"gray"}]

Ce "" vide en tête compte bien plus qu'il n'en a l'air. Dans un tableau de composants, le premier élément est le parent et tous les suivants héritent de son formatage. Sans ce parent vide, le second morceau hériterait du bold du premier et sortirait en gras lui aussi.

C'est une erreur vraiment facile à faire à la main, et elle est silencieuse. La commande s'exécute. Elle s'affiche juste mal.

Réussir les quatre d'un coup

Le générateur de codes couleur existe pour ça. Écrivez le message une fois, regardez-le se dessiner dans la police, les couleurs et l'ombre du jeu, et basculez entre les quatre sorties :

  • Chat pour les commandes, les panneaux et les livres
  • server.properties pour le MOTD, échappé
  • Plugin YAML avec les codes &, correctement entre guillemets
  • /tellraw en composant JSON, avec le parent déjà en place

Le texte obfusqué (§k) scintille dans l'aperçu comme il le fait en jeu, donc vous voyez vraiment à quoi ressemble un préfixe en §k à côté de texte normal avant de vous décider.

Les petits détails qui sauvent une soirée

Un § en fin de message. Un signe section sans rien derrière s'affiche comme un caractère perdu. En général, un code a été à moitié effacé.

Les codes inconnus. §z n'est pas un code. Minecraft l'affiche tel quel au lieu de vous prévenir, donc une faute de frappe apparaît discrètement dans votre texte.

La longueur du chat. Le champ de chat vanilla accepte 256 caractères, et les codes comptent dedans. Un message qui passe tant qu'il n'est pas coloré est une façon déroutante de l'apprendre.

La couleur avant le style, à chaque fois. Ça mérite d'être répété, parce que c'est ce qui coûte le plus de temps.

Les couleurs hexadécimales

Java Edition récent accepte les couleurs hexadécimales complètes dans les composants de texte JSON, donc un /tellraw ou un plugin moderne peut utiliser n'importe quelle couleur, pas seulement les seize. Les seize codes § restent la seule chose qui fonctionne dans server.properties, sur les panneaux, et dans l'immense majorité des configs de plugins.

Si vous avez besoin de la couleur exacte de votre marque dans un MOTD, vous ne l'aurez pas. Prenez la plus proche des seize. La liste de référence donne l'hexadécimal et le RVB de chacune, pour comparer sérieusement au lieu de deviner.


Sources : Minecraft Wiki, codes de formatage, Minecraft Wiki, server.properties.

Les outils utilisés dans ce guide