Kod Yazmadan Minecraft Eklentisi Yapmak
Bir Minecraft sunucusunda, temel oyunun dışına çıkan her şey bir eklenti (plugin) üzerinden yapılır ve eklentiler Java ile yazılır. Sunucu işletenlerin çoğunun çarptığı duvar da tam olarak bu: ne istediklerini çok iyi bilirler, ama tek yol bir programlama dilinden, derlenmesi gereken bir projeden ve öğrenilmesi gereken bir API'den geçer. Bu sayfa Java olmadan neler yapılabileceğini ve her şeyden önce sınırların nerede olduğunu anlatıyor.
Duvar ve bilinen üç aşma yöntemi
NimBlock'tan önce, programlama bilmeyen birinin üç seçeneği vardır ve her birinin, işe girişmeden önce bilinmesi gereken net bir sınırı vardır.
- Komut blokları. Dünyada belirli bir noktada bulunurlar ve redstone veya bir saatle tetiklenirler. Bir sunucu olayına tepki veremezler, onu engellemek ise hiç mümkün değildir.
- Datapack'ler. Vanilla oyunun sınırları içinde kalırlar: fonksiyonlar, başarımlar, ganimet tabloları. Gerçek bir komut yoktur, sohbeti yakalayamazlar, bir eylemi iptal edemezler. Karşılığında, Paper olmadan, sade bir vanilla sunucuda çalışırlar.
- Skript. Önceki ikisinden çok daha güçlü, hatta NimBlock'tan da güçlü. Gerçek bir dil olduğu için öğrenilmesi gereken bir sözdizimi ve çözülmesi gereken hatalar vardır.
Bu üçü uzun zamandır var ve hiçbiri demode değil. Eksik olan, komut bloğu ile programlama dili arasındaki basamaktı.
Tek cümlede bir kural
NimBlock'un tüm dilbilgisi tek bir cümleye sığar: ne zaman bu olursa, eğer bu koşullar sağlanıyorsa, o zaman şunu yap. Bir eklenti kurallardan oluşan bir listedir; bir kural da bir tetikleyici, birkaç koşul ve birkaç eylemden ibarettir. Öğrenilecek başka bir şey yoktur ve bu bilinçli bir tercihtir: tek cümleye sığan bir dilbilgisi, kafaya da sığar.
Editörde bunlar birbirine geçen bloklardır: bir yere ait olmayan bir blok oraya geçmez. Editörün gözünden kaçanı da doğrulayıcı yakalar: bir spec bütünüyle kabul edilir ya da reddedilir, asla yarım yamalak değil. Koruma kuralı eksik bırakılmış bir koruma eklentisi oyunda hiç belli olmaz, ve kimsenin istemediği arıza türü tam olarak budur.
Bugün neler yapılabilir
9 tetikleyici, 8 koşul, 14 eylem. Her parametrenin ayrıntısıyla birlikte güncel ve tam liste dilbilgisi sayfasında: bu sayfa doğrudan kataloğdan üretilir, dolayısıyla asla yalan söylemez. Nelere izin verdiklerinin özeti:
- Olanlara tepki ver: bir bağlanma, bir ayrılma, sohbette bir mesaj, bir ölüm, kırılan veya yerleştirilen bir blok, senin uydurduğun bir komut, ya da her N saniyede bir.
- Filtrele: bir izin, op durumu, dünya, can puanı, bir metnin içeriği, sayı karşılaştırması ya da bir olasılık üzerinden.
- Eyleme geç: mesajlar, büyük başlıklar, sesler, eşyalar, efektler, iyileştirmeler, ışınlanmalar, tüm sunucuya duyurular, bir konsol komutu çalıştırma, ve az önce gerçekleşen olayı iptal etme. Listeyi gerçek bir korumaya dönüştüren de bu sonuncusu.
Neyin yerini tutmaz
Her şeyi vaat eden bir sayfa kimseye yaramaz. NimBlock'un yapmadıkları:
- Yeni bir oyun mekaniği yok. Yeni bir blok türü, daha önce görülmemiş bir varlık, özel bir envanter arayüzü: bunlar Java işi, ve öyle kalacak.
- Değişken yok, döngü yok. Bir kural tepki verir, hesap yapmaz. Fikrin iki olay arasında karmaşık bir durumu saklamayı gerektiriyorsa, bu dilbilgisinin sınırlarını aşmışsındır.
- Üçüncü taraf eklenti yok. NimBlock senin spec'lerini çalıştırır, başka bir yerden indirilmiş bir .jar dosyasını yüklemez.
- Yeni bir komut, bir sonraki başlatmayı bekler. Geri kalan her şey sunucuyu kapatmadan, anında uygulanır; ama Minecraft komutlarını yalnızca başlangıçta kaydeder: bu durum, oyunda fark edilmek yerine tam o an panelde belirtilir.
Eklenti nerede çalışır
Hiçbir yerde üretilip sonra derlenen bir Java kodu yoktur. Sunucu, herkes için bir kere yazılmış bir çalışma zamanı (runtime) yükler ve bu çalışma zamanı senin spec'ini okur. Bu da burada oluşturulan bir eklentinin borcu olmamasını sağlar: Minecraft değiştiğinde uyum sağlayan çalışma zamanıdır, bir kere, onunla yazılmış her eklenti değil.
Bir NimBlock sunucusunda kurulum tek tıkla olur ve eklenti, oyunu kesmeden sunucuya iner. Çalışma zamanı ise eklenti kataloglarında yayımlanacak, böylece aynı spec burada barındırılmayan bir sunucuda da çalışabilecek.
Sıkça sorulan sorular
- Programlama bilmeden gerçekten Minecraft eklentisi (plugin) yapılabilir mi?
- Evet, bir sınırı kabul etmek şartıyla: belirli bir dilbilgisi içinde kurallar oluşturursun, istediğin herhangi bir programı yazmazsın. Bir kural şunu söyler: «ne zaman bu olursa, eğer bu koşullar sağlanıyorsa, o zaman şunu yap». Arkadaşlar arasındaki bir sunucunun istediği hemen her şey bu kalıba sığar: karşılama mesajları, ödüller, korumalar, duyurular, özel komutlar. Sığmayan ise tamamen yeni bir oyun mekaniği icat etmeyi gerektirenlerdir, ve orada Java gerekir.
- Komut bloklarından farkı nedir?
- Komut blokları dünyada belirli bir noktada bulunur ve redstone ya da bir saatle tetiklenir. Bir eklenti ise bir sunucu olayıyla tetiklenir: bağlanan bir oyuncu, kırılan bir blok, sohbette bir mesaj. Komut bloklarının yapamadığı şey olanlara tepki vermek, ve en önemlisi bunların gerçekleşmesini engellemektir. Bir NimBlock kuralı, az önce gerçekleşen olayı iptal edebilir.
- Peki ya datapack'e kıyasla?
- Bir datapack, vanilla oyunun sınırları içinde kalır: fonksiyonlar, başarımlar, ganimet tabloları. Gerçek bir komut ekleyemez, sohbeti yakalayamaz, bir eylemi iptal edemez. Bir Paper eklentisi bunu yapabilir, çünkü dünya verileri içinde değil, sunucunun içinde çalışır. Karşılığında, bir datapack vanilla bir sunucuda çalışır, bir eklenti ise Paper ya da Spigot ister.
- Peki ya Skript'e kıyasla?
- Skript bu türün atası ve kıyaslanamayacak kadar güçlü: değişkenleri, döngüleri ve devasa bir eklenti (add-on) kütüphanesiyle gerçek bir programlama dili. Aynı zamanda bir dil olduğu için öğrenilecek bir sözdizimi, okunacak hatalar ve nerede bozulduğunu söylemeyen bir dosya demektir. NimBlock çok daha azını yapar, ama geçersiz bir kuralı kaydetmeden önce reddeder ve sorunun tam yerini ilgili blok üzerinde sana gösterir. Skript'le aran iyiyse, Skript'te kal.
- Eklenti bir yerde Java'ya mı derleniyor?
- Hayır, ve ürünün temel tercihi de bu. Spec'in bir JSON dosyası olarak kalır, sunucu ise onu okuyup çalıştıran, herkes için bir kez yazılmış bir çalışma zamanı yükler. Hiçbir şey üretilmez, hiçbir şey derlenmez. Pratikteki sonucu şu: yeni bir Minecraft sürümünün bedeli bir kere bu çalışma zamanında ödenir, onunla yazılmış eklentilerin her birinde değil.
- Eklentiyi, NimBlock'ta barındırılmayan bir sunucuya taşıyabilir miyim?
- Bu planlanıyor, ve spec'leri okuyan çalışma zamanı eklenti kataloglarında yayımlanacak. Bir spec, sıradan bir JSON dosyasıdır: çalışma zamanı onu sunucunun eklenti klasöründen okur. Bu sayfanın yazıldığı sırada henüz yayında değil.
İlk kuralını oluştur, ve onu zaten var olan bir sunucuda çalışırken gör.
Beta süresince ücretsiz · hesap başına 1 GB'lık bir sunucu