Files
Documentation/content/core-concepts/registries.fr.md
2026-01-20 20:33:59 +01:00

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.