--- title: Schéma du Manifeste type: docs weight: 1 --- Le fichier `manifest.json` définit les métadonnées et la configuration de votre plugin. ## Structure de Base ```json { "name": "MyPlugin", "version": "1.0.0", "main": "com.example.MyPlugin", "dependencies": [] } ``` ## Champs Requis ### name **Type :** `string` L'identifiant unique de votre plugin. Utilisé pour le logging et la résolution des dépendances. ```json { "name": "MyAwesomePlugin" } ``` ### version **Type :** `string` La version du plugin suivant le versioning sémantique (recommandé). ```json { "version": "1.0.0" } ``` ### main **Type :** `string` Le nom de classe pleinement qualifié de votre classe principale de plugin. Cette classe doit étendre `JavaPlugin`. ```json { "main": "com.example.myplugin.MyPlugin" } ``` ## Champs Optionnels ### dependencies **Type :** `string[]` Liste des noms de plugins dont ce plugin dépend. Les plugins dépendants seront chargés en premier. ```json { "dependencies": ["CoreLib", "DatabasePlugin"] } ``` ### description **Type :** `string` Une brève description de votre plugin. ```json { "description": "Ajoute des fonctionnalités géniales au serveur" } ``` ### author **Type :** `string` L'auteur du plugin ou le nom de l'équipe. ```json { "author": "VotreNom" } ``` ### authors **Type :** `string[]` Liste des auteurs du plugin pour les projets d'équipe. ```json { "authors": ["Développeur1", "Développeur2"] } ``` ### website **Type :** `string` Page d'accueil du plugin ou URL de documentation. ```json { "website": "https://example.com/myplugin" } ``` ## Exemple Complet ```json { "name": "EconomyPlugin", "version": "2.1.0", "main": "com.example.economy.EconomyPlugin", "description": "Un système économique complet pour les serveurs Hytale", "author": "GameDev", "authors": ["GameDev", "Contributeur1"], "website": "https://github.com/example/economy", "dependencies": ["DatabaseLib"] } ``` ## Emplacement du Fichier Le `manifest.json` doit être placé à la racine de votre fichier JAR de plugin : ``` MyPlugin.jar ├── manifest.json ├── com/ │ └── example/ │ └── myplugin/ │ └── MyPlugin.class └── resources/ └── config.yml ``` ## Validation {{< callout type="warning" >}} Le serveur valide manifest.json au démarrage. Les manifestes invalides empêcheront votre plugin de se charger. Problèmes courants : - Champs requis manquants (name, version, main) - Syntaxe JSON invalide - Classe principale non trouvée dans le JAR - Dépendances circulaires {{< /callout >}} ## Exigences de la Classe Principale Votre classe principale spécifiée dans `main` doit : 1. Étendre `JavaPlugin` 2. Avoir un constructeur public sans argument 3. Être accessible dans le classpath du JAR ```java package com.example.myplugin; import com.hypixel.hytale.server.core.plugin.JavaPlugin; public class MyPlugin extends JavaPlugin { @Override public void start() { // Plugin activé - enregistrer événements, commandes, etc. getLogger().at(Level.INFO).log("Plugin démarré !"); } @Override public void shutdown() { // Plugin désactivé - nettoyage ressources } } ``` ## Résolution des Dépendances Les dépendances sont chargées dans l'ordre : 1. Toutes les dépendances doivent être présentes et valides 2. Les dépendances circulaires causent un échec de chargement 3. Les dépendances manquantes causent un échec de chargement ``` Ordre de Chargement : 1. DatabaseLib (pas de dépendances) 2. CoreLib (dépend de DatabaseLib) 3. MyPlugin (dépend de CoreLib) ``` ## Compatibilité des Versions {{< callout type="info" >}} Considérez le versioning de l'API de votre plugin si d'autres plugins dépendent de vous : - Majeur : Changements cassants - Mineur : Nouvelles fonctionnalités, rétrocompatible - Patch : Corrections de bugs {{< /callout >}} ```json { "name": "MyAPI", "version": "2.0.0" } ``` Les plugins dépendants peuvent alors spécifier les versions minimales dans leur documentation.