Poradnik
Jak zrobić plugin na Folia
Zaktualizowano: 18 października 2026
Folia to fork Paper, który dzieli świat na regiony i tickuje je na różnych wątkach, dzięki czemu duże serwery mogą wykorzystać wiele rdzeni procesora. Nie ma już jednego głównego wątku, a to psuje zwykły scheduler Bukkit. Plugin na Folia to plugin na Paper napisany pod ten model, który musi to zadeklarować w swoim plugin.yml.
Przykład ze szczegółami dotyczącymi czasu, których potrzebuje Folia.
Wygeneruj to w CodexeKrok po kroku
1.Sprawdź, czy potrzebujesz Folia
Folia pomaga serwerom z wieloma graczami rozproszonymi po świecie. Większość serwerów działa na Paper; wiele popularnych pluginów nie obsługuje Folia, więc najpierw sprawdź te, na których polegasz.
2.Buduj pod API Folia
Użyj zależności
folia-apidla swojej wersji z repozytorium PaperMC, z zakresemprovided, w projekcie Maven lub Gradle.3.Zastąp scheduler Bukkit
Bukkit.getScheduler()nie działa na Folia. Używaj schedulera regionu do pracy w danej lokalizacji, schedulera bytu do pracy na graczu lub mobie, globalnego schedulera regionu do zadań obejmujących cały świat i schedulera asynchronicznego do operacji wejścia/wyjścia.4.Dotykaj rzeczy tylko z ich własnego regionu
Zmieniaj blok lub byt tylko na wątku, który jest jego właścicielem. Używaj
teleportAsynczamiastteleporti przed zmianą zaplanuj zadanie w regionie celu.5.Zadeklaruj obsługę Folia
Dodaj
folia-supported: truedoplugin.yml. Bez tego Folia odmówi załadowania pluginu.6.Testuj na serwerze Folia
Kompilacja dowodzi, że kod buduje się pod API Folia, a nie że jest bezpieczny wątkowo. Uruchom go na serwerze testowym Folia z kilkoma graczami w różnych miejscach.
Cztery schedulery
| Scheduler | Jak go pobrać | Do czego go używać |
|---|---|---|
| Region | Bukkit.getRegionScheduler() | Praca w lokalizacji w świecie: stawianie bloków, spawnowanie |
| Byt | entity.getScheduler() | Praca na jednym graczu lub mobie, podąża za nim między regionami |
| Region globalny | Bukkit.getGlobalRegionScheduler() | Czas w świecie, pogoda, rzeczy niezwiązane z lokalizacją |
| Asynchroniczny | Bukkit.getAsyncScheduler() | Baza danych, pliki, zapytania sieciowe, nigdy świat |
Co zwykle się psuje
- Powtarzające się zadania dla wszystkich graczy: jedna pętla po wszystkich graczach online już nie działa; zamiast tego zaplanuj zadanie w schedulerze bytu każdego gracza.
- Teleporty i rozgrzewki: „teleport po 3 sekundach” wymaga schedulera bytu i
teleportAsync. - Współdzielone dane: mapy i liczniki używane z kilku regionów muszą być bezpieczne wątkowo, na przykład kolekcje współbieżne.
- Zależności: biblioteka, która wywołuje scheduler Bukkit, rzuca na Folia
UnsupportedOperationException.
Jeden plugin na Paper i Folia
Schedulery regionu, bytu, globalny i asynchroniczny są w aktualnych wersjach także częścią API Paper, więc plugin, który używa tylko ich i deklaruje folia-supported: true, może działać zarówno na Paper, jak i na Folia. To często najlepszy cel: jeden plik .jar na każdy serwer.
Z Codexe
Wybierz typ Folia. Wygenerowany plugin planuje pracę schedulerami regionu, bytu, globalnego regionu i asynchronicznym, deklaruje folia-supported: true i buduje się pod API Folia przez Maven. Jest kompilowany i sprawdzany, zanim będzie gotowy.
Szczegóły dotyczące czasu wpisz w prośbie („co minutę dla każdego gracza online”, „teleport po 3 sekundach”): właśnie tam kod Folia najbardziej się różni. Wypróbuj teraz nie uruchamia jeszcze serwerów Folia, więc przetestuj plik .jar na własnym serwerze Folia.
Pytania
Czy pluginy na Paper działają na Folia?
Tylko jeśli są pod nią napisane i deklarują folia-supported: true. Zwykły plugin na Paper, który używa schedulera Bukkit, zostanie odrzucony lub się wysypie.
Czy plugin na Folia działa na Paper?
Tak, jeśli używa tylko API, które Paper też ma, a w aktualnych wersjach Paper należą do nich schedulery Folia.
Mój plugin na Folia rzuca wyjątek dotyczący schedulera
Jakiś kod, często z biblioteki, nadal używa schedulera Bukkit. Poproś na czacie projektu, żeby przenieść go do schedulera regionu lub bytu.
Zrób plugin na Folia
Ten prompt otworzy się gotowy do wysłania:
“Plugin na Folia 1.21.4 o nazwie RTP: /rtp teleportuje gracza w losowe bezpieczne miejsce w promieniu 5000 bloków po 3 sekundach rozgrzewki przerywanej ruchem, z użyciem schedulera bytu i teleportAsync, 10-minutowe odnowienie na gracza zapisywane w SQLite, folia-supported: true, promień, odnowienie i wiadomości w config.yml.”
Wygeneruj to w Codexe