5.2 KiB
title, type, weight
| title | type | weight |
|---|---|---|
| Registres | docs | 1 |
Les registres sont au cœur du développement de plugins Hytale. Ils fournissent un moyen d'enregistrer et gérer divers éléments du jeu comme les commandes, événements, entités, et plus.
Packages:
com.hypixel.hytale.server.core.command.system(CommandRegistry)com.hypixel.hytale.event(EventRegistry)com.hypixel.hytale.server.core.plugin.registry(AssetRegistry, CodecRegistry)
Registres Disponibles
Votre plugin a accès à ces registres via la classe PluginBase :
| Registre | Méthode | Utilité |
|---|---|---|
| CommandRegistry | getCommandRegistry() |
Enregistrer des commandes serveur |
| EventRegistry | getEventRegistry() |
Enregistrer des écouteurs d'événements |
| EntityRegistry | getEntityRegistry() |
Enregistrer des entités personnalisées |
| BlockStateRegistry | getBlockStateRegistry() |
Enregistrer des états de blocs |
| TaskRegistry | getTaskRegistry() |
Planifier et gérer des tâches |
| AssetRegistry | getAssetRegistry() |
Enregistrer des assets personnalisés |
| ClientFeatureRegistry | getClientFeatureRegistry() |
Enregistrer des fonctionnalités client |
| EntityStoreRegistry | getEntityStoreRegistry() |
Composants de stockage d'entités |
| ChunkStoreRegistry | getChunkStoreRegistry() |
Composants de stockage de chunks |
CommandRegistry
Enregistrez des commandes que les joueurs peuvent exécuter :
@Override
public void start() {
getCommandRegistry().registerCommand(new MyCommand());
}
Voir Commandes pour la documentation détaillée.
EventRegistry
Abonnez-vous aux événements du jeu :
import com.hypixel.hytale.event.EventPriority;
import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent;
import java.util.logging.Level;
@Override
public void start() {
// Enregistrement simple
getEventRegistry().register(PlayerConnectEvent.class, event -> {
getLogger().at(Level.INFO).log("Joueur connecté : " + event.getPlayerRef().getUsername());
});
// Avec priorité
getEventRegistry().register(
EventPriority.EARLY,
PlayerConnectEvent.class,
this::onPlayerJoin
);
}
Voir Événements pour la documentation détaillée.
EntityRegistry
Enregistrez des types d'entités personnalisées :
@Override
public void start() {
getEntityRegistry().register(MyCustomEntity.class, MyCustomEntity::new);
}
Voir Entités pour la documentation détaillée.
BlockStateRegistry
Enregistrez des états de blocs personnalisés :
@Override
public void start() {
getBlockStateRegistry().register(myBlockState);
}
TaskRegistry
Suit les tâches async pour le nettoyage lors de l'arrêt du plugin :
{{< callout type="warning" >}}
TaskRegistry n'a PAS de méthodes runAsync(), runSync(), runLater(), ou runRepeating(). Utilisez les APIs de concurrence standard de Java.
{{< /callout >}}
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@Override
public void start() {
// Opération async
CompletableFuture<Void> task = CompletableFuture.runAsync(() -> {
// Travail en arrière-plan
});
getTaskRegistry().registerTask(task);
// Opération différée (3 secondes)
CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS)
.execute(() -> {
getLogger().at(Level.INFO).log("Tâche différée exécutée !");
});
// Opération répétitive (toutes les 5 minutes)
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> repeating = scheduler.scheduleAtFixedRate(() -> {
getLogger().at(Level.INFO).log("Tâche répétitive !");
}, 0, 5, TimeUnit.MINUTES);
getTaskRegistry().registerTask((ScheduledFuture<Void>) repeating);
}
Voir Tâches pour la documentation détaillée.
AssetRegistry
Enregistrez des assets de jeu personnalisés :
@Override
public void start() {
getAssetRegistry().register(myAsset);
}
CodecRegistry
Pour enregistrer des codecs de sérialisation personnalisés :
getCodecRegistry(MyType.CODEC_MAP).register("my_type", MyType.CODEC);
Nettoyage Automatique
{{< callout type="info" >}}
Tous les enregistrements sont automatiquement nettoyés quand votre plugin est désactivé. Vous n'avez pas besoin de désinscrire manuellement quoi que ce soit dans votre méthode shutdown().
{{< /callout >}}
Timing des Enregistrements
Enregistrez vos composants dans la méthode start(), pas dans setup() :
@Override
public void setup() {
// Configuration uniquement - n'enregistrez pas ici
withConfig(MyConfig.CODEC);
}
@Override
public void start() {
// Enregistrez tout ici
getCommandRegistry().registerCommand(new MyCommand());
getEventRegistry().register(PlayerConnectEvent.class, this::onJoin);
}
Cela garantit que tous les plugins ont terminé leur phase de configuration avant que tout enregistrement ne se produise.