@startuml builtin-commands-diagram title CR-Core — Default /core team commands 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) # registerDefaults(): void } CoreCommand --|> BaseCommand package "fr.luc.crcore.command.builtin.team" { class TeamGroupSubCommand { + TeamGroupSubCommand(service) # registerDefaults(): void } TeamGroupSubCommand --|> SubCommand class TeamArgumentTypes <> { + {static} teamByName(service): ArgumentType } class TeamCreateSubCommand { + execute(ctx): CommandResult } class TeamDeleteSubCommand class TeamAddSubCommand class TeamRemoveSubCommand class TeamJoinSubCommand class TeamLeaveSubCommand class TeamInfoSubCommand class TeamListSubCommand class TeamTransferSubCommand class TeamVisibilitySubCommand class TeamScoreSubCommand class TeamTopSubCommand class TeamSetSpawnSubCommand TeamCreateSubCommand --|> SubCommand TeamDeleteSubCommand --|> SubCommand TeamAddSubCommand --|> SubCommand TeamRemoveSubCommand --|> SubCommand TeamJoinSubCommand --|> SubCommand TeamLeaveSubCommand --|> SubCommand TeamInfoSubCommand --|> SubCommand TeamListSubCommand --|> SubCommand TeamTransferSubCommand --|> SubCommand TeamVisibilitySubCommand --|> SubCommand TeamScoreSubCommand --|> SubCommand TeamTopSubCommand --|> SubCommand TeamSetSpawnSubCommand --|> SubCommand CoreCommand "1" *-- "1" TeamGroupSubCommand : contains TeamGroupSubCommand "1" *-- "13" SubCommand : contains } } note right of CoreCommand Le plugin de jeu downstream remplace une feuille avec : core.getCoreCommand() .findSubCommand("team") .replaceSubCommand("create", new MyCreate(svc)); end note @enduml