@startuml builtin-commands-diagram title CR-Core — Default /core team commands (admin / chef / joueur) skinparam classAttributeIconSize 0 hide empty members package "fr.luc.crcore.command" { abstract class BaseCommand abstract class SubCommand } package "fr.luc.crcore.command.builtin" { class CoreCommand { + CoreCommand(teamSvc, playerSvc) } CoreCommand --|> BaseCommand package "fr.luc.crcore.command.builtin.team" { class TeamGroupSubCommand { + TeamGroupSubCommand(service) # registerDefaults(): void } TeamGroupSubCommand --|> SubCommand class TeamArgumentTypes <> { + {static} teamByName(service): ArgumentType } ' === ADMIN commands (permission seule) === 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: } } ' === CHEF commands (permission + check chef) === package "chef" <> { 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 } } ' === 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 Override d'une feuille : core.getCoreCommand() .findSubCommand("team") .replaceSubCommand("create", new MyCreate(svc)); end note @enduml