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. 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. 2.Compilez avec l'API Folia

    Utilisez la dépendance folia-api pour votre version depuis le dépôt PaperMC, avec la portée provided, dans un projet Maven ou Gradle.

  3. 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. 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 teleportAsync au lieu de teleport, et planifiez la tâche sur la région de la cible avant de la modifier.

  5. 5.Déclarez la prise en charge de Folia

    Ajoutez folia-supported: true à plugin.yml. Sans cela, Folia refuse de charger le plugin.

  6. 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

SchedulerComment l'obtenirÀ utiliser pour
RégionBukkit.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 globaleBukkit.getGlobalRegionScheduler()Heure du monde, météo, ce qui n'est pas lié à un emplacement
AsynchroneBukkit.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 UnsupportedOperationException sur 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
Comment créer un plugin Folia (schedulers de région) | Codexe