Príručka

Ako vytvoriť plugin pre Folia

Aktualizované 18. októbra 2026

Folia je fork Paperu, ktorý rozdelí svet na regióny a tickuje ich na rôznych vláknach, takže veľké servery môžu využiť veľa jadier CPU. Jedno hlavné vlákno už neexistuje, a to rozbíja bežný plánovač Bukkitu. Plugin pre Folia je plugin pre Paper napísaný pre tento model a musí to uviesť vo svojom plugin.yml.

Príklad s detailmi časovania, ktoré Folia potrebuje.

Vygeneruj to v Codexe

Krok za krokom

  1. 1.Over si, že Folia potrebuješ

    Folia pomáha serverom s veľa hráčmi rozptýlenými po svete. Väčšina serverov beží na Paper; mnohé populárne pluginy Folia nepodporujú, preto najprv skontroluj tie, na ktorých závisíš.

  2. 2.Zostavuj proti Folia API

    Použi závislosť folia-api pre svoju verziu z repozitára PaperMC so scope provided v projekte Maven alebo Gradle.

  3. 3.Nahraď plánovač Bukkitu

    Bukkit.getScheduler() na Folia nefunguje. Na prácu na určitom mieste použi plánovač regiónu, na prácu s hráčom alebo mobom plánovač entity, na úlohy pre celý svet globálny plánovač regiónu a na I/O asynchrónny plánovač.

  4. 4.Veci meň iba z ich vlastného regiónu

    Blok alebo entitu meň iba na vlákne, ktoré ich vlastní. Namiesto teleport použi teleportAsync a pred zmenou cieľa naplánuj prácu do jeho regiónu.

  5. 5.Deklaruj podporu Folia

    Pridaj do plugin.yml folia-supported: true. Bez toho Folia odmietne plugin načítať.

  6. 6.Otestuj na serveri Folia

    Kompilácia dokazuje, že sa kód zostaví proti Folia API, nie že je bezpečný pre vlákna. Spusti ho na testovacom serveri Folia s niekoľkými hráčmi na rôznych miestach.

Štyri plánovače

PlánovačZískaš ho cezPouži ho na
RegiónBukkit.getRegionScheduler()Práca na mieste vo svete: kladenie blokov, spawnovanie
Entitaentity.getScheduler()Práca s jedným hráčom alebo mobom, nasleduje ho naprieč regiónmi
Globálny regiónBukkit.getGlobalRegionScheduler()Čas vo svete, počasie, veci neviazané na miesto
AsynchrónnyBukkit.getAsyncScheduler()Databáza, súbory, webové požiadavky, nikdy svet

Čo sa zvyčajne pokazí

  • Opakované úlohy pre všetkých hráčov: jeden cyklus cez všetkých hráčov online už nefunguje; namiesto toho naplánuj úlohu do plánovača entity každého hráča.
  • Teleporty a čakania: „teleport po 3 sekundách“ potrebuje plánovač entity a teleportAsync.
  • Zdieľané dáta: mapy a počítadlá používané z viacerých regiónov musia byť bezpečné pre vlákna, napríklad konkurentné kolekcie.
  • Závislosti: knižnica, ktorá volá plánovač Bukkitu, na Folia vyhodí UnsupportedOperationException.

Jeden plugin pre Paper aj Folia

Plánovače regiónu, entity, globálny a asynchrónny sú v aktuálnych verziách aj súčasťou Paper API, takže plugin, ktorý používa iba ich a deklaruje folia-supported: true, môže bežať na Paper aj na Folia. Často je to najlepší cieľ: jeden .jar pre každý server.

S Codexe

Vyber typ Folia. Vygenerovaný plugin plánuje prácu cez plánovače regiónu, entity, globálneho regiónu a asynchrónny, deklaruje folia-supported: true a zostavuje sa proti Folia API cez Maven. Skompiluje sa a skontroluje skôr, než je v stave Pripravené.

Detaily časovania uveď v zadaní („každú minútu pre každého hráča online“, „teleport po 3 sekundách“): práve tam sa kód pre Folia líši najviac. Vyskúšaj teraz zatiaľ nespúšťa servery Folia, preto .jar otestuj na vlastnom serveri Folia.

Otázky

Bežia pluginy pre Paper na Folia?

Iba ak sú pre ňu napísané a deklarujú folia-supported: true. Bežný plugin pre Paper, ktorý používa plánovač Bukkitu, sa odmietne alebo zlyhá.

Beží plugin pre Folia na Paper?

Áno, ak používa iba API, ktoré má aj Paper, a to v aktuálnych verziách Paper zahŕňa aj plánovače z Folia.

Môj plugin pre Folia vyhadzuje výnimku o plánovači

Nejaký kód, často z knižnice, stále používa plánovač Bukkitu. Požiadaj v chate projektu, aby ho presunul do plánovača regiónu alebo entity.

Vytvor plugin pre Folia

Toto zadanie sa otvorí pripravené na odoslanie:

“Plugin pre Folia 1.21.4 s názvom RTP: /rtp teleportuje hráča na náhodné bezpečné miesto do 5000 blokov po 3-sekundovom čakaní, ktoré sa pohybom zruší, pomocou plánovača entity a teleportAsync, 10-minútový cooldown pre každého hráča uložený v SQLite, folia-supported: true, polomer, cooldown a správy v config.yml.”

Vygeneruj to v Codexe
Ako vytvoriť plugin pre Folia (plánovače regiónov) | Codexe