Посібник
Як створити плагін для Folia
Оновлено 18 жовтня 2026 р.
Folia - це форк Paper, який ділить світ на регіони й обробляє їхні тіки в різних потоках, тож великі сервери можуть використовувати багато ядер процесора. Єдиного головного потоку більше немає, і через це звичайний планувальник Bukkit не працює. Плагін для Folia - це плагін для Paper, написаний під таку модель, і він має повідомляти про це у своєму plugin.yml.
Приклад із деталями щодо часу, які потрібні Folia.
Згенерувати це в CodexeКрок за кроком
1.Переконайтеся, що вам потрібна Folia
Folia допомагає серверам, де багато гравців розкидано по світу. Більшість серверів працює на Paper; багато популярних плагінів не підтримують Folia, тож спершу перевірте ті, на які ви покладаєтеся.
2.Збирайте під API Folia
Використовуйте залежність
folia-apiдля своєї версії з репозиторію PaperMC з областюprovidedу проєкті Maven або Gradle.3.Замініть планувальник Bukkit
Bukkit.getScheduler()не працює на Folia. Використовуйте планувальник регіону для роботи в певному місці, планувальник сутності для роботи з гравцем чи мобом, глобальний регіональний планувальник для завдань на весь світ і асинхронний планувальник для вводу-виводу.4.Змінюйте речі лише з їхнього власного регіону
Змінюйте блок або сутність лише в потоці, якому вони належать. Використовуйте
teleportAsyncзамістьteleportі плануйте завдання в регіоні цілі, перш ніж її змінювати.5.Оголосіть підтримку Folia
Додайте
folia-supported: trueуplugin.yml. Без цього Folia відмовиться завантажувати плагін.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