Files
Documentation/content/getting-started/creating-a-plugin.fr.md
2026-01-20 20:33:59 +01:00

5.3 KiB

title, type, weight
title type weight
Créer un Plugin docs 3

Ce guide vous accompagne dans la création de votre premier plugin Hytale.

Structure du Projet

Un projet de plugin Hytale typique a cette structure :

my-plugin/
├── app/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/example/myplugin/
│       │   │       └── MyPlugin.java
│       │   └── resources/
│       │       └── manifest.json
│       └── test/
│           └── java/
├── gradle/
│   ├── libs.versions.toml
│   └── wrapper/
├── build.gradle.kts
├── settings.gradle.kts
└── gradlew

Le manifest.json

Chaque plugin nécessite un fichier manifest.json dans src/main/resources/ :

{
  "Group": "com.example",
  "Name": "MyPlugin",
  "Version": "1.0.0",
  "Description": "Mon premier plugin Hytale",
  "Authors": [
    {
      "Name": "Votre Nom"
    }
  ],
  "Main": "com.example.myplugin.MyPlugin",
  "ServerVersion": "*",
  "Dependencies": {},
  "OptionalDependencies": {},
  "DisabledByDefault": false,
  "IncludesAssetPack": false,
  "SubPlugins": []
}

Champs du Manifest

Champ Requis Description
Group Oui Groupe de package (ex: "com.example")
Name Oui Nom du plugin (utilisé pour l'identification)
Version Oui Version sémantique (ex: "1.0.0")
Description Non Brève description du plugin
Authors Non Liste des auteurs avec champ Name
Main Oui Nom complet de la classe principale
ServerVersion Oui Compatibilité version serveur ("*" pour toutes)
Dependencies Non Dépendances de plugins requises
OptionalDependencies Non Dépendances de plugins optionnelles
DisabledByDefault Non Si le plugin est désactivé par défaut
IncludesAssetPack Non Si le plugin inclut des assets
SubPlugins Non Liste des sous-plugins

{{< callout type="warning" >}} Tous les noms de champs du manifest utilisent le PascalCase (ex: ServerVersion, pas serverVersion). {{< /callout >}}

Classe Principale du Plugin

Créez votre classe principale en étendant JavaPlugin :

package com.example.myplugin;

import com.hypixel.hytale.server.core.plugin.JavaPlugin;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import java.util.logging.Level;

public class MyPlugin extends JavaPlugin {

    public MyPlugin(JavaPluginInit init) {
        super(init);
    }

    @Override
    public void setup() {
        // Appelé pendant l'initialisation du plugin
        // Enregistrer les configs, préparer les ressources
        getLogger().at(Level.INFO).log("MyPlugin s'initialise !");
    }

    @Override
    public void start() {
        // Appelé quand le plugin démarre
        // Enregistrer les commandes, événements, entités
        getLogger().at(Level.INFO).log("MyPlugin a démarré !");
    }

    @Override
    public void shutdown() {
        // Appelé quand le plugin s'arrête
        // Nettoyer les ressources
        getLogger().at(Level.INFO).log("MyPlugin s'arrête !");
    }
}

{{< callout type="info" >}} Le constructeur avec le paramètre JavaPluginInit est obligatoire. Appelez toujours super(init). {{< /callout >}}

API de Logging

Hytale utilise une API de logging basée sur Flogger :

import java.util.logging.Level;

// Logging basique
getLogger().at(Level.INFO).log("Message d'information");
getLogger().at(Level.WARNING).log("Message d'avertissement");
getLogger().at(Level.SEVERE).log("Message d'erreur");

// Avec formatage
getLogger().at(Level.INFO).log("Le joueur %s a rejoint la partie", playerName);

build.gradle.kts

Configurez votre fichier de build Gradle (DSL Kotlin) :

plugins {
    java
}

group = "com.example"
version = "1.0.0"

repositories {
    mavenCentral()
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(25)
    }
}

dependencies {
    // API Serveur Hytale - compile only car fournie à l'exécution
    compileOnly(files("../../../HytaleServer.jar"))

    // Tests
    testImplementation(libs.junit)
}

tasks.jar {
    archiveBaseName.set("MyPlugin")
}

{{< callout type="info" >}} Le chemin vers HytaleServer.jar dépend de l'emplacement de votre source de plugin par rapport au répertoire du jeu. {{< /callout >}}

Registres Disponibles

Votre plugin a accès à plusieurs registres via la classe de base :

Méthode Type de Registre Utilité
getEventRegistry() EventRegistry Enregistrer des écouteurs d'événements
getCommandRegistry() CommandRegistry Enregistrer des commandes
getEntityRegistry() EntityRegistry Enregistrer des entités personnalisées
getBlockStateRegistry() BlockStateRegistry Enregistrer des états de blocs
getTaskRegistry() TaskRegistry Planifier des tâches
getAssetRegistry() AssetRegistry Enregistrer des assets
getEntityStoreRegistry() EntityStoreRegistry Enregistrer des composants d'entité
getChunkStoreRegistry() ChunkStoreRegistry Enregistrer des composants de chunk

Étapes Suivantes

Découvrez le Cycle de Vie du Plugin pour comprendre quand chaque méthode est appelée.