• 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!

Warum geht mein MapReset nicht?

McWizzardDev

Kuhfänger
Registriert
7 Oktober 2015
Beiträge
56
Alter
30
Diamanten
300
Guten Tag,

ich mache gerade für mein Plugin einen MapReset, aber die Welt resetet nach einem Reload nicht, woran liegt das



MapReset:


Code:
package labyrinth;

import java.util.LinkedList;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
@SuppressWarnings("deprecation")
public class MapReset implements Listener{
   
   
   
    private static List<String> chances = new LinkedList<String>();


    public static void restore() {
        int blocks = 0;
       
        for(String b : chances) {
            String[] blockdata = b.split(":");
           
            int id = Integer.parseInt(blockdata[0]);
            byte data = Byte.parseByte(blockdata[1]);
            World world = Bukkit.getWorld(blockdata[2]);
            int x = Integer.parseInt(blockdata[3]);
            int y = Integer.parseInt(blockdata[4]);
            int z = Integer.parseInt(blockdata[5]);
           
            world.getBlockAt(x, y, z).setTypeId(id);
            world.getBlockAt(x, y, z).setData(data);
            blocks++;   
        }
        System.out.println("[Labyrinth] Die Map wurde resetet " + blocks);
    }
   
    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        Block b = e.getBlock();
        String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
       
        chances.add(block);
        }
    public void onPlace(BlockPlaceEvent e) {
        Block b = e.getBlock();
        String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
       
        chances.add(block);
        }
   
    public void onEntetyExploed(EntityExplodeEvent e) {
       
        for(int i = 0; i < e.blockList().size(); i++) {
           
            Block b = e.blockList().get(i);
            String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
           
            chances.add(block);
        }
    }
   
}




MainKlasse:

Code:
package labyrinth;

import java.io.File;
import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
   
    public File file = new File("plugins/Labyrinth", "save.yml");
    public FileConfiguration cfg = YamlConfiguration.loadConfiguration(this.file);
   
    public String prefix = "§7[§3Labyrinth§7] ";
   
    public ArrayList<String> game = new ArrayList<>();
   
    public ArrayList<String> green = new ArrayList<>();
    public ArrayList<String> red = new ArrayList<>();
    public ArrayList<String> yellow = new ArrayList<>();
    public ArrayList<String> blue = new ArrayList<>();
    public ArrayList<String> lobby = new ArrayList<>();
   
    public void onEnable() {
       
        System.out.println("[Minigame] Das Minigame wurde aktiviert");
       
        registerClasses();
        registerEvents();
       
    }
   

    private void registerEvents() {
        PluginManager pm = Bukkit.getPluginManager();
        pm.registerEvents(new MapReset(), this);
       
    }


    @Override
    public void onDisable() {
        System.out.println("[Labyrinth] Plugin deaktiviert");
        MapReset.restore();
    }


    private void registerClasses() {
       
        this.getCommand("labyrinth").setExecutor(new Commands(this));
        new JoinListener(this);
        new TeamGui(this);
        new Teams(this);
       
    }

}



Würde mich freuen, wenn jemand mir sagen kann, was ich falsch gemacht habe :)
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
- warum speicherst du nicht den ganzen Block in deiner Liste?
- Ich bin mir nicht sicher ob das ein Unterschied macht, aber ich würde über onPlace und onEntetyExploed @EventHandler machen.
Code:
public void onPlace(BlockPlaceEvent e) {
        Block b = e.getBlock();
        String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
     
        chances.add(block);
        }
Code:
 public static void restore() {
        int blocks = 0;
     
        for(String b : chances) {
            String[] blockdata = b.split(":");
         
            int id = Integer.parseInt(blockdata[0]);
            byte data = Byte.parseByte(blockdata[1]);
            World world = Bukkit.getWorld(blockdata[2]);
            int x = Integer.parseInt(blockdata[3]);
            int y = Integer.parseInt(blockdata[4]);
            int z = Integer.parseInt(blockdata[5]);
         
            world.getBlockAt(x, y, z).setTypeId(id);
            world.getBlockAt(x, y, z).setData(data);
            blocks++;
        }
        System.out.println("[Labyrinth] Die Map wurde resetet " + blocks);
    }
Ich hoffe da siehst du den Fehler selbst.
- statt System.out.println, bitte den Bukkit logger nutzen

Werden nur einzelne Blöcke zurückgesetzt oder gar keine?
 
Oben