diff --git a/src/com/dre/dungeonsxl/DConfig.java b/src/com/dre/dungeonsxl/DConfig.java index 326e96cf..022fd953 100644 --- a/src/com/dre/dungeonsxl/DConfig.java +++ b/src/com/dre/dungeonsxl/DConfig.java @@ -67,15 +67,15 @@ public class DConfig { //Check Id & Data String[] idAndData=itemsplit[0].split("/"); - itemId=Integer.parseInt(idAndData[0]); + itemId=P.p.parseInt(idAndData[0]); if(idAndData.length>1){ - itemData=Integer.parseInt(idAndData[1]); + itemData=P.p.parseInt(idAndData[1]); } //Size if(itemsplit.length>1){ - itemSize=Integer.parseInt(itemsplit[1]); + itemSize=P.p.parseInt(itemsplit[1]); } //Enchantment @@ -85,7 +85,7 @@ public class DConfig { itemEnchantment=Enchantment.getByName(enchantmentSplit[0]); if(enchantmentSplit.length>1){ - itemLvlEnchantment=Integer.parseInt(enchantmentSplit[1]); + itemLvlEnchantment=P.p.parseInt(enchantmentSplit[1]); } } @@ -117,7 +117,7 @@ public class DConfig { if (configSetionMessages != null) { Set list = configSetionMessages.getKeys(false); for (String messagePath:list) { - int messageId = Integer.parseInt(messagePath); + int messageId = P.p.parseInt(messagePath); this.msgs.put(messageId,configSetionMessages.getString(messagePath)); } } diff --git a/src/com/dre/dungeonsxl/DMobType.java b/src/com/dre/dungeonsxl/DMobType.java index 51d7fb57..33fc0728 100644 --- a/src/com/dre/dungeonsxl/DMobType.java +++ b/src/com/dre/dungeonsxl/DMobType.java @@ -184,7 +184,7 @@ public class DMobType { String[] splittedEnchantment = enchantment.split(" "); if(Enchantment.getByName(splittedEnchantment[0].toUpperCase())!=null){ if (splittedEnchantment.length>1) { - itemMeta.addEnchant(Enchantment.getByName(splittedEnchantment[0].toUpperCase()), Integer.parseInt(splittedEnchantment[1]), true); + itemMeta.addEnchant(Enchantment.getByName(splittedEnchantment[0].toUpperCase()), P.p.parseInt(splittedEnchantment[1]), true); } else { itemMeta.addEnchant(Enchantment.getByName(splittedEnchantment[0].toUpperCase()), 1, true); } diff --git a/src/com/dre/dungeonsxl/P.java b/src/com/dre/dungeonsxl/P.java index b09d899c..6d36a1c1 100644 --- a/src/com/dre/dungeonsxl/P.java +++ b/src/com/dre/dungeonsxl/P.java @@ -12,6 +12,8 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.milkbowl.vault.permission.Permission; + +import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; @@ -32,6 +34,7 @@ import com.dre.dungeonsxl.listener.BlockListener; import com.dre.dungeonsxl.listener.CommandListener; import com.dre.dungeonsxl.listener.EntityListener; import com.dre.dungeonsxl.listener.PlayerListener; +import com.dre.dungeonsxl.listener.WorldListener; public class P extends JavaPlugin{ public static P p; @@ -40,6 +43,7 @@ public class P extends JavaPlugin{ private static Listener entitylistener; private static Listener playerlistener; private static Listener blocklistener; + private static Listener worldlistener; //Main Config Reader public MainConfig mainConfig; @@ -79,10 +83,12 @@ public class P extends JavaPlugin{ entitylistener = new EntityListener(); playerlistener = new PlayerListener(); blocklistener = new BlockListener(); + worldlistener = new WorldListener(); Bukkit.getServer().getPluginManager().registerEvents(entitylistener,this); Bukkit.getServer().getPluginManager().registerEvents(playerlistener,this); Bukkit.getServer().getPluginManager().registerEvents(blocklistener,this); + Bukkit.getServer().getPluginManager().registerEvents(worldlistener,this); //Load All this.loadAll(); @@ -438,7 +444,11 @@ public class P extends JavaPlugin{ return null; } - + + public int parseInt(String string){ + return NumberUtils.toInt(string, 0); + } + // -------------------------------------------- // // LOGGING // -------------------------------------------- // diff --git a/src/com/dre/dungeonsxl/commands/CMDHelp.java b/src/com/dre/dungeonsxl/commands/CMDHelp.java index 18d2e1ce..2c89a01d 100644 --- a/src/com/dre/dungeonsxl/commands/CMDHelp.java +++ b/src/com/dre/dungeonsxl/commands/CMDHelp.java @@ -18,7 +18,7 @@ public class CMDHelp extends DCommand{ if(args.length>1){ try{ - page=Integer.parseInt(args[1]); + page=p.parseInt(args[1]); }catch(NumberFormatException e){ page=1; } diff --git a/src/com/dre/dungeonsxl/commands/CMDMsg.java b/src/com/dre/dungeonsxl/commands/CMDMsg.java index 504ba289..e1ee0b00 100644 --- a/src/com/dre/dungeonsxl/commands/CMDMsg.java +++ b/src/com/dre/dungeonsxl/commands/CMDMsg.java @@ -23,7 +23,7 @@ public class CMDMsg extends DCommand{ if(eworld!=null){ if(args.length>1){ try{ - int id=Integer.parseInt(args[1]); + int id=p.parseInt(args[1]); DConfig confreader = new DConfig(new File(p.getDataFolder()+"/dungeons/"+eworld.dungeonname, "config.yml")); diff --git a/src/com/dre/dungeonsxl/game/GameWorld.java b/src/com/dre/dungeonsxl/game/GameWorld.java index 91c11928..769ede93 100644 --- a/src/com/dre/dungeonsxl/game/GameWorld.java +++ b/src/com/dre/dungeonsxl/game/GameWorld.java @@ -8,6 +8,7 @@ import java.io.ObjectInputStream; import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.ChatColor; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -46,7 +47,8 @@ public class GameWorld { public boolean isPlaying=false; public int id; public CopyOnWriteArrayList secureobjects = new CopyOnWriteArrayList(); - + public CopyOnWriteArrayList loadedChunks = new CopyOnWriteArrayList(); + public CopyOnWriteArrayList signClass=new CopyOnWriteArrayList(); public CopyOnWriteArrayList dmobs = new CopyOnWriteArrayList(); public CopyOnWriteArrayList gchests = new CopyOnWriteArrayList(); @@ -77,39 +79,34 @@ public class GameWorld { String[] lines=sign.getLines(); if(!isPlaying){ - if(lines[1].equalsIgnoreCase("lobby")){ + if (lines[1].equalsIgnoreCase("lobby")) { this.locLobby=block.getLocation(); block.setTypeId(0); - } - if(lines[1].equalsIgnoreCase("ready")){ + } else if (lines[1].equalsIgnoreCase("ready")) { this.blocksReady.add(block); sign.setLine(0, ChatColor.BLUE+"############"); sign.setLine(1, ChatColor.DARK_GREEN+"Ready"); sign.setLine(2, ""); sign.setLine(3, ChatColor.BLUE+"############"); sign.update(); - } - if(lines[1].equalsIgnoreCase("leave")){ + } else if (lines[1].equalsIgnoreCase("leave")){ this.blocksLeave.add(block); sign.setLine(0, ChatColor.BLUE+"############"); sign.setLine(1, ChatColor.DARK_GREEN+"Leave"); sign.setLine(2, ""); sign.setLine(3, ChatColor.BLUE+"############"); sign.update(); - } - if(lines[1].equalsIgnoreCase("start")){ + } else if (lines[1].equalsIgnoreCase("start")){ this.locStart=block.getLocation(); block.setTypeId(0); - } - if(lines[1].equalsIgnoreCase("end")){ + } else if (lines[1].equalsIgnoreCase("end")){ this.blocksEnd.add(block); sign.setLine(0, ChatColor.DARK_BLUE+"############"); sign.setLine(1, ChatColor.DARK_GREEN+"End"); sign.setLine(2, ""); sign.setLine(3, ChatColor.DARK_BLUE+"############"); sign.update(); - } - if(lines[1].equalsIgnoreCase("classes")){ + } else if (lines[1].equalsIgnoreCase("classes")){ if(!config.isLobbyDisabled){ int[] direction=DGSign.getDirection(block.getData()); int directionX=direction[0]; @@ -150,6 +147,22 @@ public class GameWorld { block.setTypeId(0); } + } else if (lines[1].equalsIgnoreCase("chunkupdater")){ + Chunk chunk = this.world.getChunkAt(block); + if(!lines[2].equals("")){ + Integer radius = p.parseInt(lines[2]); + for(int x = -radius; x0){ - radius=Integer.parseInt(lines[2]); + radius=p.parseInt(lines[2]); } } diff --git a/src/com/dre/dungeonsxl/listener/BlockListener.java b/src/com/dre/dungeonsxl/listener/BlockListener.java index 40031cd8..d0f13d5e 100644 --- a/src/com/dre/dungeonsxl/listener/BlockListener.java +++ b/src/com/dre/dungeonsxl/listener/BlockListener.java @@ -117,8 +117,8 @@ public class BlockListener implements Listener { String[] data = lines[3].split("\\,"); if(data.length==2){ - int maxGroups=Integer.parseInt(data[0]); - int maxPlayersPerGroup=Integer.parseInt(data[1]); + int maxGroups=P.p.parseInt(data[0]); + int maxPlayersPerGroup=P.p.parseInt(data[1]); if(maxGroups>0 && maxPlayersPerGroup>0){ if(DGSign.tryToCreate(event.getBlock(), dungeonName, maxGroups, maxPlayersPerGroup)!=null){ event.setCancelled(true); diff --git a/src/com/dre/dungeonsxl/listener/WorldListener.java b/src/com/dre/dungeonsxl/listener/WorldListener.java new file mode 100644 index 00000000..86eed977 --- /dev/null +++ b/src/com/dre/dungeonsxl/listener/WorldListener.java @@ -0,0 +1,21 @@ +package com.dre.dungeonsxl.listener; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.world.ChunkUnloadEvent; + +import com.dre.dungeonsxl.game.GameWorld; + +public class WorldListener implements Listener{ + + @EventHandler(priority = EventPriority.HIGH) + public void onChunkUnload(ChunkUnloadEvent event){ + GameWorld gWorld = GameWorld.get(event.getWorld()); + if(gWorld!=null){ + if(gWorld.loadedChunks.contains(event.getChunk())){ + event.setCancelled(true); + } + } + } +}