Guide

Sådan laver du et Folia-plugin

Opdateret 18. oktober 2026

Folia er en fork af Paper, der deler verdenen op i regioner og ticker dem på forskellige tråde, så store servere kan bruge mange CPU-kerner. Der er ikke længere én hovedtråd, og det ødelægger den sædvanlige Bukkit-scheduler. Et Folia-plugin er et Paper-plugin skrevet til den model, og det skal stå i dets plugin.yml.

Et eksempel med de detaljer om timing, som Folia har brug for.

Generér dette med Codexe

Trin for trin

  1. 1.Tjek, at du har brug for Folia

    Folia hjælper servere med mange spillere spredt ud over verdenen. De fleste servere kører Paper; mange populære plugins understøtter ikke Folia, så tjek først dem, du er afhængig af.

  2. 2.Byg mod Folia-API'en

    Brug afhængigheden folia-api til din version fra PaperMC-repositoryet med scope provided i et Maven- eller Gradle-projekt.

  3. 3.Erstat Bukkit-scheduleren

    Bukkit.getScheduler() virker ikke på Folia. Brug region scheduleren til arbejde på et sted, entity scheduleren til arbejde på en spiller eller mob, global region scheduleren til opgaver for hele verdenen og async scheduleren til I/O.

  4. 4.Rør kun ved ting fra deres egen region

    Ændr kun en blok eller en entity på den tråd, der ejer den. Brug teleportAsync i stedet for teleport, og planlæg arbejdet på målets region, før du ændrer det.

  5. 5.Erklær understøttelse af Folia

    Tilføj folia-supported: true til plugin.yml. Uden det nægter Folia at indlæse pluginet.

  6. 6.Test på en Folia-server

    At det kompilerer, beviser, at koden bygger mod Folia-API'en, ikke at den er trådsikker. Kør det på en Folia-testserver med flere spillere forskellige steder.

De fire schedulers

SchedulerHentes medBrug den til
RegionBukkit.getRegionScheduler()Arbejde på et sted i verdenen: placere blokke, spawne
Entityentity.getScheduler()Arbejde på én spiller eller mob, den følger dem på tværs af regioner
Global regionBukkit.getGlobalRegionScheduler()Tid i verdenen, vejr, ting, der ikke er knyttet til et sted
AsyncBukkit.getAsyncScheduler()Database, filer, webforespørgsler, aldrig verdenen

Hvad der typisk går i stykker

  • Gentagende opgaver for alle spillere: én løkke over alle spillere online virker ikke længere; planlæg i stedet en opgave på hver spillers entity scheduler.
  • Teleporter og opvarmning: "teleportér efter 3 sekunder" kræver entity scheduleren og teleportAsync.
  • Delte data: maps og tællere, der bruges fra flere regioner, skal være trådsikre, for eksempel concurrent collections.
  • Afhængigheder: et bibliotek, der kalder Bukkit-scheduleren, kaster UnsupportedOperationException på Folia.

Ét plugin til Paper og Folia

Region-, entity-, global- og async-schedulerne er også en del af Paper-API'en i de nuværende versioner, så et plugin, der kun bruger dem og erklærer folia-supported: true, kan køre på både Paper og Folia. Det er ofte det bedste mål: én .jar til alle servere.

Med Codexe

Vælg typen Folia. Det genererede plugin planlægger arbejde med region-, entity-, global region- og async-schedulerne, erklærer folia-supported: true og bygger mod Folia-API'en med Maven. Det kompileres og tjekkes, før det er Klar.

Skriv detaljer om timing i anmodningen ("hvert minut for hver spiller online", "teleportér efter 3 sekunder"): det er der, Folia-kode adskiller sig mest. Prøv det nu kører endnu ikke Folia-servere, så test .jar-filen på din egen Folia-server.

Spørgsmål

Kører Paper-plugins på Folia?

Kun hvis de er skrevet til det og erklærer folia-supported: true. Et normalt Paper-plugin, der bruger Bukkit-scheduleren, bliver afvist eller fejler.

Kører et Folia-plugin på Paper?

Ja, når det kun bruger API'er, som Paper også har, og det omfatter Folia-schedulerne i de nuværende Paper-versioner.

Mit Folia-plugin kaster en exception om scheduleren

Noget kode, ofte fra et bibliotek, bruger stadig Bukkit-scheduleren. Bed projektchatten om at flytte det til region- eller entity scheduleren.

Lav et Folia-plugin

Denne prompt åbnes klar til at sende:

“Et Folia 1.21.4-plugin kaldet RTP: /rtp teleporterer spilleren til et tilfældigt sikkert sted inden for 5000 blokke efter 3 sekunders opvarmning, der annulleres ved bevægelse, med entity scheduleren og teleportAsync, 10 minutters cooldown pr. spiller gemt i SQLite, folia-supported: true, radius, cooldown og beskeder i config.yml.”

Generér dette med Codexe
Sådan laver du et Folia-plugin (region schedulers) | Codexe