923f48ffc733059bdb12782091aa9aff2a72ee3d
Each domain now has:
- Top-level package: contracts (interfaces, entities, enums, values, events).
- exception/ subpackage: exception hierarchy.
- impl/ subpackage: implementations CR-Core ships by default, swappable by
a game plugin if needed.
Moved (FQN changes for consumers):
- fr.luc.crcore.team.TeamException (+ AlreadyExists, NotFound, Access)
→ fr.luc.crcore.team.exception.*
- fr.luc.crcore.team.TeamServiceImpl, BukkitEventFiringTeamServiceImpl,
InMemoryTeamRepository, SqliteTeamRepository
→ fr.luc.crcore.team.impl.*
- fr.luc.crcore.player.PlayerException, PlayerProfileNotFoundException
→ fr.luc.crcore.player.exception.*
- fr.luc.crcore.player.PlayerProfileServiceImpl,
BukkitEventFiringPlayerProfileServiceImpl,
InMemoryPlayerProfileRepository, SqlitePlayerProfileRepository
→ fr.luc.crcore.player.impl.*
- fr.luc.crcore.message.YamlMessagesService
→ fr.luc.crcore.message.impl.YamlMessagesService
Unchanged top-level packages: database/, command/, common/ (already small
and well-organized). Events stay where they were (already in event/
subpackages).
setup.md tree updated to reflect the new layout. decisions.md logs the
rationale (consumer-facing FQNs, separation between contract and impl).
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. - Bootstrap unique —
new CRCore(this).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
| Fichier | Type | Sujet |
|---|---|---|
| team-class-diagram.puml | Classe | Domaine Team + abstractions communes |
| 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 |
| player-class-diagram.puml | Classe | Domaine Player + scores joueur |
| command-class-diagram.puml | Classe | Framework de commandes (nested) |
| builtin-commands-diagram.puml | Classe | Arbre des commandes /core team ... |
| events-diagram.puml | Classe | Évènements Bukkit team + player |
| database-diagram.puml | Classe | Wrapper SQLite + table builder |
| messages-class-diagram.puml | Classe | Service de messages YAML |
| bootstrap-sequence.puml | Séquence | CRCore.enable() côté plugin de jeu |
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%