From 1a16636c7aa4d12b5c2d7827b5141b7302cc6a3b Mon Sep 17 00:00:00 2001 From: Eric Stokes Date: Thu, 21 Jul 2011 14:07:57 -0600 Subject: [PATCH] Refactor, Now we safely move players from a world to be unlaoded, unload actually unloads from memory --- .../MultiverseCore/MultiverseCore.java | 43 +++++++++++++++---- .../commands/RemoveCommand.java | 2 +- .../commands/UnloadCommand.java | 2 +- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index 1c64b119..85e2fa36 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -388,9 +388,12 @@ public class MultiverseCore extends JavaPlugin { * @param name The name of the world to remove * @return True if success, false if failure. */ - public boolean unloadWorld(String name) { + public boolean removeWorldFromList(String name) { + if (this.worlds.containsKey(name)) { this.worlds.remove(name); + this.log(Level.INFO, "World " + name + " was unloaded from memory."); + this.unloadWorld(name, true); return true; } return false; @@ -402,10 +405,14 @@ public class MultiverseCore extends JavaPlugin { * @param name The name of the world to remove * @return True if success, false if failure. */ - public boolean removeWorld(String name) { - unloadWorld(name); - this.configWorlds.removeProperty("worlds." + name); - this.configWorlds.save(); + public boolean removeWorldFromConfig(String name) { + if(this.configWorlds.getProperty("worlds." + name) != null) { + removeWorldFromList(name); + this.log(Level.INFO, "World " + name + " was removed from config.yml"); + this.configWorlds.removeProperty("worlds." + name); + this.configWorlds.save(); + return true; + } return false; } @@ -416,14 +423,32 @@ public class MultiverseCore extends JavaPlugin { * @return True if success, false if failure. */ public boolean deleteWorld(String name) { - unloadWorld(name); - removeWorld(name); - if (getServer().unloadWorld(name, false)) { - return deleteFolder(new File(name)); + removeWorldFromConfig(name); + if (unloadWorld(name, false)) { + boolean deletedWorld = deleteFolder(new File(name)); + if (deletedWorld) + { + this.log(Level.INFO, "World " + name + " was DELETED."); + } + return deletedWorld; } return false; } + private boolean unloadWorld(String name, boolean safely) { + this.removePlayersFromWorld(name); + return getServer().unloadWorld(name, safely); + } + + private void removePlayersFromWorld(String name) { + World w = this.getServer().getWorld(name); + World safeWorld = this.getServer().getWorlds().get(0); + List ps = w.getPlayers(); + for(Player p : ps) { + p.teleport(safeWorld.getSpawnLocation()); + } + } + /** * Delete a folder Courtesy of: lithium3141 * diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/RemoveCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/RemoveCommand.java index 68dee9b2..6e3a6411 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commands/RemoveCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commands/RemoveCommand.java @@ -21,7 +21,7 @@ public class RemoveCommand extends MultiverseCommand { @Override public void runCommand(CommandSender sender, List args) { - if (this.plugin.removeWorld(args.get(0))) { + if (this.plugin.removeWorldFromConfig(args.get(0))) { sender.sendMessage("World removed from config!"); } else { sender.sendMessage("Error trying to remove world from config!"); diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/UnloadCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/UnloadCommand.java index d8cd9489..737da752 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commands/UnloadCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commands/UnloadCommand.java @@ -22,7 +22,7 @@ public class UnloadCommand extends MultiverseCommand { @Override public void runCommand(CommandSender sender, List args) { - if (this.plugin.unloadWorld(args.get(0))) { + if (this.plugin.removeWorldFromList(args.get(0))) { sender.sendMessage("World Unloaded!"); } else { sender.sendMessage("Error trying to unload world!");