diff options
author | EvilSeph <evilseph@unaligned.org> | 2011-06-07 02:54:14 -0400 |
---|---|---|
committer | EvilSeph <evilseph@unaligned.org> | 2011-06-07 03:16:07 -0400 |
commit | 68608169cd75cb5df86f087abd2ba1ff32b9c3ae (patch) | |
tree | a4bae1e4c07174012c742f5c71ffd5ede9bf54d6 /src/main | |
parent | 57a1a7422cc8a0018310cfcd4ac42c920d465a9b (diff) | |
download | craftbukkit-68608169cd75cb5df86f087abd2ba1ff32b9c3ae.tar craftbukkit-68608169cd75cb5df86f087abd2ba1ff32b9c3ae.tar.gz craftbukkit-68608169cd75cb5df86f087abd2ba1ff32b9c3ae.tar.lz craftbukkit-68608169cd75cb5df86f087abd2ba1ff32b9c3ae.tar.xz craftbukkit-68608169cd75cb5df86f087abd2ba1ff32b9c3ae.zip |
Implemented unloadWorld(). Thanks Rigby!
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/CraftServer.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 76964621..77e2d836 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -10,6 +10,8 @@ import org.bukkit.World.Environment; import org.bukkit.command.*; import org.bukkit.entity.Player; import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.event.world.WorldSaveEvent; +import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; @@ -30,6 +32,7 @@ import net.minecraft.server.ConvertProgressUpdater; import net.minecraft.server.Convertable; import net.minecraft.server.EntityPlayer; import net.minecraft.server.EntityTracker; +import net.minecraft.server.IProgressUpdate; import net.minecraft.server.MinecraftServer; import net.minecraft.server.PropertyManager; import net.minecraft.server.ServerConfigurationManager; @@ -423,6 +426,48 @@ public final class CraftServer implements Server { return internal.getWorld(); } + public boolean unloadWorld(String name, boolean save) { + return unloadWorld(getWorld(name), save); + } + + public boolean unloadWorld(World world, boolean save) { + if (world == null) { + return false; + } + + WorldServer handle = ((CraftWorld) world).getHandle(); + + if (!(console.worlds.contains(handle))) { + return false; + } + + if (!(handle.dimension > 1)) { + return false; + } + + if (handle.players.size() > 0) { + return false; + } + + WorldUnloadEvent e = new WorldUnloadEvent(handle.getWorld()); + + if (e.isCancelled()) { + return false; + } + + if (save) { + handle.save(true, (IProgressUpdate) null); + handle.saveLevel(); + WorldSaveEvent event = new WorldSaveEvent(handle.getWorld()); + getPluginManager().callEvent(event); + } + + worlds.remove(world.getName().toLowerCase()); + console.worlds.remove(console.worlds.indexOf(handle)); + + return true; + } + public MinecraftServer getServer() { return console; } |