İstek Taş kırdığında demir veren Java kod istiyorum.

DRAGON19052

Zombi Katili
Mesajlar
195
En iyi cevaplar
0
Beğeniler
15
Puanları
200
Ben bi tane server için Java öğrenmeyi istiyorum ama minecraft ile nasıl bağdaştıracağımı bilmiyorum. Bu yüzden sizden isteğim, bana örnek olması için taş kırınca demir veren Java kod istiyorum. Sakın skript atmayın yazmasını biliyorum. Ben java kod istiyorum.

Şimdiden teşekkür ederim.
İyi günler.
 


LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Java:
// Paket adını değiştir
package com.lifemcserver.examples;

// Importlar kalsın hata verir ise
// eclipse: CTRL + SHIFT + O
// intellij: ALT + ENTER
// yine olmaz ise build path veya libraries'e
// bukkiti veya spigotu eklemeyi unutma.

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

// Class ismini değiştirebilirsin fakat dosya adı ile aynı olmalı
public final class BlockBreakListener implements Listener {
    
    // Bu methodu pluginin ana classından çağır
    // BlockBreakListener.register(this);
    // bu şekilde çağırabilirsin.
    public final static void register(final JavaPlugin plugin) {
        
        Bukkit.getPluginManager().registerEvents(new BlockBreakListener(), plugin);
        
    }
    
    // Bu method event tetiklendiğinde yürütülüyor otomatik olarak,
    // priority = bu methodun event işleme sırasındaki önceliği,
    // biz event ile alakalı bir şey değiştirmiyoruz sadece itemi kontrol edip
    // başka bir item veriyoruz yani başka pluginlerin itemi HIGHEST ile listenlayıp
    // değiştirmesine karşılık stoneu yine doğru algılaması için MONITOR kullandık.
    // ignoreCancelled true ise iptal edilen eventlerin bu methodu tetiklemesini engelliyor.
    @EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
    public final void onBlockBreak(final BlockBreakEvent e) {
        
        // eğer kırılan blok stone (taş) ise
        if(e.getBlock().getType() == Material.STONE) {
            
            // bloğu kıran kişinin envanterine 1 adet iron ingot yani demir külçesi ekliyoruz
            e.getPlayer().getInventory().addItem(new ItemStack(Material.IRON_INGOT, 1));
            
        }
        
    }
    
}
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Ek not: İstersen bir ana class veya plugin.yml örneği de atabilirim. Attığım kodda envanterin dolu olması gibi durumları kontrol etmedim. Sadece ufak bir örnek. Daha fazlasına ihtiyacın var ise bildirmen yeterli.
 

DRAGON19052

Zombi Katili
Mesajlar
195
En iyi cevaplar
0
Beğeniler
15
Puanları
200
Ek not: İstersen bir ana class veya plugin.yml örneği de atabilirim. Attığım kodda envanterin dolu olması gibi durumları kontrol etmedim. Sadece ufak bir örnek. Daha fazlasına ihtiyacın var ise bildirmen yeterli.


Daha zor bişeyler yapsan olurmu? Ayrıca örnek plugin.yml dosyası da atarsan güzel olur.
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Daha zor bişeyler yapsan olurmu? Ayrıca örnek plugin.yml dosyası da atarsan güzel olur.

Örnek plugin.yml:

YAML:
name: EklentiAdi
main: com.lifemcserver.examples.MainClass
version: 1.0
description: EklentiAdi is a plugin for ...
author: LifeMCServer
website: https://www.lifemcserver.com/

Name kısmına eklenti adını yazacaksın /plugins'de vs gözüken ad bu. Main kısmına eklentinin main classını yazacaksın yani JavaPlugini extendleyen onEnable vb. methodların çağrıldığı classın yolunu yazacaksın. Main classı açıp en üstte package den sonra yazanı kopyalayıp sonuna nokta koyup class adını yazarsan olacaktır. Version kısmı eklenti versiyonu. Yine bu da /version <eklentiadı> veya /about <eklentiadı> da gözükecektir. Description eklenti açıklaması buda yine aynı şekilde about komutunda gözüküyor. Author eklentiyi kimin yaptığı, kullanıcı adını yazabilirsin. Website zorunlu değil fakat ben ekledim yinede, sen kaldırabilirsin. Burada türkçe karakter kullanılıyor mu bilemiyorum fakat tavsiye etmem.

