2.6 KiB
2.6 KiB
Architecture
Vue d'ensemble
Le projet est un plugin monolithique Java déployé sur le serveur Hytale officiel. Le serveur gère le monde, le réseau et l'ECS ; le plugin ajoute la couche MMORPG (persistance, progression, systèmes futurs).
flowchart TB
subgraph server [Serveur Hytale]
ECS[ECS / Mondes]
Events[EventBus]
Cmds[CommandRegistry]
end
subgraph mmorpg [Plugin com.disklexar:MMORPG]
Plugin[MmorpgPlugin]
Boot[Bootstrap]
Registry[ServiceRegistry]
PlayerSvc[PlayerSessionService]
DB[(SQLite)]
end
Plugin --> Boot --> Registry
Registry --> PlayerSvc
PlayerSvc --> DB
Plugin --> Events
Plugin --> Cmds
Cycle de vie du plugin
| Phase | Responsabilité |
|---|---|
setup() |
Charge la config, initialise Bootstrap, enregistre commandes et événements |
start() |
Démarre les services (DatabaseManager, PlayerSessionService, …) |
shutdown() |
Sauvegarde les sessions, ferme SQLite |
Le singleton MmorpgPlugin.get() est rafraîchi à chaque chargement pour rester compatible avec le hot-reload Hytale.
Modules et dépendances
| Package | Dépend de | Rôle |
|---|---|---|
bootstrap |
core, persistence, player |
Câblage des services |
core |
— | Config, interface Service |
persistence |
core |
SQLite, repositories |
player |
persistence, core |
Profils et sessions en ligne |
command |
player, bootstrap |
Interface joueur |
events |
player, bootstrap |
Connexion / déconnexion |
economy, quest, social |
— (stubs) | Extensions futures |
Règle : les packages economy, quest et social ne doivent pas être importés par core ou persistence tant qu'ils ne sont pas implémentés. L'activation se fait via Features.* dans config.json.
Persistance
- Fichier :
{monorepoRoot}/mmorpg.dben dev (monorepo) ou{dataDirectory}/mmorpg.dben production - Migrations :
plugins/mmorpg/src/main/resources/db/migrations/*.sql - Table initiale :
player_profiles(uuid, display_name, level, experience, timestamps)
Les dépendances JDBC (SQLite) et JSON (Gson) sont embarquées dans le JAR via Shadow, car absentes du classpath serveur.
Événements joueur
- Connexion prête :
PlayerReadyEvent→ chargement ou création du profil - Déconnexion :
PlayerDisconnectEvent→ sauvegarde et retrait de la session mémoire
Conventions
- Identifiants joueur :
java.util.UUID - Noms affichés :
PlayerRef.getUsername()en priorité - Logs :
HytaleLoggerdu plugin - Permissions futures : préfixe
com.disklexar.mmorpg.*