Guide
Slik lager du et Folia-plugin
Oppdatert 18. oktober 2026
Folia er en fork av Paper som deler verdenen inn i regioner og tikker dem på ulike tråder, så store servere kan bruke mange CPU-kjerner. Det finnes ikke lenger én hovedtråd, og det ødelegger den vanlige Bukkit-scheduleren. Et Folia-plugin er et Paper-plugin skrevet for den modellen, og det må si det i sin plugin.yml.
Et eksempel med tidsdetaljene Folia trenger.
Generer dette med CodexeSteg for steg
1.Sjekk at du trenger Folia
Folia hjelper servere med mange spillere spredt utover verdenen. De fleste servere kjører Paper; mange populære plugins støtter ikke Folia, så sjekk dem du er avhengig av først.
2.Bygg mot Folia-API-et
Bruk avhengigheten
folia-apifor din versjon fra PaperMC-repositoryet, med scopetprovided, i et Maven- eller Gradle-prosjekt.3.Erstatt Bukkit-scheduleren
Bukkit.getScheduler()fungerer ikke på Folia. Bruk region-scheduleren for arbeid på et sted, entitets-scheduleren for arbeid på en spiller eller mob, den globale region-scheduleren for oppgaver i hele verdenen og async-scheduleren for I/O.4.Rør ting bare fra deres egen region
Endre en blokk eller en entitet bare på tråden som eier den. Bruk
teleportAsynci stedet forteleport, og planlegg på målets region før du endrer det.5.Oppgi støtte for Folia
Legg til
folia-supported: trueiplugin.yml. Uten det nekter Folia å laste pluginet.6.Test på en Folia-server
Kompilering beviser at koden bygger mot Folia-API-et, ikke at den er trådsikker. Kjør den på en Folia-testserver med flere spillere på ulike steder.
De fire schedulerne
| Scheduler | Hentes med | Brukes til |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Arbeid på et sted i verdenen: sette blokker, spawne |
| Entitet | entity.getScheduler() | Arbeid på én spiller eller mob, den følger dem på tvers av regioner |
| Global region | Bukkit.getGlobalRegionScheduler() | Tid i verdenen, vær, ting som ikke er knyttet til et sted |
| Async | Bukkit.getAsyncScheduler() | Database, filer, nettforespørsler, aldri verdenen |
Hva som vanligvis går i stykker
- Gjentakende oppgaver for alle spillere: én løkke over alle spillere på nett fungerer ikke lenger; planlegg i stedet en oppgave på entitets-scheduleren til hver spiller.
- Teleporteringer og oppvarming: «teleporter etter 3 sekunder» trenger entitets-scheduleren og
teleportAsync. - Delte data: maps og tellere som brukes fra flere regioner, må være trådsikre, for eksempel samtidige samlinger.
- Avhengigheter: et bibliotek som kaller Bukkit-scheduleren, kaster
UnsupportedOperationExceptionpå Folia.
Ett plugin for Paper og Folia
Schedulerne for region, entitet, global og async er også en del av Paper-API-et i nyere versjoner, så et plugin som bare bruker dem og oppgir folia-supported: true, kan kjøre på både Paper og Folia. Det er ofte det beste målet: én .jar for alle servere.
Med Codexe
Velg typen Folia. Det genererte pluginet planlegger arbeid med schedulerne for region, entitet, global region og async, oppgir folia-supported: true og bygger mot Folia-API-et med Maven. Det kompileres og sjekkes før det er Klar.
Skriv tidsdetaljene i forespørselen («hvert minutt for hver spiller på nett», «teleporter etter 3 sekunder»): det er der Folia-koden skiller seg mest. Prøv nå kjører ikke Folia-servere ennå, så test .jar-filen på din egen Folia-server.
Spørsmål
Kjører Paper-plugins på Folia?
Bare hvis de er skrevet for det og oppgir folia-supported: true. Et vanlig Paper-plugin som bruker Bukkit-scheduleren, blir avvist eller feiler.
Kjører et Folia-plugin på Paper?
Ja, når det bare bruker API-er som Paper også har, og det inkluderer Folia-schedulerne i nyere Paper-versjoner.
Folia-pluginet mitt kaster et unntak om scheduleren
Noe kode, ofte fra et bibliotek, bruker fortsatt Bukkit-scheduleren. Be prosjektchatten om å flytte den til region- eller entitets-scheduleren.
Lag et Folia-plugin
Denne prompten åpnes klar til å sendes:
“Et Folia 1.21.4-plugin kalt RTP: /rtp teleporterer spilleren til et tilfeldig trygt sted innenfor 5000 blokker etter 3 sekunders oppvarming som avbrytes ved bevegelse, med entitets-scheduleren og teleportAsync, 10 minutters nedkjøling per spiller lagret i SQLite, folia-supported: true, radius, nedkjøling og meldinger i config.yml.”
Generer dette med Codexe