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ştur

Adım adım

  1. 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 bir build.gradle.kts.

  2. 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. 3.Ana sınıfı yaz

    override fun onEnable() içeren class MyPlugin : JavaPlugin(). Komutları ve dinleyicileri tam olarak Java'daki gibi kaydet.

  4. 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.yml içindeki libraries listesi üzerinden indirmesini sağla. İkisinden biri olmadan plugin NoClassDefFoundError: kotlin/... hatasıyla başarısız olur.

  5. 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. 6.Derle ve test et

    ./gradlew shadowJar (veya build), .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?

ÖzellikJavaKotlin
APIPaper / SpigotAynı Paper / Spigot API'si
DerleMaven veya Gradlebuild.gradle.kts ile Gradle
Çalışma zamanı ekleriYokGömülü veya yüklenen Kotlin standart kütüphanesi
Eğitimler ve örneklerÇoğuDaha 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
Kotlin ile Minecraft plugin'i nasıl yapılır (Paper) | Codexe