Rehber Bukkit Coding | Başlangıç | Eklenti & Plugin dersleri

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

kingOf0

"~SimitSu"
Katılım
14 Haziran 2016
Mesajlar
1.057
Elmaslar
746
Puan
16.270
Konum
getPlayer("SimitSu").getLocation()
Minecraft
SimitSu

Discord:

kingOf0!#4055

yeni_logo - Kopya.png

Merhaba Mc-Tr üyeleri.Bu konumda sizlerle javaya yavaştan adım atacağız.

Önsöz:
Ben kingOf0, son 1-2 haftadır Java ile haşirneşir oldum @bertek41 ve @mexicam 'ın yardımlarıyla javada kendimi geliştiriyorum, Javada profesyonel değilim öğrendiğim kadarıyla sizlere anlatacağım.

Anlatımdaki hatalarımı belirtirseniz çok memnun olurum <3

Özlü söz:
xd.png


Forumda eclipse nasıl kurulacağına dair konular oldğu için anlatmayacağım

Proje Oluşturarak başlıyoruz

1531646371082.png


Proje oluşturmak için Sol üstte bulunan
1531646397501.png
butonuna basıyoruz karşımıza çıkan menüden
1531646416148.png
'a tıklıyoruz.Son olarak
1531646434021.png
e bastığımızda projemizi oluşturma ekranı karşımıza geliyor

Untitled.png


Ben proje adıma "Messages" yazacağım, Proje adımızı belirledikten sonra Next'e basıyoruz

2.png


Karşımıza çıkan ekranda "Libraries" butonuna basıyoruz

3.png


Add "external jars" butonuna basıyoruz.

4.png


Bu ekranda pluginimizi yapacağımız sürüme ait jar dosyasını seçmemiz gerekyior ben 1.8.8 sürümünde Spigot kullanacağım

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

1531647603286.png


butonuna basarak projemizi oluşturuyoruz. (Pcnize bağlı olarak 1-2 dk sürebilr)

5.png


Projemizin üstüne sağ tıklayarak "New -> Package" tıklıyoruz

6.png


Burası önemli!
Herşeyin bi kuralı vardır buda öyle bişiy işte. uyun gitsin :D

Not: Bu Name: kısmı tersten okunur. (Örnek: "com.mc-tr" )

Eğer bir site sahibiyseniz ve alan adı .com ile bitiyorsa "com.siteismi.packageismi"
Eğer bir site sahibiyseniz ve alan adı .net ile bitiyorsa "net.siteismi.packageismi"
Eğer bir site sahibiyseniz ve alan adı .org ile bitiyorsa "org.siteismi.packageismi"

Eğer bir site sahibi değilseniz(ben değilim, Sponsor varsa tabiikiiiii) "me.Packageismi" şeklinde kullanabilirsiniz

Benim package ismim kingOf olucak.Package ismini oyundaki nick'iniz gibi düşünebilirsiniz, plugininizin soyadı gibi.
Package nin tam olarak ne olduğunu anlatması için buraya @bertek41 'i çağırıyorum, Sahne sizindir efenim.

Evet artık herşey hazır, biliyorum sabırsızlanıyorsunuz ama az kaldı. O plugin yazma zevkini size tattıracağım :)

7.png


Projemizin üstüne sağ tıklayarak "New -> Class" tıklıyoruz

8.png


Class: yazacağınız kodları daha düzenli tutmak, okumayı kolaşlaştırmak, gerektiği zaman içindekileri çağırmak ve daha benimde bilmediğim bir çok işe yarar ayrıca kodlarımız bunun içine yazarız.
Daha iyi bir açıklama yapabilecek @nebiliyimiştebirisivardırillaki 'yi buraya davet ediyorum.

İlk oluşturduğumuz bu Class'a Main class denilir. ismi genellikle plugininizin Adı olur.
Fakat ben Main yazacağım :D

1531649412272.png


Ve evet sonunda başardık! artık kodlarımızı yazabiliriz.

Öncelikle Main class'ımızın nasıl çalışacağını belirlememiz gerekiyor sonuçta adam main gidicek hani....

Java:
public class Main {

}

Yukarıda gördüğümüz kısmın sonuna "extends JavaPlugin" ekliyoruz,
Main class'ımızın bir javaplugin olduğunu belirttik.

Java:
public class Main extends JavaPlugin{

}

1531649569299.png

Ve bir hatayla karşılaştık, Aslında hata değil
Çözümüde çok basit.

1531649603750.png

Ampülümüze tıklıyoruz

1531649632442.png


Fare imlecinizi JavaPlugin üstüne getirin ve 2-3 sn hareketsiz bekleyin aynı ekran karşınıza çıkacaktır

Ve JavaPlugin'i Import luyoruz, Yani başta eklediğimiz spigot jar'dan JavaPlugin 'i çekiyoruz.

Ve kodumu otomatikmen şu hale geliyor:

Java:
package me.kingOf;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

}

Not: tüm kodlarınız bu iki küme parantezinin içinde olmalıdır.
1531650166441.png


şimdi gelelim onEnable method'umuza.
onEnable: Pluginimiz analiz edilirken çalışan method dur.

Java:
    public void onEnable() {
   
    }

public nedir diye bir konu açılabilir... o yüzden üzerinde fazla durmadan anlatacağım
public: pluginimizin her yerinden erişilebilir demektir. bunu oyunculara rütbe vermek gibi düşünebilirsiniz onEnableye "her yerden erişim" rütbesi veriyoruz.

1531650383331.png

bu oluşturduğumuz method'un içine
Java:
        Bukkit.getPluginManager().registerEvents(this, this);
Yazıyoruz, Peki bu ne demek?

Bukkit'in içinden PluginManager'ı ara ona deki (this, this) 'i kaydetsinler

Peki bu kaydetme nedir?
Pluginimizde eğer bir event'i(event: blok kırma, blok koyma, konuşma vs gibi olaylar) kontrol ediceksek bunu belirtmemiz gerekiyor.

neden parantez içine aldık?
this, this bir parametredir("O ne lan" dediyseniz üzülmeyin...) parametreler yapacakları olaylarda neyi veya nasıl yapacaklarını belirler.
biz burda neyi yapacağını belirttik.

This nedir?
This değiştirmediseniz şuanda bulunduğumuz Main Class'dır.

Niye 2 tane?
Eğer birden fazla class kullansaydın diğerinide kaydetmemiz gerekecekti...

Birden fazla class???
Bu kadar detaya gerek yok "Birden fazla class" işini umarım başka bi konuda anlatırız :D şimdilik "Birden fazla class" işini yere bırak pikau!

1531650753166.png

Fakat bir hata var...

1531650789507.png


Hayır, bu bir hata değil!

1531650810491.png


Ampülümüze basıyoruz ve Bukkit'i importluyoruz.
Fare imlecinizi Bukkit üstüne getirin ve 2-3 sn hareketsiz bekleyin aynı ekran karşınıza çıkacaktır
1531650984582.png

Fakat hala bir hata var diyor..
Aa evet sanırım bu bir hata :D

