Files
Cites_Plugins/docs/diagrams/events-diagram.puml
T
Antone Barbaud 84735221f1 refactor: split util/ vs features/ + modular opt-in setupX() config
Package restructure to prepare future modularization. Three layers now:

1. fr.luc.crcore.util.* (always active)
   - common, command framework, database, message, broadcast, gui,
     placeholder

2. fr.luc.crcore.features.* (opt-in)
   - team (entities, services, repos, events, exceptions, config + GUI,
     command/Team*SubCommand)
   - player (profile, ranking, services, repos, events, exceptions)

3. fr.luc.crcore.builtin.*
   - CoreCommand + CoreReloadSubCommand (top-level routing — not a
     feature, not an util)

FQN moves (game plugins importing these need their imports updated):
- fr.luc.crcore.common.*          → fr.luc.crcore.util.common.*
- fr.luc.crcore.command.*         → fr.luc.crcore.util.command.*
- fr.luc.crcore.command.builtin.team.*
                                  → fr.luc.crcore.features.team.command.*
- fr.luc.crcore.command.builtin.CoreCommand / CoreReloadSubCommand
                                  → fr.luc.crcore.builtin.*
- fr.luc.crcore.database.*        → fr.luc.crcore.util.database.*
- fr.luc.crcore.message.*         → fr.luc.crcore.util.message.*
- fr.luc.crcore.broadcast.*       → fr.luc.crcore.util.broadcast.*
- fr.luc.crcore.gui.*             → fr.luc.crcore.util.gui.*
- fr.luc.crcore.placeholder.*     → fr.luc.crcore.util.placeholder.*
- fr.luc.crcore.team.*            → fr.luc.crcore.features.team.*
- fr.luc.crcore.player.*          → fr.luc.crcore.features.player.*

CRCoreConfig — features opt-in via fluent setup:
- setupTeams()        enables team feature
- setupPlayers()      enables player feature
- setupPlaceholders() enables PAPI integration
- setupAll()          shortcut
By default no feature is active. Game plugin must opt-in.

CRCore.enable() now conditional:
- Util services always built (messages, broadcasts, gui listener).
- Team services + repos + config built only if setupTeams().
- Player services + repos built only if setupPlayers().
- Placeholder hook registered only if setupPlaceholders() (and PAPI
  installed at runtime).
- Getters of disabled features throw IllegalStateException with a clear
  message pointing to the missing setupX() call.
- CoreCommand only registers TeamGroupSubCommand if teamService and
  teamConfig are non-null. CoreReloadSubCommand handles teamConfig=null
  (just skips that reload). /core reload always available.

Docs:
- setup.md tree fully rewritten to reflect util/+features/+builtin
  layout (~70 lines of arborescence).
- setup.md code snippet shows the three opt-in patterns (setupAll /
  granular / with options).
- decisions.md logs both decisions (restructure + modular setup).
- All .puml diagrams auto-updated to new FQNs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 12:00:00 +02:00

90 lines
2.1 KiB
Plaintext

@startuml events-diagram
title CR-Core — Bukkit events (team + player)
skinparam classAttributeIconSize 0
hide empty members
package "org.bukkit.event" {
abstract class Event
}
package "fr.luc.crcore.features.team.event" {
abstract class TeamEvent {
- team: Team
+ getTeam(): Team
}
TeamEvent --|> Event
class TeamCreateEvent
class TeamDissolveEvent
class TeamMemberAddEvent {
+ getMember(): TeamMember
}
class TeamMemberRemoveEvent {
+ getPlayerId(): UUID
}
class PlayerJoinTeamEvent {
+ getMember(): TeamMember
}
class TeamLeadershipTransferEvent {
+ getOldLeaderId(): UUID
+ getNewLeaderId(): UUID
}
class TeamVisibilityChangeEvent {
+ getOldVisibility(): TeamVisibility
+ getNewVisibility(): TeamVisibility
}
class TeamScoreChangeEvent {
+ getScoreName(): String
+ getOldValue(): int
+ getNewValue(): int
+ getDelta(): int
}
class TeamSpawnPointChangeEvent {
+ getOldLocation(): Location
+ getNewLocation(): Location
}
TeamCreateEvent --|> TeamEvent
TeamDissolveEvent --|> TeamEvent
TeamMemberAddEvent --|> TeamEvent
TeamMemberRemoveEvent --|> TeamEvent
PlayerJoinTeamEvent --|> TeamEvent
TeamLeadershipTransferEvent --|> TeamEvent
TeamVisibilityChangeEvent --|> TeamEvent
TeamScoreChangeEvent --|> TeamEvent
TeamSpawnPointChangeEvent --|> TeamEvent
}
package "fr.luc.crcore.features.player.event" {
abstract class PlayerProfileEvent {
- profile: PlayerProfile
+ getProfile(): PlayerProfile
}
PlayerProfileEvent --|> Event
class PlayerProfileCreateEvent
class PlayerProfileDeleteEvent
class PlayerScoreChangeEvent {
+ getScoreName(): String
+ getOldValue(): int
+ getNewValue(): int
+ getDelta(): int
}
PlayerProfileCreateEvent --|> PlayerProfileEvent
PlayerProfileDeleteEvent --|> PlayerProfileEvent
PlayerScoreChangeEvent --|> PlayerProfileEvent
}
note right of TeamEvent
Tous post-events, non-cancellable.
Tirés par les sous-classes
BukkitEventFiring*ServiceImpl
via les hooks on* hérités.
end note
@enduml