Sol Reklam
Sağ Reklam

Rehber Bukkit Coding | ItemStack'den bilgi edinme | Eklenti & Plugin dersleri

Durum
Mesaj gönderimine kapalı.

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

Katılım
14 Haziran 2016
Mesajlar
998
Elmaslar
746
Puanlar
15.070
Yer
getPlayer("SimitSu").getLocation()
Minecraft
SimitSu
yeni_logo - Kopya.png

Merhaba Mc-Tr üyeleri ben kingOf0!, Bu konumda sizlere Bukkit Coding adlı serimin ikinci bölümü olan, ItemStack nasıl oluşturul(ur)up & nasıl kullanı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 önce Bukkit Coding | Başlangıç konusuna gidiniz.


Plugin Hakkında
Bu pluginimizde, sohbete yazınca, oyuncunun elindeki item hakkında bilgi vermesini sağlayacağız


1533388463712.png



Register Events
"Sohbete yazıldığında" bunu kontrol etmek için "AsyncPlayerChatEvent" eventine ihtiyacımız var fakat, herhangi bir eventi kontrol ederken "registerEvents" yapmamız gerekiyor bunun için:


onEnable adlı method'umuzu oluşturuyoruz
oluşturduğumuz bu method'un içine
Bukkit.getPluginManager().registerEvents(this, this);
yazarak kodumuzda bir event kullanacağımızı belirtiyoruz



1533388914654.png



