Guide
Så gör du ett Folia-plugin
Uppdaterad 18 oktober 2026
Folia är en fork av Paper som delar upp världen i regioner och tickar dem på olika trådar, så att stora servrar kan använda många CPU-kärnor. Det finns ingen enskild huvudtråd längre, och det förstör den vanliga Bukkit-schemaläggaren. Ett Folia-plugin är ett Paper-plugin skrivet för den modellen, och det måste ange det i sin plugin.yml.
Ett exempel med de tidsdetaljer som Folia behöver.
Generera det här med CodexeSteg för steg
1.Kontrollera att du behöver Folia
Folia hjälper servrar med många spelare utspridda över världen. De flesta servrar kör Paper; många populära plugin stöder inte Folia, så kontrollera först de plugin du är beroende av.
2.Bygg mot Folia-API:et
Använd beroendet
folia-apiför din version från PaperMC-repot, med scopeprovided, i ett Maven- eller Gradle-projekt.3.Ersätt Bukkit-schemaläggaren
Bukkit.getScheduler()fungerar inte på Folia. Använd regionschemaläggaren för arbete på en plats, entitetsschemaläggaren för arbete på en spelare eller mob, den globala regionschemaläggaren för uppgifter i hela världen och async-schemaläggaren för I/O.4.Rör saker bara från deras egen region
Ändra ett block eller en entitet bara på tråden som äger den. Använd
teleportAsynci stället förteleport, och schemalägg till målets region innan du ändrar det.5.Deklarera stöd för Folia
Lägg till
folia-supported: trueiplugin.yml. Utan det vägrar Folia att läsa in pluginet.6.Testa på en Folia-server
Kompileringen visar att koden byggs mot Folia-API:et, inte att den är trådsäker. Kör den på en Folia-testserver med flera spelare på olika platser.
De fyra schemaläggarna
| Schemaläggare | Hämta den med | Använd den för |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Arbete på en plats i världen: placera block, spawna |
| Entitet | entity.getScheduler() | Arbete på en spelare eller mob, den följer dem mellan regioner |
| Global region | Bukkit.getGlobalRegionScheduler() | Tid i världen, väder, saker som inte hör till en plats |
| Async | Bukkit.getAsyncScheduler() | Databas, filer, webbförfrågningar, aldrig världen |
Vad som brukar gå sönder
- Upprepade uppgifter för alla spelare: en enda loop över alla spelare online fungerar inte längre; schemalägg i stället en uppgift på varje spelares entitetsschemaläggare.
- Teleporter och uppvärmning: ”teleportera efter 3 sekunder” kräver entitetsschemaläggaren och
teleportAsync. - Delad data: mappar och räknare som används från flera regioner måste vara trådsäkra, till exempel samtidiga samlingar.
- Beroenden: ett bibliotek som anropar Bukkit-schemaläggaren kastar
UnsupportedOperationExceptionpå Folia.
Ett plugin för Paper och Folia
Schemaläggarna för region, entitet, global och async ingår också i Paper-API:et i aktuella versioner, så ett plugin som bara använder dem och deklarerar folia-supported: true kan köras på både Paper och Folia. Det är ofta det bästa målet: en .jar för alla servrar.
Med Codexe
Välj typen Folia. Det genererade pluginet schemalägger arbete med schemaläggarna för region, entitet, global region och async, deklarerar folia-supported: true och byggs mot Folia-API:et med Maven. Det kompileras och kontrolleras innan det blir Redo.
Skriv tidsdetaljer i begäran (”varje minut för varje spelare online”, ”teleportera efter 3 sekunder”): det är där Folia-koden skiljer sig mest. Prova nu kör inte Folia-servrar än, så testa .jar-filen på din egen Folia-server.
Frågor
Fungerar Paper-plugin på Folia?
Bara om de är skrivna för det och deklarerar folia-supported: true. Ett vanligt Paper-plugin som använder Bukkit-schemaläggaren nekas eller misslyckas.
Fungerar ett Folia-plugin på Paper?
Ja, när det bara använder API:er som även Paper har, vilket inkluderar Folia-schemaläggarna i aktuella Paper-versioner.
Mitt Folia-plugin kastar ett undantag om schemaläggaren
Viss kod, ofta från ett bibliotek, använder fortfarande Bukkit-schemaläggaren. Be projektchatten att flytta den till region- eller entitetsschemaläggaren.
Gör ett Folia-plugin
Den här prompten öppnas färdig att skicka:
“Ett Folia 1.21.4-plugin som heter RTP: /rtp teleporterar spelaren till en slumpmässig säker plats inom 5000 block efter en uppvärmning på 3 sekunder som avbryts vid rörelse, med entitetsschemaläggaren och teleportAsync, en nedkylningstid på 10 minuter per spelare sparad i SQLite, folia-supported: true, radie, nedkylningstid och meddelanden i config.yml.”
Generera det här med Codexe