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şturAdım adım
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.Folia API'sine karşı derle
Maven veya Gradle projesinde, PaperMC deposundan sürümüne uygun
folia-apibağımlılığınıprovidedkapsamıyla kullan.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.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.
teleportyerineteleportAsynckullan ve hedefi değiştirmeden önce işi onun bölgesine zamanla.5.Folia desteğini bildir
plugin.ymldosyasınafolia-supported: trueekle. Bu olmadan Folia plugin'i yüklemeyi reddeder.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ır | Ne için kullanılır |
|---|---|---|
| Bölge | Bukkit.getRegionScheduler() | Bir dünya konumundaki işler: blok koyma, varlık doğurma |
| Varlık | entity.getScheduler() | Tek bir oyuncu veya mob üzerindeki işler, bölgeler arasında onu takip eder |
| Global bölge | Bukkit.getGlobalRegionScheduler() | Dünya saati, hava durumu, bir konuma bağlı olmayan şeyler |
| Async | Bukkit.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
teleportAsyncgerektirir. - 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
UnsupportedOperationExceptionfı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