summaryrefslogtreecommitdiffstats
path: root/src/main/java/org
diff options
context:
space:
mode:
authorEvilSeph <evilseph@unaligned.org>2011-06-07 02:54:14 -0400
committerEvilSeph <evilseph@unaligned.org>2011-06-07 03:16:07 -0400
commit68608169cd75cb5df86f087abd2ba1ff32b9c3ae (patch)
treea4bae1e4c07174012c742f5c71ffd5ede9bf54d6 /src/main/java/org
parent57a1a7422cc8a0018310cfcd4ac42c920d465a9b (diff)
downloadcraftbukkit-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/java/org')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java45
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;
}