Ghid

Cum faci un plugin Folia

Actualizat 18 octombrie 2026

Folia este un fork de Paper care împarte lumea în regiuni și le procesează pe thread-uri diferite, ca serverele mari să poată folosi multe nuclee de CPU. Nu mai există un singur thread principal, iar asta strică scheduler-ul Bukkit obișnuit. Un plugin Folia este un plugin Paper scris pentru acest model și trebuie să spună asta în plugin.yml.

Un exemplu cu detaliile de timing de care are nevoie Folia.

Generează asta cu Codexe

Pas cu pas

  1. 1.Verifică dacă ai nevoie de Folia

    Folia ajută serverele cu mulți jucători răspândiți prin lume. Majoritatea serverelor rulează Paper; multe plugin-uri populare nu suportă Folia, așa că verifică mai întâi pe cele pe care te bazezi.

  2. 2.Compilează pe API-ul Folia

    Folosește dependența folia-api pentru versiunea ta din repository-ul PaperMC, cu scope-ul provided, într-un proiect Maven sau Gradle.

  3. 3.Înlocuiește scheduler-ul Bukkit

    Bukkit.getScheduler() nu funcționează pe Folia. Folosește scheduler-ul de regiune pentru munca într-o locație, scheduler-ul de entitate pentru munca pe un jucător sau un mob, scheduler-ul regiunii globale pentru task-uri la nivelul lumii și scheduler-ul async pentru I/O.

  4. 4.Atinge lucrurile doar din regiunea lor

    Schimbă un bloc sau o entitate doar pe thread-ul care o deține. Folosește teleportAsync în loc de teleport și programează munca pe regiunea țintei înainte să o schimbi.

  5. 5.Declară suportul pentru Folia

    Adaugă folia-supported: true în plugin.yml. Fără asta, Folia refuză să încarce pluginul.

  6. 6.Testează pe un server Folia

    Compilarea dovedește că codul se construiește pe API-ul Folia, nu că este thread-safe. Rulează-l pe un server de testare Folia cu mai mulți jucători în locuri diferite.

Cele patru scheduler-e

SchedulerÎl obții cuFolosește-l pentru
RegiuneBukkit.getRegionScheduler()Muncă într-o locație din lume: pus blocuri, spawn
Entitateentity.getScheduler()Muncă pe un jucător sau un mob, îl urmează de la o regiune la alta
Regiune globalăBukkit.getGlobalRegionScheduler()Ora din lume, vremea, lucruri care nu țin de o locație
AsyncBukkit.getAsyncScheduler()Bază de date, fișiere, cereri web, niciodată lumea

Ce se strică de obicei

  • Task-uri repetate pentru toți jucătorii: o singură buclă peste toți jucătorii online nu mai funcționează; programează în schimb un task pe scheduler-ul de entitate al fiecărui jucător.
  • Teleportări și așteptări: „teleportează după 3 secunde” are nevoie de scheduler-ul de entitate și de teleportAsync.
  • Date partajate: map-urile și contoarele folosite din mai multe regiuni trebuie să fie thread-safe, de exemplu colecții concurente.
  • Dependențe: o bibliotecă ce apelează scheduler-ul Bukkit aruncă UnsupportedOperationException pe Folia.

Un singur plugin pentru Paper și Folia

Scheduler-ele de regiune, de entitate, global și async fac parte și din API-ul Paper pe versiunile actuale, așa că un plugin care folosește doar aceste scheduler-e și declară folia-supported: true poate rula și pe Paper, și pe Folia. Adesea aceasta este cea mai bună țintă: un singur .jar pentru orice server.

Cu Codexe

Alege tipul Folia. Pluginul generat programează munca cu scheduler-ele de regiune, de entitate, al regiunii globale și async, declară folia-supported: true și se compilează pe API-ul Folia cu Maven. Este compilat și verificat înainte să fie Gata.

Pune detaliile de timing în cerere („în fiecare minut pentru fiecare jucător online”, „teleportează după 3 secunde”): acolo diferă cel mai mult codul Folia. Încearcă acum nu rulează încă servere Folia, așa că testează .jar-ul pe propriul tău server Folia.

Întrebări

Rulează plugin-urile Paper pe Folia?

Doar dacă sunt scrise pentru el și declară folia-supported: true. Un plugin Paper normal care folosește scheduler-ul Bukkit este refuzat sau dă erori.

Rulează un plugin Folia pe Paper?

Da, când folosește doar API-uri pe care le are și Paper, ceea ce include scheduler-ele Folia pe versiunile actuale de Paper.

Pluginul meu Folia aruncă o excepție legată de scheduler

O parte din cod, adesea dintr-o bibliotecă, folosește încă scheduler-ul Bukkit. Cere în chatul proiectului să fie mutat pe scheduler-ul de regiune sau de entitate.

Fă un plugin Folia

Acest prompt se deschide gata de trimis:

“Un plugin Folia 1.21.4 numit RTP: /rtp teleportează jucătorul într-o locație aleatorie sigură pe o rază de 5000 de blocuri după o așteptare de 3 secunde care se anulează la mișcare, folosind scheduler-ul de entitate și teleportAsync, un cooldown de 10 minute per jucător salvat în SQLite, folia-supported: true, raza, cooldown-ul și mesajele în config.yml.”

Generează asta cu Codexe
Cum faci un plugin Folia (region schedulers) | Codexe