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

197 lines
5.3 KiB
Markdown

---
title: Créer un Plugin
type: docs
weight: 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/` :
```json
{
"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` :
```java
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 :
```java
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) :
```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](../plugin-lifecycle) pour comprendre quand chaque méthode est appelée.