# Hytale MMORPG Plugin serveur Hytale pour un MMORPG persistant : profils joueurs, progression et fondations modulaires 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 runServer` via [ScaffoldIt](https://scaffoldit.dev)) ## Démarrage rapide ```bash # 1. Indiquer où Hytale est installé (launcher officiel) cp hytale.properties.example hytale.properties # Éditer hytale.home_path (voir exemples dans le fichier) # 2. Compiler puis lancer le serveur de dev (Java 25 forcé) ./start-server.sh ``` Si le serveur a déjà planté sans assets, réinitialisez le monde de dev : ```bash HYTALE_RESET_DEVSERVER=1 ./start-server.sh ``` Ou manuellement : ```bash # Compiler le plugin (JAR avec SQLite + Gson embarqués) JAVA_HOME=/usr/lib/jvm/java-25-openjdk ./gradlew build # Lancer le serveur de développement 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 1. Copier le JAR dans le dossier `mods/` du serveur Hytale 2. Redémarrer le serveur 3. 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 [classe]` | Gérer votre classe | | `/mmorpg power [pouvoir]` | Gérer vos pouvoirs | | `/mmorpg job [metier]` | Gérer vos métiers | | `/mmorpg group [joueur]` | Gérer votre groupe | | `/mmorpg ability <1\|2\|3>` | Utiliser une capacité de classe | | 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 : 1. **Filtre de paquets** (`SyncInteractionChains`) — intercepte Ability 1/2/3 avant le moteur vanilla, envoie `CancelInteractionChain` au client et lance la capacité de classe. 2. **Interaction native** (`mmorpg_cast_ability`) — enregistrée côté serveur ; les patches d'items dans `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 ` 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 `assetpack/README.md` pour brancher un asset `.ui`). ## Configuration Fichier `config.json` (valeurs par défaut dans `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` | Fichier SQLite (`mmorpg.db`) | | `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 `player_profiles` ajoute : `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 dépendance : `classes`, `powers`, `jobs`, `races`, `groups`, `group_members`. Les migrations sont versionnées via `schema_migrations` (voir `db/migrations/`). ## Structure du projet ``` 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, vue d'infos ├── persistence/ # SQLite (migrations versionnées, repositories) ├── command/ # Commandes /mmorpg (class, power, job, group, ability, info, menu) ├── events/ # Connexion / déconnexion, filtre paquets Ability 1/2/3 ├── interaction/ # mmorpg_cast_ability (interaction native asset pack) ├── progression/ # XP et niveaux (multiplicateurs de race) ├── economy/ # Monnaie (money) ├── rpg/ # clazz (classes) · power · job · race · group ├── combat/ # Capacités, état de combat, effets passifs, planificateur │ └── 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)](docs/README-UI.md) - [Architecture](docs/ARCHITECTURE.md) - [Feuille de route](docs/ROADMAP.md) - [Guide de développement](docs/DEVELOPMENT.md) - [Contribution](CONTRIBUTING.md) ### Custom UI (Hytale) Documentation officielle et guides communautaires utiles pour les assets `.ui` et les pages serveur : - [Custom UI — vue d'ensemble](https://hytalemodding.dev/en/docs/official-documentation/custom-ui) (architecture `UICommandBuilder`, HUD vs pages, sélecteurs `#Id.Propriété`) - [Layout](https://hytalemodding.dev/en/docs/official-documentation/custom-ui/layout) (`Anchor`, `Padding`, `LayoutMode`, `FlexWeight`) - [Common Styling](https://hytalemodding.dev/en/docs/official-documentation/custom-ui/common-styling) (`Common.ui`, styles partagés) - [Guide plugin UI](https://hytalemodding.dev/en/docs/guides/plugin/ui) (emplacement des fichiers, `IncludesAssetPack`, diagnostic client) ## Licence MIT — voir [LICENSE](LICENSE).