@startuml builtin-commands-diagram title CR-Core — Default /core team commands (admin / joueur) skinparam classAttributeIconSize 0 hide empty members package "fr.luc.crcore.util.command" { abstract class BaseCommand abstract class SubCommand } package "fr.luc.crcore.builtin" { class CoreCommand CoreCommand --|> BaseCommand package "fr.luc.crcore.features.team.command" { class TeamGroupSubCommand { + TeamGroupSubCommand(service) } TeamGroupSubCommand --|> SubCommand class TeamArgumentTypes <> { + {static} teamByName(service): ArgumentType } ' ─── ADMIN commands (permission seule, team par argument) ─── package "admin" <> { class TeamCreateSubCommand { perm: crcore.team.create args: name, tag, color, [leader] } class TeamDeleteSubCommand { perm: crcore.team.delete args: } class TeamSetLeaderSubCommand { perm: crcore.team.setleader args: } class TeamScoreSubCommand { perm: crcore.team.score args: } class TeamAddSubCommand { perm: crcore.team.add args: } class TeamRemoveSubCommand { perm: crcore.team.remove args: } class TeamTransferSubCommand { perm: crcore.team.transfer args: } class TeamVisibilitySubCommand { perm: crcore.team.visibility args: } class TeamSetSpawnSubCommand { perm: crcore.team.setspawn args: playerOnly } } ' ─── PLAYER commands ─── package "player" <> { class TeamJoinSubCommand { perm: crcore.team.join args: } class TeamLeaveSubCommand { perm: crcore.team.leave } class TeamInfoSubCommand { perm: crcore.team.info args: [team] } class TeamListSubCommand { perm: crcore.team.list } class TeamTopSubCommand { perm: crcore.team.top args: [score] } } TeamCreateSubCommand --|> SubCommand TeamDeleteSubCommand --|> SubCommand TeamSetLeaderSubCommand --|> SubCommand TeamScoreSubCommand --|> SubCommand TeamAddSubCommand --|> SubCommand TeamRemoveSubCommand --|> SubCommand TeamTransferSubCommand --|> SubCommand TeamVisibilitySubCommand --|> SubCommand TeamSetSpawnSubCommand --|> SubCommand TeamJoinSubCommand --|> SubCommand TeamLeaveSubCommand --|> SubCommand TeamInfoSubCommand --|> SubCommand TeamListSubCommand --|> SubCommand TeamTopSubCommand --|> SubCommand CoreCommand "1" *-- "1" TeamGroupSubCommand : contains TeamGroupSubCommand "1" *-- "14" SubCommand : contains } } note bottom of TeamGroupSubCommand Le rôle LEADER reste dans le modèle Team (utilisable par les game plugins via l'API) mais n'accorde aucun privilège de commande dans le set par défaut. Override d'une feuille : core.getCoreCommand() .findSubCommand("team") .replaceSubCommand("create", new MyCreate(svc)); end note @enduml