Sol Reklam

Rehber Bukkit Eklenti Geliştirme Serisi -#1- İlk adımlar...

Durum
Mesaj gönderimine kapalı.

erenalyoruk

Koydum Çalışma Masasını

Discord:

erenalyoruk#0786

Katılım
4 Ağustos 2018
Mesajlar
55
Elmaslar
33
Puanlar
6.480
Yer
Türkiye
Selamlar dostlarım.Forumda çok az bulunan bir eğitim serisine başlamayı hedefliyorum.Serimizin ilk bölümüne geliştirme ortamımızın kurulumuyla başlayacaktım fakat forumda böyle bir konu bulunduğunu fark ettim.Bu yüzden direkt olarak eklenti geliştirmeyi sizlere anlatmakla başlıyorum.​

Eklenti hazırlamak için ön hazırlıklar: Rehber - Java Yazmak İçin Kurulum [Resimli]

Not: Seri içerisinde Java ile ilgili kapsamlı bilgiler verilmeyecektir.Yalnızca Bukkit (Spigot veya BungeeCord) için eklenti geliştirmeyi öğretmek amaçlı hazırlanmıştır.​

1. İlk Eklentimiz
1.1. Proje Oluşturma


İlk olarak kurmuş olduğumuz eclipse programını açarak işe başlayalım.Başlangıçta size bir dizi kişiselleştirme ayarı yaptıracaktır.Bu ayarları isteğinize göre seçebilirsiniz. Ardından karşınıza bu şekilde bir pencere açılacaktır.

1533680892426.png


Not: Eclipse ilk açıldığında ekranın alt bölümünde çeşitli pencereler açıyor bu pencereler başlangıç için işimize yaramayacaktır.Bu yüzden kapatabilirsiniz. (Console vs.)​

Daha sonra ilk eklenti projemizi oluşturalım.Bunu yapmak için ekranın sol tarafında bulunan Package Explorer'a, ekranın sol üstünde bulunan File butonuna veya ALT+SHIFT+N tuş kombinasyonuna basarak istediğimiz menüye erişiyoruz.Bizim şimdilik ilgileneceğimiz kısım Java Project seçeneği.Bu yüzden bu seçeneğe tıklıyoruz.​

1533681371025.png

Java Project seçeneğine tıkladıktan sonra karşımıza aşağıdaki gibi bir arayüz çıkıyor.Buradan yapmamız gerekenler:
  1. Bir proje adı belirlemek.
  2. Çalışacağımız sürümü belirlemek. (İlk defa Java ile uğraşıyorsanız değiştirmenize gerek yok.)
  3. Tüm ayarları yaptıktan sonra Next > butonuna tıklıyoruz ve karşımıza yeni bir sekme açılıyor.
  4. Üst menüden Libraries sekmesine geliyoruz ve Add External JARs seçeneğine tıklıyoruz.
  5. Eklemek istediğiniz Spigot.jar veya Bukkit.jar dosyasını seçiyoruz.
  6. Başlangıç için yalnızca Spigot veya Bukkit'i projemize dahil ediyoruz ve Finish butonuna basıyoruz. (Sunucuyu açmak için kullandığınız Bukkit ya da Spigot dosyasını projenize dahil edebilirsiniz.)
1533681788634.png

1533682031395.png

İlk projemizi oluşturduk ve karşımıza bu şekilde bir ekran çıktı.Projeme tıklayarak altındaki dosyaları inceliyorum.Bizim bu seride ilgileneceğimiz bölüm src bölümüdür.Eklentilerin dosyaları bu bölüm altına oluşturulacaktır.Hazırsanız ilk eklentiyi oluşturalım.​

1.2. Paket Oluşturma

Java'daki paketleri bilgisayarınızdaki klasörler gibi düşünebilirsiniz.Bizim de bir klasöre ihtiyacımız var bu yüzden bir paket oluşturuyoruz.src'ye sağ tıklıyoruz ve çıkan seçeneklerden Package'yi seçiyoruz.Karşımıza isim yazma ekranı çıkıyor.Bu isim verme tamamen sizin ruh halinize bağlı olarak değişebilir.Aşağıya birkaç örnek paket ismi bırakıyorum ki geleneklerden uzaklaşmayalım.​
- me.won5.mctrders​
- tr.won5.ders​
- com.won5.ders​
- com.won5.game.ders​
- <ek>.<mahlas>.<eklenti_adı>​
Not: Paket isimleri genelde küçük harflerle yazılır.


1533682527475.png

