Portal DEV REHBER - Minecraft İçin Eklenti Nasıl Yazılır? - Geliştirme Programları Nelerdir? - Artık Siz de Kolayca Eklenti Yazmaya Başlayabilirsiniz.

Bu konu süresiz olarak sabitlenmiş.

ChiaX

Team Arcenia
Satıcı+
Meclis Başkan Yrd.
Emektar Üye
Mesajlar
598
En iyi cevaplar
36
Puanları
2,120


Minecraft İçin Eklenti Nasıl Yazılır? - Geliştirme Programları Nelerdir? - Artık Siz de Kolayca Eklenti Yazmaya Başlayabilirsiniz!

:papağan:


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:

Majoras

Arcenia Network
Süper Üye
Tasarım Danışmanı
Mesajlar
750
En iyi cevaplar
0
Puanları
2,850
Forumda eşi ve benzeri bulunmayan bir konu. Ekip arkadaşımdan işte beklediğim performans! Ellerine sağlık :asık:
 

er4ys

Sudan Çıkmış
Mesajlar
4
En iyi cevaplar
0
Puanları
20
Elinize sağlık, çok güzel olmuş. Rehberi görünce heveslendim ve başladım fakat şu noktada takıldım:
-
Şimdi ise Bukkit'i import etme zamanı. File > Project Structure > Modules > Dependencies diyoruz ve sağ taraftan +'ya basıp Bukkit'i import ediyoruz.
-

+'ya basınca Bukkit çıkmıyor. Yardımcı olur musunuz?
 

ChiaX

Team Arcenia
Satıcı+
Meclis Başkan Yrd.
Emektar Üye
Mesajlar
598
En iyi cevaplar
36
Puanları
2,120
Elinize sağlık, çok güzel olmuş. Rehberi görünce heveslendim ve başladım fakat şu noktada takıldım:
-
Şimdi ise Bukkit'i import etme zamanı. File > Project Structure > Modules > Dependencies diyoruz ve sağ taraftan +'ya basıp Bukkit'i import ediyoruz.
-

+'ya basınca Bukkit çıkmıyor. Yardımcı olur musunuz?
Merhabalar, +'ya basınca JARs or directories bölümü çıkacak. Onu belirtmeyi unutmuşum konuda. Ona tıklayıp masaüstünden Bukkit'inizi koyabilirsiniz.

Ayrıca, beğendiğinize çok sevindim. İyi forumlar dilerim.
 

FullForceHD

Expecto Patronum!
Editör
Değişim Destekçisi
Mesajlar
783
En iyi cevaplar
0
Puanları
3,220
dev bir emek, eline sağlık
plugin falan bırak, wattpad işine gir
 

ExS

“Alıştım artık” cümlesi çok umutsuz değil mi ya?
Mesajlar
399
En iyi cevaplar
0
Puanları
930
Hocam konunun kalitesine laf söylenmez fakat şunu söylemeliyim eğer ciddi anlamda eklenti yazmak istiyorsanız ve pişman olmak istemiyorsanız Java ve özellikle object oriented programming kısmında kendinizi geliştirmelisiniz. Unutmayın eklenti yazmaktan daha önemli bir şey var, ileriye yönelik değiştirilebilen kullanışlı ve her duruma uyum sağlayabilen kodlar yazmak önemlidir. Minecraft eklentisi yazmaya başlamadan önce Java öğrenin.
 

ankaly

rise above it'
Moderatör
Değişim Destekçisi
Mesajlar
155
En iyi cevaplar
13
Puanları
810
Harika bir rehber olmuş. Emeğine sağlık!
 

Bernard

Бернард
Forum Yöneticisi
Tasarım Danışmanı
Geliştirici
Mesajlar
1,235
En iyi cevaplar
58
Puanları
4,290
Okumadan: Java bilmiyorsanız yazmayın. Öğrenin öyle yazın. Sonra sunucumun TPS'i neden 5'i geçmiyor diye konular açılıyor.
 

ChiaX

Team Arcenia
Satıcı+
Meclis Başkan Yrd.
Emektar Üye
Mesajlar
598
En iyi cevaplar
36
Puanları
2,120
Hocam konunun kalitesine laf söylenmez fakat şunu söylemeliyim eğer ciddi anlamda eklenti yazmak istiyorsanız ve pişman olmak istemiyorsanız Java ve özellikle object oriented programming kısmında kendinizi geliştirmelisiniz. Unutmayın eklenti yazmaktan daha önemli bir şey var, ileriye yönelik değiştirilebilen kullanışlı ve her duruma uyum sağlayabilen kodlar yazmak önemlidir. Minecraft eklentisi yazmaya başlamadan önce Java öğrenin.
başarılı bir konu olmuş. :1:
Çooook iyi. Süpersin @ChiaX :asık:
Harika bir rehber olmuş. Emeğine sağlık!
Okumadan: Java bilmiyorsanız yazmayın. Öğrenin öyle yazın. Sonra sunucumun TPS'i neden 5'i geçmiyor diye konular açılıyor.
Değerli yorumlarınız için hepinize teşekkürler. Beğendiğinize çok sevindim. :asık:
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Puanları
7,280
IDE kullanmanıza da gerek yok, gidin vsc fln kullanın hayatınız pek değişmiyo ne yaptığınızı biliyosanız but güzel konu tşk
 

Mucosoft

Obsidyen Madencisi
Mesajlar
1,490
En iyi cevaplar
0
Puanları
2,030
Bende bir aralar JAVA ile eklenti yapmayı denedim. Fakat zorlandığım kısım argümanlar oldu. Bundan dolayı Skript ile birçok sistem kodladım.

Argüman dediğim şu: "/Test arg1 arg2 arg3"

Fakat Skript'te bunu otomatik yaptığı için hızlı bir şekilde kodlayabiliyoruz. Tabii JAVA ile eklenti kodlamak daha iyi performans verir fakat zamanında kolaylık açısından bunu tercih ettim.
 

Üst