Rehber Spigot|Bukkit Eklenti Kodlama Rehberi #3 (ItemStack ve Eventlerle İlgili Küçük Bir Eklenti)

  • Konuyu Başlatan Konuyu Başlatan Kalerda
  • Başlangıç tarihi Başlangıç tarihi
  • Görüntüleme 1.717
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Kalerda

Vatan Sevdalısı
Katılım
13 Ağustos 2015
Mesajlar
653
Elmaslar
584
Puan
15.030
Konum
Türkiye
Spigot|Bukkit Eklenti Kodlama Rehberi(bölüm 3)

Önceki bölümlerden 1. bölümde eklenti kodlamak için gerekli ortamın hazırlanması ve ilk eklentinin çalıştırılmasını göstermiştim. 2. bölümde ise eventler ne işe yarar, kütüphane nedir gibi kavramlar üzerinde durduk.Bu bölümde ise eventleri kullanarak ,yeni bir bilgi olan ItemStack değerini kullanarak ve oyuncudan veri alarak bir eklenti yazacağız.Derslerde bu şekilde pratik üzerinden gitmeyi daha doğru buluyorum.


Bu Rehberde Kullanılacak Event Tipi Ve Ne İşe Yaradığı:
BlockBreakEvent - - -> Oyuncunun tüm blok kırma olaylarını dinler.

ItemStack nedir, nasıl kullanılır?
ItemStack ,minecraftta bulunan bir objenin, kaç tane olduğu ve hangi çeşitte olduğu gibi verilerle birlikte kullanılabilmesine imkan tanıyan bir ifadedir. Hangi çeşitten kastım şudur ki; misal glass_pane isimli obje kullanılırken direk glass_pane şeklinde tanımlanır. Fakat oyunun bize sağladığı renk özelliklerini bu şekilde veremeyiz. İşte bu noktada (byte) veri tipi işimize yarıyor.Peki bu (byte) veri tipini nasıl kullanırız? Cevabı aslında çok basit, minecraft eşya kodlarında örneğin; 355:5 gibi iki noktadan sonraki ifade varsa bu ifade o eşyanın (byte) değeridir.


Şimdi kodlar üzerinden ItemStack ifadesinin kullanımını göstereyim:
Java:
    ItemStack eşyaismi = new ItemStack(Material.IRON_ORE);
    //Burada yalnızca eşyamızın türünü belirttik.Bu kullanımda otomatik olarak eşya sayısı 1'e eşitlenir.
 
    ItemStack eşyaismi = new ItemStack(Material.IRON_ORE,26);
    //Bu kullanımda ise eşyamızın türünü belirttiği gibi ek olarak sayısını da belirtir.
 
    ItemStack eşyaismi = new ItemStack(Material.WOOL, 26, (byte) 6);
    //Bu kullanımda da eşyamızın türü ve sayısı belirtildi fakat bu sefer byte değerimiz var.
    //Eşyamıza dikkat edecek olursak, eşyamız yündür ve pembe renkli yündür.
    //İşte byte veri tipi bu tür renk gibi eşya ayrımlarında kullanılıyor.


Eklentimizin nasıl kodlandığını ve ne anlama geldiğini açıklayacak olursam, eklentimiz ilk önce oyuncunun blok kırma verilerini tek tek dinleyecek.Daha sonra eğer ki kömür madenine rastlarsa oyuncuya "Kömür madenini kırdınız!" mesajını yollayacak. Daha sonra oyuncunun blok kırma olayını iptal edecek. Daha sonra ise ItemStack ile tanımladığımız eşyayı oyuncunun envanterine ekleyecek.

Java:
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
         
    }
 
 
    @EventHandler
    public void onBlockBreak(BlockBreakEvent e) {
        Player oyuncu = e.getPlayer();
     
        Block kırılanblok = e.getBlock();
     
        if(kırılanblok.getType().equals(Material.COAL_ORE)) {
            oyuncu.sendMessage(ChatColor.RED + "Kömür madeni kırdınız!");
            e.setCancelled(true);
            ItemStack kömür = new ItemStack(Material.COAL_ORE, 2);
            oyuncu.getInventory().addItem(kömür);
        }
     
     
    }




Yazdığımız Kodların Resim Üzerinden Anlatımı:


Ders 3.png




Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.






Derslerimiz artık bundan sonra pratik üzerine devam edecektir.
Lütfen rehber serimi beğendiyseniz elmas vermeyi unutmayın.
Yorumlarda eklenmesini istediğiniz veya yapamadığınız kısımları sorabilirsiniz, tüm forum üyeleri olarak yardımcı oluruz.