Class'ımızın bir JavaPlugin olarak çalışması gerektiğini belirtmiştik
public class Main extends JavaPlugin{

Şimdiyse biraz daha açıklayıcı olup
implements Listener
ekleyeceğiz

Bu nedir arkadaş?
Az sonra anlatacağım eventleri eklediğimizde "eventleri kontrol et" demek diye düşünebilirsiniz.

1531651166254.png


Şu şekilde ekliyoruz ve Listener'ı importluyoruz

1531651233051.png

şimdi gelelim ilk eventimizi oluşturmaya

ben oyuncu sohbete sa yazınca as demesini istiyorum bunun için

enEnable nin hemen aşşağısına


1531651657456.png


Edit: ben buraya @EventHandler koymayı unutmuşum :D
şöyle görünmeli
1531656348456.png

Not2: EventHandler'ı import etmeyi unutmayın

Ekliyoruz.Peki bu ne???

Not: AsyncPlayerChatEvent'i import etmeyi unutmayın.

Java:
void <Eventinizin kendi tanımladığınız ismi>(Parametreler-nasıl çalışacağı) {

}

Benim eventimin adı sohbetKontrol'ü olsun istedim

Nasıl çalışacağına gelirsek:
"AsyncPlayerChatEvent" dedim, Yani
"Oyuncu sohbet edince" demek

sonunada "e" yazdım
Peki bu "e" nedir?
"AsyncPlayerChatEvent" dediğimiz event varya bunun sohbetKontro'ü boyunca kullanabileceğimiz bir kısaltması olarak düşünebiliriniz.

Skriptte %player% vardı biliyorsunuzdur işte şimdi onu yapacağız Nasılmı?

bunun için şunu kullanacağız:
Java:
Player p = e.getPlayer();

Bu ne demek?

p adında Lokal bir değer oluşturduk ve bunu e.getPlayer()'a eşitledik
Ve bu p değerinin bir Oyuncu değeri gibi çalışması gerektiğinden bahsettik (Player p =....)

Not: Player'ı importlamayı unutmayınız

e.getPlayer() nedir?

hatırlarsanız e 'yi eventimizin kısaltması olarak düşünün demiştim burda diyoruzki
Eventteki Oyuncu.

Birleştirirsek:
<Oyuncudeğeri gibi çalıştır> <P adındaki lokal veriyi> =(Javada "=" Eşitle demektir)Eşitle <Eventteki Oyuncu>'ya
Player p 'yi eventteki oyuncuya eşitle
demiş olduk

Neyime yaradı???
Bu şekilde "Eventteki oyuncu" demek yerine sadece "p" diyeceğiz, Yani bunuda bir kısaltma olarak düşünebilirsiniz.

1531652087315.png

Aa oda nedir?
bir hatamı??? hayır bize sadece
"İyi güzel P yi oluşturdunda, P yi hiiiç kullanmadın bak şuan köşede oturmuş çay içiyor git iş verde yapsın!" demek istiyor
Yani "p yi hiç kullanmadın" demek istiyor

Şimdi mesaj "sa" mı diye kontrol edeceğiz:
Java:
        if (e.getMessage().equals("sa")) {
       
        }

if nedir?
if: Eğer demektir. if in yanında bulunan parantez'in içindeki değer kontrol edildiğinde "TRUE" cevabı alınıyorsa o parantezin hemmen yanındaki {} içindeki kodları çalıştırır.
Bu durumda
Java:
(e.getMessage().equals("sa")
Değeri True cevabını verirse kodumuz çalışacaktır

e.getMessage().equals("sa")???
Event'te gönderilmiş mesajı al.Eşitse()
demektir.
ben parantezin içine "sa" yazdım, çünkü getMessage bir string verir.

String nedir?
En basitinden: "" içine yazılmış değer, Diye düşünebilirsiniz :D

Şimdi Şöyle olucak:
Eventteki Mesaj . Eşitmidir sa 'ya
Eğer eşitse küme parantezinin içindeki kodu oynat

Küme parantezleri:


1531652751958.png


Not: "True" Doğru demektir.

1531653050996.png

O parantezin içine şunu yazacağız:

Java:
p.sendMessage();
EventtekiOyuncu'ya Mesaj yolla demiş olduk.

ne yollacyacağını belirtelim. Hatırlarsanız parantezlerin içine neyi ve nasıl yapacağını belirtmek istediğimiz şeyleri yazıyoruz demiştim şimdi bu parantezin içine ne ile
yapacağını belirteceğiz.

parantezin içine "Aleyküm Selam" yazıyoruz.

neden "" içine aldık?
Çünkü "sendMessage()" kodu içine String alır.

1531653144707.png

Nerdeyse bitti şimdi plugin.yml yi oluşturacağız

1531653767298.png


"Projemize sağ tıklıyoruz > New > File" tıklıyoruz

1531653911581.png


Projemizi seçiyoruz

adını "plugin.yml" koyup Finish'e basıyoruz

Ve plugin.yml oluşuyor

1531653997340.png

Bu plugin.yml nin üzerine tıklıyoruz ve
1531654020266.png

Main'in yanına sürüklüyoruz

Not: Başka yollarıda var fakat o kadar detay girmeyeceğim.

Böylelikle boş bir sayfa açılacak, Burası plugin.yml nin içidir.

buraya:
YAML:
name: Sa-as
main: me.kingOf.Main
version: 1.0
author: kingOf-Mc-tr

Yazıyoruz
name: pluginimizin ismi

main: Main.java'nın konumu
1531654158785.png

Not:package ile birlikte yazılır

version: plugininizin sürümü
author: Plugin'in yapımcısı

Not: bu kısımı kendinize göre düzenleyeceksiniz
CTRL + S yaparak plugin.yml 'imizi kaydediyoruz.

1531654243149.png


Sonra Main.javaya geçiyoruz

CTRL + S yaparak Main.class'ımızı kaydediyoruz.

Ve evet! bitirdik.

Şimdi pluginimizi export edeceğiz.

Export: Dışa aktarmak demektir. Yani plugin.jar olarak dışarı alacağız

Sonra eclipse'nin sol üstünde bulunan
"File > Export" tıklıyoruz
1531653252249.png


Açılan pencerede JAR FILE'ı seçiyoruz

1531653294552.png


Ve Next'e basıyoruz

1531653569621.png

Not: bu resimi plugin.yml yi yapmadan önce çekmiştim o yüzden burda plugin.yml görülmüyor

Hatırlarsanız Projemizi oluştururken ismini "Messages" yapmıştık
İlk olarak Messages'in yanındaki tik'i sonra Messages Yazısını seçiyoruz,
Browse'e basarak pluginimizi nereye kaydedeceğini seçiyoruz
son olarak Finsih e basıyoruz

Ve Evet Ilk pluginimizi yazdık!

Sizi tebrik ediyorum
plugininizi sunucunuza yükleyip kullanabilirsiniz.

Eğer Devamını isterseniz, Ben neden anlatmayayım ?

Tam 2 saat 30dk boyunca aralıksız bu konu için uğraştım umarım sizde Plugin yazma konusunda fikir sahibi olursunuz
Edit: bunu paylaştığımda tam 33dk oldu :D

Not: Anlatım tamamen bana aittir. Haberim & iznim olmadan kopyalanması || paylaşılması yasaktır.

Devamı (2.bölüm)

Sunucuya girip göstermeyeceğim, Kendiniz yazıp görebilirsiniz.

yeni_logo.png







 

Ekli dosyalar

  • 1531647236527.png
    1531647236527.png
    34,1 KB · Görüntüleme: 278
  • 1531651327549.png
    1531651327549.png
    2,5 KB · Görüntüleme: 301
  • 1531653401393.png
    1531653401393.png
    54,3 KB · Görüntüleme: 266
Son düzenleme:
Güzel rehber eline sağlık.

Package lere gelirsek isim verirken lower case olmasına özen gösteriniz. Detaylı bilgi:
Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
 
Gerçekten çok çok mükemmel ötesi ve yararı herkese dokunabilecek bir rehber olmuş. Çok teşekkürler <3
 
Oww Cok güzel basarılı.
 
Bu derslere devam edersen seni öpebilirim.
 
Böyle dev, böyle güzel bir konuyu 6.5 aydır forumda görmemiştim.
 
Ellerine sağlık ancak bir hususta aydınlatmak isterim. Bu konunun javayla tek ilgisi java kütüphanesini kullanması. Java dersleri başlığı altında böyle bir konunun saçma olduğunu hatta ve hatta javayla alakası olmadığını bile söyleyebilirim. Bunun yerine öncelikle temel bir bilgi verip. Ardından kütüphane seçimi olarak bukkiti ya da farklı bir kütüphane kullanacaksan onu seçebilirdin.
 
Ellerine sağlık ancak bir hususta aydınlatmak isterim. Bu konunun javayla tek ilgisi java kütüphanesini kullanması. Java dersleri başlığı altında böyle bir konunun saçma olduğunu hatta ve hatta javayla alakası olmadığını bile söyleyebilirim. Bunun yerine öncelikle temel bir bilgi verip. Ardından kütüphane seçimi olarak bukkiti ya da farklı bir kütüphane kullanacaksan onu seçebilirdin.
ığgh ne diyeyim, Spigot coding olarak değiştireyim ozaman, aslında haklısın ama mc-tr de bunu en uygun buraya açabilirdim :D.
 
ığgh ne diyeyim, Spigot coding olarak değiştireyim ozaman, aslında haklısın ama mc-tr de bunu en uygun buraya açabilirdim :D.
Yok zaten senlik değil sende haklısın sonuçta bunun birçok kişiye ulaşması gerek. Birçok kişi dediğimiz kitlede bunu Java zannediyor. Bu hatayı gidermek için bile değiştirebilirsin.

Spigot Coding yerine Eklenti Kodlama Rehberi tarzında bir başlık yapabilirsin.
 

Bu güzel dev konuyu güzel bir şekilde anlatmışsın tebrikler!​
 
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