Sunucuma özel Bedwars eklentisi hazırlamaktayım fakat doğru işlemiyor. (Çözüldü)

MrPoteyto

Is the excellence? Ok..
En iyi cevaplar
0
Merhabalar. Bugün kodladığım bir eklentide, kodlarda bir hata olmamasına ve oyunda eklenti çalışıyor olmasına rağmen eklentiyi çalıştırdığımda çalışmıyor.
Alın size kodu da vereyim.
Kod:
package com.minedream.genel.bedwars;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Project extends JavaPlugin implements Listener{
 
    boolean renkBelirleme = false;
    boolean renkSecildi = false;
    String yatakRengi;
 
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("BedWarsDream -- Yeni Nesil BedWars! v" + getDescription().getVersion());
        getLogger().info("BedWarsDream -- Eklenti aktif!");
    }
    public void onDisable() {
        getLogger().info("BedWarsDream - Eklenti kapanıyor, Görüşürüz...");
    }
    public void konustugunda(AsyncPlayerChatEvent e) {
        String girdi = e.getMessage();
        if(renkBelirleme == true) {
            e.setCancelled(true);
            if(girdi.equalsIgnoreCase("mavi") || girdi.equalsIgnoreCase("kırmızı") || girdi.equalsIgnoreCase("yeşil") || girdi.equalsIgnoreCase("sarı")) {
                renkSecildi = true;
                yatakRengi = girdi;
            }
        }
    }
    public void yatakMesajGonder(BlockPlaceEvent e) {
        Player p = e.getPlayer();
        Block b = e.getBlock();
        Material m = b.getType();
        Location loc = b.getLocation();
        if(m == Material.GOLD_BLOCK) {
            loc.setY(loc.getY() + 1);
            loc.setX(loc.getX() - 0.5);
            loc.setZ(loc.getZ() - 0.5);
            if(loc.getBlock().getType().equals(Material.BED)) {
                p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9MineDream &8> &aBedwars yatağı belirlendi. Lütfen sohbete bir takım rengi yazın:"));
                renkBelirleme = true;
                if(renkSecildi == true) {
                    renkBelirleme = false;
                    if(yatakRengi == "yeşil") {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9MineDream &8> &aRenk belirlendi! Renk: &2&l" + yatakRengi));
                        renkSecildi = true;
                    }
                    if(yatakRengi == "mavi") {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9MineDream &8> &aRenk belirlendi! Renk: &1&l" + yatakRengi));
                        renkSecildi = true;
                    }
                    if(yatakRengi == "sarı") {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9MineDream &8> &aRenk belirlendi! Renk: &6&l" + yatakRengi));
                        renkSecildi = true;
                    }
                    if(yatakRengi == "kırmızı") {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9MineDream &8> &aRenk belirlendi! Renk: &4&l" + yatakRengi));
                        renkSecildi = true;
                    }
                }
            }
        }
    }

}
Eklentiyi, yatak konulunca ve altında ise altın bloğu olursa bedwars yatağı olarak algılanacak diye ayarladım fakat koyduğumda çalışmıyor kodlarda bir hata olmamasına rağmen. Hatta bütün kodları silip, sadece bir blok konulunca mesaj vermesini sağlayan bir eklenti yapsam bile bu da çalışmadı. Lütfen yardım edebilirmisiniz.
@MegaCrafter
@java9
 

MegaCrafter

Obsidyen Madencisi
En iyi cevaplar
0
Burada şöyle küçük bir hata var: renkSecildi == true dediğin yerde o kod senin chat'e yazı yazmanı beklemez. Sadece true ise o işlemleri yapar, true değilse o bloğu koyduğunla kalırsın. Eğer illaki bu şekilde yapmak istiyorsan repeating task ile adamın son yazdığı mesajı sürekli kontrol ettirmen gerekir ki yine task'ın mesaj algılandıktan sonra durması gerekeceğinden yine timer kullanman gerekebilir. Benim tavsiyem bence fazla zorlama. Zaten gece oldu biraz uyu :D
 

MrPoteyto

Is the excellence? Ok..
En iyi cevaplar
0

MrPoteyto

