- Katılım
- 14 Haziran 2016
- Mesajlar
- 998
- Elmaslar
- 746
- Puanlar
- 15.070
- Minecraft
- SimitSu
Merhaba Mc-Tr üyeleri ben kingOf0!, Bu konumda sizlere Bukkit Coding adlı serimin üçüncü bölümü olan, Constructor nasıl kullanıl(ır)acağından ve nasıl Multi(Class|Package) çalışıl(ır)acağından bahsedeceğim.
Dikkat! Bu dersi daha iyi anlayabilmeniz için Bukkit Coding | Başlangıç dersini okuyup kavramanız gerekmektedir, lütfen önceBukkit Coding | Başlangıç konusuna gidiniz
Plugin Hakkında
Bu pluginimizde, bir komut oluşturacağız. Bu oluşturduğumuz komut'un CommandExecutor class'ı ile Main class'ımı birbirine bağlayacağız, bu şekilde, CommandExecutor class'ımızda, Main Class'ımızın metodlarına, değişkenlerine ve daha niceliklerine erişim sağlayabileceğiz.
MainClass
Her zamanki gibi Ana(Main) Class'ımızı oluşturarak başlıyoruz.
CommandExecutorClass
Komutumuzu atayacağımız class'ımızı belirleyeceğiz, ben bunu yaparken "Commands" adında bir paket oluşturup içine, CommandManager veya CommandExecutorClass
adında class oluşyuruyorum. Bu paket ve class isimleri sizin tercihinize kalmış.
Import
Bu class'ın nasıl çalışacağını belirtirken, CommandExecutor demiştik.
Şimdi, bunu import ediyoruz,
Add unimplemented methods
CommandExecutor şeklime çalışacağını söylemiştik, bu şeklin kendine özgü olmazsa olmaz metodları var, bunu eklememizi istiyor.
Add unimplemented methods'a basarak bu metodları ekliyoruz.
Argümentleri isimlendirme
"CommandSender arg0, Command arg1, String arg2, String[] arg3" bu isimlendirme şekli, az önce otomatik oluştu. Bu isimlendirmeyi kullanan hemen hemen kimse yok.
Bu yüzden, daha genel bir isimlendirme yapacağız ki daha rahat anlayabilelim :D
burda 4 adet parametre mevcut.
CommandSender parametresi arg0 ile tanımlanmış.
Command parametresi arg1 ile tanımlanmış.
String parametresi arg2 ile tanımlanmış.
String[] parametresi arg3 ile tanımlanmış.
Bu tanımlar, kodun içerisinde bu parametrelerden bahsetmemize yarıyor.
Mesela, CommandSender'a ulaşmak için arg0 yazmamız yeterli...
CommandSender parametresini sender olarak tanımladık
Command parametresini cmd olarak tanımladık
String[]î ise args olarak tanımladık.
String'i label olarak tanımladık
Oyuncu mu kullandı?
Bu komutun oyuncu mu yoksa konsol tarafından mı kullandığını anlayacağız.
if (Sender instanceof Player)
Eğer (Sender, player'ın üyesi(örneği) ise)
olarak çevirilir,
Eğer konsol tarafından kullanılmılşsa?
konsol'a Bu komut konsol tarafından çalıştırılamaz! diye bir mesaj yollayacak.
player Adlı değişkeni oluşturma
Bu kısımda, Player türünde ve player adında bir değişken oluşturup bu değişkeni oyuncuymuşçasına kabul etttirdiğimiz sender'a eşitleyeceğiz.
instanceof ile kontrol ettiğimizden, sender'ın oyuncu olmama olasılığı yok. Bu yüzden rahatlılka onu Player olarak castleyebiliriz. (tanıtabiliriz / öyle olduğunu söyleyebiliriz)
Komudumuzu oluşturup temellerini attığımıza göre
Asıl Amacımıza geri dönelim
Bu CommandExecutorClass'ımızda MainClass'ımızı kullanalım, mesela bukkit'in config'ini çekelim.
MainClass'ımızda CommandExecutorClass'ımızdan bahsedelim(oluşturalım)
CommandExecutorClass türünde, cmdclass adında bir değişken oluşturup o değişkeni şimdi oluşturduğumuz(yeni bir) CommandExecutorClass class'ına eşitledik
parametre olarak ise this dedik. (this, bu class demektir.)
import
Bu class, farklı bir pakette olduğundan onu import etmemiz gerektiğini söylüyor.
Böylelikle Başka bir paketteki class'a erişmiş olduk. MultiPackage bu şekilde çalışılıyor.
Sizin import etmeniz yeterli, gerisini java halleder ;)
Constructor
Create constructor diyerek oluşturuyoruz. böylelikle, CommandExecutorClass'ında this'e erişebileceğiz.
Bu this, CommandExecutorClass'ında MainClass yerine geçecektir...
Gördüğünüz gibi constructor'ımız otomatikmen oluştu,
Bu constructor'da MainClass adlı class'ımız, mainClass diye tanımlanmış. Ben bunu plugin olarak değiştireceğim.
plugin'in constructor harici kullanılması nasıl sağlanır?
Field(Class adı ile, ilk metod arasındaki boşluğ)'a,
MainClass türünde plugin adında bir değişken oluşturup hiç bir şeye eşitlemiyoruz.
Sonrasında,
constructor'ımızın içine,
this.plugin = plugin;
yazıyoruz.
Böylelikle, Field'daki(Class içinde heryerden erişim sağlanabilen) plugin adlı değişkeni, constructor'ımızın içindeki plugin adlı değişkene eşitledik.
Böylelikle, plugin değişkeni bizim MainClass'ımıza eşitlenmiş oldu. Ve plugin'i CommandExecutorClass'ın her yerinde erişebilir hale geldik.
Son kısma gelelim,
plugin adlı değişkenimizin(MainClass'ımızın içinden) config'i çekiyoruz ve .set metoduyla
komutKullanildimi.Oyuncuİsmi adlı satırı true yapıyoruz.
Bu bölümde, bukkit'in config'ini anlatmayacağımdan detayına girmiyorum.
Komutumuzu kaydetme
MainClass'ımızın onEnable metodunun içine,
getCommand("komut").setExecutor(cmdclass);
yazıyoruz, Böylelikle, /komut yazıldığında, cmdclass olarak belirlenmiş class'ı harekete geçirecek.
cmdclass'ı ise 1 satır üstte belirtmiştik. Bu bizim CommandExecutorClass'ımıza denk geliyor
.
Plugin.yml'e komutu kaydetme
Bu yapmamız gereken son adım,
görselde olduğu gibi komutumuzu plugins.yml'e ekliyoruz.
Bu bölüm diğerlerine göre biraz daha farklı ve kısa oldu.
(!) Anlatım tamamen @kingOf0 'a aittir, İzinsiz Kopyalanması yasaktır. (!)
Dikkat! Bu dersi daha iyi anlayabilmeniz için Bukkit Coding | Başlangıç dersini okuyup kavramanız gerekmektedir, lütfen önceBukkit Coding | Başlangıç konusuna gidiniz
Plugin Hakkında
Bu pluginimizde, bir komut oluşturacağız. Bu oluşturduğumuz komut'un CommandExecutor class'ı ile Main class'ımı birbirine bağlayacağız, bu şekilde, CommandExecutor class'ımızda, Main Class'ımızın metodlarına, değişkenlerine ve daha niceliklerine erişim sağlayabileceğiz.
MainClass
Her zamanki gibi Ana(Main) Class'ımızı oluşturarak başlıyoruz.
CommandExecutorClass
Komutumuzu atayacağımız class'ımızı belirleyeceğiz, ben bunu yaparken "Commands" adında bir paket oluşturup içine, CommandManager veya CommandExecutorClass
adında class oluşyuruyorum. Bu paket ve class isimleri sizin tercihinize kalmış.
Import
Bu class'ın nasıl çalışacağını belirtirken, CommandExecutor demiştik.
Şimdi, bunu import ediyoruz,
Add unimplemented methods
CommandExecutor şeklime çalışacağını söylemiştik, bu şeklin kendine özgü olmazsa olmaz metodları var, bunu eklememizi istiyor.
Add unimplemented methods'a basarak bu metodları ekliyoruz.
Argümentleri isimlendirme
"CommandSender arg0, Command arg1, String arg2, String[] arg3" bu isimlendirme şekli, az önce otomatik oluştu. Bu isimlendirmeyi kullanan hemen hemen kimse yok.
Bu yüzden, daha genel bir isimlendirme yapacağız ki daha rahat anlayabilelim :D
burda 4 adet parametre mevcut.
CommandSender parametresi arg0 ile tanımlanmış.
Command parametresi arg1 ile tanımlanmış.
String parametresi arg2 ile tanımlanmış.
String[] parametresi arg3 ile tanımlanmış.
Bu tanımlar, kodun içerisinde bu parametrelerden bahsetmemize yarıyor.
Mesela, CommandSender'a ulaşmak için arg0 yazmamız yeterli...
CommandSender parametresini sender olarak tanımladık
Command parametresini cmd olarak tanımladık
String[]î ise args olarak tanımladık.
String'i label olarak tanımladık
Oyuncu mu kullandı?
Bu komutun oyuncu mu yoksa konsol tarafından mı kullandığını anlayacağız.
if (Sender instanceof Player)
Eğer (Sender, player'ın üyesi(örneği) ise)
olarak çevirilir,
Eğer konsol tarafından kullanılmılşsa?
konsol'a Bu komut konsol tarafından çalıştırılamaz! diye bir mesaj yollayacak.
player Adlı değişkeni oluşturma
Bu kısımda, Player türünde ve player adında bir değişken oluşturup bu değişkeni oyuncuymuşçasına kabul etttirdiğimiz sender'a eşitleyeceğiz.
instanceof ile kontrol ettiğimizden, sender'ın oyuncu olmama olasılığı yok. Bu yüzden rahatlılka onu Player olarak castleyebiliriz. (tanıtabiliriz / öyle olduğunu söyleyebiliriz)
Komudumuzu oluşturup temellerini attığımıza göre
Asıl Amacımıza geri dönelim
Bu CommandExecutorClass'ımızda MainClass'ımızı kullanalım, mesela bukkit'in config'ini çekelim.
MainClass'ımızda CommandExecutorClass'ımızdan bahsedelim(oluşturalım)
CommandExecutorClass türünde, cmdclass adında bir değişken oluşturup o değişkeni şimdi oluşturduğumuz(yeni bir) CommandExecutorClass class'ına eşitledik
parametre olarak ise this dedik. (this, bu class demektir.)
import
Bu class, farklı bir pakette olduğundan onu import etmemiz gerektiğini söylüyor.
Böylelikle Başka bir paketteki class'a erişmiş olduk. MultiPackage bu şekilde çalışılıyor.
Sizin import etmeniz yeterli, gerisini java halleder ;)
Constructor
Create constructor diyerek oluşturuyoruz. böylelikle, CommandExecutorClass'ında this'e erişebileceğiz.
Bu this, CommandExecutorClass'ında MainClass yerine geçecektir...
Gördüğünüz gibi constructor'ımız otomatikmen oluştu,
Bu constructor'da MainClass adlı class'ımız, mainClass diye tanımlanmış. Ben bunu plugin olarak değiştireceğim.
plugin'in constructor harici kullanılması nasıl sağlanır?
Field(Class adı ile, ilk metod arasındaki boşluğ)'a,
MainClass türünde plugin adında bir değişken oluşturup hiç bir şeye eşitlemiyoruz.
Sonrasında,
constructor'ımızın içine,
this.plugin = plugin;
yazıyoruz.
Böylelikle, Field'daki(Class içinde heryerden erişim sağlanabilen) plugin adlı değişkeni, constructor'ımızın içindeki plugin adlı değişkene eşitledik.
Böylelikle, plugin değişkeni bizim MainClass'ımıza eşitlenmiş oldu. Ve plugin'i CommandExecutorClass'ın her yerinde erişebilir hale geldik.
Son kısma gelelim,
plugin adlı değişkenimizin(MainClass'ımızın içinden) config'i çekiyoruz ve .set metoduyla
komutKullanildimi.Oyuncuİsmi adlı satırı true yapıyoruz.
Bu bölümde, bukkit'in config'ini anlatmayacağımdan detayına girmiyorum.
Komutumuzu kaydetme
MainClass'ımızın onEnable metodunun içine,
getCommand("komut").setExecutor(cmdclass);
yazıyoruz, Böylelikle, /komut yazıldığında, cmdclass olarak belirlenmiş class'ı harekete geçirecek.
cmdclass'ı ise 1 satır üstte belirtmiştik. Bu bizim CommandExecutorClass'ımıza denk geliyor
.
Plugin.yml'e komutu kaydetme
Bu yapmamız gereken son adım,
görselde olduğu gibi komutumuzu plugins.yml'e ekliyoruz.
Bu bölüm diğerlerine göre biraz daha farklı ve kısa oldu.
(!) Anlatım tamamen @kingOf0 'a aittir, İzinsiz Kopyalanması yasaktır. (!)