diff options
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java')
-rw-r--r-- | src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java index 5a8c324..b744b9d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -11,6 +11,7 @@ import java.io.InputStream; import java.io.OutputStream; import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.WorldCreator; import net.tylermurphy.hideAndSeek.Main; @@ -25,8 +26,17 @@ public class WorldLoader { this.savename = "hideandseek_"+mapname; } + public World getWorld(){ + return Bukkit.getServer().getWorld(savename); + } + public void unloadMap(){ - if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(savename), false)){ + World world = Bukkit.getServer().getWorld(savename); + if(world == null){ + Main.plugin.getLogger().warning(savename + " already unloaded."); + return; + } + if(Bukkit.getServer().unloadWorld(world, false)){ Main.plugin.getLogger().info("Successfully unloaded " + savename); }else{ Main.plugin.getLogger().severe("COULD NOT UNLOAD " + savename); @@ -35,7 +45,12 @@ public class WorldLoader { public void loadMap(){ Bukkit.getServer().createWorld(new WorldCreator(savename).generator(new VoidGenerator())); - Bukkit.getServer().getWorld(savename).setAutoSave(false); + World world = Bukkit.getServer().getWorld(savename); + if(world == null){ + Main.plugin.getLogger().severe("COULD NOT LOAD " + savename); + return; + } + world.setAutoSave(false); } public void rollback(){ @@ -57,9 +72,13 @@ public class WorldLoader { copyFile(srcFile,destFile); if(destenation.exists()) { deleteDirectory(destenation); - destenation.mkdir(); + if(!destenation.mkdir()){ + throw new RuntimeException("Failed to create directory: "+destenation.getPath()); + } + } + if(!temp_destenation.renameTo(destenation)){ + throw new RuntimeException("Failed to rename directory: "+temp_destenation.getPath()); } - temp_destenation.renameTo(destenation); } catch(IOException e) { e.printStackTrace(); return errorPrefix + message("COMMAND_ERROR"); @@ -77,7 +96,11 @@ public class WorldLoader { if(!temp.exists()) if(!temp.mkdirs()) throw new IOException("Couldn't create region directory!"); - String files[] = region.list(); + String[] files = region.list(); + if(files == null){ + Main.plugin.getLogger().severe("Region directory is null or cannot be accessed"); + return; + } for (String file : files) { if(isMca) { @@ -86,7 +109,7 @@ public class WorldLoader { int maxX = (int)Math.floor(saveMaxX / 32.0); int maxZ = (int)Math.floor(saveMaxZ / 32.0); - String[] parts = file.split("."); + String[] parts = file.split("\\."); if(parts.length > 1) { Main.plugin.getLogger().info(file); if( Integer.parseInt(parts[1]) < minX || Integer.parseInt(parts[1]) > maxX ||Integer.parseInt(parts[2]) < minZ || Integer.parseInt(parts[2]) > maxZ ) @@ -116,14 +139,16 @@ public class WorldLoader { out.close(); } - private boolean deleteDirectory(File directoryToBeDeleted) { + private void deleteDirectory(File directoryToBeDeleted) { File[] allContents = directoryToBeDeleted.listFiles(); if (allContents != null) { for (File file : allContents) { deleteDirectory(file); } } - return directoryToBeDeleted.delete(); + if(!directoryToBeDeleted.delete()){ + throw new RuntimeException("Failed to delete directory: "+directoryToBeDeleted.getPath()); + } } } |