diff --git a/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java b/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java index b7db04d..824dfc9 100644 --- a/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java @@ -627,18 +627,22 @@ return isWorldUnloaded; } - public void unloadAllWithoutSave() + public void unloadAll(boolean save) { for(Chunk chunk : loadedChunkHashMap.valueCollection()) { chunk.onChunkUnload(); - MinecraftForge.EVENT_BUS.post(new ChunkDataEvent.Save(chunk, new NBTTagCompound())); + if(save && chunk.shouldSaveOnUnload()) + safeSaveChunk(chunk); + else + MinecraftForge.EVENT_BUS.post(new ChunkDataEvent.Save(chunk, new NBTTagCompound())); //CodeChickenLib memory leak fix } loadedChunkHashMap.clear(); chunksToUnload.clear(); possibleSaves.clear(); - ((AnvilChunkLoader)currentChunkLoader).unsafeRemoveAll(); + if(!save) + ((AnvilChunkLoader)currentChunkLoader).unsafeRemoveAll(); } public boolean isGenerating() diff --git a/src/main/java/net/minecraftforge/common/DimensionManager.java b/src/main/java/net/minecraftforge/common/DimensionManager.java index 2dea0b9..c40978e 100644 --- a/src/main/java/net/minecraftforge/common/DimensionManager.java +++ b/src/main/java/net/minecraftforge/common/DimensionManager.java @@ -325,21 +325,23 @@ try { if (w != null) { - w.saveAllChunks(true, null); + w.theChunkProviderServer.unloadAll(true); + w.theChunkProviderServer.setWorldUnloaded(); + w.forceUnloadTileEntities(); + w.saveOtherData(); } else { FMLLog.warning("Unexpected world unload - world %d is already unloaded", id); } - } catch (MinecraftException e) { - e.printStackTrace(); - } + } //catch (MinecraftException e) { + //e.printStackTrace(); + //} finally { if (w != null) { MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(w)); - w.flush(); setWorld(id, null); } } diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 26cf2db..25c2a71 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -382,10 +382,10 @@ } world.playerEntities.clear(); - world.theChunkProviderServer.unloadAllWithoutSave(); + world.theChunkProviderServer.unloadAll(false); world.forceUnloadTileEntities(); world.theChunkProviderServer.setWorldUnloaded(); - world.theChunkProviderServer.unloadAllWithoutSave(); + world.theChunkProviderServer.unloadAll(false); world.forceUnloadTileEntities(); MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(world));