Is the excellence? Ok..
En iyi cevaplar
0
Burada şöyle küçük bir hata var: renkSecildi == true dediğin yerde o kod senin chat'e yazı yazmanı beklemez. Sadece true ise o işlemleri yapar, true değilse o bloğu koyduğunla kalırsın. Eğer illaki bu şekilde yapmak istiyorsan repeating task ile adamın son yazdığı mesajı sürekli kontrol ettirmen gerekir ki yine task'ın mesaj algılandıktan sonra durması gerekeceğinden yine timer kullanman gerekebilir. Benim tavsiyem bence fazla zorlama. Zaten gece oldu biraz uyu :D
Uyuyacağım fakat uyumadan önce bir şey söyleyeyim hemen :D Şimdi ben orada zaten yazdırmasını istemiyorum renk seçilmiş ise zaten tekrar yazdırmasına gerek yok. Yinede önerin için teşekkürler :D
Uykum fena geldi hadi ben kaçar

CASPER_VIA_E1 cihazımdan Tapatalk kullanılarak gönderildi
 

java10

kız çava bana kahve yap
En iyi cevaplar
0
sana bi tavsiye main class ta event barındırma, minigames tarzı şeyler yapıcaksan önceliğin "düzen" olmalı, minigames yaparken eklentiyi yaparken harcadığın emeğin %200 ünü bug fix lemeye harca, görsellik ön planda tut, kullanım kolaylığına önem ver, başka bir eklentiye bağımlı olmamaya çalış, oos ois kullan bilgileri kaydederken config'i sadece Türkçeleştirmek(language) kısımlarını koy çok fazla ayar koyma(yaptığın eklentiye de bağlı) oda oluşturmaya yani admin lerin eklentiyi sunucuya kurduktan sonra bi oda oluşturmak için gereken materyalleri görselliklerle süsle örn. World edit teki //Wand gibi, oda kurmayı anlaşılır yap, kendine özel Location, Bilgiler, Oyuncu Bilgileri, Harita Bilgileri gibi class lar kullan (Serializeble olmalı hepsi) bildiğin üzere Location, Player gibi class lar serializeble değil yani bunları oos ois ile kaydedemezsin ondan dolayı String ve özel Location class ı kullan, Arena Yönetimi için özel class aç örn. olarak createArena(); mehtodu editArenaOptions(); methodu gibi vs. eğer bunlar tamamsa ve biraz daha yardım gerekiyorsa benim minigames yapımını öğrendiğim eklentiyi kullanabilirsin decomp edip diğer insanların nasıl minigames yazdığına bak;
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.
bu lol eklentisi gerçekten önemli bir kaynak çok iyi bir şekilde kullan derim :)
 

MrPoteyto

Is the excellence? Ok..
En iyi cevaplar
0
sana bi tavsiye main class ta event barındırma, minigames tarzı şeyler yapıcaksan önceliğin "düzen" olmalı, minigames yaparken eklentiyi yaparken harcadığın emeğin %200 ünü bug fix lemeye harca, görsellik ön planda tut, kullanım kolaylığına önem ver, başka bir eklentiye bağımlı olmamaya çalış, oos ois kullan bilgileri kaydederken config'i sadece Türkçeleştirmek(language) kısımlarını koy çok fazla ayar koyma(yaptığın eklentiye de bağlı) oda oluşturmaya yani admin lerin eklentiyi sunucuya kurduktan sonra bi oda oluşturmak için gereken materyalleri görselliklerle süsle örn. World edit teki //Wand gibi, oda kurmayı anlaşılır yap, kendine özel Location, Bilgiler, Oyuncu Bilgileri, Harita Bilgileri gibi class lar kullan (Serializeble olmalı hepsi) bildiğin üzere Location, Player gibi class lar serializeble değil yani bunları oos ois ile kaydedemezsin ondan dolayı String ve özel Location class ı kullan, Arena Yönetimi için özel class aç örn. olarak createArena(); mehtodu editArenaOptions(); methodu gibi vs. eğer bunlar tamamsa ve biraz daha yardım gerekiyorsa benim minigames yapımını öğrendiğim eklentiyi kullanabilirsin decomp edip diğer insanların nasıl minigames yazdığına bak;
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.
bu lol eklentisi gerçekten önemli bir kaynak çok iyi bir şekilde kullan derim :)
Teşekkürler. Ben classları ayrı yapmıştım ancak sonra eventleri main classda çalıştıramadığım için birleştirdim.

