- Mesajlar
- 596
- En iyi cevaplar
- 37
- Beğeniler
- 694
- Puanları
- 2,620
- Ruh hali
Minecraft İçin Eklenti Nasıl Yazılır? - Geliştirme Programları Nelerdir? - Artık Siz de Kolayca Eklenti Yazmaya Başlayabilirsiniz!
Giriş
Herkese merhabalar, bu konuda sizlerle Minecraft için nasıl eklenti yazıldığını paylaşacağım. Ayrıca; Minecraft için eklenti nasıl yazılır? Hangi programları kullanmalıyım? Bu işe nereden başlamalıyım? Nasıl çalışmalıyım? gibi soruların cevaplarını da yine hep beraber inceleyeceğiz. Öyleyse konumuza geçelim. Hepiniz hoş geldiniz!
,
Minecraft'ın ve Bukkit'in Programlama Dili
Minecraft'ın ve Bukkit ailesinin(CraftBukkit, Spigot, PaperSpigot) programlama dili olan Java, bugünkü konumuzun ana başlığı konumunda. Kısacası bugün bu konuda öğreneceğimiz şey, Java'nın bir kütüphanesi olan Bukkit'in yazımı. Nesneye yönelimli bir programlama dili olan Java, 23 Ocak 1996'dan beri piyasada buluna bir programlama dilidir. Ayrıca, uzun yıllardır en çok kullanılan programlama dilleri listesinin başlarında yer alıyor. Benim kanaatimce uzun yıllar daha listede kalmaya devam edecek.
Bukkit Ailesi
Bukkit ailesi üzerine yazılımsal çalışmalara başlamadan önce Bukkit ailesinin nasıl bir aile olduğunu öğrenmek gerekir. Ailemizin en yaşlı üyesi olan CraftBukkit, yaşlı bir üye olduğundan çok kullanılmasa da, hala ölmedi diyebiliriz. CraftBukkit'in çocuğu konumunda olan Spigot, şu an ailemizin en aktif üyesi konumundadır. Ne de olsa orta yaşlarda ve çalışıyor. Ailemizin en minik ve son üyesi olan PaperSpigot optimizasyonlarıyla ünlü bir üyedir ve şahsen benim en içli dışlı olduğum üyedir. Şimdi gelelim bu ailenin kapsam haritasına! Az sonra öğreneceğimiz geliştirme programlarında yazacağımız eklenti eğer CraftBukkit temelliyse; bu eklenti hem CraftBukkit, hem Spigot hem de PaperSpigot temelli sunucularda çalışır. Bu eklenti Spigot temelli olduğunda; bu eklenti hem Spigot hem de PaperSpigot sunucularda çalışır; fakat CraftBukkit sunucularda çalışmaz. Son olarak bu eklenti PaperSpigot temelli ise, bu eklenti sadece PaperSpigot sunucularda çalışır ve başka hiçbir sunucuda çalışmaz.
Geliştirme Programları
Geliştirme programlarına hepimizin az çok kulak aşinalığı vardır. Bu programlardan bir tanesi, Eclipse; bir diğeri ise IntelliJ. Peki hangisi kullanılmalı? Hangisi daha işlevsel? Hangisi daha kullanımlı? Gelin hep beraber bu soruları yanıtlayalım. Kolay kullanım sevenlere ve başlangıç düzey olan arkadaşlara Eclipse öneriyorum. Fakat bir müddetten sonra IntelliJ'e geçmeniz gerekiyor. Gerek işlevselliği ile, gerek kolay yazımı ve kelime tamamlamaları ile gerçekten harika bir program. Peki bana soracaksınız: Direkt IntelliJ'den başlayabilir miyim? diye veya Direkt IntelliJ'den başlasam bir sorun olur mu? diye. Hayır, kesinlikle olmaz. Zaten ikisinin de nasıl kullanılacağı bu konuda mevcut olacak.
Eclipse indirmek için buraya tıkla.
IntelliJ indirmek için buraya tıkla.
Eclipse Kurulumu
Evet, yavaştan program kurulumlarına geçelim. İnen Eclipse'e çift tıklayıp açıyoruz. Ardından önümüze şu şekilde bir ekran gelecek. Kırmızı ile işaretlenmiş bölgelerle devan ediyoruz.
Seçtikten sonra önümüze gelen ekrandaki ilk kutucuğa javanın kurulu olduğu klasörü ve altına Eclipse'i kurmak istediğiniz yeri atıyorsunuz. İkinci kutucukta size önerim 2'sinin de tikli olmasıdır. Ardından üçüncü kutucukta bulunan İnstall'a basıp programımızı kuruyoruz.
Son olarak çıkan görseldeki "Launch" yazısına tıklayıp programı çalıştırıyoruz.
Eclipse içinde yazdığımız kodların kaydedileceği yeri bilgisayarımızdan seçiyoruz.
Ve Eclipse Kuruldu!
Şimdi ise IntelliJ'in kurulumuna bakalım. Ardından programlama kısmına geçeceğiz.
IntelliJ Kurulumu
İndirdiğimiz dosyayı açıyoruz ve ardından şekilde kırmızı gördüğümüz Next yazısına tıklıyoruz.
Ardından Browse kısmından IntelliJ'i nereye kuracağımızı belirliyoruz. Belirledikten sonra tekrar Next yazısına basıyoruz.
Eğer bilgisayarımız 32-bit ise görüntüdeki ayarları kuruyoruz.
Eğer bilgisayarımız 64-bit ise görüntüdeki ayarları kuruyoruz.
Ardından son kez Next deyip, programı kuruyoruz.
IntelliJ Hazır!
Proje Dosyalarının Yönetimi
Evet, yukarıdan da bildiğiniz üzere konuyu 2 farklı program üzerinden anlatıyorum. Bu kategori de öyle işleyecek. Önce Eclipse üzerinden anlatacağım; ardından IntelliJ üzerinden. Eclipse'i açıyoruz ve önümüzde oluşan Workspace isimli dosyayı kapatıyoruz. Ardından sol tarafta bulunan Package Explorer'a sağ tıklayıp görüntüdeki işlemleri uyguluyoruz.
Eclipse Dosya Yönetimi
Ardından ekranımıza gelen bölümdeki kutucukları görseldeki gibi dolduruyoruz. Proje ismine istediğinizi yazabilirsiniz.
Yukarıdaki işlemi yaptıktan sona oluşan projemize sağ tıklayıp, Properties diyoruz. Ardından Java Build Path'i bulup Add External JARs'ı seçiyoruz. Oradan istediğiniz sürüme ve temele göre ayarlayabilirsiniz. Ben spigot 1.12.2 kullanacağım. En son Apply and close diyerek pencereyi kapatıyoruz. Artık Minecraft kütüphanesini importladık.
Spigot'ı importladıktan sonra projeye - Gamer.COM.TR - çift tıklıyoruz ve içini açıyoruz. İçine "src" isimli bir klasör göreceksiniz. Ona sağ tıklayıp New > Package diyoruz. Buraya com.isminiz.projeismi yani com.chiax.deneme şeklinde bir yazı giriyoruz. Başka hiçbir yere tıklamadan Finish'e basıyoruz.
Oluşan package'a tekrar sağ tıklayıp Bu sefer New > Class diyoruz ve artık kodları yazacağımız dosyaya erişmiş oluyoruz. İsmini projenizin konusu yapabilirsiniz. şu an spesifik bir konu olmadığından ötürü ben Class'ın ismini Core yani çekirdek koyuyorum. Finish'ten başka hiçbir yere tıklamıyoruz.
An itibari ile kodları yazacağımız sayfa hazır. Şimdi aynı işlemleri IntelliJ'de uygulayalım.
IntelliJ Dosya Yönetimi
İlk önce, sol üstte bulunan File kısmından New > Project diyoruz.
Ardından çıkacak pencereden iki kere Next'e basıyoruz. Ve bu işlemden sonra çıkan boşluğa proje ismimizi yazıp, Finish'e tıklıyoruz.
Bu sayede projemizin dış dosyasını oluşturduk. Aynı Eclipse'de yaptığımız gibi proje dosyasına çift tıklayıp src klasörüne sağ tıklıyoruz. New > Package diyerek package'imizi oluşturuyoruz. Package ismine yukarıda da bahsettiğim üzere com.isminiz.proje ismini veriyoruz. Yani ben; com.chiax.deneme veriyorum.
Ve ardından Package'a sağ tıklayıp New > Class diyoruz. İsmine projemizin ismini veriyoruz. Bizim şu an projemizin spesifik bir ismi olmadığından ötürü ben çekirdek anlamına gelen Core ismini veriyorum.
Şimdi ise Bukkit'i import etme zamanı. File > Project Structure > Modules > Dependencies diyoruz ve sağ taraftan +'ya basıp Bukkit'i import ediyoruz.
Tüm işlemlerimizi bitirdik. Geriye tek kodu yazmak kaldı!
Bukkit Programlamaya Giriş
Evet artık yüzdük yüzdük kuyruğuna geldik. Asıl kategorimiz olan kodlama eşiğine geldik. Şimdi ben kodlamaya IntelliJ'den devam edeceğim. Zaten aralarında hiçbir fark yok dil açısından. O nedenle IntelliJ'den kodlayıp, sonra her iki programdan çıktısını çıkaracağız.
Hatırladığınız üzere programımız kurulduktan sonra ilk yaptığımız iş Bukkit'i import etmek idi. Şimdi ise kodumuzun o import ettiğimiz kısmı görmesini sağlayacağız. Aşağıdaki adımları izleyin ve asla telaşlanmayın.
Java:
package com.chiax.deneme;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
}
extends JavaPlugin ekledik ve import ettik. Eğer otomatik import seçenekleriniz kapalıysa, JavaPlugin'in üstüne gelerek de importlayabilirsiniz. Şimdi geldik her eklentide bulunan fonksiyonumuza: onEnable(). Eklenti aktif olduğunda anlamına gelen bu fonksiyonun üstüne @Override ifadesi koyulur. Bunun sebebi ise, bu fonksiyonun Bukkit kütüphanesine has olduğunu göstermek içindir.
Java:
package com.chiax.deneme;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
}
Şimdi ise onEnable() fonksiyonun zıttı konumunda olan onDisable() fonskiyonunu ekliyoruz.
Java:
package com.chiax.deneme;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
}
Sırada komut oluşturma kısmı var. Bir anda görünce fonksiyon size biraz karışık gelebilir fakat altından kalkamayacağınız iş değil kesinlikle.
Java:
package com.chiax.deneme;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
return false;
}
}
CommandSender = Komutu Gönderen; Command = Komut; String[] = argümanlar şeklindedir. Yani siz; sender yerine gonderen; cmd yerine komut, args yerine argumanlar yazabilirsiniz. Ben ingilizce kullanmayı tercih ediyorum fakat sizin tercihiniz elbette.
Şimdiyse, oyuncuyu komutu gönderen kişi olarak tanımlayacağız. Bu bölüm, sizin Java'da çok gelişmenizi sağlayacak. Ayrıntıları daha sonra öğreneceksiniz.
Java:
package com.chiax.deneme;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
Player player = (Player) sender;
return false;
}
}
Komut göndereni oyuncu olarak tanımladığımıza göre komut ismine ve işlevine yavaştan geçebiliriz.
Java:
package com.chiax.deneme;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
Player player = (Player) sender;
if(cmd.getName().equalsIgnoreCase("canlandır"))
{
}
return false;
}
}
Burada eğer komut canlandır ise demiş olduk.
Şimdi de komutun sadece OP'ler tarafından kullanılabilmesini ayarlayalım.
Kod:
package com.chiax.deneme;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
Player player = (Player) sender;
if(cmd.getName().equalsIgnoreCase("canlandır"))
{
if(player.isOp())
{
}
}
return false;
}
}
Son olarak da oyuncunun canını 20 yapalım. Yani komutu yazan oyuncunun canını dolduralım.
Java:
package com.chiax.deneme;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Core extends JavaPlugin
{
@Override
public void onEnable()
{
}
@Override
public void onDisable()
{
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
Player player = (Player) sender;
if(cmd.getName().equalsIgnoreCase("canlandır"))
{
if(player.isOp())
{
player.setHealth(20.0);
}
}
return false;
}
}
Evet arkadaşlar, kodumuzu tamamladık. Şimdi kodumuzun Minecraft'ta çalışması için gerekli olan ".yml" dosyasını açalım: plugin.yml
Eclipse Plugin.YML Oluşturma
Projeye sağ tıklıyoruz. (package, class veya src değil.) New > File diyoruz. Ardından plugin.yml yazarak dosyayı oluşturuyoruz. İçine ise bunları yazıyoruz.
YAML:
// main: com.isminiz.projeniz.Classİsmi
main: com.chiax.deneme.Core
version: 1.0
name: Canlandir
commands:
canlandir:
// satırını silin. Örnek olarak gösterilmiştir.
IntelliJ Plugin.YML Oluşturma
Src dosyasına sağ tıklıyoruz. (Proje, package veye class değil.) New > File diyoruz. Ardından plugin.yml yazarak dosyayı oluşturuyoruz. İçine bunları giriyoruz.
YAML:
// main: com.isminiz.projeniz.Classİsmi
main: com.chiax.deneme.Core
version: 1.0
name: Canlandir
commands:
canlandir:
// satırını silin. Örnek olarak gösterilmiştir.
Eclipse | Projeyi Dışarı Aktarma
Projeye sağ tıklıyoruz. Export diyoruz ve önümüze şu şekilde bir pencere açılıyor. Kırmızı ile gösterilen alanlara tıklayıp Next diyoruz.
Ardından, çıkan Browse butonuna basıp projenin .JAR olarak bilgisayarımızın neresine düşeceğini seçiyoruz. Ve Finish diyoruz. İşlem tamamlandı!
IntelliJ | Projeyi Dışarı Aktarma
Evet, IntelliJ programında projeyi dışarı aktarmak için File > Project Structure > Artfacts > + diyoruz. Görseldeki gibi devam ediyoruz.
Eklentinin her şeyi bitti. Artık tek yapmanız gereken plugins klasörüne atarak çalıştırmak. Şimdi sizlere bazı tüyolar vermek istiyorum. Buyurun, benimle kalın!
Tüyolar
Nesnelerden Yararlan!
- Oyuncuyu komut gönderen olarak tanımladığımızda, bir nevi nesne de tanımlamış olduk. Diyelim ki Player'ı oyuncu olarak tanımladınız. Programınızda; oyuncu. yazın ve çıkan şeylere bir göz atın. Sizi temin ederim ki; sadece böyle yaparak orta seviyelere gelebileceksiniz. Örneğin bu konuda setHealth() metodu işlendi, ve o metot ben player. yazınca çıktı. Ben de o metodu kasten seçtim. Peki sadece player ile neler mi yapabilirsiniz? İleri düzey ceza eklentisi, Feed, Heal eklentisi yapılabilir. Ve bunun gibi oyuncu bazlı birçok eklenti yapılabilir.
Geliştir, ama Özgün Kal!
- Önceden yapılan eklentilere bakarak ve anlamaya çalışarak tabii ki eklenti yapın; hatta yapmalısınız da. Ama kendinizi hazır hissettikten sonra kendiniz bir şey düşünün. Size kendimden bir örnek vermek istiyorum. Derin nefes alın ve gözlerinizi kapayın. Sunuculardaki eksikleri düşünün. 10 saniyede aklınızda en iyi Minecraft sunucusunu canlandırın ve onu yazmaya çalışın.
Yardım Alın!
- Yardım alın; bu işi bilenlere soru sormaya asla çekinmeyin. Fakat; buradaki ince çizgiden de şaşmayın. Önce kendiniz deneyin, sınırlarınızı zorlayın; ondan sonra gerekli kişilere başvurun. Unutmayın; her işin altında bir tutam öz güven vardır.
Araştırın!
- Bol bol araştırın. Hatta size önerim, İngilizce bilmiyor iseniz bile, Google Çeviri'yi kullanarak yabancı dillerde araştırma yapın. İngilizce ve ardından Fransızca kaynak dolu internet. Eğer Google Çeviri'de bir hata sezdiyseniz; tureng sözlükten kelimeleri teker teker çevirin. Tureng hata yapmaz.
Bugünkü konumun sonuna geldim, umarım istediklerimi sizlerle doğru bir dil ile paylaşabilmişimdir.
İyi forumlar!
Son düzenleme: