ffc77c4213
Pure Maven library for CR Minecraft game plugins, targeting Paper 1.16.5. Common abstractions (fr.luc.crcore.common): Identifiable, Named, ScoreHolder, AbstractEntity, Repository<T>. Team domain (fr.luc.crcore.team): Team entity with name/tag/color/leader/ visibility (PUBLIC|PRIVATE)/members/scores/spawn point, TeamMember, TeamRole/TeamColor/TeamVisibility enums, TeamRanking record, TeamService with overridable hooks (factories, validations, lifecycle events), in-memory repository, dedicated exception hierarchy. Player domain (fr.luc.crcore.player): PlayerProfile with named scores per player, PlayerProfileService with auto-creation, individual rankings, exception hierarchy. Both Team and PlayerProfile implement ScoreHolder. Command framework (fr.luc.crcore.command): Command interface, AbstractCommand base, BaseCommand (CommandExecutor + TabCompleter), SubCommand, CommandContext, CommandResult, ArgumentType<T> + ArgumentTypes catalogue (STRING, INTEGER, DOUBLE, BOOLEAN, ONLINE_PLAYER, enumOf, choice). Docs (docs/) is the single source of truth: README, setup, features, decisions log, and 6 PlantUML diagrams (team class/sequence/activity/join, player class, command class). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
70 lines
1.8 KiB
Plaintext
70 lines
1.8 KiB
Plaintext
@startuml team-create-sequence
|
|
title CR-Core — Create Team via command framework (sequence diagram)
|
|
|
|
actor Player
|
|
participant "BaseCommand\n(TeamCommand)" as Base
|
|
participant "SubCommand\n(TeamCreateSub)" as Sub
|
|
participant "TeamService" as Service
|
|
participant "TeamRepository" as Repo
|
|
participant "Team" as Team
|
|
|
|
Player -> Base : /team create <name> <tag> <color>
|
|
activate Base
|
|
|
|
Base -> Base : route args[0]="create" → TeamCreateSub
|
|
Base -> Base : check permission + playerOnly
|
|
Base -> Sub : buildContext(sender, label, subArgs)
|
|
activate Sub
|
|
Sub -> Sub : parse name (STRING) / tag (STRING) / color (enumOf TeamColor)
|
|
Sub --> Base : CommandContext
|
|
deactivate Sub
|
|
|
|
Base -> Sub : execute(ctx)
|
|
activate Sub
|
|
|
|
Sub -> Service : createTeam(name, tag, color, playerId)
|
|
activate Service
|
|
|
|
Service -> Service : validateName(name)
|
|
Service -> Repo : findByName(name)
|
|
activate Repo
|
|
Repo --> Service : Optional.empty()
|
|
deactivate Repo
|
|
|
|
Service -> Service : validateTag(tag)
|
|
Service -> Repo : findByTag(tag)
|
|
activate Repo
|
|
Repo --> Service : Optional.empty()
|
|
deactivate Repo
|
|
|
|
Service -> Service : validateLeader(playerId)
|
|
Service -> Repo : findByMember(playerId)
|
|
activate Repo
|
|
Repo --> Service : Optional.empty()
|
|
deactivate Repo
|
|
|
|
Service -> Team : newTeam(UUID.randomUUID(), name, tag, color, playerId, PRIVATE)
|
|
activate Team
|
|
Team -> Team : add newMember(playerId, LEADER)
|
|
Team --> Service : team
|
|
deactivate Team
|
|
|
|
Service -> Service : onBeforeSave(team)
|
|
Service -> Repo : save(team)
|
|
activate Repo
|
|
Repo --> Service : team
|
|
deactivate Repo
|
|
Service -> Service : onAfterCreate(team)
|
|
|
|
Service --> Sub : team
|
|
deactivate Service
|
|
|
|
Sub --> Base : CommandResult.success("Team created")
|
|
deactivate Sub
|
|
|
|
Base -> Base : handleResult → sender.sendMessage(green text)
|
|
Base --> Player : "Team <name> created"
|
|
deactivate Base
|
|
|
|
@enduml
|