Sol Reklam
Sağ Reklam

Rehber Bukkit Coding | Başlangıç | 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.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 şuradan 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







 

Ekler

  • 1531647236527.png
    1531647236527.png
    34,1 KB · Görünt.: 278
  • 1531651327549.png
    1531651327549.png
    2,5 KB · Görünt.: 301
  • 1531653401393.png
    1531653401393.png
    54,3 KB · Görünt.: 266
Son düzenleme:

bertek41

The Developer of Apia Team
Katılım
29 Ağustos 2016
Mesajlar
1.068
Elmaslar
464
Puanlar
15.745
Yer
Kocaeli
Minecraft
YasinSubasi

shad

the temple of the king

Discord:

emrenos#5027

Katılım
25 Ekim 2014
Mesajlar
1.445
Elmaslar
1.442
Puanlar
17.290
Minecraft
emrearik
Gerçekten çok çok mükemmel ötesi ve yararı herkese dokunabilecek bir rehber olmuş. Çok teşekkürler <3
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

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

zNightLastTR

SilentNetWork
Yasaklandı

Discord:

zNightLastTR | EmreCan#8990

Katılım
19 Haziran 2018
Mesajlar
388
Elmaslar
103
Puanlar
0
Yaş
22
Minecraft
zNightLastTR
Oww Cok güzel basarılı.
 

MoreReal

Bir Kömür Göründü Kaptanım!
Katılım
19 Haziran 2018
Mesajlar
120
Elmaslar
81
Puanlar
8.970
Yaş
22
Bu derslere devam edersen seni öpebilirim.
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

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

twond.

愛を作ろう
Katılım
13 Ocak 2018
Mesajlar
501
Elmaslar
361
Puanlar
14.480
Yaş
24
Yer
İstanbul
Minecraft
metebae
Böyle dev, böyle güzel bir konuyu 6.5 aydır forumda görmemiştim.
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

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

SYN_T3SL4

If you can't handle it you will win nothing !

Discord:

Halil#4439

Katılım
11 Mart 2016
Mesajlar
991
Elmaslar
911
Puanlar
19.300
Yaş
22
Yer
Aydın / Kuşadası
Minecraft
SYN_T3SL4
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.
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

Katılım
14 Haziran 2016
Mesajlar
998
Elmaslar
746
Puanlar
15.070
Yer
getPlayer("SimitSu").getLocation()
Minecraft
SimitSu
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.
 

SYN_T3SL4

If you can't handle it you will win nothing !

Discord:

Halil#4439

Katılım
11 Mart 2016
Mesajlar
991
Elmaslar
911
Puanlar
19.300
Yaş
22
Yer
Aydın / Kuşadası
Minecraft
SYN_T3SL4
ığ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.
 
S

Silinen üye 79251

Ziyaretçi

Bu güzel dev konuyu güzel bir şekilde anlatmışsın tebrikler!​
 

kingOf0

"~SimitSu"

Discord:

kingOf0!#4055

Katılım
14 Haziran 2016
Mesajlar
998
Elmaslar
746
Puanlar
15.070
Yer
getPlayer("SimitSu").getLocation()
Minecraft
SimitSu
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı