Ръководство
Как да направиш Folia плъгин
Обновено на 18 октомври 2026 г.
Folia е fork на Paper, който разделя света на региони и ги обработва (tick) в различни нишки, така че големите сървъри могат да използват много ядра на процесора. Вече няма една основна нишка и това чупи обичайния Bukkit scheduler. Folia плъгинът е Paper плъгин, написан за този модел, и трябва да го заяви в своя plugin.yml.
Пример с подробностите за времето, от които Folia има нужда.
Генерирай това с CodexeСтъпка по стъпка
1.Провери дали ти трябва Folia
Folia помага на сървъри с много играчи, пръснати из света. Повечето сървъри работят с Paper; много популярни плъгини не поддържат Folia, затова първо провери тези, на които разчиташ.
2.Компилирай срещу Folia API
Използвай зависимостта
folia-apiза твоята версия от хранилището на PaperMC, с обхватprovided, в Maven или Gradle проект.3.Замени Bukkit scheduler-а
Bukkit.getScheduler()не работи на Folia. Използвай регионалния scheduler за работа на дадено място, entity scheduler-а за работа с играч или моб, глобалния регионален scheduler за задачи за целия свят и асинхронния scheduler за I/O.4.Пипай нещата само от собствения им регион
Променяй блок или същество само в нишката, която го притежава. Използвай
teleportAsyncвместоteleportи планирай задачата в региона на целта, преди да я променяш.5.Заяви поддръжка на Folia
Добави
folia-supported: trueвplugin.yml. Без него Folia отказва да зареди плъгина.6.Тествай на Folia сървър
Компилирането доказва, че кодът се компилира срещу Folia API, а не че е безопасен за нишки. Пусни го на Folia тестов сървър с няколко играчи на различни места.
Четирите scheduler-а
| Планировчик | Взима се с | Използвай го за |
|---|---|---|
| Регионален | Bukkit.getRegionScheduler() | Работа на място в света: поставяне на блокове, появяване на същества |
| Същество (entity) | entity.getScheduler() | Работа с един играч или моб, следва ги между регионите |
| Глобален регионален | Bukkit.getGlobalRegionScheduler() | Време в света, климат, неща, които не са свързани с място |
| Асинхронен | Bukkit.getAsyncScheduler() | База данни, файлове, уеб заявки, никога светът |
Какво обикновено се чупи
- Повтарящи се задачи за всички играчи: един цикъл през всички онлайн играчи вече не работи; вместо това планирай задача в entity scheduler-а на всеки играч.
- Телепорти и подготовка: „телепортирай след 3 секунди“ изисква entity scheduler-а и
teleportAsync. - Споделени данни: map-ове и броячи, използвани от няколко региона, трябва да са безопасни за нишки, например конкурентни колекции.
- Зависимости: библиотека, която извиква Bukkit scheduler-а, хвърля
UnsupportedOperationExceptionна Folia.
Един плъгин за Paper и Folia
Регионалният, entity, глобалният и асинхронният scheduler са част и от Paper API в текущите версии, така че плъгин, който използва само тях и заявява folia-supported: true, може да работи и на Paper, и на Folia. Често това е най-добрата цел: един .jar за всеки сървър.
С Codexe
Избери типа Folia. Генерираният плъгин планира работата с регионалния, entity, глобалния регионален и асинхронния scheduler, заявява folia-supported: true и се компилира срещу Folia API с Maven. Компилира се и се проверява, преди да е „Готов“.
Сложи подробностите за времето в заявката („всяка минута за всеки онлайн играч“, „телепортирай след 3 секунди“): там Folia кодът се различава най-много. „Пробвай сега“ още не пуска Folia сървъри, затова тествай .jar файла на собствен Folia сървър.
Въпроси
Работят ли Paper плъгините на Folia?
Само ако са написани за нея и заявяват folia-supported: true. Обикновен Paper плъгин, който използва Bukkit scheduler-а, бива отказан или се проваля.
Работи ли Folia плъгин на Paper?
Да, когато използва само API-та, които Paper също има, а в текущите версии на Paper това включва и scheduler-ите на Folia.
Моят Folia плъгин хвърля изключение за scheduler-а
Някакъв код, често от библиотека, още използва Bukkit scheduler-а. Помоли чата на проекта да го премести в регионалния или в entity scheduler-а.
Направи Folia плъгин
Този промпт се отваря готов за изпращане:
“Folia 1.21.4 плъгин, наречен RTP: /rtp телепортира играча на случайно безопасно място в радиус 5000 блока след 3 секунди подготовка, която се прекъсва при движение, с entity scheduler-а и teleportAsync, 10 минути изчакване за всеки играч, запазено в SQLite, folia-supported: true, радиусът, изчакването и съобщенията са в config.yml.”
Генерирай това с Codexe