feat: chef commands moved to admin + PlaceholderAPI integration
Chef → admin: the chef role no longer grants any command privilege. All team-management subcommands now take <team> as an argument and are gated by their crcore.team.<action> permission only: - add <team> <player> - remove <team> <player> - transfer <team> <player> - visibility <team> <PUBLIC|PRIVATE> - setspawn <team> (still player-only — needs admin's location) The LEADER role is kept in the data model (Team / TeamMember) and remains usable by game plugins via the API, but does not unlock any default command. Future work can re-introduce chef-specific commands if needed. PlaceholderAPI: auto-detected at CRCore.enable(). If the PAPI plugin is present on the server, CRCorePlaceholderExpansion registers automatically; otherwise the lib runs without it (no NoClassDefFoundError thanks to the indirection through doRegisterPlaceholderHook). Placeholders exposed: - Team: %crcore_team%, %crcore_team_name/tag/color/color_chat/size/ visibility/leader_name/total_score%, %crcore_team_score_<name>% - Player: %crcore_player_score_<name>%, %crcore_player_score_total% Dependency: me.clip:placeholderapi:2.11.6, scope provided. New repo: https://repo.extendedclip.com/content/repositories/placeholderapi/. docs/features.md, decisions.md and the builtin-commands diagram updated to reflect the simpler admin/player two-tier model and the PAPI section. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -367,6 +367,52 @@ Format léger : une décision = un titre + contexte + choix + raison.
|
||||
bases existantes, ALTER TABLE manuel ou suppression du fichier
|
||||
(les bases d'event sont jetables).
|
||||
|
||||
## 2026-06-09 — Toutes les commandes "chef" deviennent admin (révision)
|
||||
|
||||
- **Révision** de la décision "Refonte permissions + modèle admin/chef/joueur"
|
||||
prise plus tôt aujourd'hui.
|
||||
- **Choix** : le rôle chef n'apporte plus aucun privilège de commande pour
|
||||
l'instant. Toutes les opérations de gestion d'équipe (`add`, `remove`,
|
||||
`transfer`, `visibility`, `setspawn`) deviennent **admin** :
|
||||
- Signature avec `<team>` en argument (au lieu d'implicite "ma team").
|
||||
- Permission `crcore.team.<action>` requise.
|
||||
- Plus de check `isLeader(...)` dans `execute()`.
|
||||
- **Raison** : le user a explicitement décidé que pour l'instant le chef
|
||||
n'a pas plus de privilèges qu'un joueur lambda côté commandes. Le rôle
|
||||
`LEADER` reste dans le modèle de données (utile pour les game plugins qui
|
||||
pourraient l'exploiter via l'API, ou pour de futures commandes), mais il
|
||||
ne gate plus rien au niveau du framework de commandes.
|
||||
- **Conséquences** :
|
||||
- `TeamRemoveSubCommand` : refuse de retirer le chef (l'admin doit
|
||||
`setleader` d'abord). Pas un check chef, juste une garde de cohérence.
|
||||
- `TeamTransferSubCommand` : devient l'équivalent admin "strict" de
|
||||
`setleader` (membre existant uniquement). Les deux cohabitent ; doc dit
|
||||
quand préférer l'un ou l'autre.
|
||||
- `TeamSetSpawnSubCommand` : reste `playerOnly` car nécessite la
|
||||
`Location` de l'exécutant — mais c'est désormais l'admin qui se place
|
||||
à l'endroit voulu et tape `/core team setspawn <team>`.
|
||||
|
||||
## 2026-06-09 — Intégration PlaceholderAPI (optionnelle, auto-détectée)
|
||||
|
||||
- **Choix** : `CRCore.enable()` détecte la présence du plugin PlaceholderAPI
|
||||
via `pluginManager.getPlugin("PlaceholderAPI")` et enregistre
|
||||
automatiquement `CRCorePlaceholderExpansion` si présent. Aucune action
|
||||
requise côté plugin de jeu.
|
||||
- **Dépendance Maven** : `me.clip:placeholderapi:2.11.6` en scope
|
||||
`provided` (depuis `https://repo.extendedclip.com/...`). Le jar PAPI
|
||||
n'est PAS embarqué — c'est un plugin runtime indépendant.
|
||||
- **Indirection de chargement** : la méthode privée
|
||||
`doRegisterPlaceholderHook()` isole la référence à
|
||||
`CRCorePlaceholderExpansion`. Si PAPI est absent, la méthode n'est jamais
|
||||
appelée et le bytecode référençant `me.clip.placeholderapi.*` n'est pas
|
||||
vérifié → pas de `NoClassDefFoundError`.
|
||||
- **Placeholders exposés** :
|
||||
- Team : `%crcore_team%`, `%crcore_team_name/tag/color/color_chat/size/`
|
||||
`visibility/leader_name/total_score%`, `%crcore_team_score_<name>%`
|
||||
- Player : `%crcore_player_score_<name>%`, `%crcore_player_score_total%`
|
||||
- **Override** : `CRCore.registerPlaceholderHook()` est `protected` — une
|
||||
sous-classe peut ajouter des placeholders ou skipper la hook.
|
||||
|
||||
## 2026-06-09 — Nouvelle commande `/core team setleader`
|
||||
|
||||
- **Choix** : ajout de `TeamSetLeaderSubCommand` (`/core team setleader
|
||||
|
||||
Reference in New Issue
Block a user