Ръководство

Как да направиш Folia плъгин

Обновено на 18 октомври 2026 г.

Folia е fork на Paper, който разделя света на региони и ги обработва (tick) в различни нишки, така че големите сървъри могат да използват много ядра на процесора. Вече няма една основна нишка и това чупи обичайния Bukkit scheduler. Folia плъгинът е Paper плъгин, написан за този модел, и трябва да го заяви в своя plugin.yml.

Пример с подробностите за времето, от които Folia има нужда.

Генерирай това с Codexe

Стъпка по стъпка

  1. 1.Провери дали ти трябва Folia

    Folia помага на сървъри с много играчи, пръснати из света. Повечето сървъри работят с Paper; много популярни плъгини не поддържат Folia, затова първо провери тези, на които разчиташ.

  2. 2.Компилирай срещу Folia API

    Използвай зависимостта folia-api за твоята версия от хранилището на PaperMC, с обхват provided, в Maven или Gradle проект.

  3. 3.Замени Bukkit scheduler-а

    Bukkit.getScheduler() не работи на Folia. Използвай регионалния scheduler за работа на дадено място, entity scheduler-а за работа с играч или моб, глобалния регионален scheduler за задачи за целия свят и асинхронния scheduler за I/O.

  4. 4.Пипай нещата само от собствения им регион

    Променяй блок или същество само в нишката, която го притежава. Използвай teleportAsync вместо teleport и планирай задачата в региона на целта, преди да я променяш.

  5. 5.Заяви поддръжка на Folia

    Добави folia-supported: true в plugin.yml. Без него Folia отказва да зареди плъгина.

  6. 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
Как да направиш Folia плъгин (регионални scheduler-и) | Codexe