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 CodexeKrok za krokem
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.Sestavuj proti API Folie
V projektu Maven nebo Gradle použij závislost
folia-apipro svou verzi z repozitáře PaperMC se scopeprovided.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.Na věci sahej jen z jejich vlastního regionu
Blok nebo entitu měň jen ve vlákně, které ji vlastní. Místo
teleportpoužijteleportAsynca před změnou cíle naplánuj práci do jeho regionu.5.Deklaruj podporu Folie
Přidej do
plugin.ymlfolia-supported: true. Bez toho Folia odmítne plugin načíst.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řes | Použij ho na |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Práci na místě ve světě: pokládání bloků, spawnování |
| Entita | entity.getScheduler() | Práci s jedním hráčem nebo mobem, sleduje ho napříč regiony |
| Globální region | Bukkit.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