# Guide de développement ## Environnement 1. Installer **JDK 25** (`java-25-openjdk`). Le script `start-server.sh` force `/usr/lib/jvm/java-25-openjdk`. 2. Installer **Hytale** via le launcher et configurer `hytale.home_path` (copier `hytale.properties.example` → `hytale.properties` dans `Hytale/`). 3. Cloner le dépôt et ouvrir le projet Gradle dans `Hytale/` (IntelliJ : `./gradlew openIdea` via ScaffoldIt). ## Commandes Gradle Exécuter depuis le dossier `Hytale/` : | Tâche | Description | |-------|-------------| | `./gradlew build` | Compile et produit le JAR (Shadow) | | `./gradlew runServer` | Serveur de dev local | | `./gradlew generateManifest` | Régénère `manifest.json` depuis `settings.gradle.kts` | | `./gradlew setupServer` | Prépare le répertoire `devserver/` | ## Workflow recommandé 1. Créer une branche depuis `main` 2. Implémenter dans le package approprié (voir [ARCHITECTURE.md](ARCHITECTURE.md)) 3. Vérifier `./gradlew build` 4. Tester en jeu avec `./gradlew runServer` 5. Ouvrir une pull request ## Base de données locale - **Monorepo** : `mmorpg.db` à la racine du dépôt (à côté de `Hytale/` et `Webapp/`), si `UseMonorepoRoot: true` dans `config.json` - **Sinon** : `devserver/.../com.disklexar_MMORPG/mmorpg.db` (chemin exact selon ScaffoldIt) - Inspecter avec `sqlite3 mmorpg.db` - Requête utile : `SELECT * FROM player_profiles;` Les fichiers `*.db` sont ignorés par Git. ## Logs Le plugin utilise `getLogger()` (HytaleLogger). Activer `Debug: true` dans `config.json` pour plus de détails sur les sessions. Logs serveur de dev : `Hytale/devserver/logs/`. ## Dépannage runServer | Symptôme | Cause | Solution | |----------|-------|----------| | `--assets=null` dans les logs Gradle | `hytale.home_path` non configuré | `hytale.properties` ou `HYTALE_HOME` | | `Missing default DamageCause assets` | Assets jeu absents | Installer Hytale + configurer le chemin | | `Env_Zone1_Plains doesn't exist` | `devserver` créé sans assets | `HYTALE_RESET_DEVSERVER=1 ./start-server.sh` | | `Task :runServer FAILED` exit 1 | Voir `devserver/logs/*.log` | Corriger la cause ci-dessus | ## API Hytale La dépendance `com.hypixel.hytale:Server:+` est en **compileOnly** : ne pas l'inclure dans le JAR final. En cas d'erreur de compilation après mise à jour serveur : - Vérifier les noms d'événements (`PlayerReadyEvent`, `PlayerDisconnectEvent`) - Consulter [doctale.dev](https://doctale.dev) et le template [HytaleModding/plugin-template](https://github.com/HytaleModding/plugin-template) ## Ajouter une migration SQL 1. Créer `plugins/mmorpg/src/main/resources/db/migrations/00X_description.sql` 2. Étendre `SchemaInitializer` pour exécuter les nouveaux fichiers dans l'ordre 3. Documenter le changement dans le changelog / PR ## Style de code - Packages en minuscules, classes en PascalCase - Pas de logique métier dans `MmorpgPlugin` — déléguer aux services - Fermer les ressources JDBC dans try-with-resources