Посібник

Як створити плагін для Folia

Оновлено 18 жовтня 2026 р.

Folia - це форк Paper, який ділить світ на регіони й обробляє їхні тіки в різних потоках, тож великі сервери можуть використовувати багато ядер процесора. Єдиного головного потоку більше немає, і через це звичайний планувальник Bukkit не працює. Плагін для Folia - це плагін для Paper, написаний під таку модель, і він має повідомляти про це у своєму plugin.yml.

Приклад із деталями щодо часу, які потрібні Folia.

Згенерувати це в Codexe

Крок за кроком

  1. 1.Переконайтеся, що вам потрібна Folia

    Folia допомагає серверам, де багато гравців розкидано по світу. Більшість серверів працює на Paper; багато популярних плагінів не підтримують Folia, тож спершу перевірте ті, на які ви покладаєтеся.

  2. 2.Збирайте під API Folia

    Використовуйте залежність folia-api для своєї версії з репозиторію PaperMC з областю provided у проєкті Maven або Gradle.

  3. 3.Замініть планувальник Bukkit

    Bukkit.getScheduler() не працює на Folia. Використовуйте планувальник регіону для роботи в певному місці, планувальник сутності для роботи з гравцем чи мобом, глобальний регіональний планувальник для завдань на весь світ і асинхронний планувальник для вводу-виводу.

  4. 4.Змінюйте речі лише з їхнього власного регіону

    Змінюйте блок або сутність лише в потоці, якому вони належать. Використовуйте teleportAsync замість teleport і плануйте завдання в регіоні цілі, перш ніж її змінювати.

  5. 5.Оголосіть підтримку Folia

    Додайте folia-supported: true у plugin.yml. Без цього Folia відмовиться завантажувати плагін.

  6. 6.Протестуйте на сервері Folia

    Компіляція доводить, що код збирається під API Folia, але не те, що він потокобезпечний. Запустіть його на тестовому сервері Folia з кількома гравцями в різних місцях.

Чотири планувальники

ПланувальникЯк отриматиДля чого
РегіонBukkit.getRegionScheduler()Робота в певному місці світу: встановлення блоків, появи
Сутністьentity.getScheduler()Робота з одним гравцем чи мобом, слідує за ним між регіонами
Глобальний регіонBukkit.getGlobalRegionScheduler()Час у світі, погода, усе, що не прив'язано до місця
АсинхроннийBukkit.getAsyncScheduler()База даних, файли, вебзапити, ніколи не світ

Що зазвичай ламається

  • Повторювані завдання для всіх гравців: один цикл по всіх гравцях онлайн більше не працює; натомість плануйте завдання в планувальнику сутності кожного гравця.
  • Телепорти й підготовка: «телепортувати через 3 секунди» потребує планувальника сутності й teleportAsync.
  • Спільні дані: мапи й лічильники, які використовуються з кількох регіонів, мають бути потокобезпечними, наприклад конкурентні колекції.
  • Залежності: бібліотека, яка викликає планувальник Bukkit, кидає UnsupportedOperationException на Folia.

Один плагін для Paper і Folia

Планувальники регіону, сутності, глобальний та асинхронний також входять до API Paper у поточних версіях, тож плагін, який використовує лише їх і оголошує folia-supported: true, може працювати і на Paper, і на Folia. Часто це найкращий варіант: один .jar для кожного сервера.

З Codexe

Виберіть тип Folia. Згенерований плагін планує роботу через планувальники регіону, сутності, глобального регіону й асинхронний, оголошує folia-supported: true і збирається під API Folia за допомогою Maven. Його компілюють і перевіряють, перш ніж він отримає статус «Готово».

Вкажіть у запиті деталі щодо часу («щохвилини для кожного гравця онлайн», «телепортувати через 3 секунди»): саме тут код для Folia відрізняється найбільше. «Спробувати зараз» поки не запускає сервери Folia, тож тестуйте .jar на власному сервері Folia.

Запитання

Чи працюють плагіни Paper на Folia?

Лише якщо вони написані для неї й оголошують folia-supported: true. Звичайний плагін Paper, що використовує планувальник Bukkit, буде відхилено, або він не спрацює.

Чи працює плагін для Folia на Paper?

Так, якщо він використовує лише API, які є й у Paper, а в поточних версіях Paper це включає планувальники Folia.

Мій плагін для Folia кидає виняток про планувальник

Якийсь код, часто з бібліотеки, досі використовує планувальник Bukkit. Попросіть у чаті проєкту перенести його на планувальник регіону або сутності.

Створіть плагін для Folia

Цей запит відкривається готовим до надсилання:

“Плагін для Folia 1.21.4 під назвою RTP: /rtp телепортує гравця у випадкове безпечне місце в межах 5000 блоків після 3-секундної підготовки, що скасовується при русі, з планувальником сутності й teleportAsync, перезарядка 10 хвилин для кожного гравця зберігається в SQLite, folia-supported: true, радіус, перезарядка й повідомлення в config.yml.”

Згенерувати це в Codexe
Як створити плагін для Folia (регіональні планувальники) | Codexe