Daha zor bir şeyler derken? Uzun sürecek bir şey değil ise yardımcı olmaya çalışırım tabii.
 

DRAGON19052

Zombi Katili
Mesajlar
195
En iyi cevaplar
0
Beğeniler
15
Puanları
200
Örnek plugin.yml:

YAML:
name: EklentiAdi
main: com.lifemcserver.examples.MainClass
version: 1.0
description: EklentiAdi is a plugin for ...
author: LifeMCServer
website: https://www.lifemcserver.com/

Name kısmına eklenti adını yazacaksın /plugins'de vs gözüken ad bu. Main kısmına eklentinin main classını yazacaksın yani JavaPlugini extendleyen onEnable vb. methodların çağrıldığı classın yolunu yazacaksın. Main classı açıp en üstte package den sonra yazanı kopyalayıp sonuna nokta koyup class adını yazarsan olacaktır. Version kısmı eklenti versiyonu. Yine bu da /version <eklentiadı> veya /about <eklentiadı> da gözükecektir. Description eklenti açıklaması buda yine aynı şekilde about komutunda gözüküyor. Author eklentiyi kimin yaptığı, kullanıcı adını yazabilirsin. Website zorunlu değil fakat ben ekledim yinede, sen kaldırabilirsin. Burada türkçe karakter kullanılıyor mu bilemiyorum fakat tavsiye etmem.

Daha zor bir şeyler derken? Uzun sürecek bir şey değil ise yardımcı olmaya çalışırım tabii.

Aklımda pek bişeu yok ama mesela;
- 5 taş kırınca taşları alıcak 1 demir vericek.
- Sünger harici bloklar kırılamayacak

Uzun olmaz ise bunlardan birini yaparsan güzel olur. Benim diğer sorum bi plugin içine 2 event ekleyebilir miyim? Yani hem sadece sünger kırılacak hem 5 tai kırınca taşları alıcak 1 demir vericek. Bunu yapabilirsem nasıl yaparım?
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Aklımda pek bişeu yok ama mesela;
- 5 taş kırınca taşları alıcak 1 demir vericek.
- Sünger harici bloklar kırılamayacak

Uzun olmaz ise bunlardan birini yaparsan güzel olur. Benim diğer sorum bi plugin içine 2 event ekleyebilir miyim? Yani hem sadece sünger kırılacak hem 5 tai kırınca taşları alıcak 1 demir vericek. Bunu yapabilirsem nasıl yaparım?

Dediğini tam anlayamadım. Sünger dışındaki bloklar kırılamıyor ise taşı nasıl kıracaklar? HashMap ile yapılabilir taş olayı. Kaç taş kırdığını hash mapte saklarsın. Fakat sunucu resetlenince gider. Zaten kırdığı taş sayısını göstermeyecek sadece 5 taş kırınca algılayacak bu yüzden database veya userdata kullanmaya gerek yok hash map ile yaparız. O dediğini açarsan yapayım şimdi.
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Ve evet bir eklentiye istediğin kadar event ve komut ekleyebilirsin.
 

DRAGON19052

Zombi Katili
Mesajlar
195
En iyi cevaplar
0
Beğeniler
15
Puanları
200
Dediğini tam anlayamadım. Sünger dışındaki bloklar kırılamıyor ise taşı nasıl kıracaklar? HashMap ile yapılabilir taş olayı. Kaç taş kırdığını hash mapte saklarsın. Fakat sunucu resetlenince gider. Zaten kırdığı taş sayısını göstermeyecek sadece 5 taş kırınca algılayacak bu yüzden database veya userdata kullanmaya gerek yok hash map ile yaparız. O dediğini açarsan yapayım şimdi.

Yani diyorum ki adam 5 tane taş kırınca taşları alıp demir versin. Sayısını göstermesine gerek yok sadece 5 taş kırınca demir versin yeter.
Sünger olayı da örnek olsun diye dedim. O zaman sadece taş kırmasına izin verilsin. Daha nasıl açıklayabilirim bilemiyorum.
 

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
İşte nasıl yapacağım? package kısmından tekrar mı yapıcam yoksa public kısmından mı tekrar yapıcam?

Altına direk method ile ekleyebilirsin. @EventHanlder ekledikten ve Bukkit.getPluginManager.registerEvents ile registerledikten sonra çalışacaktır.
 

Üst