Init
This commit is contained in:
178
content/core-concepts/registries.fr.md
Normal file
178
content/core-concepts/registries.fr.md
Normal file
@@ -0,0 +1,178 @@
|
||||
---
|
||||
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<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](../../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.
|
||||
Reference in New Issue
Block a user