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 Codexe

Korak po korak

  1. 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. 2.Gradi na Folia API-ju

    Koristi ovisnost folia-api za svoju verziju iz PaperMC repozitorija, s opsegom provided, u Maven ili Gradle projektu.

  3. 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. 4.Diraj stvari samo iz njihove regije

    Mijenjaj blok ili entitet samo na niti koja ga posjeduje. Koristi teleportAsync umjesto teleport i zakaži posao u regiji cilja prije nego što ga promijeniš.

  5. 5.Prijavi podršku za Foliju

    Dodaj folia-supported: true u plugin.yml. Bez toga Folia odbija učitati plugin.

  6. 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

SchedulerDohvaća se sKoristi ga za
RegionBukkit.getRegionScheduler()Posao na lokaciji u svijetu: postavljanje blokova, spawnanje
Entityentity.getScheduler()Posao na jednom igraču ili mobu, prati ga kroz regije
Global regionBukkit.getGlobalRegionScheduler()Vrijeme u svijetu, vremenske prilike, stvari koje nisu vezane uz lokaciju
AsyncBukkit.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 UnsupportedOperationException na 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
Kako napraviti Folia plugin (region scheduleri) | Codexe