Ve daha niceleri.Geleneklerden bahsetmişken gelin biraz paketler üzerine konuşalım.Paket isimlerindeki noktalar dikkatinizi çekmiştir değil mi? Bu noktalar sayesinde klasörleri bir alt dizine taşıyabiliyoruz.Hemen bir örnekle açıklayalım.Aşağıdaki paket ismi:​
ni.w5.ders
Aşağıdaki klasör yapısına benzer.​
Kod:
+ ni


+---- w5
+----+---- ders

1.3. İlk Sınıf

Kendimize uygun bir paket ismi seçtiğimizi varsayarak devam ediyoruz.Şimdi eklentinin çalıştırılması için bir ana sınıfa ihtiyacımız var."Paketlerin bile bir geleneği var ise sınıfların hele ki ana sınıfın bile ne gelenekleri vardır." dediğinizi duyar gibiyim.Evet sınıflara da isim verirken birkaç geleneği görmezden gelemeyiz.Bunlar:​
- Sınıfların ilk harfleri büyük yazılmalıdır.​
- Her kelimenin ilk harfi büyük yazılmalıdır ve kelimeler boşluk ile ayrılmamalıdır. (Hiç ayırmamak daha estetik bir dosya yapısı sağlar fakat ayırmak için alt çizgi kullanabilirsiniz.)​
- Özel karakter kullanımından kaçınılmalıdır.​
- Ana sınıf dosyamızın adı genelde "Main, <Eklenti adı>, ..." şeklinde yazılır fakat yine hayal gücünüze bırakıyorum.​

Bu kadar kural yeterli şimdi ilk sınıfımızı oluşturalım.Bunun için oluşturduğumuz pakete sağ tıklıyor ardından New > bölümünden Class'ı seçiyoruz.​

1533683207401.png


1533683313907.png

1. Paketimizin ismi.​
2. Sınıfımızın ismi.​
3. Sınıfımızın erişilebilirlik ayarları.​
4. Sınıfın hangi sınıftan miras alma yolu ile kopyalanacağı.​
5.1. Bizimle hiç alakası olmayan bir seçenek.Herhangi bir platform için Java kodlarken Java'nın ilk çalıştıracağı metot.​
5.2. Miras alınan sınıftaki yapıcı metotları kopyala.​
5.3. Yine bizi ilgilendirmeyen bir seçenek.​
6. İsterseniz kaynak kodlarına default yorum satırları ekleyerek imzalayabilirsiniz.​

Evet ilk sınıfımız oluştu ve karşımıza bu ekran geldi.
1533683790205.png

Buradaki package ni.w5.test; satırı, paket ismimize referanstır.​
public class Test {} ise sınıfımızın gövdesidir.Gelin yakından inceleyelim.​
- public sözcüğü, sınıfımızın herhangi bir sınıftan erişilebileceğini gösterir.​
- class sözcüğü, dosyanın sınıf olduğunu gösterir.​
- Test ise sınıfımızın adıdır.​

