187 lines
5.1 KiB
Markdown
187 lines
5.1 KiB
Markdown
---
|
|
title: Cycle de Vie du Plugin
|
|
type: docs
|
|
weight: 4
|
|
---
|
|
|
|
Comprendre le cycle de vie du plugin est essentiel pour initialiser et nettoyer correctement les ressources de votre plugin.
|
|
|
|
## États du Cycle de Vie
|
|
|
|
Un plugin passe par plusieurs états durant sa vie :
|
|
|
|
```
|
|
NONE → SETUP → START → ENABLED → SHUTDOWN → DISABLED
|
|
```
|
|
|
|
| État | Description |
|
|
|------|-------------|
|
|
| `NONE` | État initial avant toute initialisation |
|
|
| `SETUP` | Le plugin est en phase de configuration |
|
|
| `START` | Le plugin démarre |
|
|
| `ENABLED` | Le plugin est pleinement opérationnel |
|
|
| `SHUTDOWN` | Le plugin s'arrête |
|
|
| `DISABLED` | Le plugin a été désactivé |
|
|
|
|
## Méthodes du Cycle de Vie
|
|
|
|
### Constructeur
|
|
|
|
Le constructeur est appelé lorsque le plugin est instancié. Utilisez ceci pour :
|
|
|
|
- Enregistrer les fichiers de configuration avec `withConfig()` (recommandé)
|
|
- Stocker la référence init si nécessaire
|
|
|
|
```java
|
|
import com.hypixel.hytale.server.core.util.Config;
|
|
|
|
private Config<MyConfig> config;
|
|
|
|
public MyPlugin(JavaPluginInit init) {
|
|
super(init);
|
|
// Enregistrer la config dans le constructeur - chargée de façon asynchrone pendant preLoad()
|
|
config = withConfig(MyConfig.CODEC);
|
|
}
|
|
```
|
|
|
|
{{< callout type="info" >}}
|
|
Enregistrer les configs dans le constructeur garantit qu'elles sont chargées de façon asynchrone pendant `preLoad()`, avant que `setup()` ne soit appelé. C'est l'approche recommandée.
|
|
{{< /callout >}}
|
|
|
|
### setup()
|
|
|
|
Appelé pendant la phase initiale de configuration, après le chargement des configs. Utilisez ceci pour :
|
|
|
|
- Préparer les ressources qui ne dépendent pas d'autres plugins
|
|
- Logique d'initialisation précoce
|
|
- Accéder aux valeurs de configuration chargées
|
|
|
|
```java
|
|
import java.util.logging.Level;
|
|
|
|
@Override
|
|
public void setup() {
|
|
// La config est déjà chargée et disponible
|
|
getLogger().at(Level.INFO).log("Configuration terminée !");
|
|
}
|
|
```
|
|
|
|
{{< callout type="info" >}}
|
|
Pour créer des classes de configuration avec `CODEC`, voir la [documentation des Codecs]({{< ref "core-concepts/codecs#buildercodec" >}}).
|
|
{{< /callout >}}
|
|
|
|
{{< callout type="warning" >}}
|
|
N'enregistrez pas de commandes ou d'événements dans `setup()`. D'autres plugins peuvent ne pas être encore chargés.
|
|
{{< /callout >}}
|
|
|
|
### start()
|
|
|
|
Appelé après que tous les plugins aient terminé leur configuration. Utilisez ceci pour :
|
|
|
|
- Enregistrer les commandes
|
|
- Enregistrer les écouteurs d'événements
|
|
- Enregistrer les entités
|
|
- Interagir avec d'autres plugins
|
|
|
|
```java
|
|
import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent;
|
|
import com.hypixel.hytale.server.core.universe.PlayerRef;
|
|
import java.util.logging.Level;
|
|
|
|
@Override
|
|
public void start() {
|
|
// Enregistrer les commandes
|
|
getCommandRegistry().registerCommand(new MyCommand());
|
|
|
|
// Enregistrer les événements
|
|
getEventRegistry().register(PlayerConnectEvent.class, this::onPlayerConnect);
|
|
|
|
getLogger().at(Level.INFO).log("Plugin démarré !");
|
|
}
|
|
|
|
private void onPlayerConnect(PlayerConnectEvent event) {
|
|
// Voir la documentation PlayerRef pour les références thread-safe aux joueurs
|
|
PlayerRef playerRef = event.getPlayerRef();
|
|
getLogger().at(Level.INFO).log("Joueur en connexion : " + playerRef.getUsername());
|
|
}
|
|
```
|
|
|
|
{{< callout type="info" >}}
|
|
Voir la [documentation des Registres]({{< ref "core-concepts/registries" >}}) pour une liste complète des registres disponibles et leur utilisation.
|
|
{{< /callout >}}
|
|
|
|
### shutdown()
|
|
|
|
Appelé quand le plugin est désactivé ou le serveur s'arrête. Utilisez ceci pour :
|
|
|
|
- Sauvegarder les données
|
|
- Nettoyer les ressources
|
|
- Annuler les tâches planifiées
|
|
|
|
```java
|
|
import java.util.logging.Level;
|
|
|
|
@Override
|
|
public void shutdown() {
|
|
// Sauvegarder les données en attente
|
|
savePlayerData();
|
|
|
|
getLogger().at(Level.INFO).log("Arrêt du plugin terminé !");
|
|
}
|
|
```
|
|
|
|
{{< callout type="info" >}}
|
|
Les registres sont automatiquement nettoyés après `shutdown()`. Vous n'avez pas besoin de désinscrire manuellement les commandes ou événements.
|
|
{{< /callout >}}
|
|
|
|
## Diagramme du Flux de Vie
|
|
|
|
{{< steps >}}
|
|
|
|
### Chargement du Plugin
|
|
Le serveur découvre votre JAR de plugin et lit `manifest.json`
|
|
|
|
### Appel du Constructeur
|
|
`MyPlugin(JavaPluginInit init)` est instancié
|
|
|
|
### preLoad()
|
|
Les fichiers de configuration enregistrés avec `withConfig()` sont chargés de façon asynchrone
|
|
|
|
### setup()
|
|
Votre méthode `setup()` est appelée
|
|
|
|
### start()
|
|
Votre méthode `start()` est appelée après que tous les plugins soient configurés
|
|
|
|
### En Cours d'Exécution
|
|
Le plugin est maintenant en état `ENABLED` et pleinement opérationnel
|
|
|
|
### shutdown()
|
|
Appelé quand le serveur s'arrête ou le plugin est désactivé
|
|
|
|
### Nettoyage
|
|
Tous les registres sont automatiquement nettoyés
|
|
|
|
{{< /steps >}}
|
|
|
|
## Vérifier l'État du Plugin
|
|
|
|
Vous pouvez vérifier si votre plugin est activé :
|
|
|
|
```java
|
|
if (isEnabled()) {
|
|
// Le plugin fonctionne
|
|
}
|
|
|
|
if (isDisabled()) {
|
|
// Le plugin ne fonctionne pas
|
|
}
|
|
|
|
// Obtenir l'état actuel
|
|
PluginState state = getState();
|
|
```
|
|
|
|
## Étapes Suivantes
|
|
|
|
Apprenez à [Compiler et Exécuter](../building-and-running) votre plugin.
|