Chat Builder

Cree des messages chat riches avec une fluent API : couleurs, gras, italique, liens cliquables, commandes au clic, hover, et pagination.

fr.eri.eriapi.chat Forge 1.12.2 Java 8

Introduction

Le Chat Builder est le module d'EriAPI dedie a la creation de messages chat avances. En vanilla Minecraft, envoyer un message colore avec un lien cliquable necessite de manipuler directement les ITextComponent, les Style et les ClickEvent — c'est verbeux et difficile a lire.

Avec EriAPI, tu fais tout ca en une seule chaine de methodes, lisible comme une phrase.

Ce que permet le Chat Builder

  • Messages multicolores avec formatage (gras, italique, souligne, barre, obfusque)
  • Segments cliquables : executer une commande ou suggerer du texte
  • Segments avec lien web ouvrant le navigateur
  • Texte au survol (hover) sur chaque segment
  • Envoi a un joueur, plusieurs joueurs, ou en broadcast
  • Pagination automatique avec boutons de navigation generees
Package : fr.eri.eriapi.chat

Toutes les classes du Chat Builder se trouvent dans le package fr.eri.eriapi.chat. Importe les classes dont tu as besoin : EriChat, ChatPaginator.

EriChat — Builder fluent

EriChat est le point d'entree principal du Chat Builder. Tu commences toujours par EriChat.create(), puis tu enchaines les segments de texte et leurs styles, et tu termines par un envoi (.to(player) ou .broadcast()).

Message simple colore

Chaque appel a .text() commence un nouveau segment. Les methodes de style qui suivent s'appliquent uniquement a ce segment.

Java — Message simple colore
// Message simple colore
EriChat.create()
    .text("[INFO] ").color(TextFormatting.GOLD).bold()
    .text("Bienvenue sur le serveur !").color(TextFormatting.WHITE)
    .to(player);

Message avec liens cliquables

Utilise .command() pour executer une commande au clic, .url() pour ouvrir un site web, et .hover() pour afficher un texte au survol.

Java — Segments cliquables
// Message cliquable
EriChat.create()
    .text("[Teleport] ").color(TextFormatting.GREEN)
        .command("/tp spawn").hover("Cliquez pour vous teleporter")
    .text("[Site Web] ").color(TextFormatting.AQUA)
        .url("https://example.com").hover("Ouvrir le site")
    .to(player);

Broadcast a tous les joueurs

.broadcast() envoie le message a tous les joueurs connectes sur le serveur, sans avoir besoin de specifier un destinataire.

Java — Broadcast
// Broadcast a tous
EriChat.create()
    .text("[Annonce] ").color(TextFormatting.RED).bold()
    .text("Redemarrage dans 5 minutes.").color(TextFormatting.YELLOW)
    .broadcast();

Reference des methodes

Fluent API — toutes les methodes retournent this

Tu peux enchainer autant de methodes que tu veux sur le meme builder sans interruption.

Methode Description
create() Cree une nouvelle instance du builder. Point d'entree obligatoire.
text(String) Commence un nouveau segment avec le texte donne. Les styles suivants s'appliquent a ce segment.
color(TextFormatting) Definit la couleur du segment courant. Utilise les constantes TextFormatting de Forge.
bold() Met le segment courant en gras.
italic() Met le segment courant en italique.
underline() Souligne le segment courant.
strikethrough() Barre le segment courant.
obfuscated() Applique l'effet obfusque (caracteres aleatoires clignotants) au segment courant.
command(String) Au clic sur le segment, execute la commande donnee. Exemple : .command("/tp spawn").
suggest(String) Au clic, pre-remplit la barre de chat avec le texte donne sans l'executer.
url(String) Au clic, ouvre l'URL dans le navigateur par defaut du joueur.
hover(String) Affiche le texte donne au survol du segment.
build() Construit et retourne l'ITextComponent final sans l'envoyer. Utile si tu veux le manipuler toi-meme.
to(EntityPlayer) Envoie le message au joueur specifie.
to(EntityPlayer...) Envoie le message a plusieurs joueurs en meme temps (varargs).
broadcast() Envoie le message a tous les joueurs connectes sur le serveur.

ChatSegment — Segment interne

Un ChatSegment represente un morceau de texte avec son propre style (couleur, gras, italique, action au clic, hover). C'est la brique interne du Chat Builder.

Chaque appel a .text(String) sur le builder cree un nouveau ChatSegment. Les methodes de style qui suivent (.color(), .bold(), .command(), .hover(), etc.) configurent le segment courant — c'est-a-dire le dernier cree.

Usage interne — tu n'instancies pas ChatSegment directement

Tu n'as jamais besoin d'ecrire new ChatSegment(...) dans ton code. Les segments sont crees et geres automatiquement par EriChat. Lors du build, chaque segment est converti en TextComponentString avec son Style Forge configure.

Cycle de vie d'un segment

  1. Tu appelles .text("mon texte") sur le builder — un ChatSegment est cree.
  2. Tu chaines des methodes de style — elles configurent ce segment.
  3. Tu rappelles .text("autre texte") — un nouveau segment est cree. Les styles suivants n'affectent plus le precedent.
  4. Tu appelles .build() ou .to(player) — tous les segments sont assembles en un ITextComponent avec des siblings.
