Handleiding
Een Folia-plugin maken
Bijgewerkt 18 oktober 2026
Folia is een fork van Paper die de wereld in regio's opsplitst en die op verschillende threads laat tikken, zodat grote servers veel CPU-cores kunnen gebruiken. Er is geen enkele main thread meer, en daardoor werkt de gewone Bukkit-scheduler niet meer. Een Folia-plugin is een Paper-plugin die voor dat model is geschreven, en dat moet hij in zijn plugin.yml aangeven.
Een voorbeeld met de details over timing die Folia nodig heeft.
Genereer dit met CodexeStap voor stap
1.Controleer of je Folia nodig hebt
Folia helpt servers met veel spelers die verspreid over de wereld zitten. De meeste servers draaien Paper; veel populaire plugins ondersteunen Folia niet, dus controleer eerst de plugins waarop je vertrouwt.
2.Bouw tegen de Folia-API
Gebruik de dependency
folia-apivoor je versie uit de PaperMC-repository, met scopeprovided, in een Maven- of Gradle-project.3.Vervang de Bukkit-scheduler
Bukkit.getScheduler()werkt niet op Folia. Gebruik de region scheduler voor werk op een locatie, de entity scheduler voor werk aan een speler of mob, de global region scheduler voor taken in de hele wereld en de async scheduler voor I/O.4.Raak dingen alleen aan vanuit hun eigen regio
Verander een blok of een entity alleen op de thread die er eigenaar van is. Gebruik
teleportAsyncin plaats vanteleporten plan werk in op de regio van het doel voordat je het verandert.5.Geef Folia-ondersteuning aan
Voeg
folia-supported: truetoe aanplugin.yml. Zonder die regel weigert Folia de plugin te laden.6.Test op een Folia-server
Compileren bewijst dat de code tegen de Folia-API bouwt, niet dat hij thread-safe is. Draai hem op een Folia-testserver met meerdere spelers op verschillende plekken.
De vier schedulers
| Scheduler | Ophalen met | Gebruiken voor |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Werk op een locatie in de wereld: blokken plaatsen, spawnen |
| Entity | entity.getScheduler() | Werk aan één speler of mob, volgt die over regio's heen |
| Global region | Bukkit.getGlobalRegionScheduler() | Wereldtijd, weer, dingen die niet aan een locatie vastzitten |
| Async | Bukkit.getAsyncScheduler() | Database, bestanden, webverzoeken, nooit de wereld |
Wat meestal stukgaat
- Herhalende taken voor alle spelers: één lus over elke online speler werkt niet meer; plan in plaats daarvan een taak in op de entity scheduler van elke speler.
- Teleports en warmups: "teleporteer na 3 seconden" vereist de entity scheduler en
teleportAsync. - Gedeelde data: maps en tellers die vanuit meerdere regio's worden gebruikt, moeten thread-safe zijn, bijvoorbeeld concurrent collections.
- Dependencies: een library die de Bukkit-scheduler aanroept, gooit op Folia een
UnsupportedOperationException.
Eén plugin voor Paper en Folia
De region-, entity-, global- en async-schedulers horen op actuele versies ook bij de Paper-API, dus een plugin die alleen die gebruikt en folia-supported: true aangeeft, kan zowel op Paper als op Folia draaien. Dat is vaak het beste doel: één .jar voor elke server.
Met Codexe
Kies het type Folia. De gegenereerde plugin plant werk in met de region-, entity-, global region- en async-schedulers, geeft folia-supported: true aan en bouwt met Maven tegen de Folia-API. Hij wordt gecompileerd en gecontroleerd voordat hij Klaar is.
Zet details over timing in het verzoek ("elke minuut voor elke online speler", "teleporteer na 3 seconden"): daar verschilt Folia-code het meest. Probeer het nu draait nog geen Folia-servers, dus test de .jar op je eigen Folia-server.
Vragen
Draaien Paper-plugins op Folia?
Alleen als ze ervoor zijn geschreven en folia-supported: true aangeven. Een gewone Paper-plugin die de Bukkit-scheduler gebruikt, wordt geweigerd of faalt.
Draait een Folia-plugin op Paper?
Ja, als hij alleen API's gebruikt die Paper ook heeft, en daar horen op actuele Paper-versies de Folia-schedulers bij.
Mijn Folia-plugin gooit een exception over de scheduler
Een deel van de code, vaak uit een library, gebruikt nog de Bukkit-scheduler. Vraag in de projectchat om het naar de region of entity scheduler te verplaatsen.
Maak een Folia-plugin
Deze prompt opent klaar om te versturen:
“Een Folia 1.21.4-plugin genaamd RTP: /rtp teleporteert de speler naar een willekeurige veilige locatie binnen 5000 blokken na een warmup van 3 seconden die bij beweging wordt geannuleerd, via de entity scheduler en teleportAsync, een cooldown van 10 minuten per speler opgeslagen in SQLite, folia-supported: true, straal, cooldown en berichten in config.yml.”
Genereer dit met Codexe