AsyncPlayerChatEvent
sohbetKontrol adında bi method oluşturuyoruz , parantez açıyorıuz ve içine (EventAdı Event'eUlaşmakİçinKullanılacakKarakter) yazıyoruz.
Bu durumda
void sohbetKontrol(AsyncPlayerChatEvent e)
yazıyoruz, bu method'umuzun içine ise


Player p = e.getPlayer();

yazıyoruz.

türkçeleştirirsek:

Player p = e.getPlayer();
Player türünde p adında bir değer oluştur, bunu Eventteki oyuncuya eşitle.


method'umuzun hemen önüne @EventHandler eklemeyi ve herşeyi import etmeyi unutmayın!


1533391478951.png



Mesaj kontrolü

kontrol & eğer anlamına gelen if'i kullanacağız


if'in basit bir kullanım'ı

if (Parametre) {

//Parametre doğruysa çalışacak kod

}


" Eğer mesajı ise " diyeceğiz, Bunun için

Java:
        if (e.getMessage().equals("[i]")) {
            
        }

diyoruz


Türkçeleştirirsek:

if ( e.getMessage().equals("") ) { }

Eğer Mesaj 'ye eşitse

.Equals("") Nedir ?

.Equas(Parametre-String)

( e.getMessage() )

Equals ingilizcede Eşit anlamına gelir, eğer parametre yerine yazılan string türündeki değer bi önünde bulunan string türündeki değere eşitse, if'imizi TRUE(Doğru) olarak ayarlar.

bu durumda

e.getMessage(), 'ye eşitse anlamına geliyor


1533392262069.png



İtem hakkında bilgi toplama & topladığı bilgiyi oyuncuya gönderme

bu kısımda oyuncunun elindeki item'in türünün ne olduğunu öğrenip bu tür'ü oyuncuya mesaj olarak göndereceğiz.


Java:
        if (e.getMessage().equals("")) {
            ItemStack is = p.getItemInHand();
            p.sendMessage("İtem'in türü → " + is.getType() );
        }

Türkçeleştirirsek:
ItemStack is = p.getItemInHand();
ItemStack türünde, adı is olan bir değer oluştur ve bu değeri, Oyuncunun elindeki item'e eşitle.

Ve

Hatırlarsanız P'ye eventteki oyuncu demiştik, şimdi p'yi kullanacağız.


p.sendMessage("İtem'in türü " + is.getType() );

Oyuncu'ya Şunu mesaj olarak yolla: "İtem'intürü " + is.getType().



is.getType() ne oluyor ?

is, tukarıda belirttiğimiz ItemStack türündeki değer, obje.

getType()' Nedir ?

getType(), Bir ItemStack'in tipini verir.


Mesela Elmas kılıcın tipi => DIAMOND_SWORD'dur.


SendMessage Nedir ?

.sendMessage(Parametre-String)

sendmessage, bir entity'ye (Canlı bir entity olmalı, Oyuncu gibi.) içine yazdığınız string türündeki değerleri gönderir.

eğer içine "Sa" yazarsak, oyuncuya Sa diye mesaj gidecektir

Ekran_Alnts.PNG

bunun gibi, (tabiki MANIDAR yazmayacak :D merak etmeyin)


eğer

Text prefix = "&6&lMANDIR NW ▬";

Text türünde adı prefix olan bi değer oluştur ve bu değeri "&6&lMANDIR NW ▬"'a eşitle. ve

p.sendmessage(prefix + " SA");

dersek oyun içinden

"&6&lMANDIR NW ▬ SA" diye mesaj gönderecektir.

Eğer

p.sendmessage(prefix + " " + prefix + "SA"); dersek

oyun içinden "&6&lMANDIR NW ▬ &6&lMANDIR NW ▬ SA"

diye mesaj göndericektir.


Not: + koyduktan sonra " " kullanarak bir boşluk bırakmış olursunuz.



Diğer Bilgiler & son


1533396527219.png


Resimde olduğu gibi is.getXXXXYYYZZZ kod'unu kullanarak'oyuncunun elindeki item'in XXXXYYYZZZ'sine ulaşabilirsiniz, ve bu ulaştığınız değeri oyuncuya yollayabilirsiniz,

Kalanı sizin hayal gücünüze kalmış!


Not: Renk kodları Javada & ile değil § ile başlar (değiştirilmediği sürece)


Kendi sunucumda kullandığım koddur, @kingOf0 'a aittir.
hastebin

Buraya kadar okuduğunuz için teşekkürler

(!) Anlatım tamamen @kingOf0 'a aittir, İzinsiz Kopyalanması yasaktır. (!)


yeni_logo.png
Gönderi otomatik olarak birleştirildi:

Spoiler kutularında sorun var, ben düzelttikçe bozuluyorlar. yapabileceğim bişiy yok 4 kere düzenleyip düzelttim. @smt287 @Hai birde siz düzeltmeyi denermisiniz ?
 
Son düzenleme:

ImperialSwag

2 günlük premium sahibi <3
Katılım
5 Nisan 2017
Mesajlar
94
Elmaslar
86
Puanlar
0
Yaş
26
Yer
Istanbul
Merhaba birkaç yorum yapmak istiyorum :D. Sıralayarak gideceğim, amacım kötülemek değil yanlış anlamayın sadece birkaç problem var.

1. Paket ismini her pluginde "me.kingOf" olarak kullanırsan yanlış örnek ve yanlış kod yazmış olursun. Çünkü bu eklentiler başka eklentiler ile aynı anda tek bir server da çalışıyor. Örneğin senin bir tane enchantment pluginin var ve bir tane recipe pluginin var, ikisinde de aynı pakedi kullanırsan, paket ismi ve class ismi aynı olan dosyalar karışarak çok büyük problemlere yol açabilir. Bunun yüzünden yazılan eklenti ile ilgili bir parça daha eklenmelidir. Örneğin; "me.kingOf.mctr", "me.kingOf.customenchs", "me.kingOf.customrecipes" gibi.

2. Konsola mesaj atmak istediğin zaman #getConsoleSender#sendMessage yapmak yerine #getLogger yaparsan #info, #log, #warning gibi methodlar kullanılabilir, debug yaparken yada sunucu sahipleri kullanırken görmelerini kolaylaştırır. Özellikle sunucusunu kendisi açmayıp bir host üzerinden kullanan birisi için konsol daha güzel gözükür. Ama tabiki yaptığın yanlış değil.

3. Diğer bilgiler & Son kısmında player#sendMessage da #translateAlternateColorCodes kullanılmadan & ile renk verilemiyor ne yazıkki, @bertek41 'den bildiğim kadarıyla § kullanılınca o methoda ihtiyaç olmadan renklendirilebiliyor. Bu rehberi kullanarak öğrenmeye çalışan biri renklendiremediği için burada kafası karışabilir.

Konu mükemmel yaptığın şey harika, benimde bir ara bir denemem olmuştu fakat devam ettirmedim umarım benim yaptığım tembelliği sende yapmazsın :D.
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

Katılım
14 Haziran 2016
Mesajlar
998
Elmaslar
746
Puanlar
15.070
Yer
getPlayer("SimitSu").getLocation()
Minecraft
SimitSu
Değerli yorumun için çok teşekkür ederim,
1. > bu plugin, ilk tutorial ile aynı proje içerisinde :D o yüzden packet isimleri vs aynı idi, (sonradan değiştirmiştim)

2. > kendi logger'imi yapıp kullanmak çok daha güzel olucaktır evet haklısın, ama ben böyle seviyorum :D

3. > Bunu zaten belirttim :D, ve evet § ile yaparsan dönüştürmene gerek kalmaz
1533398800959.png


yorumun için tekrar teşekkürler.


bu tutorial'i biraz daha net anlatabilirim ama bu sefer bazı insanlar anlamayacaktır o yüzden bu şekilde anlattım
 
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı