Opas

Miten tehdä Folia-plugin

Päivitetty 18. lokakuuta 2026

Folia on Paperin haarukka, joka jakaa maailman alueisiin ja ajaa niiden tickit eri säikeissä, jotta suuret palvelimet voivat käyttää montaa suoritinydintä. Yhtä pääsäiettä ei enää ole, ja se rikkoo tavallisen Bukkit-ajastimen. Folia-plugin on tälle mallille kirjoitettu Paper-plugin, ja sen täytyy kertoa siitä tiedostossaan plugin.yml.

Esimerkki, jossa on Folian tarvitsemat ajoituksen yksityiskohdat.

Generoi tämä Codexella

Vaihe vaiheelta

  1. 1.Tarkista, että tarvitset Folian

    Folia auttaa palvelimia, joilla on paljon ympäri maailmaa levittäytyneitä pelaajia. Useimmat palvelimet käyttävät Paperia; monet suositut pluginit eivät tue Foliaa, joten tarkista ensin ne, joihin luotat.

  2. 2.Kokoa Folia API:a vasten

    Käytä versiosi folia-api-riippuvuutta PaperMC-repositoriosta provided-näkyvyydellä Maven- tai Gradle-projektissa.

  3. 3.Korvaa Bukkit-ajastin

    Bukkit.getScheduler() ei toimi Folialla. Käytä alueajastinta sijaintiin liittyvään työhön, entiteettiajastinta pelaajaan tai mobiin kohdistuvaan työhön, globaalia alueajastinta koko maailman tehtäviin ja asynkronista ajastinta I/O:hon.

  4. 4.Kosketa asioita vain niiden omalta alueelta

    Muuta kuutiota tai entiteettiä vain siinä säikeessä, joka omistaa sen. Käytä teleportAsync-kutsua teleport-kutsun sijaan ja ajasta työ kohteen alueelle ennen sen muuttamista.

  5. 5.Ilmoita Folia-tuki

    Lisää folia-supported: true tiedostoon plugin.yml. Ilman sitä Folia kieltäytyy lataamasta pluginia.

  6. 6.Testaa Folia-palvelimella

    Kääntäminen todistaa, että koodi kääntyy Folia API:a vasten, ei sitä, että se on säieturvallinen. Aja sitä Folia-testipalvelimella niin, että useita pelaajia on eri paikoissa.

Neljä ajastinta

AjastinMistä se saadaanKäyttötarkoitus
AlueBukkit.getRegionScheduler()Työ maailman sijainnissa: kuutioiden asettaminen, syntyminen
Entiteettientity.getScheduler()Työ yhden pelaajan tai mobin parissa, seuraa sitä alueelta toiselle
Globaali alueBukkit.getGlobalRegionScheduler()Maailman aika, sää, asiat, jotka eivät liity sijaintiin
AsynkroninenBukkit.getAsyncScheduler()Tietokanta, tiedostot, verkkopyynnöt, ei koskaan maailma

Mikä yleensä hajoaa

  • Toistuvat tehtävät kaikille pelaajille: yksi silmukka kaikkien paikalla olevien pelaajien yli ei enää toimi; ajasta sen sijaan tehtävä jokaisen pelaajan entiteettiajastimeen.
  • Teleportit ja valmisteluajat: "teleporttaa 3 sekunnin kuluttua" vaatii entiteettiajastimen ja teleportAsync-kutsun.
  • Jaettu data: useilta alueilta käytettävien mappien ja laskurien täytyy olla säieturvallisia, esimerkiksi rinnakkaiskokoelmia.
  • Riippuvuudet: kirjasto, joka kutsuu Bukkit-ajastinta, heittää Folialla poikkeuksen UnsupportedOperationException.

Yksi plugin Paperille ja Folialle

Alue-, entiteetti-, globaali ja asynkroninen ajastin ovat nykyversioissa myös osa Paper API:a, joten plugin, joka käyttää vain niitä ja ilmoittaa folia-supported: true, voi toimia sekä Paperilla että Folialla. Se on usein paras kohde: yksi .jar jokaiselle palvelimelle.

Codexella

Valitse tyypiksi Folia. Generoitu plugin ajastaa työn alue-, entiteetti-, globaalin alue- ja asynkronisen ajastimen avulla, ilmoittaa folia-supported: true ja kootaan Folia API:a vasten Mavenilla. Se käännetään ja tarkistetaan ennen kuin se on valmis.

Kirjoita ajoitukseen liittyvät yksityiskohdat pyyntöön ("joka minuutti jokaiselle paikalla olevalle pelaajalle", "teleporttaa 3 sekunnin kuluttua"): juuri niissä Folia-koodi eroaa eniten. Kokeile heti ei vielä aja Folia-palvelimia, joten testaa .jar omalla Folia-palvelimellasi.

Kysymykset

Toimivatko Paper-pluginit Folialla?

Vain, jos ne on kirjoitettu sille ja ne ilmoittavat folia-supported: true. Tavallinen Bukkit-ajastinta käyttävä Paper-plugin hylätään tai se kaatuu.

Toimiiko Folia-plugin Paperilla?

Kyllä, kun se käyttää vain API:ita, jotka Paperissakin on, ja nykyisissä Paper-versioissa niihin kuuluvat myös Folian ajastimet.

Folia-pluginini heittää ajastimeen liittyvän poikkeuksen

Jokin koodi, usein kirjastosta, käyttää yhä Bukkit-ajastinta. Pyydä projektin chatissa siirtämään se alue- tai entiteettiajastimelle.

Tee Folia-plugin

Tämä kehote aukeaa valmiina lähetettäväksi:

“Folia 1.21.4 -plugin nimeltä RTP: /rtp teleporttaa pelaajan satunnaiseen turvalliseen paikkaan 5000 kuution säteellä 3 sekunnin valmistelun jälkeen, joka peruuntuu liikkuessa, käyttäen entiteettiajastinta ja teleportAsync-kutsua, 10 minuutin pelaajakohtainen jäähtymisaika tallennettuna SQLiteen, folia-supported: true, säde, jäähtymisaika ja viestit config.yml-tiedostossa.”

Generoi tämä Codexella
Miten tehdä Folia-plugin (alueajastimet) | Codexe