Rehber
Kotlin ile Minecraft plugin'i nasıl yapılır
18 Ekim 2026 güncellendi
Kotlin JVM üzerinde çalışır, bu yüzden bir Kotlin plugin'i bir Java plugin'iyle aynı Paper veya Spigot API'sini, aynı plugin.yml dosyasını ve aynı plugins/ klasörünü kullanır. Kod daha kısa ve null açısından güvenlidir. Java plugin'lerinin dert etmesi gerekmeyen tek şey Kotlin standart kütüphanesidir: sunucu onunla gelmez, bu yüzden plugin'in onu yanında getirmesi gerekir.
Bu örnekten başla.
Bunu Codexe ile oluşturAdım adım
1.Kotlin DSL ile bir Gradle projesi oluştur
kotlin("jvm")plugin'i, Minecraft sürümüne uyan bir Java araç zinciri (17, 21 veya 25) ve PaperMC deposu içeren birbuild.gradle.kts.2.Sunucu API'sini ekle
compileOnly("io.papermc.paper:paper-api:<version>"). Java'da olduğu gibi sunucu bunu çalışma zamanında sağlar, bu yüzden asla pakete dahil edilmez.3.Ana sınıfı yaz
override fun onEnable()içerenclass MyPlugin : JavaPlugin(). Komutları ve dinleyicileri tam olarak Java'daki gibi kaydet.4.Kotlin standart kütüphanesini yanında getir
Shadow plugin'iyle .jar'ın içine göm ya da sunucunun açılışta
plugin.ymliçindekilibrarieslistesi üzerinden indirmesini sağla. İkisinden biri olmadan pluginNoClassDefFoundError: kotlin/...hatasıyla başarısız olur.5.plugin.yml yaz
Bir Java plugin'iyle aynı dosya: ad, sürüm, main (Kotlin sınıfı),
api-version, komutlar ve izinler.6.Derle ve test et
./gradlew shadowJar(veyabuild), .jar'ıbuild/libs/içinden bir test sunucusuna kopyala ve açılışta konsolu oku.
Kotlin'i sunucuya ulaştırmak
- Göm: Shadow Gradle plugin'i Kotlin standart kütüphanesini ve diğer çalışma zamanı kütüphanelerini .jar dosyana kopyalar. Her sürümde çalışır ve en yaygın seçimdir.
- plugin.yml içinde libraries: Spigot 1.16.5'ten itibaren bir plugin, sunucunun onun için indirip yüklediği Maven Central kütüphanelerini listeleyebilir. .jar küçük kalır, ama sunucunun ilk açılışta internet erişimine ihtiyacı vardır.
- Eklediğin kütüphaneler: kotlinx-coroutines standart kütüphanenin parçası değil, ayrı bir kütüphanedir ve o da gömülmelidir. Onu kendi paketine taşımak (relocate), başka bir sürümü gömen diğer plugin'lerle çakışmaları önler.
Coroutine'ler ve ana iş parçacığı
Coroutine'ler, sunucuyu dondurmadan bir veritabanından veri yüklemenin temiz bir yoludur, ama Bukkit API'si (dünyalar, varlıklar, envanterler) yine de ana iş parçacığından kullanılmalıdır. Yavaş işi bir arka plan dispatcher'ında yap, ardından oyuna dokunmadan önce zamanlayıcıyla sunucu iş parçacığına geri dön. Coroutine kapsamını plugin'e bağla ki onDisable() içinde iptal edilsin.
Java mı Kotlin mi?
| Özellik | Java | Kotlin |
|---|---|---|
| API | Paper / Spigot | Aynı Paper / Spigot API'si |
| Derle | Maven veya Gradle | build.gradle.kts ile Gradle |
| Çalışma zamanı ekleri | Yok | Gömülü veya yüklenen Kotlin standart kütüphanesi |
| Eğitimler ve örnekler | Çoğu | Daha az, ama Java örnekleri doğrudan uyarlanır |
Codexe ile
Bukkit/Spigot/Paper (Kotlin) seç. Codexe build.gradle.kts içeren bir Gradle projesi, Paper API'si, sunucunun sağlamadıklarını gömmek için Shadow plugin'i ve kod kullanıyorsa gömülüp taşınmış coroutine'ler üretir. Plugin'i Hazır olmadan önce derler; Kotlin plugin'leri de Java plugin'leri gibi bir test sunucusunda denenebilir ve test oyuncuları tarafından kontrol edilebilir. Bkz. Kotlin plugin oluşturucu.
"Bounties adlı, Kotlin ile yazılmış bir Paper 1.21.4 plugin'i: Vault üzerinden /bounty set <player> <amount>, ödülü öldüren alır, /bounty top en yüksek 10'u gösterir, veritabanı erişimi için coroutine'lerle SQLite'ta saklanır. Data class'lar ve extension fonksiyonlar kullan, Bukkit API çağrılarını ana iş parçacığında tut."
Sorular
Bir Kotlin plugin'i Java plugin'inden daha mı yavaştır?
Anlamlı bir fark yok: ikisi de JVM bytecode'una derlenir. Standart kütüphane gömüldüğünde .jar daha büyük olur.
Tek bir plugin'de Java ve Kotlin'i karıştırabilir miyim?
Evet, Gradle ikisini aynı projede derler ve Kotlin kodu Java sınıflarını doğrudan çağırır.
Kotlin sınıfları için neden NoClassDefFoundError?
Kotlin standart kütüphanesi .jar içinde değil ya da yüklenmemiş. shadowJar ile derle ve o .jar'ı kur ya da kütüphaneyi plugin.yml içindeki libraries listesine ekle.
Kotlin plugin'i yap
Bu prompt göndermeye hazır açılır:
“Bounties adlı, Kotlin ile yazılmış bir Paper 1.21.4 plugin'i: Vault ekonomisini kullanan /bounty set <player> <amount>, ödülü öldüren alır, /bounty top en yüksek 10'u gösterir, ödüller veritabanı erişimi için coroutine'lerle SQLite'ta saklanır, Bukkit API çağrıları ana iş parçacığında, mesajlar config.yml içinde.”
Bunu Codexe ile oluştur