- Katılım
- 22 Ekim 2019
- Mesajlar
- 18
- Tepki puanı
- 22
- Puanları
- 1,025
- Discord
- >>TheLegend<<#6052
Arkadaşlar baştan söylemek istiyorum ki eğer öğrenmek istiyorsanız veya bir eklenti yazmak istiyorsanız kesinlikle sabırlı ve meraklı olmalısınız.
Eğer sabırlı olmaz iseniz, yaptığınız ilk hatada eklenti yazımını bırakırsınız veya hazır kaynaklar tercih edersiniz.
Eğer meraklı olmaz iseniz, bilginizi kısıtlı bırakırsınız. Rehberler bu işin ilk adımıdır. Rehberlerden bilgiler edinir ve sonra merakınız ile bunu mükemmelleştirirsiniz.
Bukkit eklentileri kodlamalarında "Eclipse" adlı bir Java düzenleme platformu kullanılır.
Eclipse Nedir;
Eclipse,
2001 yılında IBM tarafından başlatılan proje Java'nın ana grafik sistemi olan Swing yerine bulunduğu platformda bulunan özellikleri doğrudan kullanan STW'yi kullanarak Java dünyasında tartışmalara yol açmıştır. Hızlı arayüzü, şık görünümü ve çok kuvvetli özellikleriyle kısa zamanda Java geliştiricileri arasında en popüler geliştirme ortamı olmuştur.
Android SDK ile bütünleşik çalışan Eclipse'in içinde yazılan programları denemek için öykünücü kurulabilmektedir.
Ayrıca sunulan eklentiler ile işlevleri geliştirilerek birçok alanda kullanılabilmektedir.
Eclipse programını,
Yeni Proje Oluşturma;
Programın sol üst köşesinden
Kırmızı kutucukta gösterilen kısıma tıklayıp, çıkan seçeneklerimizden "Java Project" seçin.
İlk kutucukta gösterilen kısıma plugin isminizi girin. Daha sonra altındaki kutuda
JRE kutucuğunu aynı resimdeki gibi yapmanızı öneririm. "J2SE-1.5"
İstenenleri doldurtuktan sonra hemen altındaki "Next >" butonuna tıklayın. Tıkladığınızda,
"Libraries" sekmesinden "Add External JARs..." butonuna tıklayın.
Bu yaptığımız işlem pluginimizin bukkit uyumluluğu içindir. Dolayısıyla butona bastığımızda bilgisayarınızdan bir CraftBukkit sürümü seçin.
En güncel CraftBukkit sürümlerini;
CraftBukkit sürümünüzü seçtikten sonra "Finish" butonu ile beraber projemiz açılıyor.
Package Dosyası Oluşturmak;
Package dosyası ne işe yarar; bu dosya isminden tahmin edilebileceği gibi "paket" dosyasıdır.
Oluşturmak için, oluşturduğunuz projenin içerisindeki "src" adlı simgeye sağ tıklayıp, New > Package yolunu izleyin.
Çıkan yeni bölümde ise package isminizi girin.
Package isminiz,
Adlarını kesinlikle taşımamalıdır.
Package isimlerinize eğer varsa domain uzantınızı veya e-mail hesabınızı kullanabilirsiniz. Örneğin,
E-Mail: thelegend.mcturk@gmail.com
Package ismi; com.gmail.thelegendmcturk
Eğer hiç biri yok veya hiç birini kullanmak istemiyorsanız,
me.<yazar-isim>.<proje-isim> formatını kullanabilirsiniz. Örneğin
Class Dosyası Oluşturmak;
Projemiz ve package dosyamız tamamen hazır. Class dosyalarımızı hazırlayalım.
Class dosyamızı oluşturmak için, oluşturmuş olduğumuz package dosyasına sağ tıklayıp New>Class uzantısını izleyin ve dilediğiniz class isminizi girin.
Bir eklentinin kesinlikle ana class dosyası olmalıdır. Ve bu ana class dosyasını belirlemek için bir yol vardır.
"JavaPlugin" kodu eklentimizin ana class dosyasını belirlemek için kullanılan bir koddur. Peki bu kodu nerede ve nasıl kullanacağız;
Class dosyanız ilk açtığında şu şekilde görünmelidir;
Ve eğer biz bu açtığımız class dosyasını eklentimizin ana class dosyası olarak belirlemek istiyorsak;
Olarak düzenlemeliyiz.
"JavaPlugin" kodunun altı kırmızı olacaktır.
Bunun sebebi kodu import etmememizdir.
Kodu import etmek için kısaca CTRL + SHIFT + O tuşlarını kullanabiliriz.
Bu tuşlar "Organize Imports" özelliğini kullanmamızı sağlar ve bu tuşları kullandığımız class dosyanızdaki tüm import edilmesi gereken kodları import eder.
Import ettiğinizde şu şekilde görünmelidir;
plugin.yml Dosyası Oluşturmak;
plugin.yml dosyası bir eklentide kesinlikle olması gereken bir dosyadır.
Ve bu dosyayı düzenlerken de kesinlikle gereken bir kaç metod vardır.
Düzenlemeye geçmeden önce nasıl oluşturacağımıza değinelim,
Oluşturduğumuz projenin içerisinde bulunan "src" adlı dosyaya sağ tıklayın ve New > Files yolunu izleyin.
Karşınıza çıkan kısıma "plugin.yml" yazıp "Enter" tuşuna basın.
Artık eklentimiz için oluşturulmuş bir plugin.yml dosyamız var.
Bu dosyada eklenti ismimizi, eklenti versiyonumuzu ve ana class dosya konumunu kesinlikle ve kesinlikle belirtmek zorundayız.
Eğer bunları belirtmez isek eklentimiz kesinlikle çalışmayacaktır.
Belirtilmesi zorunlu kısımlar ile plugin.yml şu şekilde görünmelidir;
Örneğin:
Fakat tabi ki bu zorunlu kısımlar dışında ekleyebileceğiniz birçok ekstralar bulunmaktadır.
Örneğin:
Bu kodlar ana class dosyasında bulunmalıdır.
Anlamları ise eklenti yüklenirken ve devre dışı bırakılırken yapılacağı işlemlerdir.
Log Oluşturma;
Log nedir; loglar genellikle bir işlem sonucu konsola gönderilen mesajlardır.
Ve biz şimdi bu mesajları, eklenti açılışında ve kapanışına yerleştireceğiz.
İhtiyacımız olan kod;
Bu kodu eğer onEnable() bölümüne yerleştirirsek açılışta "Deneme Plugini!" diye bir info logu yayınlayacaktır.
onDisable() bölümüne yerleştirirsek kapanışta belirlemiş olduğunuz logu yayınlayacaktır.
Tabi ki sadece bu info logları ile sınırlı değil. Mevcut log ön ekleri;
Eklentilerde en çok görülen log türüdür. Hata veya bir uyarı olmadığı sürece her zaman bu log türü kullanılır.
Örnek severe(hata) logu;
Genellikle bu log türü, hangi işlemde kullanıldıysa ve işlem gerçekleşirken oluşan bir hatayı bildirmek için kullanılır.
Örnek warning(uyarı) logu;
Genellikle bu log türü, eklentide yeni bir güncelleme geldiğini bildirmek için veya eklentide mevcut olan
Bir bugu, hatayı, eksikliği bildirmek/duyurmak için kullanılır.
Kodlarımızı onEnable() ve onDisable() bölümlerine yerleştirelim;
Komut Oluşturma;
Komut oluşturmada belirli bir "onCommand" metodu vardır.
onCommand metodu bir bakıma "/" yöneticisidir. Yani komutumuzu komut yapan bir metoddur.
Peki bu metodu nasıl ve nerede kullanacağız
Bu metodun belli bir kullanımı vardır;
Örneğin eklenti yazarken tercih ettiğim farklı onCommand kodları, "CommandSender gonderen" ve "Command komut".
Değiştirdiğimiz kodları metoda aktaralım;
Birde hepsini değiştirelim. Örneğin "CommandSender gonderen, Command komut, String baskaad, String[] dokuman".
Metoda aktaralım;
Örnek bir komut görünümü;
"return true;" veya "return false;" aslında sadece genel olarak "boolean" durumunu işaretler. Çünkü sonuç olarak komut işlemi bir boolean durumudur ve her boolean durumunun olduğu gibi değeri true veya false olmalıdır.
"equalsIgnoreCase" kodunun işlevi ise komuttaki büyük ve küçük harf duyarlılığını kapatmaktır. Yani biz komutumuzu ".equalsIgnoreCase("deneme")" olarak girersek komut "DENEME", "deneme", "DeNeMe", "DeneMe", "DeNeme" gibi büyük küçük harf fark etmezsizin komut çalışacaktır.
Komutu plugin.yml Dosyasına Ekleme;
Oluşturduğun komutu kesinlikle eklentinin plugin.yml dosyasına eklemen gerekir.
Eğer ki komut plugin.yml dosyasına eklenmemişse o komut yok sayılır.
Peki nasıl ekleyeceğiz;
Yetki kontrollerini plugin.yml dosyasından değilde,
Komutları oluştururken birkaç kod ile halledebiliriz.
Şahsen plugin.yml de bulunan yetki dedektörü yerine kodları öneririm.
Komut Yetki Dedektörü;
Bu bölümde komutu sadece yetkisi olanların kullanabilmesini sağlayacağız.
Ve burada ekleyeceğimiz yetkiyi, aynı komut gibi plugin.yml dosyasına aktarmamız gerekmekte.
Komut kodlamaları kendi stilimde yapmak istiyorum yani sadece "CommandSender gonderen" ve "Command komut" olarak kullanacağım.
İhtiyacımız olan kod;
Bu kod ile komutumuzu sadece belirttiğimiz yetkiye sahip oyuncuların kullanabilmesini sağlayacağız.
Bunu örnek bir komuta aktaralım;
Şuan "deneme" komutunu sadece "deneme.ana-komut" yetkisine sahip oyuncular kullanabilir.
Ve şimdi "deneme.ana-komut" yetkisine sahip olmadığı halde bu komutu kullanmaya çalışanlara mesaj göndereceğiz.
Artık şimdi, deneme komutunu izini olmayan biri girdiğinde ne yapılmasını istiyor iseniz "//Yetersiz izin mesajı" kısımını silip belirtin.
Bir mesaj göndermek için,
Kodunu kullanabilirsiniz.
Mesajınıza renk verebilmek için,
"ChatColor" kodu kullanılabilir. Verebileceğiniz renkleri görebilmek için,
"ChatColor." yazın ve eclipse size renkleri sıralayacaktır.
Renginizi seçtikten sonra hemen yanına mesajınızı girmeden önce bir "+" işareti koyun yani, ChatColor.RED + "<Mesaj>" gibi.
Örnek kırmızı renkli yetersiz izin mesajı;
Yetkileri plugin.yml Dosyasına Ekleme;
Arkadaşlar kodlarla bir yetki dedektörü sağladıysak,
Hazırladığımız yetkilerin her birini plugin.yml dosyasına eklememiz gerekir.
Şu şekilde hazırlayacağız;
"default" kısımı kullanabilecek grupları listeler.
Yani buraya op olanlar veya olmayanlar veya hepsini seçebilirsiniz.
Default grupları ve anlamları;
Bu örneğimizde yetki, OP olan her kimsede bulunabilecek.
plugin.yml Yetki Children Sistemi;
Arkadaşlar bukkit bize bir özellik daha sunmaktadır ve bu özellik gayet kullanışlı ve hoş bir özelliktir.
Bu özellik, children özelliği olarak adlandırılır.
Birçoğunuz bu sistemi görmüştür. Eklentilerde bulunan "" yetkisi örneğin; "essentials." yetkisi bir diğer kavramı ile tüm yetkiler anlamını taşır.
Bu tür yetkiler plugin.yml dosyasınan oluşturulmaktadır.
Ve bizlerde şimdi bir children sistemli yetki hazırlayacağız.
Aslında oldukça basittir.
Format örneği;
Kodlamada gördüğünüz "children" kodu, kapsadığı yetkileri temsil eder.
Örnek plugin.yml children sistemli yetkiler bölümü;
Children listesinin altına yazdığınız yetinin kullanılabilir veya kullanılamaz olarak işaretlemek için
"true/false" sistemini kullanabilirsiniz.
Konsol/Oyuncu Dedektörü;
Oluşturduğunuz bir komutun sadece oyuncuların girebilmesini istiyor iseniz
Bu dedektörü kullanmanız gerekmektedir. Bu sayede dedektörü eklediğimiz komutu sadece oyuncular girebilecek.
İhtiyacımız olan kod;
Bu kodun anlamı, "eğer bu komutu gönderen oyuncu ise" gibi varsayım yapabilirsiniz.
Peki bu kodu nasıl komutumuza nasıl monteleyeceğiz;
Ve şimdi artık komutumuzu sadece oyun içerisindeki oyuncular kullanabilir.
Eğer bir konsol kullanmaya çalışırsa hata verir.
Fakat şimdi biz hata vermesi yerine bizim belirlediğimiz bir mesajın yollamasını sağlayacağız. Aynı yetki mesajı gibi;
Artık bu komutu konsol girmeyi denediği zaman belirlediğimiz mesajı gönderecektir.
"else" kodunun anlamı bir bakıma "aksi taktirde" gibi bir anlam taşır.
Peki siz bu kodu nereye yerleştireceğinizi nereden bilecekseniz;
"else" kodunu hangi işlemi aksi taktirde ne olacağını eklemek istiyor iseniz o işlemin altına eklemeniz gerekir.
Bunu öğrenmenin bir kısa yolu var.
Tüm komut işlemlerinizi bitirin ve bu aksi taktirde olayını en sona bırakın
Komutu bitirdiniz ve bir tek o kaldı.
Örneğin yetkisi olmayan oyunculara gönderilecek mesajı ele alalım;
Son kısımda gördüğünüz işlemi açan "{" harfinin sağına tıklayın ve eclipse size o işlemi kapatan harfi kare içine alacaktır.
O harfin hemen altına "else" kodumuzu yerleştirebiliriz.
Komut Döküman Oluşturma;
Komutumuza dedektör eklemek için belirli birkaç koda ihtiyacımız var.
Ekleyeceğimiz döküman config dosyasını yenileme görevi görecek.
Ve bu kodlar;
Bu kodun anlamı, "Komutun bir dökümanı varsa ve o döküman yenile ise" gibi düşünebiliriz.
Şimdi "yenile" dökümanına bir işlev yükleyelim;
Artık oyuncu veya konsol "/deneme yenile" komutunu girdiğinde
Ayarlar yani config dosyası yenilenecek ve yenilendiğine dair bir bilgi mesajı gönderecektir.
Komut Döküman Dedektörü;
Komutlara döküman eklediğimizde ve bu döküman fazla veya az girildiğinde
Bilgilendirme mesajları göndermesini sağlayacağız.
İhtiyacımız olan kod;
Bu kodun anlamını, "Eğer döküman birden az ise" gibi düşünebiliriz.
Bunu tabi ki değiştirebiliriz. Büyüktür küçüktür işaretleri (<,>) kullanılmaktadır. Döküman sayısı değiştirilebilir.
Örneğin;
Eklenti Ayarlar Dosyası Oluşturma (config.yml);
Eklentiniz ne kadar ayarlanabilir olursa o kadar güzel bir hal alır.
Ve eklentinizi ayarlanabilir hale getirmek için bir ayarlar dosyasına veya bir diğer adı ile config.yml dosyasına ihtiyacınız var.
Bu bölümde nasıl config dosyası oluşturulacağı ve bir ayarlanabilir mesaj oluşturacağız.
Her şeyden önce iki koda ihtiyacımız var.
Bu kodlar;
Kodlarıdır.
Bu kodlar bize config dosyası izini vermektedir.
Sonraki aşamadaki
İhtiyacımız olan kısaltma kodu;
Bu kod bir kısaltma kodudur. Yani siz "ayarlarYukle();" kodunu girdiğinizde yukarıda kod içerisine alınmış tüm kodları kapsayacaktır.
Bu kod bizim config dosyası oluşturma kodumuzdur.
Bu kısaltma kodu ana class dosyasında bulunmalıdır ve ayrı bir void kodu olduğu için hiç bir metod bunu kapsayamaz dolayısıyla,
Bu kodu onEnable() kodunun üstüne yerleştirebilirsiniz.
Ayrıca bu config yükleme kodumuzu yani "ayarlarYukle();" onEnable() metoduna yerleştirmeliyiz ki eklenti aktif edilirken config dosyamız yüklensin.
Yerleştirelim;
Artık config dosyamız eklenti aktif edilirken yüklenecektir.
Şimdi ise config dosyasından düzenlenebilir bir komut mesajı oluşturalım.
"config.getString" kodu bize configden bir veri getirmemizi sağlar ve hemen yanında bulunan "("Deneme-Mesaji")" bölümü ise hangi veriyi getireceğine dair bir bilgi.
Şimdi tek yapmamız bir config dosyası oluşturmak.
Projemizin içerisinde bulunan "src" kısımına sağ tıklayın ve New > Files kısmından bir config.yml oluşturun.
Oluşturduğunuz config.yml dosyasına
Belirttiğimiz veriyi girelim,
Artık bir config dosyamız ve config dosyasından düzenlenebilir bir mesajımız var.
Bittiğinde şöyle bir görünüm elde edeceksiniz;
config.yml Renk Kodları Desteği;
Config dosyamızdan ayarlanabilir mesajlara renk kodları desteği verebilmek için
Sadece tek bir koda ihtiyacımız vardır.
Ve bu kod;
Kodudur. Normal minecraft kodlamalarında renk kodu "§" dur fakat bizler bunu "&" olarak değiştirdik.
Şimdi aynı durumu bizim config dosyasından ayarlanabilir mesajımıza ekleyeceğiz.
Kodumuzu monteleyelim;
Artık mesajımız renk kodları destekli bir mesajdır.
Ve bu mesajı config dosyasında yazarken mesajı tırnak işaretleri içerisine almalıyız.
Örneğin config.yml;
Bittiğinde şu şekilde görünmeli;
Komut Oyuncu Online Durumu Dedektörü;
Bu kısımda komut ile girilmiş bir oyuncun online olup olmadığını kontrol edeceğiz.
Eğer oyuncu çevrim içi değil ise çevrimdışı olduğuna dair bir bilgilendirme mesajı göndereceğiz.
İhtiyacımız olan kod;
"Player hedef = (Bukkit.getServer().getPlayer(args[0]));" kodunun anlamı,
Gireceği bir diğer dökümanın bir oyuncu olacağını belli etmekte.
Diğer "if (hedef == null)" komutu ise "Eğer oyuncu belirlenemez ise" gibi bir anlam taşır.
Şimdi bunu komutumuza monte edip, bir mesaj yerleştirelim;
Eğer sabırlı olmaz iseniz, yaptığınız ilk hatada eklenti yazımını bırakırsınız veya hazır kaynaklar tercih edersiniz.
Eğer meraklı olmaz iseniz, bilginizi kısıtlı bırakırsınız. Rehberler bu işin ilk adımıdır. Rehberlerden bilgiler edinir ve sonra merakınız ile bunu mükemmelleştirirsiniz.
Bukkit eklentileri kodlamalarında "Eclipse" adlı bir Java düzenleme platformu kullanılır.
Eclipse Nedir;
Eclipse,
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
çık kaynak kodlu bir tümleşik geliştirme ortamıdır. (IDE). Ana odak noktası
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
ve Java ile ilişkili teknolojiler olsa da esnek yapısı sayesinde
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
ve Python gibi farklı diller için de kullanılmaktadır.2001 yılında IBM tarafından başlatılan proje Java'nın ana grafik sistemi olan Swing yerine bulunduğu platformda bulunan özellikleri doğrudan kullanan STW'yi kullanarak Java dünyasında tartışmalara yol açmıştır. Hızlı arayüzü, şık görünümü ve çok kuvvetli özellikleriyle kısa zamanda Java geliştiricileri arasında en popüler geliştirme ortamı olmuştur.
Android SDK ile bütünleşik çalışan Eclipse'in içinde yazılan programları denemek için öykünücü kurulabilmektedir.
Ayrıca sunulan eklentiler ile işlevleri geliştirilerek birçok alanda kullanılabilmektedir.
Eclipse programını,
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
adlı siteden elde edebilirsiniz.Yeni Proje Oluşturma;
Programın sol üst köşesinden
Kırmızı kutucukta gösterilen kısıma tıklayıp, çıkan seçeneklerimizden "Java Project" seçin.
İlk kutucukta gösterilen kısıma plugin isminizi girin. Daha sonra altındaki kutuda
JRE kutucuğunu aynı resimdeki gibi yapmanızı öneririm. "J2SE-1.5"
İstenenleri doldurtuktan sonra hemen altındaki "Next >" butonuna tıklayın. Tıkladığınızda,
"Libraries" sekmesinden "Add External JARs..." butonuna tıklayın.
Bu yaptığımız işlem pluginimizin bukkit uyumluluğu içindir. Dolayısıyla butona bastığımızda bilgisayarınızdan bir CraftBukkit sürümü seçin.
En güncel CraftBukkit sürümlerini;
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
uzantısından elde edebilirsiniz.CraftBukkit sürümünüzü seçtikten sonra "Finish" butonu ile beraber projemiz açılıyor.
Package Dosyası Oluşturmak;
Package dosyası ne işe yarar; bu dosya isminden tahmin edilebileceği gibi "paket" dosyasıdır.
Oluşturmak için, oluşturduğunuz projenin içerisindeki "src" adlı simgeye sağ tıklayıp, New > Package yolunu izleyin.
Çıkan yeni bölümde ise package isminizi girin.
Package isminiz,
Kod:
org.bukkit
net.bukkit
com.bukkit
net.minecraft
Package isimlerinize eğer varsa domain uzantınızı veya e-mail hesabınızı kullanabilirsiniz. Örneğin,
E-Mail: thelegend.mcturk@gmail.com
Package ismi; com.gmail.thelegendmcturk
Eğer hiç biri yok veya hiç birini kullanmak istemiyorsanız,
me.<yazar-isim>.<proje-isim> formatını kullanabilirsiniz. Örneğin
Kod:
me.thelegend.deneme
Class Dosyası Oluşturmak;
Projemiz ve package dosyamız tamamen hazır. Class dosyalarımızı hazırlayalım.
Class dosyamızı oluşturmak için, oluşturmuş olduğumuz package dosyasına sağ tıklayıp New>Class uzantısını izleyin ve dilediğiniz class isminizi girin.
Bir eklentinin kesinlikle ana class dosyası olmalıdır. Ve bu ana class dosyasını belirlemek için bir yol vardır.
"JavaPlugin" kodu eklentimizin ana class dosyasını belirlemek için kullanılan bir koddur. Peki bu kodu nerede ve nasıl kullanacağız;
Class dosyanız ilk açtığında şu şekilde görünmelidir;
Kod:
package <package-isminiz>;
public class <class-isminiz> {
}
Kod:
package <package-isminiz>;
public class <class-isminiz> extends JavaPlugin {
}
"JavaPlugin" kodunun altı kırmızı olacaktır.
Bunun sebebi kodu import etmememizdir.
Kodu import etmek için kısaca CTRL + SHIFT + O tuşlarını kullanabiliriz.
Bu tuşlar "Organize Imports" özelliğini kullanmamızı sağlar ve bu tuşları kullandığımız class dosyanızdaki tüm import edilmesi gereken kodları import eder.
Import ettiğinizde şu şekilde görünmelidir;
Kod:
package <package-isminiz>;
import org.bukkit.plugin.java.JavaPlugin;
public class <class-isminiz> extends JavaPlugin {
}
plugin.yml Dosyası Oluşturmak;
plugin.yml dosyası bir eklentide kesinlikle olması gereken bir dosyadır.
Ve bu dosyayı düzenlerken de kesinlikle gereken bir kaç metod vardır.
Düzenlemeye geçmeden önce nasıl oluşturacağımıza değinelim,
Oluşturduğumuz projenin içerisinde bulunan "src" adlı dosyaya sağ tıklayın ve New > Files yolunu izleyin.
Karşınıza çıkan kısıma "plugin.yml" yazıp "Enter" tuşuna basın.
Artık eklentimiz için oluşturulmuş bir plugin.yml dosyamız var.
Bu dosyada eklenti ismimizi, eklenti versiyonumuzu ve ana class dosya konumunu kesinlikle ve kesinlikle belirtmek zorundayız.
Eğer bunları belirtmez isek eklentimiz kesinlikle çalışmayacaktır.
Belirtilmesi zorunlu kısımlar ile plugin.yml şu şekilde görünmelidir;
Kod:
name: <eklenti-isminiz>
version: <eklenti-versiyonu>
main: <package-uzantınız>.<ana-class-dosyanız>
Kod:
name: Deneme
version: 1.0
main: me.thelegend.deneme.Ana
Örneğin:
Kod:
name: Deneme
version: 1.0
author: TheLegend
main: me.thelegend.hosgeldin.Ana
description: Bukkit Deneme Eklentisi!
- name - Eklenti isminiz
- version - Eklenti versiyonunuz
- author - Eklenti yazarı
- main - Eklenti ana class dosyası yolu
- description - Eklenti hakkında kısa bilgi
Bu kodlar ana class dosyasında bulunmalıdır.
Anlamları ise eklenti yüklenirken ve devre dışı bırakılırken yapılacağı işlemlerdir.
Kod:
package <package-isminiz>;
import org.bukkit.plugin.java.JavaPlugin;
public class <class-isminiz> extends JavaPlugin {
public void onEnable() {
// Eklenti acilisinda yapilacak islemler
}
public void onDisable() {
// Eklenti devre disi birakirken yapilacak islemler
}
}
Log nedir; loglar genellikle bir işlem sonucu konsola gönderilen mesajlardır.
Ve biz şimdi bu mesajları, eklenti açılışında ve kapanışına yerleştireceğiz.
İhtiyacımız olan kod;
Kod:
getLogger().info("<Logunuz>");
onDisable() bölümüne yerleştirirsek kapanışta belirlemiş olduğunuz logu yayınlayacaktır.
Tabi ki sadece bu info logları ile sınırlı değil. Mevcut log ön ekleri;
- info
- severe
- warning
Kod:
getLogger().info("Deneme Plugini!");
Örnek severe(hata) logu;
Kod:
getLogger().severe("Deneme Plugini!");
Örnek warning(uyarı) logu;
Kod:
getLogger().warning("Deneme Plugini!");
Bir bugu, hatayı, eksikliği bildirmek/duyurmak için kullanılır.
Kodlarımızı onEnable() ve onDisable() bölümlerine yerleştirelim;
Kod:
package <package-isminiz>;
import org.bukkit.plugin.java.JavaPlugin;
public class <class-isminiz> extends JavaPlugin {
public void onEnable() {
getLogger().info("Deneme Plugini Aktif!");
}
public void onDisable() {
getLogger().info("Deneme Plugini Devre Disi!");
}
}
Komut oluşturmada belirli bir "onCommand" metodu vardır.
onCommand metodu bir bakıma "/" yöneticisidir. Yani komutumuzu komut yapan bir metoddur.
Peki bu metodu nasıl ve nerede kullanacağız
Bu metodun belli bir kullanımı vardır;
Kod:
public boolean onCommand(CommandSender sender, Command komut, String label, String[] args)
- CommandSender sender - Komutu gönderen kişi
- Command cmd - Komut
- String label - Komutun kullanılan bir başka adı
- String[] args - Komut dökümanları. Örneğin; "/deneme abc 123" bunlar komut dökümanlarıdır ve bu örneğimizde abc dökümanı args[0](ilk döküman), 123 dökümanı args[1](ikinci döküman)
Örneğin eklenti yazarken tercih ettiğim farklı onCommand kodları, "CommandSender gonderen" ve "Command komut".
Değiştirdiğimiz kodları metoda aktaralım;
Kod:
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args)
Metoda aktaralım;
Kod:
public boolean onCommand(CommandSender gonderen, Command komut, String baskaad, String[] dokuman)
Kod:
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
if (komut.getName().equalsIgnoreCase("deneme") {
// Deneme kodu girildiğinde yapılacak işlemler
return true;
}
return false;
}
}
"equalsIgnoreCase" kodunun işlevi ise komuttaki büyük ve küçük harf duyarlılığını kapatmaktır. Yani biz komutumuzu ".equalsIgnoreCase("deneme")" olarak girersek komut "DENEME", "deneme", "DeNeMe", "DeneMe", "DeNeme" gibi büyük küçük harf fark etmezsizin komut çalışacaktır.
Komutu plugin.yml Dosyasına Ekleme;
Oluşturduğun komutu kesinlikle eklentinin plugin.yml dosyasına eklemen gerekir.
Eğer ki komut plugin.yml dosyasına eklenmemişse o komut yok sayılır.
Peki nasıl ekleyeceğiz;
Kod:
commands:
<komutunuz>:
description: <komut-hakkında-kısa-bilgi>
usage: <komut kullanimi>
permission: <eklenti-ismi>.<yetki>
permission-message: <yetersiz-yetki-mesaji>
- description - Komut hakkında kısa bilgi
- usage - Komut kullanımı (Genellikle birden fazla dökümanlı komutlar için kullanılır)
- permission - Komuta erişim için gerekli yetki
- permission-message - Eğer bir oyuncu yetkisi olmadığı halde bu komuta erişmeyi denerse gönderilecek mesaj.
Kod:
commands:
deneme:
description: Deneme komutu
usage: /deneme [oyuncu]
permission: deneme.ana-komut
permission-message: Bunun Icin Gerekli Izine Sahip Degilsin!
Komutları oluştururken birkaç kod ile halledebiliriz.
Şahsen plugin.yml de bulunan yetki dedektörü yerine kodları öneririm.
Komut Yetki Dedektörü;
Bu bölümde komutu sadece yetkisi olanların kullanabilmesini sağlayacağız.
Ve burada ekleyeceğimiz yetkiyi, aynı komut gibi plugin.yml dosyasına aktarmamız gerekmekte.
Komut kodlamaları kendi stilimde yapmak istiyorum yani sadece "CommandSender gonderen" ve "Command komut" olarak kullanacağım.
İhtiyacımız olan kod;
Kod:
if (gonderen.hasPermission("<eklenti-ismi>.<yetki>"))
Bunu örnek bir komuta aktaralım;
Kod:
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
if (komut.getName().equalsIgnoreCase("deneme")) {
if (gonderen.hasPermission("deneme.ana-komut")) {
//Komuta erişimi olanlar yani op veya yetkisi olanlar bu komutu girdiğinde yapılacak işlem
return true;
}
}
return false;
}
Ve şimdi "deneme.ana-komut" yetkisine sahip olmadığı halde bu komutu kullanmaya çalışanlara mesaj göndereceğiz.
Kod:
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
if (komut.getName().equalsIgnoreCase("deneme")) {
if (gonderen.hasPermission("deneme.ana-komut")) {
//Komuta erişimi olanlar yani op veya yetkisi olanlar bu komutu girdiğinde yapılacak işlem
return true;
}
else {
//Yetersiz izin mesajı
return true;
}
}
return false;
}
}
Bir mesaj göndermek için,
Kod:
gonderen.sendMessage("<Mesajınız>");
Mesajınıza renk verebilmek için,
"ChatColor" kodu kullanılabilir. Verebileceğiniz renkleri görebilmek için,
"ChatColor." yazın ve eclipse size renkleri sıralayacaktır.
Renginizi seçtikten sonra hemen yanına mesajınızı girmeden önce bir "+" işareti koyun yani, ChatColor.RED + "<Mesaj>" gibi.
Örnek kırmızı renkli yetersiz izin mesajı;
Kod:
gonderen.sendMessage(ChatColor.DARK_RED + "Bunun Icin Gerekli Izine Sahip Degilsiniz!");
Arkadaşlar kodlarla bir yetki dedektörü sağladıysak,
Hazırladığımız yetkilerin her birini plugin.yml dosyasına eklememiz gerekir.
Şu şekilde hazırlayacağız;
Kod:
permissions:
<yetki>:
description: <kısa-bilgi>
default: <kullanabilecekler>
Yani buraya op olanlar veya olmayanlar veya hepsini seçebilirsiniz.
Default grupları ve anlamları;
- op - OP Olanlar
- not op - OP Olmayanlar
- true - Hepsi
- false - Hiç biri
Kod:
permissions:
deneme.ana-komut:
description: Ana komuta erisim izini
default: op
plugin.yml Yetki Children Sistemi;
Arkadaşlar bukkit bize bir özellik daha sunmaktadır ve bu özellik gayet kullanışlı ve hoş bir özelliktir.
Bu özellik, children özelliği olarak adlandırılır.
Birçoğunuz bu sistemi görmüştür. Eklentilerde bulunan "" yetkisi örneğin; "essentials." yetkisi bir diğer kavramı ile tüm yetkiler anlamını taşır.
Bu tür yetkiler plugin.yml dosyasınan oluşturulmaktadır.
Ve bizlerde şimdi bir children sistemli yetki hazırlayacağız.
Aslında oldukça basittir.
Format örneği;
Kod:
permissions:
<eklenti-isminiz>.*:
description: <kısa-bilgi>
children:
<eklenti-ismini>.<yetki>: true
<eklenti-ismini>.<yetki>: false
<eklenti-ismini>.<yetki>: true
<eklenti-ismini>.<yetki>: true
default: op
Örnek plugin.yml children sistemli yetkiler bölümü;
Kod:
permissions:
deneme.*:
description: Deneme eklentisinin tüm yetkileri.
children:
deneme.ana-komut: true
deneme.yenile: false
default: op
"true/false" sistemini kullanabilirsiniz.
Konsol/Oyuncu Dedektörü;
Oluşturduğunuz bir komutun sadece oyuncuların girebilmesini istiyor iseniz
Bu dedektörü kullanmanız gerekmektedir. Bu sayede dedektörü eklediğimiz komutu sadece oyuncular girebilecek.
İhtiyacımız olan kod;
Kod:
if (gonderen instanceof Player)
Peki bu kodu nasıl komutumuza nasıl monteleyeceğiz;
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
if (gonderen instanceof Player) {
//Yapılacak işlem
return true;
}
}
return false;
}
}
Eğer bir konsol kullanmaya çalışırsa hata verir.
Fakat şimdi biz hata vermesi yerine bizim belirlediğimiz bir mesajın yollamasını sağlayacağız. Aynı yetki mesajı gibi;
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
if (gonderen instanceof Player) {
gonderen.sendMessage(ChatColor.RED + "Deneme!");
return true;
}
else {
gonderen.sendMessage(ChatColor.DARK_RED + "Bu Komut Sadece Oyun Icerisinde Girilebilir!");
return true;
}
}
return false;
}
}
"else" kodunun anlamı bir bakıma "aksi taktirde" gibi bir anlam taşır.
Peki siz bu kodu nereye yerleştireceğinizi nereden bilecekseniz;
"else" kodunu hangi işlemi aksi taktirde ne olacağını eklemek istiyor iseniz o işlemin altına eklemeniz gerekir.
Bunu öğrenmenin bir kısa yolu var.
Tüm komut işlemlerinizi bitirin ve bu aksi taktirde olayını en sona bırakın
Komutu bitirdiniz ve bir tek o kaldı.
Örneğin yetkisi olmayan oyunculara gönderilecek mesajı ele alalım;
Kod:
if (gonderen.hasPermission("deneme.ana-komut")) {
O harfin hemen altına "else" kodumuzu yerleştirebiliriz.
Komut Döküman Oluşturma;
Komutumuza dedektör eklemek için belirli birkaç koda ihtiyacımız var.
Ekleyeceğimiz döküman config dosyasını yenileme görevi görecek.
Ve bu kodlar;
Kod:
if ((args.length == 1) && (args[0].equalsIgnoreCase("yenile"))) {
Şimdi "yenile" dökümanına bir işlev yükleyelim;
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
if ((args.length == 1) && (args[0].equalsIgnoreCase("yenile"))) {
reloadConfig();
saveConfig();
gonderen.sendMessage(ChatColor.RED + "Ayarlar Yenilendi!");
return true;
}
}
return false;
}
}
Ayarlar yani config dosyası yenilenecek ve yenilendiğine dair bir bilgi mesajı gönderecektir.
Komut Döküman Dedektörü;
Komutlara döküman eklediğimizde ve bu döküman fazla veya az girildiğinde
Bilgilendirme mesajları göndermesini sağlayacağız.
İhtiyacımız olan kod;
Kod:
if (args.length > 1) {
Bunu tabi ki değiştirebiliriz. Büyüktür küçüktür işaretleri (<,>) kullanılmaktadır. Döküman sayısı değiştirilebilir.
Örneğin;
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
if (args.length > 1) {
gonderen.sendMessage(ChatColor.RED + "Yetersiz Dokuman!");
return true;
}
if (args.length < 3) {
gonderen.sendMessage(ChatColor.RED + "Fazla Dokuman!");
return true;
}
}
return false;
}
}
Eklentiniz ne kadar ayarlanabilir olursa o kadar güzel bir hal alır.
Ve eklentinizi ayarlanabilir hale getirmek için bir ayarlar dosyasına veya bir diğer adı ile config.yml dosyasına ihtiyacınız var.
Bu bölümde nasıl config dosyası oluşturulacağı ve bir ayarlanabilir mesaj oluşturacağız.
Her şeyden önce iki koda ihtiyacımız var.
Bu kodlar;
Kod:
FileConfiguration config;
File dosya;
Bu kodlar bize config dosyası izini vermektedir.
Sonraki aşamadaki
İhtiyacımız olan kısaltma kodu;
Kod:
public void ayarlarYukle() {
config = getConfig();
config.options().copyDefaults(true);
dosya = new File(getDataFolder(), "config.yml");
saveConfig();
}
Bu kod bizim config dosyası oluşturma kodumuzdur.
Bu kısaltma kodu ana class dosyasında bulunmalıdır ve ayrı bir void kodu olduğu için hiç bir metod bunu kapsayamaz dolayısıyla,
Bu kodu onEnable() kodunun üstüne yerleştirebilirsiniz.
Ayrıca bu config yükleme kodumuzu yani "ayarlarYukle();" onEnable() metoduna yerleştirmeliyiz ki eklenti aktif edilirken config dosyamız yüklensin.
Yerleştirelim;
Kod:
public void ayarlarYukle() {
config = getConfig();
config.options().copyDefaults(true);
dosya = new File(getDataFolder(), "config.yml");
saveConfig();
}
public void onEnable() {
ayarlarYukle();
}
Şimdi ise config dosyasından düzenlenebilir bir komut mesajı oluşturalım.
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
gonderen.sendMessage(config.getString("Deneme-Mesaji"));
return true;
}
return false;
}
}
Şimdi tek yapmamız bir config dosyası oluşturmak.
Projemizin içerisinde bulunan "src" kısımına sağ tıklayın ve New > Files kısmından bir config.yml oluşturun.
Oluşturduğunuz config.yml dosyasına
Belirttiğimiz veriyi girelim,
Kod:
Deneme-Mesaji: Deneme Mesaji Calisiyor!
Bittiğinde şöyle bir görünüm elde edeceksiniz;
Kod:
public class <ana-class> extends JavaPlugin {
FileConfiguration config;
File dosya;
public void ayarlarYukle() {
config = getConfig();
config.options().copyDefaults(true);
dosya = new File(getDataFolder(), "config.yml");
saveConfig();
}
public void onEnable() {
ayarlarYukle();
}
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
if (komut.getName().equalsIgnoreCase("deneme")) {
gonderen.sendMessage(config.getString("Deneme-Mesaji"));
}
return false;
}
}
Config dosyamızdan ayarlanabilir mesajlara renk kodları desteği verebilmek için
Sadece tek bir koda ihtiyacımız vardır.
Ve bu kod;
Kod:
replaceAll("&", "§");
Şimdi aynı durumu bizim config dosyasından ayarlanabilir mesajımıza ekleyeceğiz.
Kodumuzu monteleyelim;
Kod:
gonderen.sendMessage(config.getString("Deneme-Mesaji").replaceAll("&", "§");
Ve bu mesajı config dosyasında yazarken mesajı tırnak işaretleri içerisine almalıyız.
Örneğin config.yml;
Kod:
Deneme-Mesaji: '&cDeneme Mesaji Calisiyor!'
Kod:
FileConfiguration config;
File dosya;
public void ayarlarYukle() {
config = getConfig();
config.options().copyDefaults(true);
dosya = new File(getDataFolder(), "config.yml");
saveConfig();
}
public void onEnable() {
ayarlarYukle();
}
public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
if (komut.getName().equalsIgnoreCase("deneme")) {
gonderen.sendMessage(config.getString("Deneme-Mesaji"));
}
return false;
}
}
Bu kısımda komut ile girilmiş bir oyuncun online olup olmadığını kontrol edeceğiz.
Eğer oyuncu çevrim içi değil ise çevrimdışı olduğuna dair bir bilgilendirme mesajı göndereceğiz.
İhtiyacımız olan kod;
Kod:
Player hedef = (Bukkit.getServer().getPlayer(args[0]));
if (hedef == null) {
Gireceği bir diğer dökümanın bir oyuncu olacağını belli etmekte.
Diğer "if (hedef == null)" komutu ise "Eğer oyuncu belirlenemez ise" gibi bir anlam taşır.
Şimdi bunu komutumuza monte edip, bir mesaj yerleştirelim;
Kod:
if (komut.getName().equalsIgnoreCase("deneme")) {
Player hedef = (Bukkit.getServer().getPlayer(args[0]));
if (hedef == null) {
gonderen.sendMessage(ChatColor.RED + "Oyuncu Aktif Degil!");
return true;
}
}
return false;
}
}