@@ -0,0 +1,72 @@
|
||||
# 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.*`
|
||||
Reference in New Issue
Block a user