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 Codexe

Krok po kroku

  1. 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. 2.Buduj pod API Folia

    Użyj zależności folia-api dla swojej wersji z repozytorium PaperMC, z zakresem provided, w projekcie Maven lub Gradle.

  3. 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. 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 teleportAsync zamiast teleport i przed zmianą zaplanuj zadanie w regionie celu.

  5. 5.Zadeklaruj obsługę Folia

    Dodaj folia-supported: true do plugin.yml. Bez tego Folia odmówi załadowania pluginu.

  6. 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

SchedulerJak go pobraćDo czego go używać
RegionBukkit.getRegionScheduler()Praca w lokalizacji w świecie: stawianie bloków, spawnowanie
Bytentity.getScheduler()Praca na jednym graczu lub mobie, podąża za nim między regionami
Region globalnyBukkit.getGlobalRegionScheduler()Czas w świecie, pogoda, rzeczy niezwiązane z lokalizacją
AsynchronicznyBukkit.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
Jak zrobić plugin na Folia (schedulery regionów) | Codexe