Guide
Sådan laver du et Folia-plugin
Opdateret 18. oktober 2026
Folia er en fork af Paper, der deler verdenen op i regioner og ticker dem på forskellige tråde, så store servere kan bruge mange CPU-kerner. Der er ikke længere én hovedtråd, og det ødelægger den sædvanlige Bukkit-scheduler. Et Folia-plugin er et Paper-plugin skrevet til den model, og det skal stå i dets plugin.yml.
Et eksempel med de detaljer om timing, som Folia har brug for.
Generér dette med CodexeTrin for trin
1.Tjek, at du har brug for Folia
Folia hjælper servere med mange spillere spredt ud over verdenen. De fleste servere kører Paper; mange populære plugins understøtter ikke Folia, så tjek først dem, du er afhængig af.
2.Byg mod Folia-API'en
Brug afhængigheden
folia-apitil din version fra PaperMC-repositoryet med scopeprovidedi et Maven- eller Gradle-projekt.3.Erstat Bukkit-scheduleren
Bukkit.getScheduler()virker ikke på Folia. Brug region scheduleren til arbejde på et sted, entity scheduleren til arbejde på en spiller eller mob, global region scheduleren til opgaver for hele verdenen og async scheduleren til I/O.4.Rør kun ved ting fra deres egen region
Ændr kun en blok eller en entity på den tråd, der ejer den. Brug
teleportAsynci stedet forteleport, og planlæg arbejdet på målets region, før du ændrer det.5.Erklær understøttelse af Folia
Tilføj
folia-supported: truetilplugin.yml. Uden det nægter Folia at indlæse pluginet.6.Test på en Folia-server
At det kompilerer, beviser, at koden bygger mod Folia-API'en, ikke at den er trådsikker. Kør det på en Folia-testserver med flere spillere forskellige steder.
De fire schedulers
| Scheduler | Hentes med | Brug den til |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Arbejde på et sted i verdenen: placere blokke, spawne |
| Entity | entity.getScheduler() | Arbejde på én spiller eller mob, den følger dem på tværs af regioner |
| Global region | Bukkit.getGlobalRegionScheduler() | Tid i verdenen, vejr, ting, der ikke er knyttet til et sted |
| Async | Bukkit.getAsyncScheduler() | Database, filer, webforespørgsler, aldrig verdenen |
Hvad der typisk går i stykker
- Gentagende opgaver for alle spillere: én løkke over alle spillere online virker ikke længere; planlæg i stedet en opgave på hver spillers entity scheduler.
- Teleporter og opvarmning: "teleportér efter 3 sekunder" kræver entity scheduleren og
teleportAsync. - Delte data: maps og tællere, der bruges fra flere regioner, skal være trådsikre, for eksempel concurrent collections.
- Afhængigheder: et bibliotek, der kalder Bukkit-scheduleren, kaster
UnsupportedOperationExceptionpå Folia.
Ét plugin til Paper og Folia
Region-, entity-, global- og async-schedulerne er også en del af Paper-API'en i de nuværende versioner, så et plugin, der kun bruger dem og erklærer folia-supported: true, kan køre på både Paper og Folia. Det er ofte det bedste mål: én .jar til alle servere.
Med Codexe
Vælg typen Folia. Det genererede plugin planlægger arbejde med region-, entity-, global region- og async-schedulerne, erklærer folia-supported: true og bygger mod Folia-API'en med Maven. Det kompileres og tjekkes, før det er Klar.
Skriv detaljer om timing i anmodningen ("hvert minut for hver spiller online", "teleportér efter 3 sekunder"): det er der, Folia-kode adskiller sig mest. Prøv det nu kører endnu ikke Folia-servere, så test .jar-filen på din egen Folia-server.
Spørgsmål
Kører Paper-plugins på Folia?
Kun hvis de er skrevet til det og erklærer folia-supported: true. Et normalt Paper-plugin, der bruger Bukkit-scheduleren, bliver afvist eller fejler.
Kører et Folia-plugin på Paper?
Ja, når det kun bruger API'er, som Paper også har, og det omfatter Folia-schedulerne i de nuværende Paper-versioner.
Mit Folia-plugin kaster en exception om scheduleren
Noget kode, ofte fra et bibliotek, bruger stadig Bukkit-scheduleren. Bed projektchatten om at flytte det til region- eller entity scheduleren.
Lav et Folia-plugin
Denne prompt åbnes klar til at sende:
“Et Folia 1.21.4-plugin kaldet RTP: /rtp teleporterer spilleren til et tilfældigt sikkert sted inden for 5000 blokke efter 3 sekunders opvarmning, der annulleres ved bevægelse, med entity scheduleren og teleportAsync, 10 minutters cooldown pr. spiller gemt i SQLite, folia-supported: true, radius, cooldown og beskeder i config.yml.”
Generér dette med Codexe