Rehber

Folia plugin'i nasıl yapılır

18 Ekim 2026 güncellendi

Folia, dünyayı bölgelere ayırıp onları farklı iş parçacıklarında tick'leyen bir Paper çatalıdır; böylece büyük sunucular çok sayıda CPU çekirdeği kullanabilir. Artık tek bir ana iş parçacığı yoktur ve bu, alışılmış Bukkit zamanlayıcısını bozar. Bir Folia plugin'i bu modele göre yazılmış bir Paper plugin'idir ve bunu plugin.yml dosyasında belirtmek zorundadır.

Folia'nın ihtiyaç duyduğu zamanlama ayrıntılarını içeren bir örnek.

Bunu Codexe ile oluştur

Adım adım

  1. 1.Folia'ya ihtiyacın olduğunu kontrol et

    Folia, dünyaya dağılmış çok sayıda oyuncusu olan sunuculara yardımcı olur. Çoğu sunucu Paper çalıştırır; birçok popüler plugin Folia'yı desteklemez, bu yüzden önce güvendiğin plugin'leri kontrol et.

  2. 2.Folia API'sine karşı derle

    Maven veya Gradle projesinde, PaperMC deposundan sürümüne uygun folia-api bağımlılığını provided kapsamıyla kullan.

  3. 3.Bukkit zamanlayıcısını değiştir

    Bukkit.getScheduler() Folia'da çalışmaz. Bir konumdaki işler için bölge zamanlayıcısını, bir oyuncu veya mob üzerindeki işler için varlık zamanlayıcısını, dünya çapındaki görevler için global bölge zamanlayıcısını ve G/Ç için async zamanlayıcıyı kullan.

  4. 4.Her şeye yalnızca kendi bölgesinden dokun

    Bir bloğu veya varlığı yalnızca ona sahip olan iş parçacığında değiştir. teleport yerine teleportAsync kullan ve hedefi değiştirmeden önce işi onun bölgesine zamanla.

  5. 5.Folia desteğini bildir

    plugin.yml dosyasına folia-supported: true ekle. Bu olmadan Folia plugin'i yüklemeyi reddeder.

  6. 6.Bir Folia sunucusunda test et

    Derlemek, kodun Folia API'sine karşı derlendiğini kanıtlar; iş parçacığı açısından güvenli olduğunu değil. Farklı yerlerde birkaç oyuncunun olduğu bir Folia test sunucusunda çalıştır.

Dört zamanlayıcı

ZamanlayıcıNasıl alınırNe için kullanılır
BölgeBukkit.getRegionScheduler()Bir dünya konumundaki işler: blok koyma, varlık doğurma
Varlıkentity.getScheduler()Tek bir oyuncu veya mob üzerindeki işler, bölgeler arasında onu takip eder
Global bölgeBukkit.getGlobalRegionScheduler()Dünya saati, hava durumu, bir konuma bağlı olmayan şeyler
AsyncBukkit.getAsyncScheduler()Veritabanı, dosyalar, web istekleri; asla dünya değil

Genellikle ne bozulur

  • Tüm oyuncular için tekrarlayan görevler: çevrimiçi her oyuncu üzerinde dönen tek bir döngü artık çalışmaz; bunun yerine her oyuncunun varlık zamanlayıcısına bir görev zamanla.
  • Işınlanmalar ve hazırlık süreleri: "3 saniye sonra ışınla" varlık zamanlayıcısı ve teleportAsync gerektirir.
  • Paylaşılan veriler: birkaç bölgeden kullanılan map'ler ve sayaçlar, örneğin eşzamanlı koleksiyonlarla, iş parçacığı açısından güvenli olmalıdır.
  • Bağımlılıklar: Bukkit zamanlayıcısını çağıran bir kütüphane Folia'da UnsupportedOperationException fırlatır.

Paper ve Folia için tek plugin

Bölge, varlık, global ve async zamanlayıcıları güncel sürümlerde Paper API'sinin de bir parçasıdır; bu yüzden yalnızca onları kullanan ve folia-supported: true bildiren bir plugin hem Paper'da hem Folia'da çalışabilir. Bu çoğu zaman en iyi hedeftir: her sunucu için tek bir .jar.

Codexe ile

Folia türünü seç. Oluşturulan plugin işleri bölge, varlık, global bölge ve async zamanlayıcılarıyla zamanlar, folia-supported: true bildirir ve Maven ile Folia API'sine karşı derlenir. Hazır olmadan önce derlenir ve kontrol edilir.

Zamanlama ayrıntılarını isteğe yaz ("çevrimiçi her oyuncu için her dakika", "3 saniye sonra ışınla"): Folia kodunun en çok farklılaştığı yer burasıdır. Hemen dene henüz Folia sunucuları çalıştırmıyor, bu yüzden .jar'ı kendi Folia sunucunda test et.

Sorular

Paper plugin'leri Folia'da çalışır mı?

Yalnızca ona göre yazılmışlarsa ve folia-supported: true bildiriyorlarsa. Bukkit zamanlayıcısını kullanan normal bir Paper plugin'i reddedilir veya hata verir.

Bir Folia plugin'i Paper'da çalışır mı?

Evet, yalnızca Paper'da da bulunan API'leri kullanıyorsa; güncel Paper sürümlerinde bunlara Folia zamanlayıcıları da dahildir.

Folia plugin'im zamanlayıcıyla ilgili bir istisna fırlatıyor

Bazı kodlar, çoğunlukla bir kütüphaneden gelenler, hâlâ Bukkit zamanlayıcısını kullanıyor. Proje sohbetinden bunları bölge veya varlık zamanlayıcısına taşımasını iste.

Folia plugin'i yap

Bu prompt göndermeye hazır açılır:

“RTP adlı bir Folia 1.21.4 plugin'i: /rtp oyuncuyu, hareket edince iptal olan 3 saniyelik bir hazırlıktan sonra 5000 blok içinde rastgele güvenli bir konuma ışınlar; varlık zamanlayıcısı ve teleportAsync kullanır, oyuncu başına 10 dakikalık bekleme süresi SQLite'a kaydedilir, folia-supported: true, yarıçap, bekleme süresi ve mesajlar config.yml içinde.”

Bunu Codexe ile oluştur
Folia plugin'i nasıl yapılır (bölge zamanlayıcıları) | Codexe