Java — Comprendre les segments
EriChat.create()
    // Segment 1 : "[Prefix] " en or gras
    .text("[Prefix] ").color(TextFormatting.GOLD).bold()
    // Segment 2 : "Nom " en blanc
    .text("Nom ").color(TextFormatting.WHITE)
    // Segment 3 : "[Action]" en vert, cliquable
    .text("[Action]").color(TextFormatting.GREEN).command("/action").hover("Cliquer ici")
    .to(player);
// -> Produit un TextComponentString avec 3 siblings

ChatPaginator — Pagination

ChatPaginator permet d'afficher une liste de lignes avec une navigation par pages directement dans le chat Minecraft. Les boutons << Prev et Next >> sont generes automatiquement et executent une commande pour naviguer entre les pages.

Exemple de base

Java — ChatPaginator
ChatPaginator paginator = ChatPaginator.create("/mycommand page")
    .title("Liste des joueurs")
    .linesPerPage(8)
    .headerColor(TextFormatting.GOLD);

for (String name : playerNames) {
    paginator.add(name);
}

paginator.send(player, 1); // affiche page 1

Navigation automatique

Le ChatPaginator genere automatiquement une barre de navigation a la fin de chaque page. Si la commande de base est /mycommand page, les boutons generent les commandes /mycommand page 1, /mycommand page 2, etc.

La barre de navigation n'affiche << Prev que si une page precedente existe, et Next >> que si une page suivante existe.

Java — Commande de navigation integree
// Dans ta commande, tu recuperes le numero de page depuis les args
public void execute(MinecraftServer server, ICommandSender sender, String[] args) {
    EntityPlayer player = (EntityPlayer) sender;
    int page = args.length > 1 ? Integer.parseInt(args[1]) : 1;

    ChatPaginator paginator = ChatPaginator.create("/malist page")
        .title("Ma Liste")
        .linesPerPage(8)
        .headerColor(TextFormatting.AQUA)
        .lineColor(TextFormatting.WHITE)
        .navColor(TextFormatting.YELLOW);

    for (String entry : myList) {
        paginator.add(entry);
    }

    paginator.send(player, page);
}

Reference des methodes

Methode Description
create(String commandBase) Cree un nouveau paginator. commandBase est le prefixe de commande pour la navigation, ex. "/malist page".
title(String) Definit le titre affiche en en-tete de chaque page.
linesPerPage(int) Nombre de lignes de contenu par page (hors en-tete et barre de navigation). Par defaut : 8.
headerColor(TextFormatting) Couleur du titre et des separateurs d'en-tete.
lineColor(TextFormatting) Couleur des lignes de contenu.
navColor(TextFormatting) Couleur des boutons de navigation (<< Prev / Next >>).
add(String) Ajoute une ligne de contenu a la liste.
addAll(List<String>) Ajoute toutes les lignes d'une liste en une seule fois.
getPageCount() Retourne le nombre total de pages calculees d'apres le contenu et linesPerPage.
send(EntityPlayer, int page) Envoie la page specifiee au joueur. Si la page est hors limites, rien n'est envoye.
Numerotation des pages

Les pages commencent a 1 (pas 0). Appeler send(player, 0) ou un numero superieur au nombre de pages ne produit aucun effet.

Exemple complet

Voici un exemple concret d'utilisation du Chat Builder dans un contexte RPG : notification de montee de niveau avec un lien cliquable vers les competences du joueur.

Java — Message RPG riche
// Message RPG riche
EriChat.create()
    .text("★ ").color(TextFormatting.GOLD)
    .text("Vous avez monte au ").color(TextFormatting.WHITE)
    .text("Niveau 10").color(TextFormatting.GREEN).bold()
    .text(" ! ").color(TextFormatting.WHITE)
    .text("[Competences]").color(TextFormatting.AQUA).underline()
        .command("/skills").hover("Voir vos competences")
    .to(player);

Et voici comment combiner le Chat Builder avec un ChatPaginator pour afficher un classement de joueurs pagine, accessible via une commande :

Java — Classement pagine complet
import fr.eri.eriapi.chat.EriChat;
import fr.eri.eriapi.chat.ChatPaginator;
import net.minecraft.util.text.TextFormatting;

// Dans ta commande /top [page]
public void execute(MinecraftServer server, ICommandSender sender, String[] args) {
    if (!(sender instanceof EntityPlayer)) return;
    EntityPlayer player = (EntityPlayer) sender;
    int page = args.length > 0 ? Integer.parseInt(args[0]) : 1;

    // Annonce l'ouverture du classement
    EriChat.create()
        .text("▼ ").color(TextFormatting.GOLD)
        .text("Classement global").color(TextFormatting.YELLOW).bold()
        .text(" ▼").color(TextFormatting.GOLD)
        .to(player);

    // Construction du paginator
    List<String> ranking = getRankingFromDatabase(); // ta methode

    ChatPaginator paginator = ChatPaginator.create("/top")
        .title("Top Joueurs")
        .linesPerPage(8)
        .headerColor(TextFormatting.GOLD)
        .lineColor(TextFormatting.WHITE)
        .navColor(TextFormatting.YELLOW)
        .addAll(ranking);

    paginator.send(player, page);
}
Conseil — Combiner EriChat et le Command Framework

Le Chat Builder fonctionne parfaitement avec le Command Framework d'EriAPI. Utilise le Command Framework pour parser les arguments de page, et le Chat Builder pour afficher les resultats.