Guide
Comment créer un plugin Folia
Mis à jour le 18 octobre 2026
Folia est un fork de Paper qui découpe le monde en régions et les fait tourner sur des threads différents, pour que les gros serveurs puissent utiliser de nombreux cœurs de processeur. Il n'y a plus de thread principal unique, et cela casse le scheduler Bukkit habituel. Un plugin Folia est un plugin Paper écrit pour ce modèle, et il doit l'indiquer dans son plugin.yml.
Un exemple avec les détails de timing dont Folia a besoin.
Générer ceci avec CodexeÉtape par étape
1.Vérifiez que vous avez besoin de Folia
Folia aide les serveurs avec beaucoup de joueurs répartis dans le monde. La plupart des serveurs tournent sous Paper ; de nombreux plugins populaires ne prennent pas en charge Folia, alors vérifiez d'abord ceux dont vous dépendez.
2.Compilez avec l'API Folia
Utilisez la dépendance
folia-apipour votre version depuis le dépôt PaperMC, avec la portéeprovided, dans un projet Maven ou Gradle.3.Remplacez le scheduler Bukkit
Bukkit.getScheduler()ne fonctionne pas sur Folia. Utilisez le scheduler de région pour le travail à un emplacement, le scheduler d'entité pour le travail sur un joueur ou un mob, le scheduler de région global pour les tâches à l'échelle du monde, et le scheduler asynchrone pour les entrées/sorties.4.Ne touchez aux choses que depuis leur propre région
Modifiez un bloc ou une entité uniquement sur le thread qui le possède. Utilisez
teleportAsyncau lieu deteleport, et planifiez la tâche sur la région de la cible avant de la modifier.5.Déclarez la prise en charge de Folia
Ajoutez
folia-supported: trueàplugin.yml. Sans cela, Folia refuse de charger le plugin.6.Testez sur un serveur Folia
Compiler prouve que le code se construit avec l'API Folia, pas qu'il est thread-safe. Faites-le tourner sur un serveur de test Folia avec plusieurs joueurs à des endroits différents.
Les quatre schedulers
| Scheduler | Comment l'obtenir | À utiliser pour |
|---|---|---|
| Région | Bukkit.getRegionScheduler() | Travail à un emplacement du monde : poser des blocs, faire apparaître des entités |
| Entité | entity.getScheduler() | Travail sur un joueur ou un mob, il le suit d'une région à l'autre |
| Région globale | Bukkit.getGlobalRegionScheduler() | Heure du monde, météo, ce qui n'est pas lié à un emplacement |
| Asynchrone | Bukkit.getAsyncScheduler() | Base de données, fichiers, requêtes web, jamais le monde |
Ce qui casse le plus souvent
- Tâches répétées pour tous les joueurs : une seule boucle sur tous les joueurs en ligne ne fonctionne plus ; planifiez plutôt une tâche sur le scheduler d'entité de chaque joueur.
- Téléportations et délais : « téléporter après 3 secondes » nécessite le scheduler d'entité et
teleportAsync. - Données partagées : les maps et compteurs utilisés depuis plusieurs régions doivent être thread-safe, par exemple des collections concurrentes.
- Dépendances : une bibliothèque qui appelle le scheduler Bukkit lève une
UnsupportedOperationExceptionsur Folia.
Un seul plugin pour Paper et Folia
Les schedulers de région, d'entité, global et asynchrone font aussi partie de l'API Paper dans les versions actuelles, donc un plugin qui n'utilise qu'eux et déclare folia-supported: true peut tourner à la fois sur Paper et sur Folia. C'est souvent la meilleure cible : un seul .jar pour tous les serveurs.
Avec Codexe
Choisissez le type Folia. Le plugin généré planifie le travail avec les schedulers de région, d'entité, de région global et asynchrone, déclare folia-supported: true et se compile avec l'API Folia via Maven. Il est compilé et vérifié avant d'être prêt.
Mettez les détails de timing dans la demande (« chaque minute pour chaque joueur en ligne », « téléporter après 3 secondes ») : c'est là que le code Folia diffère le plus. Tester maintenant ne lance pas encore de serveurs Folia, alors testez le .jar sur votre propre serveur Folia.
Questions
Les plugins Paper tournent-ils sur Folia ?
Seulement s'ils sont écrits pour lui et déclarent folia-supported: true. Un plugin Paper normal qui utilise le scheduler Bukkit est refusé ou plante.
Un plugin Folia tourne-t-il sur Paper ?
Oui, s'il n'utilise que des API que Paper possède aussi, ce qui inclut les schedulers Folia dans les versions actuelles de Paper.
Mon plugin Folia lève une exception liée au scheduler
Une partie du code, souvent issue d'une bibliothèque, utilise encore le scheduler Bukkit. Demandez dans le chat du projet de le passer sur le scheduler de région ou d'entité.
Créer un plugin Folia
Ce prompt s'ouvre prêt à être envoyé :
“Un plugin Folia 1.21.4 appelé RTP : /rtp téléporte le joueur vers un emplacement aléatoire sûr dans un rayon de 5000 blocs après un délai de 3 secondes qui s'annule au mouvement, en utilisant le scheduler d'entité et teleportAsync, un temps de recharge de 10 minutes par joueur sauvegardé dans SQLite, folia-supported: true, rayon, temps de recharge et messages dans config.yml.”
Générer ceci avec Codexe