73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
# 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).
|
|
|
|
```mermaid
|
|
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.db` en dev (monorepo) ou `{dataDirectory}/mmorpg.db` en 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 : `HytaleLogger` du plugin
|
|
- Permissions futures : préfixe `com.disklexar.mmorpg.*`
|