chore: downgrade compile target to Java 11

Uses <release>11</release> in maven-compiler-plugin (recommended over
source/target to guarantee bytecode and API surface match Java 11).

Code changes to drop Java 12-16 features:
- records (TeamRanking, PlayerRanking, internal tuples in
  SqliteTeamRepository) become hand-written immutable classes; same
  accessor names (rank()/team()/score()/...) so call sites are unchanged.
- instanceof X x pattern matching becomes classic instanceof + cast in
  CommandContext.requirePlayer and Database.normalize.
- switch expressions with -> arrows become classic switch + break, or
  if/else chains, in BaseCommand.handleResult, ArgumentTypes.BOOLEAN and
  TeamScoreSubCommand.execute.

docs/setup.md, features.md and decisions.md updated to reflect Java 11.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Antone Barbaud
2026-06-09 12:18:43 +02:00
parent 7ee349f206
commit 5bd6e227d3
12 changed files with 209 additions and 43 deletions
+24
View File
@@ -323,6 +323,30 @@ Format léger : une décision = un titre + contexte + choix + raison.
même fichier SQLite (par défaut `<dataFolder>/crcore.db`) ; le préfixe
isole proprement.
## 2026-06-09 — Bascule Java 16 → Java 11 (révision)
- **Révision** de la décision "Java 16" du 2026-06-08.
- **Choix** : `maven.compiler.source/target = 11`. Le code se compile et
s'exécute sur tout JDK 11+.
- **Raison** : Java 11 reste très répandu côté serveurs Bukkit/Paper 1.16.5,
et le coût de revenir en arrière est faible. On garde une cible plus
conservatrice pour maximiser la compatibilité d'exécution.
- **Conséquences sur le code** :
- Les `record` (Java 16) → classes immutables manuelles, avec mêmes noms
d'accesseurs (`rank()`, `team()`, etc.) pour ne pas casser l'API
publique. Concerné : `TeamRanking`, `PlayerRanking`, plus deux tuples
internes (`TeamRow`, `MemberRow`) dans `SqliteTeamRepository`.
- Le **pattern matching `instanceof X x`** (Java 16) → classique
`instanceof X` + cast explicite. Concerné : `CommandContext.requirePlayer`,
`Database.normalize`.
- Les **switch expressions à flèche** (`case X -> ...`, Java 14) →
`switch (...) { case X: ...; break; }` classique, ou chaînes if/else.
Concerné : `BaseCommand.handleResult`, `ArgumentTypes.BOOLEAN.parse`,
`TeamScoreSubCommand.execute`.
- **Ce qui reste utilisé de Java 11** : `var` (Java 10+), `List.of()` /
`Map.of()` (Java 9+), interfaces avec méthodes `default`, lambdas, method
references.
## 2026-06-09 — Enregistrement dynamique de la commande (plugin.yml optionnel)
- **Choix** : `CRCore.registerCommand()` tente d'abord