6648b3b375b3b7862d2f7df87c2119966a9342f7
Renamed with git mv to preserve history. Refreshed the content to match the current state of the project: - Java 11 build target (was 16) — explicit warning not to reintroduce records / pattern matching / switch expressions. - New three-layer architecture: util/ (always on) + features/ (opt-in via setupX()) + builtin/ (top-level commands). - New features documented: messages, broadcasts, GUI framework, team settings, moderation skeleton. - Diagrams layout: util/ + features/<feature>/ + cross-cutting at root. - File generation pattern documented: <plugin>-messages.yml, <plugin>-broadcasts.yml, <plugin>-team-config.yml in dataFolder. - Maven build + deploy commands and Gitea Packages publishing URL. - Git workflow conventions: HTTPS URL with token, co-author trailer. setup.md tree updated (GEMINI.md → CLAUDE.md reference). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Documentation CR-Core
Ce dossier est la source de vérité du projet. Toutes les décisions, idées, mécaniques, règles et spécifications du noyau sont consignées ici.
Objectif du projet
CR-Core est une librairie Maven réutilisable pour construire des plugins Minecraft Paper 1.16.5. Elle fournit, prêt à l'emploi en une ligne d'initialisation côté plugin de jeu :
- Abstractions communes —
Identifiable,Named,ScoreHolder,AbstractEntity,Repository<T>. - Domaine Team — équipes (nom, tag, couleur, chef, membres, visibilité PUBLIC/PRIVATE, scores nommés, classements, point de spawn), service overridable, exceptions dédiées.
- Domaine Player — profils joueurs (scores nommés, classements individuels), service auto-créant les profils à la demande.
- Framework de commandes —
BaseCommand/SubCommandimbriqués, arguments typés, tab-complétion, permissions, player-only. - Commandes par défaut —
/core team [create|delete|add|remove|join|leave|info|list|transfer|visibility|score|top|setspawn]fonctionnelles out-of-the-box, chacune substituable par sous-classe. - Évènements Bukkit — 9 events team + 3 events player, à écouter avec
@EventHandlercôté plugin de jeu. - Persistance SQLite — wrapper
Database+TableBuilderfluide, repositories SQLite write-through, table custom en 2 lignes pour les plugins downstream. - Messages externalisés —
MessagesServicecharge un seul fichier YAML<plugin>-messages.ymldans le dataFolder du plugin de jeu, avec defaults CR-Core en fallback. L'admin édite un seul fichier, placeholders nommés, codes couleur&natifs. - Broadcasts configurables —
BroadcastServiceroute chaque event CR-Core vers une liste d'audiences (NONE,LEADER,TEAM,ADMIN,ALL) définie dans<plugin>-broadcasts.yml. Séparation routes / templates. Un listener interne wire les 12 events natifs ; les game plugins peuvent broadcast leurs propres events./core reloadrecharge les deux fichiers à chaud. - Paramètres d'équipe —
TeamConfigServicetypé avec cascade per-team → global → default. 8 settings standards (FRIENDLY_FIRE,MAX_SIZE, etc.), étendable. Globaux dans<plugin>-team-config.yml, per-team en SQLite. GUI in-game via/core team settings [team]. - Framework GUI —
AbstractInventoryGui+GuiListenerréutilisable pour tout GUI custom. Détection par holder, clic toujours annulé,GuiItemsbuilder fluide avec codes couleur&. - Modération (skeleton) —
/core admintoggle pour passer en mod mode : snapshot complet du joueur (inv, XP, location, gamemode), vanish, hotbar dotée d'outils (tp joueur, inv spy, freeze, vanish toggle, exit).ModeratorTool+ registry extensibles. Persistance SQLite à venir. - Bootstrap unique —
new CRCore(this, new CRCoreConfig().setupAll()).enable()dans leonEnable()du plugin de jeu, et tout est branché.
Structure de la documentation
README.md— Ce fichier. Vue d'ensemble et index.setup.md— Build, intégration dans un plugin de jeu, exemple d'usage.features.md— Domaines fonctionnels détaillés.decisions.md— Journal des décisions importantes (ADR léger).diagrams/— Diagrammes PlantUML (.puml).
Diagrammes
Organisés en miroir du code : diagrams/util/ pour les utilitaires,
diagrams/features/<feature>/ pour les features, et les diagrammes
transverses à la racine.
Vue d'ensemble (transverse)
| Fichier | Type | Sujet |
|---|---|---|
| bootstrap-sequence.puml | Séquence | CRCore.enable() côté plugin de jeu |
| events-diagram.puml | Classe | Évènements Bukkit team + player (cross-feature) |
util/ — couche utilitaire
| Fichier | Type | Sujet |
|---|---|---|
| command-class-diagram.puml | Classe | Framework de commandes (nested) |
| database-diagram.puml | Classe | Wrapper SQLite + table builder |
| messages-class-diagram.puml | Classe | Service de messages YAML |
| broadcasts-class-diagram.puml | Classe | Service de broadcasts YAML + listener |
| gui-class-diagram.puml | Classe | Framework GUI réutilisable |
features/team/
| Fichier | Type | Sujet |
|---|---|---|
| team-class-diagram.puml | Classe | Domaine Team + abstractions communes |
| team-config-class-diagram.puml | Classe | Paramètres d'équipe (cascade + GUI) |
| builtin-commands-diagram.puml | Classe | Arbre des commandes /core team ... |
| team-create-sequence.puml | Séquence | Création d'une équipe via la commande |
| team-join-sequence.puml | Séquence | Auto-join sur une équipe publique |
| team-create-activity.puml | Activité | Flux de validation à la création |
features/player/
| Fichier | Type | Sujet |
|---|---|---|
| player-class-diagram.puml | Classe | Domaine Player + scores joueur |
features/moderation/
| Fichier | Type | Sujet |
|---|---|---|
| moderation-class-diagram.puml | Classe | Feature modération (skeleton) |
Conventions
- Code : anglais standard, séparation stricte interfaces / enums / classes abstraites / classes concrètes / exceptions.
- Doc & messages joueur : français.
- JavaDoc en français sur les classes publiques et méthodes non triviales.
- Package racine :
fr.luc.crcore. - Classes du noyau non-
final, méthodes-clésprotected, hooksonBefore…/onAfter…et factoriesnew…pour l'override.
Contribuer à la doc
Chaque nouvelle idée, règle, commande ou contrainte discutée doit être ajoutée au fichier approprié, avant ou pendant l'implémentation. La doc précède le code.
Description
Languages
Java
100%