Návod

Jak vytvořit plugin pro Folii

Aktualizováno 18. října 2026

Folia je fork Paperu, který rozdělí svět na regiony a tickuje je v různých vláknech, takže velké servery můžou využít mnoho jader CPU. Už neexistuje jedno hlavní vlákno, a to rozbíjí obvyklý plánovač Bukkitu. Plugin pro Folii je plugin pro Paper napsaný pro tento model a musí to uvést ve svém plugin.yml.

Příklad s podrobnostmi o časování, které Folia potřebuje.

Vygeneruj to s Codexe

Krok za krokem

  1. 1.Ověř, že Folii potřebuješ

    Folia pomáhá serverům s mnoha hráči rozptýlenými po světě. Většina serverů běží na Paperu; spousta oblíbených pluginů Folii nepodporuje, takže nejdřív zkontroluj ty, na kterých závisíš.

  2. 2.Sestavuj proti API Folie

    V projektu Maven nebo Gradle použij závislost folia-api pro svou verzi z repozitáře PaperMC se scope provided.

  3. 3.Nahraď plánovač Bukkitu

    Bukkit.getScheduler() na Folii nefunguje. Na práci na určitém místě použij plánovač regionu, na práci s hráčem nebo mobem plánovač entity, na úlohy pro celý svět plánovač globálního regionu a na I/O asynchronní plánovač.

  4. 4.Na věci sahej jen z jejich vlastního regionu

    Blok nebo entitu měň jen ve vlákně, které ji vlastní. Místo teleport použij teleportAsync a před změnou cíle naplánuj práci do jeho regionu.

  5. 5.Deklaruj podporu Folie

    Přidej do plugin.yml folia-supported: true. Bez toho Folia odmítne plugin načíst.

  6. 6.Otestuj na serveru s Folií

    Kompilace dokazuje, že se kód sestaví proti API Folie, ne že je bezpečný pro vlákna. Spusť ho na testovacím serveru s Folií s několika hráči na různých místech.

Čtyři plánovače

PlánovačZískáš ho přesPoužij ho na
RegionBukkit.getRegionScheduler()Práci na místě ve světě: pokládání bloků, spawnování
Entitaentity.getScheduler()Práci s jedním hráčem nebo mobem, sleduje ho napříč regiony
Globální regionBukkit.getGlobalRegionScheduler()Čas ve světě, počasí, věci nevázané na místo
AsynchronníBukkit.getAsyncScheduler()Databázi, soubory, webové požadavky, nikdy svět

Co se obvykle rozbije

  • Opakované úlohy pro všechny hráče: jedna smyčka přes všechny hráče online už nefunguje; místo toho naplánuj úlohu v plánovači entity každého hráče.
  • Teleporty a čekání: „teleport po 3 sekundách“ potřebuje plánovač entity a teleportAsync.
  • Sdílená data: mapy a počítadla používané z více regionů musí být bezpečné pro vlákna, třeba souběžné kolekce.
  • Závislosti: knihovna, která volá plánovač Bukkitu, vyhodí na Folii UnsupportedOperationException.

Jeden plugin pro Paper i Folii

Plánovače regionu, entity, globální a asynchronní jsou v aktuálních verzích i součástí API Paperu, takže plugin, který používá jen je a deklaruje folia-supported: true, běží na Paperu i na Folii. To je často nejlepší cíl: jeden .jar pro každý server.

S Codexe

Vyber typ Folia. Vygenerovaný plugin plánuje práci přes plánovače regionu, entity, globálního regionu a asynchronní, deklaruje folia-supported: true a sestavuje se proti API Folie přes Maven. Než je Ready, zkompiluje se a zkontroluje.

Do zadání napiš podrobnosti o časování („každou minutu pro každého hráče online“, „teleport po 3 sekundách“): právě tam se kód pro Folii liší nejvíc. Vyzkoušet hned zatím servery s Folií nespouští, takže .jar otestuj na vlastním serveru s Folií.

Otázky

Běží pluginy pro Paper na Folii?

Jen pokud jsou pro ni napsané a deklarují folia-supported: true. Běžný plugin pro Paper, který používá plánovač Bukkitu, bude odmítnut nebo selže.

Běží plugin pro Folii na Paperu?

Ano, pokud používá jen API, které má i Paper, a to v aktuálních verzích Paperu zahrnuje i plánovače Folie.

Můj plugin pro Folii hází výjimku kvůli plánovači

Nějaký kód, často z knihovny, pořád používá plánovač Bukkitu. Požádej chat projektu, ať ho přesune do plánovače regionu nebo entity.

Vytvoř plugin pro Folii

Toto zadání se otevře připravené k odeslání:

“Plugin pro Folii 1.21.4 jménem RTP: /rtp teleportuje hráče na náhodné bezpečné místo do 5000 bloků po 3sekundovém čekání, které se při pohybu zruší, s plánovačem entity a teleportAsync, 10minutový cooldown pro každého hráče uložený v SQLite, folia-supported: true, poloměr, cooldown a zprávy v config.yml.”

Vygeneruj to s Codexe
Jak vytvořit plugin pro Folii (plánovače regionů) | Codexe