Hytale — Serveur & plugin MMORPG
Serveur Hytale de développement et plugin com.disklexar:MMORPG : profils joueurs persistants, progression, classes, métiers, groupes et fondations pour l'économie, les quêtes et les guildes.
Prérequis
- JDK 25+ (Java 26 recommandé si JDK 25 indisponible)
- Gradle via le wrapper inclus (
./gradlew) - Serveur Hytale (binaire ou
./gradlew runServervia ScaffoldIt) - Installation Hytale (launcher officiel) pour les assets du jeu
Démarrage rapide
# Depuis ce dossier (Hytale/)
cp hytale.properties.example hytale.properties
# Éditer hytale.home_path (voir exemples dans le fichier)
./start-server.sh
Réinitialiser le monde de dev si le serveur a planté sans assets :
HYTALE_RESET_DEVSERVER=1 ./start-server.sh
Ou manuellement :
JAVA_HOME=/usr/lib/jvm/java-25-openjdk ./gradlew build
JAVA_HOME=/usr/lib/jvm/java-25-openjdk ./gradlew runServer
Le JAR produit se trouve dans build/libs/hytale-mmorpg-0.1.0.jar (nom selon version Gradle).
Déploiement manuel
- Copier le JAR dans le dossier
mods/du serveur Hytale - Redémarrer le serveur
- La configuration est générée dans le répertoire de données du plugin :
mods/com.disklexar_MMORPG/config.json
Systèmes MMORPG
| Système | Contenu | Effet |
|---|---|---|
| Classes | Chevalier (knight) |
Armes : Épée longue, Hache de bataille. 3 capacités (Charge/dash+étourdissement 3s, Toupie 3s, Cri de guerre : repousse + −20% résistance 20s, bonus si étourdi). |
| Pouvoirs (passifs, aucun par défaut) | Sprinteur (sprinter), Résilient (resilient) |
+10% vitesse hors combat / +10% dégâts 5s après avoir été touché. |
| Métiers | Tueur de monstre (monster_slayer), Mineur (miner) |
+1 money par monstre tué / +1 money par bloc cassé. |
| Groupes | Partage d'XP | Les membres reçoivent 40% de l'XP gagnée sur un kill. |
| Races | Humain (human, par défaut) |
XP ×2. |
Effets de combat : dash, étourdissement, toupie, knockback et le buff de vitesse sont implémentés via les APIs serveur (
Velocity,TransformComponent,MovementManager,TargetUtil,DamageSystems). Les valeurs (distances, forces, dégâts) sont des constantes à ajuster en jeu.
Commandes
| Commande | Description |
|---|---|
/mmorpg help |
Affiche l'aide |
/mmorpg profile |
Résumé court (niveau, XP) |
/mmorpg info |
Toutes vos informations (chat) |
/mmorpg menu |
Menu joueur MMORPG — onglets Personnage, Inventaire, Compétences |
/mmorpg inventory |
Même menu, ouvert directement sur l'onglet Inventaire |
/mmorpg class <choisir|quitter|info> [classe] |
Gérer votre classe |
/mmorpg power <recevoir|retirer|info> [pouvoir] |
Gérer vos pouvoirs |
/mmorpg job <rejoindre|quitter|info> [metier] |
Gérer vos métiers |
/mmorpg group <inviter|accepter|quitter|kick|info> [joueur] |
Gérer votre groupe |
/mmorpg ability <1|2|3> |
Utiliser une capacité de classe |
/mmorpg password <mot_de_passe> |
Définir ou modifier le mot de passe web |
| Touches Use Ability 1/2/3 | Même effet que la commande ci-dessus (si vous avez une classe) |
Capacités de classe (touches Ability 1/2/3)
Les armes vanilla possèdent leurs propres compétences sur les slots Ability. Le plugin les remplace dès qu'un joueur a choisi une classe MMORPG :
- Filtre de paquets (
SyncInteractionChains) — intercepte Ability 1/2/3 avant le moteur vanilla, envoieCancelInteractionChainau client et lance la capacité de classe. - Interaction native (
mmorpg_cast_ability) — enregistrée côté serveur ; les patches d'items dansplugins/mmorpg/src/main/resources/Server/Item/Items/remplacent Ability1/2/3 sur les armes de test (sync client/serveur).
Prérequis en jeu : /mmorpg class choisir <classe> puis équiper une arme autorisée pour cette classe.
Sans classe, les compétences vanilla de l'arme s'appliquent normalement.
Pour ajouter d'autres armes, copiez un patch JSON existant (ex. Weapon_Longsword_Mithril.json) en
ne gardant que "Id" et "Interactions".
/mmorpg menu ouvre une CustomUIPage listant toutes les infos du joueur (classe, race, pouvoirs,
métiers, groupe, money, temps de jeu, dates…). Un plugin serveur seul ne peut pas ajouter un
bouton dans l'écran d'inventaire natif ; les équivalents fournis sont la commande /mmorpg menu et
l'interaction mmorpg_player_info (voir plugins/mmorpg/assetpack/README.md pour brancher un asset .ui).
Configuration
Fichier config.json (valeurs par défaut dans plugins/mmorpg/src/main/resources/config.json) :
| Clé | Description |
|---|---|
Debug |
Logs détaillés |
DefaultLevel |
Niveau initial des nouveaux joueurs |
MaxPlayers |
Limite prévue (référence future) |
BaseXpPerLevel |
XP de base requise par niveau |
KillExperience |
XP de base accordée par monstre tué |
Database.FileName |
Nom du fichier SQLite (mmorpg.db) |
Database.UseMonorepoRoot |
Si true, place la base à la racine du dépôt (dossiers Hytale/ + Webapp/) |
Database.Path |
Chemin absolu ou relatif au dossier de données du plugin (prioritaire) |
Features.Economy |
Active le module économie |
Features.Quests |
Active le module quêtes (M3) |
Features.Guilds |
Active le module guildes (M4) |
Base de données
Le plugin persiste les données joueurs dans SQLite.
Emplacement
| Contexte | Fichier |
|---|---|
| Monorepo (dev) | ../mmorpg.db à la racine du dépôt (détection auto si UseMonorepoRoot: true) |
| Production | {dataDirectory}/mmorpg.db ou chemin explicite via Database.Path |
Inspecter en local :
sqlite3 ../mmorpg.db
SELECT uuid, display_name, level, experience FROM player_profiles;
Les fichiers *.db sont ignorés par Git.
Schéma
player_profiles : class_id, powers (JSON), jobs (JSON), guild_id, group_id,
is_connected, total_time_play, last_date_connected, date_creation, money, race_id.
Tables de référence : classes, powers, jobs, races, groups, group_members.
Migrations versionnées via schema_migrations — voir plugins/mmorpg/src/main/resources/db/migrations/.
Structure du plugin
plugins/mmorpg/src/main/java/com/disklexar/mmorpg/
├── MmorpgPlugin.java # Point d'entrée (commandes + systèmes ECS)
├── bootstrap/ # Initialisation et registre de services
├── core/ # Config et contrats
├── player/ # Sessions, profils, registre des joueurs en ligne
├── persistence/ # SQLite (migrations versionnées, repositories)
├── command/ # Commandes /mmorpg
├── events/ # Connexion / déconnexion, filtre paquets Ability
├── interaction/ # mmorpg_cast_ability (interaction native asset pack)
├── progression/ # XP et niveaux (multiplicateurs de race)
├── economy/ # Monnaie (money)
├── rpg/ # clazz · power · job · race · group
├── combat/ # Capacités, état de combat, effets passifs
│ └── system/ # Systèmes ECS : dégâts, morts/kills, casse de bloc
├── ui/ # AbilityBarHud, PlayerMenuPage, PlayerInfoPage
├── quest/ # Stub (M3)
└── social/ # Stub (M4)
Documentation
- Interface utilisateur MMORPG (UI/UX)
- Architecture
- Feuille de route
- Guide de développement
- Contribution