CASPER_VIA_E1 cihazımdan Tapatalk kullanılarak gönderildi
 

bluera

Fiercely unapologetic.
Geliştirici
Emekli
En iyi cevaplar
13
@eventhandler kullanmalısın.
Aynı zamanda sana tavsiyem config dosyası kullanman. Böylece mesajları sonradan hiç uğraşmadan değiştirebilirsin. Başarılar.
 

java10

kız çava bana kahve yap
En iyi cevaplar
0
Daha amatör sayılırım biraz anlatırmısın. Söylediğin şey nedir? :D

CASPER_VIA_E1 cihazımdan Tapatalk kullanılarak gönderildi
public class Bilgiler implements Serializable bunu classına koyuyorsun ve örn.;

private String isim;
private String soyisim;
private int yas;
private boolean issahibimi;

//bir constructor gerekiyor verileri set yapmak için sonra get ve set methdoları nı yazdıktan sonra, ois oos methodlarını kullanıyorsun;

public static <T> void save(T obj, String path) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
oos.writeObject(obj);
oos.flush();
oos.close();
}

public static <T> T load(String path)throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));
T result = (T) ois.readObject();
ois.close();
return result;
}

verileri ArrayList<Bilgiler> bilgiler = new ArrayList<>(); bu arraye kaydediyorsun ve load ve save için on enable ve disable a bunlar gerekiyor;

private void load(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
bilgiler= SaveLoad.load(getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

private void save(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
SaveLoad.save(bilgiler, getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

bu şekilde kullanıyor arkadaşın dediği sistem
 

MrPoteyto

Is the excellence? Ok..
En iyi cevaplar
0
public class Bilgiler implements Serializable bunu classına koyuyorsun ve örn.;

private String isim;
private String soyisim;
private int yas;
private boolean issahibimi;

//bir constructor gerekiyor verileri set yapmak için sonra get ve set methdoları nı yazdıktan sonra, ois oos methodlarını kullanıyorsun;

public static <T> void save(T obj, String path) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
oos.writeObject(obj);
oos.flush();
oos.close();
}

public static <T> T load(String path)throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));
T result = (T) ois.readObject();
ois.close();
return result;
}

verileri ArrayList<Bilgiler> bilgiler = new ArrayList<>(); bu arraye kaydediyorsun ve load ve save için on enable ve disable a bunlar gerekiyor;

private void load(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
bilgiler= SaveLoad.load(getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

private void save(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
SaveLoad.save(bilgiler, getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

bu şekilde kullanıyor arkadaşın dediği sistem
Peki ne işe yarayacak benim için?

CASPER_VIA_E1 cihazımdan Tapatalk kullanılarak gönderildi
 

Zamion101

Marangoz
En iyi cevaplar
0
Az önce Serializable için extends demişim özür dilerim implements olucaktı.
public class Bilgiler implements Serializable bunu classına koyuyorsun ve örn.;

private String isim;
private String soyisim;
private int yas;
private boolean issahibimi;

//bir constructor gerekiyor verileri set yapmak için sonra get ve set methdoları nı yazdıktan sonra, ois oos methodlarını kullanıyorsun;

public static <T> void save(T obj, String path) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
oos.writeObject(obj);
oos.flush();
oos.close();
}

public static <T> T load(String path)throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));
T result = (T) ois.readObject();
ois.close();
return result;
}

verileri ArrayList<Bilgiler> bilgiler = new ArrayList<>(); bu arraye kaydediyorsun ve load ve save için on enable ve disable a bunlar gerekiyor;

private void load(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
bilgiler= SaveLoad.load(getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

private void save(){
try {
File file = new File(getDataFolder().getPath());
file.mkdirs();
file.createNewFile();
SaveLoad.save(bilgiler, getDataFolder().getPath() + "/bilgiler.yml");
} catch (Exception e) {
}
}

bu şekilde kullanıyor arkadaşın dediği sistem

Ayrıca .yml eklemek yerine başka bir uzantıda ekleye bilirsin mesela .zaaaxd yada .snenand gibi serializable'da .yml veya başka bir uzantı zorunluluğu yok.
 
Üst