This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
---
title: Tâches
type: docs
weight: 3
---
Le système de tâches dans Hytale gère les opérations asynchrones en utilisant les APIs de concurrence standard de Java.
{{< cards >}}
{{< card link="task-registry" title="TaskRegistry" subtitle="Enregistrement et suivi des tâches" >}}
{{< card link="async-operations" title="Opérations Async" subtitle="Patterns async thread-safe" >}}
{{< /cards >}}
## Aperçu
{{< callout type="warning" >}}
**Important :** TaskRegistry n'a PAS de méthodes `runAsync()`, `runSync()`, `runLater()`, ou `runRepeating()`. Hytale utilise les APIs standard Java `CompletableFuture` et `ScheduledExecutorService`.
{{< /callout >}}
Le TaskRegistry permet aux plugins de :
- **Enregistrer des tâches** - Suivre les `CompletableFuture` et `ScheduledFuture` pour le nettoyage
- **Opérations async** - Utiliser `CompletableFuture.runAsync()`
- **Opérations différées** - Utiliser `CompletableFuture.delayedExecutor()`
- **Opérations répétitives** - Utiliser `ScheduledExecutorService`
## Démarrage Rapide
```java
// Exécuter une opération async
CompletableFuture.runAsync(() -> {
// Code thread d'arrière-plan
Data result = computeExpensiveData();
// Retourner au thread du monde pour les changements d'état du jeu
world.execute(() -> {
playerRef.sendMessage(Message.raw("Résultat : " + result));
});
});
// Opération différée (3 secondes)
CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS)
.execute(() -> {
world.execute(() -> {
// Code différé sur le thread du monde
});
});
```
## Concepts Clés
{{< callout type="warning" >}}
**Sécurité des Threads :** Chaque World s'exécute sur son propre thread dédié. Utilisez toujours `world.execute()` lors de la modification de l'état du jeu (joueurs, entités, blocs) depuis du code async. La manipulation directe depuis des threads async peut causer des crashs ou corruption de données.
{{< /callout >}}
```java
// Pattern correct
PlayerRef playerRef = player.getPlayerRef();
World world = player.getWorld();
CompletableFuture.runAsync(() -> {
// Faire le calcul lourd ici (thread d'arrière-plan)
Data result = computeExpensiveData();
// Retourner au thread du monde pour les changements d'état du jeu
world.execute(() -> {
playerRef.sendMessage(Message.raw("Résultat : " + result));
});
});
```