Vodič
Kako napraviti Folia plugin
Ažurirano 18. listopada 2026.
Folia je fork Papera koji dijeli svijet na regije i tickira ih na različitim nitima, pa veliki poslužitelji mogu koristiti mnogo jezgri procesora. Više nema jedne glavne niti, a to kvari uobičajeni Bukkit scheduler. Folia plugin je Paper plugin napisan za taj model i to mora navesti u svom plugin.yml.
Primjer s detaljima o vremenu koji trebaju Foliji.
Generiraj ovo uz CodexeKorak po korak
1.Provjeri treba li ti Folia
Folia pomaže poslužiteljima s mnogo igrača raspoređenih po svijetu. Većina poslužitelja koristi Paper; mnogi popularni pluginovi ne podržavaju Foliju, pa najprije provjeri one o kojima ovisiš.
2.Gradi na Folia API-ju
Koristi ovisnost
folia-apiza svoju verziju iz PaperMC repozitorija, s opsegomprovided, u Maven ili Gradle projektu.3.Zamijeni Bukkit scheduler
Bukkit.getScheduler()ne radi na Foliji. Koristi region scheduler za posao na nekoj lokaciji, entity scheduler za posao na igraču ili mobu, global region scheduler za zadatke na razini svijeta i async scheduler za I/O.4.Diraj stvari samo iz njihove regije
Mijenjaj blok ili entitet samo na niti koja ga posjeduje. Koristi
teleportAsyncumjestoteleporti zakaži posao u regiji cilja prije nego što ga promijeniš.5.Prijavi podršku za Foliju
Dodaj
folia-supported: trueuplugin.yml. Bez toga Folia odbija učitati plugin.6.Testiraj na Folia poslužitelju
Kompajliranje dokazuje da se kod builda na Folia API-ju, a ne da je siguran za niti. Pokreni ga na Folia testnom poslužitelju s nekoliko igrača na različitim mjestima.
Četiri schedulera
| Scheduler | Dohvaća se s | Koristi ga za |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Posao na lokaciji u svijetu: postavljanje blokova, spawnanje |
| Entity | entity.getScheduler() | Posao na jednom igraču ili mobu, prati ga kroz regije |
| Global region | Bukkit.getGlobalRegionScheduler() | Vrijeme u svijetu, vremenske prilike, stvari koje nisu vezane uz lokaciju |
| Async | Bukkit.getAsyncScheduler() | Baza podataka, datoteke, web zahtjevi, nikad svijet |
Što se obično pokvari
- Ponavljajući taskovi za sve igrače: jedna petlja preko svih igrača online više ne radi; umjesto toga zakaži task na entity scheduleru svakog igrača.
- Teleporti i zagrijavanja: „teleport nakon 3 sekunde” treba entity scheduler i
teleportAsync. - Dijeljeni podaci: mape i brojači koji se koriste iz više regija moraju biti sigurni za niti, na primjer konkurentne kolekcije.
- Ovisnosti: biblioteka koja poziva Bukkit scheduler baca
UnsupportedOperationExceptionna Foliji.
Jedan plugin za Paper i Foliju
Region, entity, global i async scheduleri dio su i Paper API-ja na aktualnim verzijama, pa plugin koji koristi samo njih i prijavljuje folia-supported: true može raditi i na Paperu i na Foliji. To je često najbolji cilj: jedan .jar za svaki poslužitelj.
S Codexeom
Odaberi vrstu Folia. Generirani plugin zakazuje posao preko region, entity, global region i async schedulera, prijavljuje folia-supported: true i builda se na Folia API-ju s Mavenom. Kompajlira se i provjerava prije nego što je Spremno.
U zahtjev stavi detalje o vremenu („svake minute za svakog igrača online”, „teleport nakon 3 sekunde”): tu se Folia kod najviše razlikuje. Isprobaj odmah još ne pokreće Folia poslužitelje, pa testiraj .jar na svom Folia poslužitelju.
Pitanja
Rade li Paper pluginovi na Foliji?
Samo ako su napisani za nju i prijavljuju folia-supported: true. Običan Paper plugin koji koristi Bukkit scheduler bude odbijen ili ne radi.
Radi li Folia plugin na Paperu?
Da, kad koristi samo API-je koje ima i Paper, što na aktualnim Paper verzijama uključuje i Folia schedulere.
Moj Folia plugin baca iznimku vezanu uz scheduler
Dio koda, često iz neke biblioteke, i dalje koristi Bukkit scheduler. Zamoli chat projekta da ga premjesti na region ili entity scheduler.
Napravi Folia plugin
Ovaj prompt otvara se spreman za slanje:
“Folia 1.21.4 plugin pod nazivom RTP: /rtp teleportira igrača na nasumičnu sigurnu lokaciju unutar 5000 blokova nakon zagrijavanja od 3 sekunde koje se prekida pri kretanju, uz entity scheduler i teleportAsync, cooldown od 10 minuta po igraču spremljen u SQLite, folia-supported: true, radijus, cooldown i poruke u config.yml.”
Generiraj ovo uz Codexe