• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot BlockBreakEvent führt 2x aus

Ifreeaple

Minecrafter
Registriert
8 September 2019
Beiträge
2
Diamanten
250
Hallo ich have volgendes Problem:

Ich bin gerade dabei ein plugin zu programmieren und möchte das sobald man einen stein block abbaut geld bekommt also habe ich ein BlockBreakEvent benutzt doch es wird 2 mal ausgeführt...

Ich habe mal mir einen text ausgegeben und daran gesehen das es eben so oft ausgeführt wird könnt ihr mir sagen wieso?
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    4,4 KB · Aufrufe: 163

Ifreeaple

Minecrafter
Registriert
8 September 2019
Beiträge
2
Diamanten
250
Hier

PS: Ich nutze nicht Vault sondern mein Geld plugin DKCoins

Listener:
@EventHandler
    public void handle(BlockBreakEvent e) {
        Player p = e.getPlayer();
        if(p.getGameMode() == GameMode.SURVIVAL) {
            
            File ordner = new File("plugins//VecodJobs");
            File file = new File("plugins//VecodJobs//data.yml");
            if(!ordner.exists()){
                ordner.mkdir();
            }
            if(!file.exists()){
                try{
                    file.createNewFile();
                }catch(IOException exeption){}
            }
            YamlConfiguration cfg = YamlConfiguration.loadConfiguration(file);
            String job = cfg.getString("spieler." + p.getName() + ".job");
            
            CoinPlayer player = CoinSystem.getInstance().getPlayerManager().getPlayer(p.getUniqueId());
            if(job != null) {
                if(job.equalsIgnoreCase("miner")) {
                    if(e.getBlock().getType() == Material.STONE) {
                        p.sendMessage("Schtain block abgebaut");
                        player.addCoins(5);
                    }else if(e.getBlock().getType() == Material.COBBLESTONE) {
                        player.addCoins(5);                       
                    }else if(e.getBlock().getType() == Material.DIAMOND_BLOCK) {
                        
                        p.sendMessage("Dia block abgebaut");
                        
                        player.addCoins(50);
                        
                    }
                }else if(job.equalsIgnoreCase("farmer")) {
                    
                }
            }
        }
    }
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Besteht die Möglichkeit, das du den Listener zweimal registrierst, z.B. in der Main-Klasse? Oder irgendwo zusätzliche Instanzen erstellst? Eine andere Möglichkeit sehe ich nicht wirklich.

Ansonsten würde ich zur Kompatibilität mit anderern (nicht eigenen) Plugins empfehlen, Vault zu nutzen. Auch sinnvoll wäre es sicherlich, die Config in eine eigene Klasse auszulagern sowohl das Speicherformat zu ändern (ein String ist da jetzt nicht optimal) und die Config zu cachen, anstatt jedesmal wieder die Datei auszulesen.
 
Oben