Panduan

Cara membuat plugin Folia

Diperbarui 18 Oktober 2026

Folia adalah fork Paper yang membagi world menjadi region dan menjalankan tick-nya di thread yang berbeda, sehingga server besar bisa memakai banyak core CPU. Tidak ada lagi satu main thread, dan itu merusak scheduler Bukkit yang biasa. Plugin Folia adalah plugin Paper yang ditulis untuk model tersebut, dan harus menyatakannya di plugin.yml.

Contoh dengan detail waktu yang dibutuhkan Folia.

Buat ini dengan Codexe

Langkah demi langkah

  1. 1.Pastikan kamu memang butuh Folia

    Folia membantu server dengan banyak pemain yang tersebar di seluruh world. Kebanyakan server memakai Paper; banyak plugin populer tidak mendukung Folia, jadi periksa dulu plugin yang kamu andalkan.

  2. 2.Build dengan Folia API

    Gunakan dependensi folia-api untuk versimu dari repository PaperMC, dengan scope provided, di proyek Maven atau Gradle.

  3. 3.Ganti scheduler Bukkit

    Bukkit.getScheduler() tidak berfungsi di Folia. Gunakan region scheduler untuk pekerjaan di suatu lokasi, entity scheduler untuk pekerjaan pada pemain atau mob, global region scheduler untuk tugas di seluruh world, dan async scheduler untuk I/O.

  4. 4.Sentuh sesuatu hanya dari region-nya sendiri

    Ubah blok atau entity hanya di thread yang memilikinya. Gunakan teleportAsync alih-alih teleport, dan jadwalkan ke region target sebelum mengubahnya.

  5. 5.Nyatakan dukungan Folia

    Tambahkan folia-supported: true ke plugin.yml. Tanpa itu Folia menolak memuat plugin.

  6. 6.Uji di server Folia

    Kompilasi membuktikan kodenya bisa di-build dengan Folia API, bukan bahwa kodenya aman untuk thread. Jalankan di server uji Folia dengan beberapa pemain di tempat yang berbeda.

Empat scheduler

SchedulerDidapat denganDipakai untuk
RegionBukkit.getRegionScheduler()Pekerjaan di lokasi world: memasang blok, spawn
Entityentity.getScheduler()Pekerjaan pada satu pemain atau mob, ikut berpindah antar region
Global regionBukkit.getGlobalRegionScheduler()Waktu world, cuaca, hal yang tidak terikat lokasi
AsyncBukkit.getAsyncScheduler()Database, file, permintaan web, tidak pernah world

Yang biasanya rusak

  • Tugas berulang untuk semua pemain: satu loop atas setiap pemain online tidak lagi berfungsi; jadwalkan tugas di entity scheduler setiap pemain sebagai gantinya.
  • Teleport dan warmup: "teleport setelah 3 detik" butuh entity scheduler dan teleportAsync.
  • Data bersama: map dan counter yang dipakai dari beberapa region harus aman untuk thread, misalnya concurrent collection.
  • Dependensi: library yang memanggil scheduler Bukkit melempar UnsupportedOperationException di Folia.

Satu plugin untuk Paper dan Folia

Scheduler region, entity, global, dan async juga merupakan bagian dari Paper API di versi terbaru, jadi plugin yang hanya memakai scheduler itu dan menyatakan folia-supported: true bisa berjalan di Paper maupun Folia. Itu sering menjadi target terbaik: satu .jar untuk setiap server.

Dengan Codexe

Pilih tipe Folia. Plugin yang dihasilkan menjadwalkan pekerjaan dengan scheduler region, entity, global region, dan async, menyatakan folia-supported: true, dan di-build dengan Folia API memakai Maven. Plugin dikompilasi dan diperiksa sebelum Ready.

Tulis detail waktu di permintaan ("setiap menit untuk setiap pemain online", "teleport setelah 3 detik"): di situlah kode Folia paling berbeda. Coba sekarang belum menjalankan server Folia, jadi uji .jar-nya di server Folia milikmu sendiri.

Pertanyaan

Apakah plugin Paper berjalan di Folia?

Hanya jika ditulis untuk Folia dan menyatakan folia-supported: true. Plugin Paper biasa yang memakai scheduler Bukkit akan ditolak atau gagal.

Apakah plugin Folia berjalan di Paper?

Ya, jika hanya memakai API yang juga dimiliki Paper, termasuk scheduler Folia di versi Paper terbaru.

Plugin Folia-ku melempar exception tentang scheduler

Sebagian kode, sering dari library, masih memakai scheduler Bukkit. Minta di chat proyek agar dipindahkan ke region atau entity scheduler.

Buat plugin Folia

Prompt ini terbuka dan siap dikirim:

“Plugin Folia 1.21.4 bernama RTP: /rtp meneleportasi pemain ke lokasi acak yang aman dalam radius 5000 blok setelah warmup 3 detik yang batal jika bergerak, memakai entity scheduler dan teleportAsync, cooldown 10 menit per pemain disimpan di SQLite, folia-supported: true, radius, cooldown, dan pesan di config.yml.”

Buat ini dengan Codexe
Cara membuat plugin Folia (region scheduler) | Codexe