kingOf0
Yeni bir Steve doğdu!
- Katılım
- 28 Ocak 2020
- Mesajlar
- 3
- Tepki puanı
- 6
- Puanları
- 0
Ön Söz
Nasıl başlayacağımı bilemedim, nasıl başlanır ki? Direk konuya dalıyorum. Merhaba ben @kingOf0 up uzun bir aradan sonra bir minecraft forumunda konu açıyorum. Eskisi gibi konular açabilir miyim emin değilim. He bu arada, konu ilgi görmezse devamı gelmeyecek.
Bir Söz Verin Bana
Bu konunun sonunda sizden bir şey yapmanızı isteyeceğim, eğer bunu yapmayacaksanız hiç okuyup vaktinizi boşa harcamayın derim.
Başlangıç
Bu seride Intellij IDEA kullanacağım, kolayca indirebilirsiniz. Community Edition ücretsizdir, size hayli hayli yetecektir.
Programı ilk açtığınızda böyle bir ekranla karşılaşacaksınız.
İlk Projemizi Oluşturuyoruz
Create New Project butonuna basarak ilk projemizi oluşturuyoruz. Aşağıdaki ekrandan Software Development Kit seçmemizi istiyor.
Biz burada,
Project SDK, yani bilgisayarımıza kurduğumuz JDK yı seçip Next'e basıyoruz.
Hazır java kodlarını kullanmak isteyip istemediğimizi soruyor.
Bizim bu kodlara ihtiyacımız olmadığından Next'e basarak ilerliyoruz.
Bu ekranda projemize isim verip, konumunu seçiyoruz. İstediğiniz herhangi bir isim olabilir.
Sonrasında Finish'e basıp bitiriyoruz.
Böyle bir klasör bulunmadığından bizi uyarıyor, OK'a basarak devam ediyoruz.
Evet, tam olarak burası. İnsanların saatlerini harcayarak klavyeye abandıkları bölüm.
Sol üst taraftaki ok'a basarak proje dizinini genişletiyoruz.
Source'un kısaltması olan Src yani kaynak dizinine sağ tıklayarak yeni bir package oluşturuyoruz.
Kaynak (Source)
Projemize ait tüm içeriğin bulunduğu dizindir. Yazacağımız tüm kodlar bunun içerisinde bulunan package'lerde barınacak.
Paket (Package)
Projemizin daha derli toplu olmasını sağlayayan dizinlerdir. Kodlarımızı bu dizinlerin içine oluşturacağımız class'lara yazacağız.
Sınıf (Class)
Bunu anlatmak için biyolojiden yararlanacağım. Memeliler sınıfı, tek başına soyut bir kavram. Lakin tüm memelilerin somut ortak özelliklerini belirtiyor. Bu sınıfıda buna benzetebiliriz.
Not
Bu konudaki cümleler, bir kaç dakika içerisinde kendi kafamda oluşturduğum kelimelerden ibaret. Kesinlikle doğrudur demiyorum.
İsimlendirme
Paket isimleri tamamen küçük harfle olmalıdır. İlk harfinin bir rakam olamayacağı gibi, bazı özel class isimlerinde de olamazlar. Noktalama işareti ile bitemezler.
Sınıf isimleri büyük harfle başlamalıdır.
Değişken isimleri küçük harfle başlamalıdır. Eğer iki kelimeden oluşuyorsa, ikincisi büyük harfle başlamalıdır.
Paket iismleri genellikle, tersten okunduğunda ders.minecrafttr.com gibi bir anlam içerirler.
OK'a basarak devam ediyoruz.
Bukkit'e tanıtacağımız eklentimizin Main Class'ını (Ana Sınıf) oluşturuyoruz.
Genellikle Main olarak adlandırılan bu class, projenizin adı da olabilir.
Kullanacağımız minecraft sunucu kütüphanesini projemize eklememiz gerek, bunun için projemize sağ tıklayıp Oepn Module Settings'e basıyoruz.
Resimdeki adımları takip ediyoruz.
Buradan eklentimizi yazarken kullanacağımız hazır kodları içeren minecraft sunucu kütüphanesini seçiyoruz.
Bukkit spigot veya herhangi bir türevi olabilir. Bu kütüphaneleri internetten kolayca indirebilirsiniz. Songoda adlı ekibe ait olan S
OK'a basarak devam ediyoruz.
Sol taraftaki proje dizinimizden main class'ımıza tıklıyoruz.
Extend
classımızı tanımlayan satıra extends JavaPlugin kodunu yazıyoruz. Extend'in ne olduğunu kısaca tanımlayacağım.
Şuanda main class'ımız JavaPlugin classını extendlemiş durumda. Biyoloji örneğinden devam edeceğim. Bu durumda, JavaPlugin class'ını şube olarak düşünebilirsiniz main class'ımız JavaPlugin classının belirttiği somut özellikleri taşımakta. Yani bana bir JavaPlugin göster sorusu yöneldiğinde, main class'ımızı gösterebiliriz. Bu durum, JavaPlugin classındaki tüm kodların aynı zamanda main classımızda da bulunmasıyla açıklanabilir.
Metod (Method)
İçerisinde yazdığımız kodları barındıran, çağırılabilen, çağırıldığında geri dönüş sağlayabilen bir şeydir. ("şeydir" Evet benden bu kadar
)
Hiçbir şey (Void)
Metodun çağırılabileceğini, çağırıldığında da geri dönüş sağlayabileceğinden bahsetmiştim. Metodu tanımlarken, isminden önce metodun yapacağı geri dönüşün sınıfını belirtmelisiniz. Eğer ki hiç bir geri dönüşte bulunmayacaksa void, yani hiçlik yazıyoruz.
Override
Dediğim gibi, main classımız JavaPlugin classındaki kodları içermekte, bu kodların arasında onEnable ve onDisable da var. Sunucumuz eklentimizi çalıştıracağı zaman main classımızdaki onEnable metodunu çalıştıracaktır. Lakin, sunucu onEnable daki kodları çalıştırırken JavaPlugin classındaki kodları çalıştıracaktır. Peki bu JavaPlugin classının içindeki onEnable methodunda ne var?
Hiçbir şey yok. Peki bizim main classımızın içindeki kodları çalıştırmasını sağlayamaz mıyız? Tabi ki sağlayabiliriz. Bunun için metodu tanımlarken @Override yazmamız yeterli. Bu durumda, sunucu onEnable'ı çalıştırdığı zaman JavaPlugin'deki
Super
Peki, diyelim ki bu JavaPlugin classında onEnable methodunda birkaç kod olsaydı ve ben bu kodları çalıştırmak isteseydim, nasıl çalıştıracaktım?
main classımdaki onEnable'e @Override yazdığımdan dolayı onEnable() yazarak çalıştıramam, çalıştırdığımda main classımdaki kodu çalıştıracaktır. Bunun gibi durumlarda, super.onEnable() kullanabilirim. Yani bir class'ın extend ettiği classtaki kodu çalıştırmak için super ibaresini kullanıyoruz. Bu ekstra bir bilgi, yeni başlayan sizlerin kolay kolay kullanmayacağı bir şey.
Alan (Field)
Classımızın içindeki alan, methodları ve değişkenleri tanımladığımız alandır.
Bu iki parantez arası buna örnektir. onEnable ve onDisable methodları main class'ımızın field'ında bulunmaktadırlar.
Logger
Sunucumuzun konsoluna mesaj göndermek istediğimizde, JavaPlugin classının içinde bulunan getServer() methodunu çağırıyoruz. Bu method bize sunucumuzu belirten sınıfa ait bir nesne veriyor. Bu sınıfa ait olan getLogger() methodunu çalıştırdığımızda ise Java kütüphanelerinde bulunan Logger sınıfından bir nesne döndürüyor. Bu sınıfın info adında bir methodu var. Bu methodun içerisine String classından bir parametre girebiliyorsunuz. Biz bu parametreyi "Eklenti Aktif!" Olarak belirledik. ve kodun sonuna ; ekleyerek çalıştır nokta dedik.
Detay Neden Azaldı?
Detayın neden azaldığını soracak olursanız, "konunun sonuna yaklaştığımız ve ikinci ders de daha ayrıntılı anlatmayı düşündüğüm için" derim.
Plugin.yml
Sunucumuz bizim main class'ımızın içinde bulunan onEnable methodunu çalıştıracak dediğimi hatırlıyorsunuzdur, peki sunucumuz nereden bilecek bu main classın nerede olduğunu? Plugin.yml adında bir dosya oluşturmamız gerek. Bunun içerisine main class'ımızın nerede olduğunu yazacağız.
Src dizinine sağ tıklayarak yeni bir File oluşturuyoruz ismini plugin.yml koyuyoruz
Görüdğünüz gibi, Intellij hemen bizi uyarıyor. main name ve version girdilerinin eksik olduğundan bahsediyor. Bu girdilerin hepsi birer String olmalılar. Yani hepsini " içine yazmalıyız.
Plugin.yml Hakkında Daha Fazla Bilgi İçin
Main
Main class'ımızın bulunduğu konumdur. Paket Adı . Sınıf Adı şeklinde yazılmak zorundadır.
Name
Eklentimizin adıdır.
Version
Eklentimizin sürümüdür.
Eklentimizi Jar Olarak Çıkartmak (Export)
Projemize sağ tıklayıp tekrardan Open Module Settings'e tıklıyoruz.
Resimdeki adımları uyguluyoruz.
OK'a basarak devam ediyoruz
Eğer ki minecraft sunucu kütüphaneniz burada gözüküyorsa, seçip silmeniz gerek. Üzerine tıklayıp delete tuşuna basmanız yeterli.
Output Directory'den nereye çıkartmak istediğinizi ayarlayabilirsiniz.
Apply, sonrasında OK'a basıp çıkıyoruz.
Alt + B ye basarak Build penceresini açıyoruz ve Build Artifacts...'a tıklıyoruz.
Eğer ki bir hata yoksa, Build'e tıkladığımızda eklentimizi Output Directory'e çıkartacaktır.
Söz
Şimdi sırada, konunun başında sizden istediğim sözü tutma vaktiniz. Bu konuda okuduğunuz her şeyi uygulayacak, ilk eklentinizi yazacak bir sunucuya yükleyecek ve konsola gönderdiğiniz mesajı yorumlara yazacaksınız. Aşağıdaki resim gibi. Hadi kolay gelsin!
Nasıl başlayacağımı bilemedim, nasıl başlanır ki? Direk konuya dalıyorum. Merhaba ben @kingOf0 up uzun bir aradan sonra bir minecraft forumunda konu açıyorum. Eskisi gibi konular açabilir miyim emin değilim. He bu arada, konu ilgi görmezse devamı gelmeyecek.
Bir Söz Verin Bana
Bu konunun sonunda sizden bir şey yapmanızı isteyeceğim, eğer bunu yapmayacaksanız hiç okuyup vaktinizi boşa harcamayın derim.
Başlangıç
Bu seride Intellij IDEA kullanacağım, kolayca indirebilirsiniz. Community Edition ücretsizdir, size hayli hayli yetecektir.
Programı ilk açtığınızda böyle bir ekranla karşılaşacaksınız.
Create New Project butonuna basarak ilk projemizi oluşturuyoruz. Aşağıdaki ekrandan Software Development Kit seçmemizi istiyor.
Biz burada,
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
kullanacağız.Project SDK, yani bilgisayarımıza kurduğumuz JDK yı seçip Next'e basıyoruz.
Hazır java kodlarını kullanmak isteyip istemediğimizi soruyor.
Bizim bu kodlara ihtiyacımız olmadığından Next'e basarak ilerliyoruz.
Bu ekranda projemize isim verip, konumunu seçiyoruz. İstediğiniz herhangi bir isim olabilir.
Sonrasında Finish'e basıp bitiriyoruz.
Böyle bir klasör bulunmadığından bizi uyarıyor, OK'a basarak devam ediyoruz.
Evet, tam olarak burası. İnsanların saatlerini harcayarak klavyeye abandıkları bölüm.
Sol üst taraftaki ok'a basarak proje dizinini genişletiyoruz.
Source'un kısaltması olan Src yani kaynak dizinine sağ tıklayarak yeni bir package oluşturuyoruz.
Projemize ait tüm içeriğin bulunduğu dizindir. Yazacağımız tüm kodlar bunun içerisinde bulunan package'lerde barınacak.
Paket (Package)
Projemizin daha derli toplu olmasını sağlayayan dizinlerdir. Kodlarımızı bu dizinlerin içine oluşturacağımız class'lara yazacağız.
Sınıf (Class)
Bunu anlatmak için biyolojiden yararlanacağım. Memeliler sınıfı, tek başına soyut bir kavram. Lakin tüm memelilerin somut ortak özelliklerini belirtiyor. Bu sınıfıda buna benzetebiliriz.
Not
Bu konudaki cümleler, bir kaç dakika içerisinde kendi kafamda oluşturduğum kelimelerden ibaret. Kesinlikle doğrudur demiyorum.
İsimlendirme
Paket isimleri tamamen küçük harfle olmalıdır. İlk harfinin bir rakam olamayacağı gibi, bazı özel class isimlerinde de olamazlar. Noktalama işareti ile bitemezler.
Sınıf isimleri büyük harfle başlamalıdır.
Değişken isimleri küçük harfle başlamalıdır. Eğer iki kelimeden oluşuyorsa, ikincisi büyük harfle başlamalıdır.
Paket iismleri genellikle, tersten okunduğunda ders.minecrafttr.com gibi bir anlam içerirler.
OK'a basarak devam ediyoruz.
Bukkit'e tanıtacağımız eklentimizin Main Class'ını (Ana Sınıf) oluşturuyoruz.
Genellikle Main olarak adlandırılan bu class, projenizin adı da olabilir.
Kullanacağımız minecraft sunucu kütüphanesini projemize eklememiz gerek, bunun için projemize sağ tıklayıp Oepn Module Settings'e basıyoruz.
Resimdeki adımları takip ediyoruz.
Buradan eklentimizi yazarken kullanacağımız hazır kodları içeren minecraft sunucu kütüphanesini seçiyoruz.
Bukkit spigot veya herhangi bir türevi olabilir. Bu kütüphaneleri internetten kolayca indirebilirsiniz. Songoda adlı ekibe ait olan S
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
adlı site bunlardan birisi.OK'a basarak devam ediyoruz.
Sol taraftaki proje dizinimizden main class'ımıza tıklıyoruz.
Kod:
package com.minecrafttr.ders;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin {
}
classımızı tanımlayan satıra extends JavaPlugin kodunu yazıyoruz. Extend'in ne olduğunu kısaca tanımlayacağım.
Şuanda main class'ımız JavaPlugin classını extendlemiş durumda. Biyoloji örneğinden devam edeceğim. Bu durumda, JavaPlugin class'ını şube olarak düşünebilirsiniz main class'ımız JavaPlugin classının belirttiği somut özellikleri taşımakta. Yani bana bir JavaPlugin göster sorusu yöneldiğinde, main class'ımızı gösterebiliriz. Bu durum, JavaPlugin classındaki tüm kodların aynı zamanda main classımızda da bulunmasıyla açıklanabilir.
Kod:
package com.minecrafttr.ders;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
}
@Override
public void onDisable() {
}
}
Metod (Method)
İçerisinde yazdığımız kodları barındıran, çağırılabilen, çağırıldığında geri dönüş sağlayabilen bir şeydir. ("şeydir" Evet benden bu kadar
Hiçbir şey (Void)
Metodun çağırılabileceğini, çağırıldığında da geri dönüş sağlayabileceğinden bahsetmiştim. Metodu tanımlarken, isminden önce metodun yapacağı geri dönüşün sınıfını belirtmelisiniz. Eğer ki hiç bir geri dönüşte bulunmayacaksa void, yani hiçlik yazıyoruz.
Override
Dediğim gibi, main classımız JavaPlugin classındaki kodları içermekte, bu kodların arasında onEnable ve onDisable da var. Sunucumuz eklentimizi çalıştıracağı zaman main classımızdaki onEnable metodunu çalıştıracaktır. Lakin, sunucu onEnable daki kodları çalıştırırken JavaPlugin classındaki kodları çalıştıracaktır. Peki bu JavaPlugin classının içindeki onEnable methodunda ne var?
Kod:
public abstract class JavaPlugin extends PluginBase {
public void onEnable() {
}
}
Hiçbir şey yok. Peki bizim main classımızın içindeki kodları çalıştırmasını sağlayamaz mıyız? Tabi ki sağlayabiliriz. Bunun için metodu tanımlarken @Override yazmamız yeterli. Bu durumda, sunucu onEnable'ı çalıştırdığı zaman JavaPlugin'deki
Super
Peki, diyelim ki bu JavaPlugin classında onEnable methodunda birkaç kod olsaydı ve ben bu kodları çalıştırmak isteseydim, nasıl çalıştıracaktım?
main classımdaki onEnable'e @Override yazdığımdan dolayı onEnable() yazarak çalıştıramam, çalıştırdığımda main classımdaki kodu çalıştıracaktır. Bunun gibi durumlarda, super.onEnable() kullanabilirim. Yani bir class'ın extend ettiği classtaki kodu çalıştırmak için super ibaresini kullanıyoruz. Bu ekstra bir bilgi, yeni başlayan sizlerin kolay kolay kullanmayacağı bir şey.
Alan (Field)
Classımızın içindeki alan, methodları ve değişkenleri tanımladığımız alandır.
Bu iki parantez arası buna örnektir. onEnable ve onDisable methodları main class'ımızın field'ında bulunmaktadırlar.
Kod:
package com.minecrafttr.ders;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
getServer().getLogger().info("Eklenti Aktif!");
}
@Override
public void onDisable() {
getServer().getLogger().info("Eklenti Kapatılıyor!");
}
}
Logger
Sunucumuzun konsoluna mesaj göndermek istediğimizde, JavaPlugin classının içinde bulunan getServer() methodunu çağırıyoruz. Bu method bize sunucumuzu belirten sınıfa ait bir nesne veriyor. Bu sınıfa ait olan getLogger() methodunu çalıştırdığımızda ise Java kütüphanelerinde bulunan Logger sınıfından bir nesne döndürüyor. Bu sınıfın info adında bir methodu var. Bu methodun içerisine String classından bir parametre girebiliyorsunuz. Biz bu parametreyi "Eklenti Aktif!" Olarak belirledik. ve kodun sonuna ; ekleyerek çalıştır nokta dedik.
Detay Neden Azaldı?
Detayın neden azaldığını soracak olursanız, "konunun sonuna yaklaştığımız ve ikinci ders de daha ayrıntılı anlatmayı düşündüğüm için" derim.
Plugin.yml
Sunucumuz bizim main class'ımızın içinde bulunan onEnable methodunu çalıştıracak dediğimi hatırlıyorsunuzdur, peki sunucumuz nereden bilecek bu main classın nerede olduğunu? Plugin.yml adında bir dosya oluşturmamız gerek. Bunun içerisine main class'ımızın nerede olduğunu yazacağız.
Src dizinine sağ tıklayarak yeni bir File oluşturuyoruz ismini plugin.yml koyuyoruz
Görüdğünüz gibi, Intellij hemen bizi uyarıyor. main name ve version girdilerinin eksik olduğundan bahsediyor. Bu girdilerin hepsi birer String olmalılar. Yani hepsini " içine yazmalıyız.
Kod:
main: "com.minecrafttr.ders.Main"
name: "MinecraftTrDers"
version: "1.0"
Plugin.yml Hakkında Daha Fazla Bilgi İçin
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yapın veya üye olun.
Main
Main class'ımızın bulunduğu konumdur. Paket Adı . Sınıf Adı şeklinde yazılmak zorundadır.
Name
Eklentimizin adıdır.
Version
Eklentimizin sürümüdür.
Eklentimizi Jar Olarak Çıkartmak (Export)
Projemize sağ tıklayıp tekrardan Open Module Settings'e tıklıyoruz.
Resimdeki adımları uyguluyoruz.
OK'a basarak devam ediyoruz
Eğer ki minecraft sunucu kütüphaneniz burada gözüküyorsa, seçip silmeniz gerek. Üzerine tıklayıp delete tuşuna basmanız yeterli.
Output Directory'den nereye çıkartmak istediğinizi ayarlayabilirsiniz.
Apply, sonrasında OK'a basıp çıkıyoruz.
Alt + B ye basarak Build penceresini açıyoruz ve Build Artifacts...'a tıklıyoruz.
Eğer ki bir hata yoksa, Build'e tıkladığımızda eklentimizi Output Directory'e çıkartacaktır.
Şimdi sırada, konunun başında sizden istediğim sözü tutma vaktiniz. Bu konuda okuduğunuz her şeyi uygulayacak, ilk eklentinizi yazacak bir sunucuya yükleyecek ve konsola gönderdiğiniz mesajı yorumlara yazacaksınız. Aşağıdaki resim gibi. Hadi kolay gelsin!
Hiçbir şekilde kopyalanması alıntı yapılması, paylaşılması ödün (ç)alınması yasaktır.