Description
Tu es un développeur Java senior spécialisé PaperMC.
Je veux un plugin AVANCÉ++, propre, optimisé, vivant, digne de 2026, pas un “MVP”.
Tu dois coder entièrement un plugin appelé ManagerPlugin selon les règles ci‑dessous.
0. RÈGLES GÉNÉRALES
Aucune simplification : pas de “version de base”, pas “à adapter”. Tu implémentes tout ce qui est demandé.
Aucun pseudo‑code : pas de // TODO, pas de ..., pas de fonctions vides.
Tout le code montré doit être réel, compilable.
Langue :
Messages uniquement en français.
Pas de multilingue joueur.
Messages externalisés dans messages.yml mais FR only.
Qualité :
Java 21, style moderne mais lisible (records si utile, switch expressions, Streams raisonnables).
Architecture modulaire, classes claires, SOLID.
Pas d’IO disque lourde sur le main thread.
Utilisation correcte des tâches async/sync.
Caching des données joueurs.
1. COMMANDES, ALIAS, HELP, TAB – PRIORITÉ ABSOLUE
Je veux un système de commandes extrêmement ergonomique et guidé, avec beaucoup d’alias et une tab‑completion avancée.
1.1 Noms de commandes
Interdit de baser l’interface joueur sur des trucs du style managerplugin:afk.
Les commandes doivent être courtes et propres, par ex. :
Commande centrale : /mp (principale) + alias (/manager, /managerplugin, /mgr, etc.).
Modules dédiés :
Grades : /rank, /grade, /rang, etc.
AFK : /afk, etc.
MP : /msg, /m, /pm, etc.
Reports joueurs : /report, etc.
Reports staff : /reportadmin, etc.
Titres : /title, /titre, etc.
Canaux : /channel, /canal, etc.
Chaque gros module doit être accessible à la fois :
via sa commande dédiée (/afk, /report, /rank, …),
et via des sous‑commandes de /mp (ex. /mp afk, /mp reportadmin, /mp rank, …).
1.2 Alias
Pour chaque commande principale, tu dois définir beaucoup d’alias (FR + EN + abréviations).
Objectif : au moins 8 alias pertinents par commande principale (quand c’est logique).
C’est toi qui proposes ces alias (par ex. pour /msg, /report, /mp, etc.).
Tous les alias doivent être déclarés dans plugin.yml et cohérents avec les messages d’aide.
1.3 Help & guidage
Quand on tape une commande sans arguments :
/mp doit afficher un help très complet ET/OU ouvrir un menu GUI montrant les modules (Grades, AFK, Reports, MP, Titres, BossBar, etc.).
/report sans arguments → ouvre le menu de report joueur.
/reportadmin sans arguments → ouvre le menu staff des reports.
/rank, /title, etc. sans arguments → affichent un help clair (et si possible un menu GUI).
Pour chaque commande principale :
/commande help et /commande ? :
listent les sous‑commandes,
expliquent ce qu’elles font,
donnent au moins 1 exemple d’utilisation.
Les erreurs doivent être explicites (jamais juste “Usage: …”) :
Expliquer ce qui manque + donner l’usage correct.
1.4 Tab‑completion
Tu dois implémenter une tab‑completion intelligente pour toutes les grosses commandes, notamment :
/mp
/rank
/afk (si arguments)
/msg / /reply
/report
/reportadmin
/title
/channel (ou équivalent)
Comportement attendu :
/mp <TAB> → liste les sous‑commandes disponibles selon les permissions (help, reload, rank, title, afk, report, reportadmin, channel, bossbar, etc.).
/reportadmin <TAB> → help, ban, unban, banlist, editmenu, etc.
/rank set <TAB> → joueurs en ligne, puis grades disponibles.
Filtrer par permissions : ne pas proposer des sous‑commandes que le joueur ne peut jamais utiliser.
1.5 plugin.yml
Tu dois fournir un plugin.yml complet avec :
toutes les commandes,
tous leurs alias,
toutes les permissions nécessaires (nom, description FR, default).
2. CE QUE TU DOIS FOURNIR (ORDRE DES RÉPONSES)
Première réponse :
Liste de toutes les commandes (nom principal + alias + permission + résumé + comportement de /cmd et /cmd help).
Fichier pom.xml complet (Paper 1.21.x, Java 21, Maven).
Fichier plugin.yml complet (nom=ManagerPlugin, main, api-version, commandes, alias, permissions).
Réponses suivantes (en plusieurs parties si nécessaire) :
Code Java des modules (classes principales, managers, listeners, commandes, tab‑completion).
Exemples de configs YAML :
config.yml, grades.yml, scoreboards.yml, bossbar.yml, reports.yml, afk.yml, messages.yml, channels.yml (si besoin).
Aucun TODO, aucun “à compléter”.
Si tu es limité par la taille d’un message, découpe en Partie 1/3, 2/3, 3/3, mais reste exhaustif.
3. CONTEXTE TECHNIQUE
Plateforme : Paper pour Minecraft 1.21.x.
Langage : Java 21.
Build : Maven.
Dépendances : uniquement l’API Paper/Bukkit (et Adventure intégrée).
Aucun plugin externe (pas LuckPerms, pas Essentials, etc.).
Nom du plugin : ManagerPlugin.
But : remplacer plusieurs plugins classiques en centralisant la gestion joueurs :
grades & permissions internes,
chat & canaux,
tablist & nametags & scoreboards,
AFK,
reports (menus avancés),
titres au‑dessus des joueurs,
BossBar publicitaire,
données joueurs persistantes,
outils staff (social spy, canaux privés, bypass AFK, etc.).
4. ARCHITECTURE
Classe principale : fr.monnom.managerplugin.ManagerPlugin (extends JavaPlugin).
Architecture modulaire :
Modules :
Grades / Subgrades
Permissions internes
Chat & canaux & MP & mentions
Tablist
Scoreboard
Nametag & Titres
AFK
Reports (joueurs & admin)
BossBar publicitaire
Données joueurs (storage & cache)
Commandes / Reload / Outils admin
Packages recommandés :
fr.monnom.managerplugin.core
fr.monnom.managerplugin.rank
fr.monnom.managerplugin.permission
fr.monnom.managerplugin.chat
fr.monnom.managerplugin.afk
fr.monnom.managerplugin.report
fr.monnom.managerplugin.scoreboard
fr.monnom.managerplugin.tablist
fr.monnom.managerplugin.title
fr.monnom.managerplugin.bossbar
fr.monnom.managerplugin.data
fr.monnom.managerplugin.command
…
Managers :
RankManager, PermissionManager, ChatManager,
ReportManager, AfkManager, BossBarManager,
PlayerDataManager, ScoreboardManager, TablistManager, etc.
PlayerData :
Par joueur : UUID, grade principal, subgrades, titres possédés + actif, préférences (MP activés, notifications, etc.).
Stockage local (YAML/JSON ou autre) + cache mémoire.
Sauvegarde asynchrone.
Reload :
Une commande reload (ex. /mp reload) recharge :
grades, chat, scoreboard, bossbar, AFK, reports, etc.
Sans redémarrage du serveur, sans casser les PlayerData ni les tasks.
5. FONCTIONNALITÉS PAR MODULE (SYNTHÈSE)
5.1 Grades
Système interne, un seul grade principal par joueur.
Attributs : id, nom affiché, préfixe, emoji, couleur, priorité.
Hiérarchie fixe (ordre strict, du plus haut au plus bas) :
Fondateur, Co-Fondateur, Responsable, Super-Moderateur,
Super-Developpeur, Super-Graphiste, Super-Architecte, Super-Compositeur,
Moderateur, Developpeur, Graphiste, Architecte, Compositeur, Contributeur,
Mini-Moderateur, Mini-Developpeur, Mini-Graphiste, Mini-Architecte,
Mini-Compositeur, Mini-Contributeur, Super-Influenceur, Influenceur,
Partenaire, VIP+, Mini-Influenceur, VIP, Super-Joueur, Joueur.
Premier login : grade Joueur attribué automatiquement.
Changement de grade → mise à jour immédiate : tablist, scoreboard, chat, nametag, permissions.
5.2 Subgrades
Invisibles, aucun affichage.
Ajout/suppression de permissions spécifiques :
rôles temporaires, accès staff, bypass, features spéciales.
Plusieurs subgrades possibles par joueur (avec possibilité de durée, par monde, etc. si tu juge pertinent).
5.3 Permissions internes
Système de permissions maison, basé sur :
grades + subgrades,
listes de permissions accordées / retirées,
scope global ou par monde.
Au login / changement de monde :
recalcul via PermissionAttachment, optimisé.
Autres plugins utilisent player.hasPermission() normalement.
Staff : certains peuvent voir tout le chat, même hors canal/monde.
5.4 Tablist
ManagerPlugin contrôle entièrement la tablist.
Format : emoji + 「NomCompletDuGrade」 + Pseudo
(ex. 👑「Fondateur」Pseudo).
Ordre : priorité de grade, puis pseudo.
Gérer proprement la longueur (via teams / prefix/suffix) pour que tout soit visible.
Staff en spectateur dans le Lobby : affichés comme en survie/creative (sans gris/italique).
AFK :
suffixe AFK gris italique dans le tab,
statut mis à jour par /afk + AFK auto (voir 5.10).
Séparation par monde / groupe de mondes.
5.5 Scoreboard
1 scoreboard par joueur.
Scoreboard global + possibilité de scoreboards par monde (ex. Lobby).
Affichage du grade au même format que la tablist.
Animations de couleurs cycliques (tick configurable).
Infos possibles : grade, pseudo, monde, joueurs connectés, infos serveur, etc.
Auto update sur : changement de grade/monde, AFK, reload.
5.6 Chat, Nametag, Titres
Chat formaté du type :
%rank_prefix% %title% %player% à %time% (%channel%): %icons%%rank_color%%message%
Icônes cliquables :
✉ → préremplit /msg.
@ → préremplit @ + joue un son de mention à la cible.
☒ → ouvre le menu de report sur le joueur.
» → montre le texte original (MiniMessage / brut).
Couleurs :
& codes + HEX,
accès réservé à certains grades (ex. VIP+).
Chat séparé par monde/groupe de mondes (y compris morts/succès).
MP :
même style que chat global,
format distinct pour “De” / “À”,
social spy pour staff.
Mentions @Pseudo :
son configurable joué pour le joueur cible uniquement.
Messages consécutifs :
si même joueur envoie plusieurs messages rapidement :
premier avec header complet,
suivants avec header réduit (juste le texte),
si autre joueur parle ou délai > 3–5 min : header complet à nouveau.
Chat & nametag au‑dessus de la tête :
seulement l’emoji du grade (pas le nom complet).
Titres (au‑dessus du nametag + éventuellement dans le chat) :
commandes pour créer/modifier/supprimer/attribuer/retirer des titres.
5.7 Menu Report
/report :
ouvre un menu GUI avec des raisons prédéfinies, par ex. :
Spam, Flood, Insulte, Pub, Provocation,
Contenu_violent, Contenu_sexuel,
X-Ray, Kill-aura, Auto-click,
Gamemode, Duplication, Double_Compte,
Aimbot, Mods, NoClip, OP, GOD,
Fakelag, Fly, Speed, Teleportation,
Minage_Rapide, Place_Rapide,
NoFall, Anti_Knockback.
boutons :
[CONFIRMER],
[RAISON CUSTOMISÉE] (ferme le menu, saisie dans le chat, annuler pour stop).
après [CONFIRMER] :
menu avec :
Ajouter des détails (vert) → saisie chat,
Ne pas ajouter de détails (gris) → envoi direct,
Retour.
Stockage des reports : cible, auteur, raison, détails, date/heure.
/reportadmin :
menu staff listant les reports (pagination, plus récents en haut),
sous‑commandes :
editmenu, ban, unban, banlist, etc.
certains rangs (SuperStaff) ne peuvent pas être bannis des reports.
5.8 Messages privés
Système de MP complet :
commande principale (/msg + alias),
/reply pour répondre au dernier MP.
Social spy pour staff.
Spy aussi sur le canal Party (chat privé de groupe).
Préférence joueur pour bloquer les MP (avec override staff si permis).
5.9 Canaux de discussion
Au minimum :
global (par défaut),
staff,
party (groupe).
Possibilité d’ajouter d’autres canaux via config.
Joueur ne voit que son canal (sauf staff avec perms spéciales).
Staff peut voir/parler dans plusieurs canaux.
5.10 AFK
AFK auto :
surveille mouvements/interactions/messages,
inactif > 300s → kick avec message FR configurable.
Bypass AFK pour certains joueurs (jamais kick).
Statut AFK modifiable par /afk, suffixe AFK dans le tab, messages clairs.
5.11 BossBar publicitaire
Dans le Lobby :
BossBar qui affiche en boucle des messages :
IP, boutique, events, réseaux sociaux, etc.
Texte, couleur, style, durée configurables.
Animation vivante (progression, changements fluides).
5.12 Données joueurs
Stockage local + cache mémoire :
grade, subgrades, titres, préférences (MP, mentions, etc.).
Sauvegarde asynchrone, chargement à la connexion, nettoyage à la déco.