Files
gpatruno 48a1b900c7
Build / build (push) Has been cancelled
webapp
2026-06-06 21:59:51 +02:00

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.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.*