İyi Forumlar Dilerim...
 
Son düzenleme:
Spigot|Bukkit Eklenti Kodlama Rehberi(bölüm 3)

Önceki bölümlerden 1. bölümde eklenti kodlamak için gerekli ortamın hazırlanması ve ilk eklentinin çalıştırılmasını göstermiştim. 2. bölümde ise eventler ne işe yarar, kütüphane nedir gibi kavramlar üzerinde durduk.Bu bölümde ise eventleri kullanarak ,yeni bir bilgi olan ItemStack değerini kullanarak ve oyuncudan veri alarak bir eklenti yazacağız.Derslerde bu şekilde pratik üzerinden gitmeyi daha doğru buluyorum.


Bu Rehberde Kullanılacak Event Tipi Ve Ne İşe Yaradığı:
BlockBreakEvent - - -> Oyuncunun tüm blok kırma olaylarını dinler.

ItemStack nedir, nasıl kullanılır?
ItemStack ,minecraftta bulunan bir objenin, kaç tane olduğu ve hangi çeşitte olduğu gibi verilerle birlikte kullanılabilmesine imkan tanıyan bir ifadedir. Hangi çeşitten kastım şudur ki; misal glass_pane isimli obje kullanılırken direk glass_pane şeklinde tanımlanır. Fakat oyunun bize sağladığı renk özelliklerini bu şekilde veremeyiz. İşte bu noktada (byte) veri tipi işimize yarıyor.Peki bu (byte) veri tipini nasıl kullanırız? Cevabı aslında çok basit, minecraft eşya kodlarında örneğin; 355:5 gibi iki noktadan sonraki ifade varsa bu ifade o eşyanın (byte) değeridir.


Şimdi kodlar üzerinden ItemStack ifadesinin kullanımını göstereyim:
Java:
    ItemStack eşyaismi = new ItemStack(Material.IRON_ORE);
    //Burada yalnızca eşyamızın türünü belirttik.Bu kullanımda otomatik olarak eşya sayısı 1'e eşitlenir.
 
    ItemStack eşyaismi = new ItemStack(Material.IRON_ORE,26);
    //Bu kullanımda ise eşyamızın türünü belirttiği gibi ek olarak sayısını da belirtir.
 
    ItemStack eşyaismi = new ItemStack(Material.WOOL, 26, (byte) 6);
    //Bu kullanımda da eşyamızın türü ve sayısı belirtildi fakat bu sefer byte değerimiz var.
    //Eşyamıza dikkat edecek olursak, eşyamız yündür ve pembe renkli yündür.
    //İşte byte veri tipi bu tür renk gibi eşya ayrımlarında kullanılıyor.


Eklentimizin nasıl kodlandığını ve ne anlama geldiğini açıklayacak olursam, eklentimiz ilk önce oyuncunun blok kırma verilerini tek tek dinleyecek.Daha sonra eğer ki kömür madenine rastlarsa oyuncuya "Kömür madenini kırdınız!" mesajını yollayacak. Daha sonra oyuncunun blok kırma olayını iptal edecek. Daha sonra ise ItemStack ile tanımladığımız eşyayı oyuncunun envanterine ekleyecek.

Java:
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
         
    }
 
 
    @EventHandler
    public void onBlockBreak(BlockBreakEvent e) {
        Player oyuncu = e.getPlayer();
     
        Block kırılanblok = e.getBlock();
     
        if(kırılanblok.getType().equals(Material.COAL_ORE)) {
            oyuncu.sendMessage(ChatColor.RED + "Kömür madeni kırdınız!");
            e.setCancelled(true);
            ItemStack kömür = new ItemStack(Material.COAL_ORE, 2);
            oyuncu.getInventory().addItem(kömür);
        }
     
     
    }




Yazdığımız Kodların Resim Üzerinden Anlatımı:


Ekli dosyayı görüntüle 51171



Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.






Derslerimiz artık bundan sonra pratik üzerine devam edecektir.
Lütfen rehber serimi beğendiyseniz elmas vermeyi unutmayın.
Yorumlarda eklenmesini istediğiniz veya yapamadığınız kısımları sorabilirsiniz, tüm forum üyeleri olarak yardımcı oluruz.



İyi Forumlar Dilerim...
Çok iyi java bilen birisi değilim ama bildiğim kadarıyla ufak bir yanlışın var.

