Files
Cites_Plugins/GEMINI.md
T
Antone Barbaud ffc77c4213 feat: initial CR-Core library (team + player + command framework)
Pure Maven library for CR Minecraft game plugins, targeting Paper 1.16.5.

Common abstractions (fr.luc.crcore.common): Identifiable, Named, ScoreHolder,
AbstractEntity, Repository<T>.

Team domain (fr.luc.crcore.team): Team entity with name/tag/color/leader/
visibility (PUBLIC|PRIVATE)/members/scores/spawn point, TeamMember,
TeamRole/TeamColor/TeamVisibility enums, TeamRanking record, TeamService with
overridable hooks (factories, validations, lifecycle events), in-memory
repository, dedicated exception hierarchy.

Player domain (fr.luc.crcore.player): PlayerProfile with named scores per
player, PlayerProfileService with auto-creation, individual rankings,
exception hierarchy. Both Team and PlayerProfile implement ScoreHolder.

Command framework (fr.luc.crcore.command): Command interface,
AbstractCommand base, BaseCommand (CommandExecutor + TabCompleter), SubCommand,
CommandContext, CommandResult, ArgumentType<T> + ArgumentTypes catalogue
(STRING, INTEGER, DOUBLE, BOOLEAN, ONLINE_PLAYER, enumOf, choice).

Docs (docs/) is the single source of truth: README, setup, features,
decisions log, and 6 PlantUML diagrams (team class/sequence/activity/join,
player class, command class).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 17:17:56 +02:00

60 lines
2.7 KiB
Markdown

# GEMINI.md — Instructions pour l'assistant
## Source de vérité
**Le dossier `docs/` est la source unique de vérité du projet.**
- Toute spécification, règle, décision technique, commande ou contrainte doit
être lue depuis `docs/` et écrite dans `docs/`.
- Avant d'implémenter, vérifier ce qui est consigné dans `docs/`.
- Toute nouvelle information donnée par l'utilisateur va dans le fichier adapté :
- `docs/features.md` — domaines fonctionnels (team, command, …)
- `docs/decisions.md` — décisions techniques / architecturales
- `docs/setup.md` — installation, build, intégration côté plugin de jeu
- `docs/README.md` — vue d'ensemble et index
- `docs/diagrams/*.puml` — diagrammes (classe / séquence / activité)
- En cas de conflit code ↔ `docs/`, `docs/` fait foi : aligner le code, ou
mettre la doc à jour explicitement avec l'utilisateur.
## Nature du projet
**CR-Core** est une **librairie Java/Maven pure** — pas un plugin Bukkit. Elle
fournit les briques réutilisables (domaine team, framework de commandes,
abstractions communes) que chaque plugin de jeu (futur `CitesPlugin`, etc.)
consomme en dépendance Maven.
- **Nom** : CR-Core (artifactId Maven : `CR-Core`)
- **Type** : librairie (`jar`) — pas de `plugin.yml`, pas de `JavaPlugin`
- **Cible runtime** : serveur Paper/Spigot 1.16.5 (le plugin de jeu downstream
est responsable du `plugin.yml` et de l'enregistrement des commandes)
- **Build** : Maven, Java 16
- **Package racine** : `fr.luc.crcore`
## Principe : simple par défaut, overridable partout
Toutes les classes du noyau sont conçues pour être étendues. Les services
fournissent une implémentation "tout faite" (ex. `TeamServiceImpl`), mais chaque
étape importante est exposée via une méthode `protected` (`newTeam`,
`validateName`, `onAfterCreate`, …) qu'une sous-classe peut overrider.
**Règles** :
- Pas de `final` sur les classes du noyau, sauf raison forte.
- Méthodes-clés en `protected` (pas `private`) pour permettre l'override.
- Hooks `onBefore...` / `onAfter...` partout où ça a du sens.
- Factories (`newTeam`, `newMember`, …) pour permettre de substituer des
sous-classes sans réécrire le service.
## Workflow attendu
1. Lire le contexte pertinent dans `docs/`.
2. Discuter / valider l'approche avec l'utilisateur si nécessaire.
3. Mettre à jour `docs/` (et le `.puml` concerné) avec la décision ou la spec.
4. Implémenter le code conformément à la doc.
## Conventions de code
- Code (classes, méthodes, attributs, variables) en **anglais standard**.
- Messages joueur et documentation en français.
- Séparation stricte : `interface`, `enum`, `abstract class`, `class` concrète,
`exception` — chacun dans son fichier.