ServerPlugin Warum geht mein MapReset nicht?

Dieses Thema im Forum "Programmierung" wurde erstellt von McWizzardDev, 11. Oktober 2015.

  1. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Guten Tag,

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



    MapReset:


    Code (Text):
    1. package labyrinth;
    2.  
    3. import java.util.LinkedList;
    4. import java.util.List;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.World;
    8. import org.bukkit.block.Block;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.block.BlockBreakEvent;
    12. import org.bukkit.event.block.BlockPlaceEvent;
    13. import org.bukkit.event.entity.EntityExplodeEvent;
    14. @SuppressWarnings("deprecation")
    15. public class MapReset implements Listener{
    16.    
    17.    
    18.    
    19.     private static List<String> chances = new LinkedList<String>();
    20.  
    21.  
    22.     public static void restore() {
    23.         int blocks = 0;
    24.        
    25.         for(String b : chances) {
    26.             String[] blockdata = b.split(":");
    27.            
    28.             int id = Integer.parseInt(blockdata[0]);
    29.             byte data = Byte.parseByte(blockdata[1]);
    30.             World world = Bukkit.getWorld(blockdata[2]);
    31.             int x = Integer.parseInt(blockdata[3]);
    32.             int y = Integer.parseInt(blockdata[4]);
    33.             int z = Integer.parseInt(blockdata[5]);
    34.            
    35.             world.getBlockAt(x, y, z).setTypeId(id);
    36.             world.getBlockAt(x, y, z).setData(data);
    37.             blocks++;  
    38.         }
    39.         System.out.println("[Labyrinth] Die Map wurde resetet " + blocks);
    40.     }
    41.    
    42.     @EventHandler
    43.     public void onBreak(BlockBreakEvent e) {
    44.         Block b = e.getBlock();
    45.         String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
    46.        
    47.         chances.add(block);
    48.         }
    49.     public void onPlace(BlockPlaceEvent e) {
    50.         Block b = e.getBlock();
    51.         String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
    52.        
    53.         chances.add(block);
    54.         }
    55.    
    56.     public void onEntetyExploed(EntityExplodeEvent e) {
    57.        
    58.         for(int i = 0; i < e.blockList().size(); i++) {
    59.            
    60.             Block b = e.blockList().get(i);
    61.             String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
    62.            
    63.             chances.add(block);
    64.         }
    65.     }
    66.    
    67. }
    68.  



    MainKlasse:

    Code (Text):
    1. package labyrinth;
    2.  
    3. import java.io.File;
    4. import java.util.ArrayList;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.configuration.file.FileConfiguration;
    8. import org.bukkit.configuration.file.YamlConfiguration;
    9. import org.bukkit.plugin.PluginManager;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11.  
    12. public class Main extends JavaPlugin{
    13.    
    14.     public File file = new File("plugins/Labyrinth", "save.yml");
    15.     public FileConfiguration cfg = YamlConfiguration.loadConfiguration(this.file);
    16.    
    17.     public String prefix = "§7[§3Labyrinth§7] ";
    18.    
    19.     public ArrayList<String> game = new ArrayList<>();
    20.    
    21.     public ArrayList<String> green = new ArrayList<>();
    22.     public ArrayList<String> red = new ArrayList<>();
    23.     public ArrayList<String> yellow = new ArrayList<>();
    24.     public ArrayList<String> blue = new ArrayList<>();
    25.     public ArrayList<String> lobby = new ArrayList<>();
    26.    
    27.     public void onEnable() {
    28.        
    29.         System.out.println("[Minigame] Das Minigame wurde aktiviert");
    30.        
    31.         registerClasses();
    32.         registerEvents();
    33.        
    34.     }
    35.    
    36.  
    37.     private void registerEvents() {
    38.         PluginManager pm = Bukkit.getPluginManager();
    39.         pm.registerEvents(new MapReset(), this);
    40.        
    41.     }
    42.  
    43.  
    44.     @Override
    45.     public void onDisable() {
    46.         System.out.println("[Labyrinth] Plugin deaktiviert");
    47.         MapReset.restore();
    48.     }
    49.  
    50.  
    51.     private void registerClasses() {
    52.        
    53.         this.getCommand("labyrinth").setExecutor(new Commands(this));
    54.         new JoinListener(this);
    55.         new TeamGui(this);
    56.         new Teams(this);
    57.        
    58.     }
    59.  
    60. }
    61.  


    Würde mich freuen, wenn jemand mir sagen kann, was ich falsch gemacht habe :)
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    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 (Text):
    1. public void onPlace(BlockPlaceEvent e) {
    2.         Block b = e.getBlock();
    3.         String block = b.getTypeId() + ":" + b.getData() + b.getWorld().getName() + ":" + b.getX() + ":" + b.getY() + ":" + b.getZ();
    4.      
    5.         chances.add(block);
    6.         }
    Code (Text):
    1.  public static void restore() {
    2.         int blocks = 0;
    3.      
    4.         for(String b : chances) {
    5.             String[] blockdata = b.split(":");
    6.          
    7.             int id = Integer.parseInt(blockdata[0]);
    8.             byte data = Byte.parseByte(blockdata[1]);
    9.             World world = Bukkit.getWorld(blockdata[2]);
    10.             int x = Integer.parseInt(blockdata[3]);
    11.             int y = Integer.parseInt(blockdata[4]);
    12.             int z = Integer.parseInt(blockdata[5]);
    13.          
    14.             world.getBlockAt(x, y, z).setTypeId(id);
    15.             world.getBlockAt(x, y, z).setData(data);
    16.             blocks++;
    17.         }
    18.         System.out.println("[Labyrinth] Die Map wurde resetet " + blocks);
    19.     }
    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?
     
    #2
    McWizzardDev gefällt das.
  3. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Das ich das nicht gesehen habe :D, danke für deine Hilfe :)
     
    #3