# 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`. - **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` / `SubCommand` imbriqué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 `@EventHandler` côté plugin de jeu. - **Persistance SQLite** — wrapper `Database` + `TableBuilder` fluide, repositories SQLite write-through, table custom en 2 lignes pour les plugins downstream. - **Bootstrap unique** — `new CRCore(this).enable()` dans le `onEnable()` 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](diagrams/team-class-diagram.puml) | Classe | Domaine Team + abstractions communes | | [team-create-sequence.puml](diagrams/team-create-sequence.puml) | Séquence | Création d'une équipe via la commande | | [team-join-sequence.puml](diagrams/team-join-sequence.puml) | Séquence | Auto-join sur une équipe publique | | [team-create-activity.puml](diagrams/team-create-activity.puml) | Activité | Flux de validation à la création | | [player-class-diagram.puml](diagrams/player-class-diagram.puml) | Classe | Domaine Player + scores joueur | | [command-class-diagram.puml](diagrams/command-class-diagram.puml) | Classe | Framework de commandes (nested) | | [builtin-commands-diagram.puml](diagrams/builtin-commands-diagram.puml) | Classe | Arbre des commandes `/core team ...` | | [events-diagram.puml](diagrams/events-diagram.puml) | Classe | Évènements Bukkit team + player | | [database-diagram.puml](diagrams/database-diagram.puml) | Classe | Wrapper SQLite + table builder | | [bootstrap-sequence.puml](diagrams/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és `protected`, hooks `onBefore…`/`onAfter…` et factories `new…` 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.