Files
HytaleMMORPG/docs/ARCHITECTURE.md
T
gpatruno 3710a28ae0
Build / build (push) Has been cancelled
first
2026-06-05 15:00:58 +02:00

73 lines
2.5 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 : `{dataDirectory}/mmorpg.db`
- Migrations : `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.*`