- Katılım
- 14 Haziran 2016
- Mesajlar
- 998
- Elmaslar
- 746
- Puanlar
- 15.070
- Minecraft
- SimitSu
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:
Forumda eclipse nasıl kurulacağına dair konular oldğu için anlatmayacağım
Proje Oluşturarak başlıyoruz
Proje oluşturmak için Sol üstte bulunan
Ben proje adıma "Messages" yazacağım, Proje adımızı belirledikten sonra Next'e basıyoruz
Karşımıza çıkan ekranda "Libraries" butonuna basıyoruz
Add "external jars" butonuna basıyoruz.
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
butonuna basarak projemizi oluşturuyoruz. (Pcnize bağlı olarak 1-2 dk sürebilr)
Projemizin üstüne sağ tıklayarak "New -> Package" tıklıyoruz
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 :)
Projemizin üstüne sağ tıklayarak "New -> Class" tıklıyoruz
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
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{
}
Ve bir hatayla karşılaştık, Aslında hata değil
Çözümüde çok basit.
Ampülümüze tıklıyoruz
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.
ş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.
bu oluşturduğumuz method'un içine
Java:
Bukkit.getPluginManager().registerEvents(this, this);
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!
Fakat bir hata var...
Hayır, bu bir hata değil!
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
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
ekleyeceğizimplements Listener
Bu nedir arkadaş?
Az sonra anlatacağım eventleri eklediğimizde "eventleri kontrol et" demek diye düşünebilirsiniz.
Şu şekilde ekliyoruz ve Listener'ı importluyoruz
ş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
Edit: ben buraya @EventHandler koymayı unutmuşum :D
şöyle görünmeli
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.
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")
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:
Not: "True" Doğru demektir.
O parantezin içine şunu yazacağız:
Java:
p.sendMessage();
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.
Nerdeyse bitti şimdi plugin.yml yi oluşturacağız
"Projemize sağ tıklıyoruz > New > File" tıklıyoruz
Projemizi seçiyoruz
adını "plugin.yml" koyup Finish'e basıyoruz
Ve plugin.yml oluşuyor
Bu plugin.yml nin üzerine tıklıyoruz ve
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
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.
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
Açılan pencerede JAR FILE'ı seçiyoruz
Ve Next'e basıyoruz
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.
Ekler
Son düzenleme: