--- title: Registres type: docs weight: 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 : ```java @Override public void start() { getCommandRegistry().registerCommand(new MyCommand()); } ``` Voir [Commandes](../../commands) pour la documentation détaillée. ## EventRegistry Abonnez-vous aux événements du jeu : ```java 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](../../events) pour la documentation détaillée. ## EntityRegistry Enregistrez des types d'entités personnalisées : ```java @Override public void start() { getEntityRegistry().register(MyCustomEntity.class, MyCustomEntity::new); } ``` Voir [Entités](../../entities) pour la documentation détaillée. ## BlockStateRegistry Enregistrez des états de blocs personnalisés : ```java @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 >}} ```java 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 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) repeating); } ``` Voir [Tâches](../../tasks) pour la documentation détaillée. ## AssetRegistry Enregistrez des assets de jeu personnalisés : ```java @Override public void start() { getAssetRegistry().register(myAsset); } ``` ## CodecRegistry Pour enregistrer des codecs de sérialisation personnalisés : ```java 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()` : ```java @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.