"BlockBreakEvent" herhangi bir eventi dinlemez.

Kod:
... void LEl(BlockBreakEvent e)
... void dahaSonraÇağırmakİçinKullanabileceğimizİsim(değişkentürü değişkenadı)

Bu void'de BlockBreakEvent'in içindekileri kullanacağınızı belirtmek için değişkentürüne BlockBreakEvent yazdın. ve bu kodda bu eventten bahsederken "e" kullanacağın için onu e değişkeni olarak tanımladın.

eventi dinleyen şey @EventHandler ve implements Listener dır.

Eski rehberlerini okumadım ama, yukarıdaki kod'da implements listener'dan bahsetmemişsin. Bir eventin çalışmasının nasıl olacağını anlatmadan önce bunu anlatmalısın.
 
Çok iyi java bilen birisi değilim ama bildiğim kadarıyla ufak bir yanlışın var.

"BlockBreakEvent" herhangi bir eventi dinlemez.

Kod:
... void LEl(BlockBreakEvent e)
... void dahaSonraÇağırmakİçinKullanabileceğimizİsim(değişkentürü değişkenadı)

Bu void'de BlockBreakEvent'in içindekileri kullanacağınızı belirtmek için değişkentürüne BlockBreakEvent yazdın. ve bu kodda bu eventten bahsederken "e" kullanacağın için onu e değişkeni olarak tanımladın.

eventi dinleyen şey @EventHandler ve implements Listener dır.

Eski rehberlerini okumadım ama, yukarıdaki kod'da implements listener'dan bahsetmemişsin. Bir eventin çalışmasının nasıl olacağını anlatmadan önce bunu anlatmalısın.


KingOf daha önceki derslerime bakmadan yorum yapıyorsun buradaki amacın ne bilmiyorum fakat dediğin konuya gelecek olursak PlayerBreakEvent event sınıfındaki bir parçadır yani tüm eventlerin içinden yalnızca blok kırma eventini alıyoruz.Bu yüzden dinliyor demenin bir sakıncası olduğunu düşünmüyorum.

Ben java rehberi yapmıyorum , eklenti rehberi yapıyorum.Ve java hakkında temel bilgisi olan bir birey yazdığımız fonksiyonların vs. hangi sınıftan çekildiğini çok basit bir şekilde import ederek görebilir.Bu yüzden implements Listener konusuna girmedim.

Eventi dinleyen şey implement Listener değildir , direk Listener sınıfıdır ve üstte belirttiğim sebepten ötürü anlatma gereği duymadım.
Ayrıca eventi dinleyen şey Listener sınıfıdır demek de doğru değil onEnable() metodunda tanımladığımız
getServer().getPluginManager().registerEvents(this, this); fonksiyonudur.



@EventHandlerı ve eventlerin nasıl çalıştığını bir önceki rehberimde aşırı detaylı bir şekilde anlattım ama senin önceki rehberlere bakmadan gelip böyle bir yorum yapman bana çok farklı şeyleri işaret ediyor.
Şiddetle uyarıyor ve tavsiye ediyorum lütfen önceki rehberlere bakıp eleştirini 3-4 kez düşün öyle yap.Eleştirmek için eleştirme.
 
Ellerine sağlık. Gayet başarılı bir seri. Ayrıca @kingOf0 Kalerda Eski konularında listenerdan bahsetmiş ve EventHandlerdan da bahsetmiş. Onun dışında BlockBreakEvent kendi başına bir eventtir. Aşağıda verceğim linkte Shift+F yapıp org.bukkit.event yazarsan bütün eventleri görebilirsin ve onların subTitle larına erişebilirsin. Sadece BlockBreakEvent ile metin taşı yazılabiliyor :)

İyi konuydu! Okurken heyecanlandım :))))

Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
 
Ellerine sağlık. Gayet başarılı bir seri. Ayrıca @kingOf0 Kalerda Eski konularında listenerdan bahsetmiş ve EventHandlerdan da bahsetmiş. Onun dışında BlockBreakEvent kendi başına bir eventtir. Aşağıda verceğim linkte Shift+F yapıp org.bukkit.event yazarsan bütün eventleri görebilirsin ve onların subTitle larına erişebilirsin. Sadece BlockBreakEvent ile metin taşı yazılabiliyor :)

İyi konuydu! Okurken heyecanlandım :))))

Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.

Değerli yorumun için teşekkür ederim.
İşinize yarar bir konuysa ne mutlu bana.
İyi Forumlar...
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst