197 lines
5.3 KiB
Markdown
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.
|