Şimdi biraz kod yazalım ha! İlk önce bu projenin bir plugin olduğunu tanımlamamız lazım.Bunun için JavaPlugin sınıfını miras almalıyız.Miras almak için yazmamız gereken kodlar şunlar:​
extends JavaPlugin
Bu kodları sınıf dosyasının isminden sonra yazmalısınız yani son hali şu şekilde olmalı.​
(JavaPlugin'in altı kırmızı çizilecektir.Onu sınıfımıza eklemelisiniz.Fareyi üzerine getirin.)​
1533684207903.png
1533684088591.png
Gelin bu kodu da inceleyelim.
- extends: Bu sözcük bizim herhangi bir sınıftan miras almamızı sağlar.Yani kelimeden sonra gelen sınıftan metotlar kullanabiliriz.
-- (Daha fazla bilgi için: Inheritance in Java - GeeksforGeeks)
- JavaPlugin: Bu kelime bizim miras aldığımız sınıf.Yani biz JavaPlugin sınıfında mevcut olan tüm özellikleri kullanabiliyoruz. (superclass)
(Kalıtım ile ilgili kısa bir açıklama: İnsan, Ali, Ayşe ilişkisine benzer.Burada İnsan superclass'tır.Bunun nedeni ise her insanın belirli özellikleri benzerdir.Gözleri olması, kulakları olması vs.Kod tekrarından kurtulmak için Ali ve Ayşe'yi, İnsan sınıfından miras aldırtıyoruz bu sayede daha az kod ile aynı işlemleri yapabiliyoruz.)

1.4. Gözle Görülebilir İlk Adımımız

Evet bundan önce yaptıklarımız arka planda kalıyordu yani bir kullanıcının fark edemeyeceği önemli detaylardı.Şimdi gelin biraz da görebileceğimiz işler yapalım.Mesela açılışta konsola yazı yazdıralım.Hatırlarsanız JavaPlugin denen zımbırtıdan bahsetmiştik.Bu zımbırtı sayesinde sunucunun açılış esnasında işlemler yapabiliyoruz.Hemen kodumuzu inceleyelim.​
1533684890002.png

Kodumuzu incelemeye başlayalım.
- @Override bu kelime JavaPlugin sınıfında tanımlanmış olan onEnable() metodunun yeniden tanımlandığını gösteriyor.Bu sayede yazmış olduğumuz mesaj konsola gidecektir.
- public bu kelimeyi üst başlıkta açıklamıştım.Buradaki kullanım amacı ise fonksiyonun her dosyadan erişilebilirliğini düzenlemek.
- void kelimesi, boşluk anlamına gelmekte ve gerçekten anlamına uygun bir iş yapmaktadır.Bazı metotlar değer döndürürken (örn. Bir oyuncunun ismini elde etmek için kullandığımız bir metot.) bazıları ise değer döndürmez.İşte değer döndürmeyen metotlar void kelimesini tanımlanırken içerir.
- onEnable() ise fonksiyonumuzun adıdır. (Farklı bir şekilde çağırılamaz.Çünkü bu metot JavaPlugin'de bu isimle tanımlanmış.)

Evet kodlarımızı açıkladık.Şimdi ise konsola mesaj gönderelim.Bunun için çok fazla yöntemimiz var.Ben size kendi kullandığımı göstereceğim.Detaylı bilgi için araştırma yapabilir veya bu konuyu inceleyebilirsiniz: Solved - Sending a Message to Console? | Bukkit Forums

Şimdi gelelim benim nasıl mesaj gönderdiğime.Hepimiz estetiği severiz değil mi? Bu yüzden renkli mesajlar göndermek benim için çok önemli.​

1533685518762.png

Hadi gelin bu kodumuzu da inceleyelim.​
- Bukkit bu kelime, bizim erişmek istediğimiz metodun bulunduğu dosyanın adı.​
- getConsoleSender() ise bir metot.Bu metot bize Konsol objesini döndürüyor ve bu sayede etkileşime geçebiliyoruz.​
- sendMessage("§aMERHABA"); ise bir önceki metot ile elde ettiğimiz konsol objesine mesaj gönderiyor.Tırnaklar arasındaki bölüm bizim mesajımızı içeriyor.§a ise renk kodumuz.Bukkit renk kodlarımızı bu şekilde okuyor.​

2. plugin.yml Ayarları

Evet ilk eklentimizi kullanmadan önce yapılması gereken işlemler var.Yapmamız gereken şey plugin.yml dosyası oluşturmak.Hatırlarsanız size tüm dosyalarımız src bölümünde bulunacak demiştim.Bu yüzden dosyamızı yine src dizinine açıyoruz.​
1533685849307.png

1533685869949.png

Ardından oluşan plugin.yml dosyamızı açıyoruz ve içine şunları yazıyoruz.​

Kod:
name: TestPlugin
main: ni.w5.test.Test
version: 1.0
authors: [WON5, NiB]
description: Simple plugin tutorial

Hadi son kez bunu da inceleyelim.
- name: Eklenti adı
- main: Eklentinin onEnable() metodunun bulunduğu sınıfın yolu. (ni.w5.test benim paket adım.Sondaki Test ise sınıfın adı.Aralardaki noktalara dikkat.)
- version: Eklenti versiyonu
- author: Eklentinin yapımcısı. (Eğer authors: olur ise yapımcı listesi olur ve örnekteki gibi yazılır.)
-- Örnek: author: WON5
- description: ise eklentinin açıklaması.Türkçe karakterden kaçınalım bazı zamanlar hata olabiliyor.
Detaylı Açıklama: Plugin.yml | SpigotMC - High Performance Minecraft

3. Eklentinin Kullanımı

Eklentiyi kullanmak için öncelikle Java Arşivi şeklinde dışarı aktarmamız lazım.Bunun için izlememiz gereken yol şöyle.Projemize(src değil, proje) sağ tıklıyoruz ve Export seçeneğine tıklıyoruz.​
1533686358999.png

Ardından çıkan pencereden JAR File seçeneğini buluyoruz ve Next > diyoruz.​
1533686405724.png

Ardından çıkış dizinini ayarlıyoruz ve Finish diyoruz.Artık eklenti test edilmek üzere sunucunuzun plugins klasörüne yolculuğa çıkabilir.İyi öğrenmeler.
1533686657519.png

(Bir önceki eklentinin ismi :C)​
Serinin sonraki bölümünde oyuncu üzerinde çeşitli işlemler yapacağız.

Desteğe ihtiyacınız var ise > WON5#6087
İletişime geçmekten çekinmeyin.
 

Ekler

  • 1533681954022.png
    1533681954022.png
    36,7 KB · Görünt.: 211
  • 1533685728679.png
    1533685728679.png
    6 KB · Görünt.: 393
  • 1533686233203.png
    1533686233203.png
    26,1 KB · Görünt.: 299

admiraldus

DEVASTATE

Discord:

admiraldus#6660

Katılım
12 Nisan 2018
Mesajlar
973
Elmaslar
1.686
Puanlar
0
Yaş
23
Yer
İstanbul, Türkiye
Minecraft
admiralduski
Devamı gelmeli. :<3:
 

SoulX

Vatan Sevdalısı

Discord:

SoulX#3935

Katılım
9 Ekim 2017
Mesajlar
1.833
Elmaslar
2.565
Puanlar
19.570
Yer
Antalya
Bence de devamı gelmeli. Ben de "Javacı reis" olmak isterdim ama ilk önce İngilizcemizi geliştirmek lazım.
 

NanoDankster

Somon Balığı Selam Vermeye Geldi

Discord:

nanodn#9838

Katılım
29 Temmuz 2018
Mesajlar
20
Elmaslar
39
Puanlar
2.035
Yer
Dünya
Minecraft
NanoDn
Sadece eclipse üzerinden anlatman hoş olmamış NetBeans ve IntelliJ IDEA gibi büyükler varken. Ayrıca gradle ve Maven benzeri build toollar hakkında kelime bile geçmemiş. Kötü konu.
 

erenalyoruk

Koydum Çalışma Masasını

Discord:

erenalyoruk#0786

Katılım
4 Ağustos 2018
Mesajlar
55
Elmaslar
33
Puanlar
6.480
Yer
Türkiye
Sadece eclipse üzerinden anlatman hoş olmamış NetBeans ve IntelliJ IDEA gibi büyükler varken. Ayrıca gradle ve Maven benzeri build toollar hakkında kelime bile geçmemiş. Kötü konu.

Yalnızca eklenti geliştirmek için eclipse'nin daha uygun olacağını düşünmüştüm.Düşüncemin sebebi ise daha düşük boyutta ve daha hafif bir IDE olmasıdır.Ancak buradaki önemli nokta kullandığımız IDE değil, öğreneceğimiz kodlardır.​
Maven ve Gradle konusunda haklı olabilirsiniz fakat henüz serinin ilk konusu olduğunu hatırlatmak isterim.​
 

GGKağan

Bir Kömür Göründü Kaptanım!

Discord:

gollapuzesi#5701

Katılım
11 Nisan 2018
Mesajlar
109
Elmaslar
36
Puanlar
0
Yer
Samanyolu Galaksisi
Minecraft
gollapuzesi
Vallaha, ne diyeceğimi bilemiyorum. Gerçekten bu kadar karmaşık mıymış ki bir eklenti yapmak?
 

erenalyoruk

Koydum Çalışma Masasını

Discord:

erenalyoruk#0786

Katılım
4 Ağustos 2018
Mesajlar
55
Elmaslar
33
Puanlar
6.480
Yer
Türkiye
Vallaha, ne diyeceğimi bilemiyorum. Gerçekten bu kadar karmaşık mıymış ki bir eklenti yapmak?

Öyle gözüküyor fakat konunun uzun olması kafanızı karıştırıyor olabilir.
2 dakikalık bir projeyi anlattım sadece.
 

GGKağan

Bir Kömür Göründü Kaptanım!

Discord:

gollapuzesi#5701

Katılım
11 Nisan 2018
Mesajlar
109
Elmaslar
36
Puanlar
0
Yer
Samanyolu Galaksisi
Minecraft
gollapuzesi
Öyle gözüküyor fakat konunun uzun olması kafanızı karıştırıyor olabilir.
2 dakikalık bir projeyi anlattım sadece.
Ben bunun uzun bir şey olduğunu düşünmemiştim zaten, ancak biraz karışık. Videosunu çekseniz tam anlamıyla mükemmel olabilir. Java dilinden hiç anladığım söylenemez yani. Skriptte "On chat:" yazman yeterli olurken, Java karışık gibi geldi bana.
 
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı