Οδηγός

Πώς να φτιάξεις ένα Folia plugin

Ενημερώθηκε 18 Οκτωβρίου 2026

Το Folia είναι ένα fork του Paper που χωρίζει τον κόσμο σε περιοχές (regions) και τις κάνει tick σε διαφορετικά threads, ώστε οι μεγάλοι servers να χρησιμοποιούν πολλούς πυρήνες CPU. Δεν υπάρχει πια ένα μοναδικό main thread, και αυτό χαλάει τον συνηθισμένο scheduler του Bukkit. Ένα Folia plugin είναι ένα Paper plugin γραμμένο για αυτό το μοντέλο και πρέπει να το δηλώνει στο plugin.yml του.

Ένα παράδειγμα με τις λεπτομέρειες χρονισμού που χρειάζεται το Folia.

Φτιάξ' το με το Codexe

Βήμα βήμα

  1. 1.Έλεγξε αν χρειάζεσαι το Folia

    Το Folia βοηθά servers με πολλούς παίκτες σκορπισμένους σε όλο τον κόσμο. Οι περισσότεροι servers τρέχουν Paper· πολλά δημοφιλή plugins δεν υποστηρίζουν Folia, οπότε έλεγξε πρώτα αυτά στα οποία βασίζεσαι.

  2. 2.Κάνε build με το Folia API

    Χρησιμοποίησε την εξάρτηση folia-api για την έκδοσή σου από το repository του PaperMC, με scope provided, σε ένα project Maven ή Gradle.

  3. 3.Αντικατάστησε τον scheduler του Bukkit

    Το Bukkit.getScheduler() δεν λειτουργεί στο Folia. Χρησιμοποίησε τον region scheduler για εργασίες σε μια τοποθεσία, τον entity scheduler για εργασίες σε έναν παίκτη ή mob, τον global region scheduler για εργασίες σε όλο τον κόσμο και τον async scheduler για I/O.

  4. 4.Άγγιζε κάθε πράγμα μόνο από τη δική του περιοχή

    Άλλαζε ένα block ή μια οντότητα μόνο στο thread που την κατέχει. Χρησιμοποίησε teleportAsync αντί για teleport και προγραμμάτισε την εργασία στην περιοχή του στόχου πριν τον αλλάξεις.

  5. 5.Δήλωσε την υποστήριξη Folia

    Πρόσθεσε folia-supported: true στο plugin.yml. Χωρίς αυτό το Folia αρνείται να φορτώσει το plugin.

  6. 6.Δοκίμασέ το σε server Folia

    Το compile αποδεικνύει ότι ο κώδικας γίνεται build με το Folia API, όχι ότι είναι thread safe. Τρέξ' το σε έναν δοκιμαστικό server Folia με αρκετούς παίκτες σε διαφορετικά σημεία.

Οι τέσσερις schedulers

SchedulerΠώς τον παίρνειςΓια τι τον χρησιμοποιείς
RegionBukkit.getRegionScheduler()Εργασίες σε μια τοποθεσία του κόσμου: τοποθέτηση blocks, spawn
Entityentity.getScheduler()Εργασίες σε έναν παίκτη ή mob, τον ακολουθεί από περιοχή σε περιοχή
Global regionBukkit.getGlobalRegionScheduler()Ώρα του κόσμου, καιρός, ό,τι δεν δένεται με μια τοποθεσία
AsyncBukkit.getAsyncScheduler()Βάση δεδομένων, αρχεία, web requests, ποτέ ο κόσμος

Τι χαλάει συνήθως

  • Επαναλαμβανόμενα tasks για όλους τους παίκτες: ένας μόνο βρόχος πάνω σε κάθε online παίκτη δεν λειτουργεί πια· αντί γι' αυτό προγραμμάτισε ένα task στον entity scheduler κάθε παίκτη.
  • Teleports και αναμονές: το «teleport μετά από 3 δευτερόλεπτα» χρειάζεται τον entity scheduler και το teleportAsync.
  • Κοινά δεδομένα: maps και μετρητές που χρησιμοποιούνται από πολλές περιοχές πρέπει να είναι thread safe, για παράδειγμα concurrent collections.
  • Εξαρτήσεις: μια βιβλιοθήκη που καλεί τον scheduler του Bukkit πετάει UnsupportedOperationException στο Folia.

Ένα plugin για Paper και Folia

Οι schedulers region, entity, global και async είναι επίσης μέρος του Paper API στις τρέχουσες εκδόσεις, οπότε ένα plugin που χρησιμοποιεί μόνο αυτούς και δηλώνει folia-supported: true μπορεί να τρέχει και σε Paper και σε Folia. Συχνά αυτός είναι ο καλύτερος στόχος: ένα .jar για κάθε server.

Με το Codexe

Διάλεξε τον τύπο Folia. Το plugin που δημιουργείται προγραμματίζει τις εργασίες με τους schedulers region, entity, global region και async, δηλώνει folia-supported: true και γίνεται build με το Folia API μέσω Maven. Γίνεται compile και ελέγχεται πριν γίνει Έτοιμο.

Βάλε τις λεπτομέρειες χρονισμού στο αίτημα («κάθε λεπτό για κάθε online παίκτη», «teleport μετά από 3 δευτερόλεπτα»): εκεί διαφέρει περισσότερο ο κώδικας για Folia. Το Δοκίμασέ το τώρα δεν τρέχει ακόμα servers Folia, οπότε δοκίμασε το .jar στον δικό σου server Folia.

Ερωτήσεις

Τρέχουν τα Paper plugins σε Folia;

Μόνο αν είναι γραμμένα γι' αυτό και δηλώνουν folia-supported: true. Ένα κανονικό Paper plugin που χρησιμοποιεί τον scheduler του Bukkit απορρίπτεται ή αποτυγχάνει.

Τρέχει ένα Folia plugin σε Paper;

Ναι, όταν χρησιμοποιεί μόνο APIs που έχει και το Paper, όπου στις τρέχουσες εκδόσεις του Paper περιλαμβάνονται και οι schedulers του Folia.

Το Folia plugin μου πετάει exception για τον scheduler

Κάποιο κομμάτι κώδικα, συχνά από μια βιβλιοθήκη, χρησιμοποιεί ακόμα τον scheduler του Bukkit. Ζήτα στο chat του project να το μεταφέρει στον region ή στον entity scheduler.

Φτιάξε ένα Folia plugin

Αυτό το prompt ανοίγει έτοιμο για αποστολή:

“Ένα Folia plugin για 1.21.4 με το όνομα RTP: το /rtp μεταφέρει τον παίκτη σε μια τυχαία ασφαλή τοποθεσία μέσα σε 5000 blocks μετά από αναμονή 3 δευτερολέπτων που ακυρώνεται με την κίνηση, με τον entity scheduler και το teleportAsync, cooldown 10 λεπτών ανά παίκτη αποθηκευμένο σε SQLite, folia-supported: true, ακτίνα, cooldown και μηνύματα στο config.yml.”

Φτιάξ' το με το Codexe
Πώς να φτιάξεις ένα Folia plugin (region schedulers) | Codexe