-
Notifications
You must be signed in to change notification settings - Fork 28
📦 Les Textes
Pour envoyer un message à un joueur sur OpenMC, nous n'utilisons pas player.sendMessage(). Nous avons développé notre propre système qui formatte correctement les messages afin d'unifier ceux-ci.
Ainsi, lorsque vous voulez envoyer un message à un joueur, il faut procéder de cette manière :
MessagesManager.sendMessage(player, Component.text("le message"), *Prefix, *MessageType, *sound)Ici, *Prefix représente le préfixe qu'il va y avoir devant le message. S'il s'agit d'un message qui n'est pas lié à une grosse feature, vous pouvez utiliser Prefix.OPENMC par défaut. En revanche, si vous voulez votre propre préfixe, il va falloir le créer.
*MessageType est le type que le message que vous allez envoyer va prendre. Il y a le choix entre 4 types : MessageType.SUCCESS, MessageType.INFO, MessageType.WARNING ou MessageType.ERROR.
Enfin, *sound est un boolean qui définit si le jeu doit jouer un son lorsque le joueur reçoit le message. Le son sera différent en fonction de MessageType placé avant. Mettez sur true pour l'activer, sinon, mettez sur false.
Pour ajouter un préfixe personnalisé, il faut se rendre dans la classe fr.openmc.core.utils.text.messages.Prefix et ajouter un nouveau préfixe dans l'énum. Pour ajouter un préfixe, il faut une police particulière, ainsi qu'un gradient personnalisé. Les ressources pour ceux-ci sont données dans le fichier.
Vous l'avez peut-être remarqué, mais les texte envoyé est déposé avant tout dans un Component.text(). Ces components permettent de modifier le texte en profondeur pour le serveur qui tourne sous PaperMC. Lorsque vous utilisez la méthode, pensez bien à vérifier que l'import est bien net.kyori.adventure.text.Component.
Pour OpenMC, on utilise un logger personnalisé qui formatte correcement les messages. Il y a 4 type de logs possibles :
- Success
- Info
- Warn
- Error
Il faut donc utiliser la classe OMCLogger :
OMCLogger.success("Data successfully loaded");
OMCLogger.info("Data loaded");
OMCLogger.warn("Data loaded with difficulty");
OMCLogger.error("Data cannot be loaded");Vous pouvez passer autant d'arguments que vous voulez après le message principal (les stacktraces pour les erreurs par exemple).
Vous pouvez égaement log en formattant avec de belles couleurs :
OMCLogger.successFormatted("Data successfully loaded");
OMCLogger.infoFormatted("Data loaded");
OMCLogger.warnFormatted("Data loaded with difficulty");
OMCLogger.errorFormatted("Data cannot be loaded");Un système de traductions a été codé et permet de pouvoir envoyer des messages dans toutes les langues sans tout recoder à chaque fois.
Pour faire un message traduit, il faut se rendre dans le dossier resources/translations, selectionner la langue dans laquelle vous allez écrire votre message (ici, default = français), puis, en fonction de la feature, sélectionner ou créer un fichier adapté, portant le nom de la feature.
Pour créer une clé de traduction, il suffit d'écrire à quel message votre clé renvoie, exemple :
feature.city.menu.main.name=Menu des villesIci, le clé (avant le =) décrit précisemment à quel texte elle renvoie (dans ce cas, le nom du menu principal des villes). Si vous regardez dans les fichiers, les traductions sont organisées et classées en fonction de leur utilités (les menus, les commandes, les erreurs, ...).
Pour utiliser une clé de traduction dans le code, il suffit d'utiliser le système déjà codé :
Component menuName = TranslationsManager.translate("feature.city.menu.main.name");Pour obtenir un String depuis la translation, vous pouvez faire :
String menuNameStr = TranslationsManager.translationString("feature.city.menu.main.name");Pour mettre des arguments changeables dans vos traductions (nombre d'items, ...), il faut le noter dans vos fichiers properties :
feature.city.menu.main.cityName=Menu de la ville %1§s%1§s représente l'argument que vous allez passer dans le code :
Component menuCityName = TranslationsManager.translate("feature.city.menu.main.cityName", city.getName());Vous passer chaque paramètre en plus après avoir passé la clé de traduction. Vous pouvez mettre autant de paramètres que vous voulez. En revanche, à chaque nouveau paramètre, il faudra incémenter le compteur dans les properties. Avec 2 paramètres, on aura donc %1§s pour le 1er passé dans le code et %2§s pour le deuxième, et ainsi de suite...
Ne mettez surtout pas des couleurs mini message (ex. ) autour d'un argument, l'argument ne prendra jamais la couleur, il suffit d'hardcoder la couleur dans le component de l'argument
Pour traduire dans d'autres langues, il faut, si besoin, créer un dossier pour la langue dans resources/translations ainsi que le le fichier avec le nom de la feature. Les traductions peuvent être faites avec l'IA, tant que quelqu'un revérifie derrière qu'elle n'a pas fait n'importe quoi, et teste bien les messages.