diff --git a/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java b/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java index 5209c81..435c14e 100644 --- a/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java +++ b/src/main/java/cpw/mods/fml/common/FMLCommonHandler.java @@ -385,7 +385,7 @@ { return; } - if (handlerSet.contains(handler)) + if (handlerSet.size() > 0)//.contains(handler)) { return; } diff --git a/src/main/java/cpw/mods/fml/common/ZipperUtil.java b/src/main/java/cpw/mods/fml/common/ZipperUtil.java index 98774a5..4878e83 100644 --- a/src/main/java/cpw/mods/fml/common/ZipperUtil.java +++ b/src/main/java/cpw/mods/fml/common/ZipperUtil.java @@ -61,9 +61,8 @@ public static void backupWorld() throws IOException { - String dirName = FMLCommonHandler.instance().getMinecraftServerInstance().getFolderName(); - - backupWorld(dirName); + for(String dirName: FMLCommonHandler.instance().getMinecraftServerInstance().getMultiWorld().getDirsForBackup()) + backupWorld(dirName); } @Deprecated diff --git a/src/main/java/cpw/mods/fml/common/registry/GameData.java b/src/main/java/cpw/mods/fml/common/registry/GameData.java index 6e328a0..5e29e1c 100644 --- a/src/main/java/cpw/mods/fml/common/registry/GameData.java +++ b/src/main/java/cpw/mods/fml/common/registry/GameData.java @@ -388,7 +388,7 @@ try { String skip = System.getProperty("fml.doNotBackup"); - if (skip == null || !"true".equals(skip)) + if (skip != null && "true".equals(skip)) //No backup by default { ZipperUtil.backupWorld(); } diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 36cf57e..1f18929 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -1,6 +1,7 @@ package org.ultramine.server; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -28,7 +29,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.WorldManager; import net.minecraft.world.WorldServer; -import net.minecraft.world.WorldServerMulti; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldType; import net.minecraft.world.chunk.storage.AnvilSaveHandler; @@ -47,6 +47,7 @@ private final TIntObjectMap dimToNameMap = new TIntObjectHashMap(); private final TIntObjectMap dimToWorldMap = new TIntObjectHashMap(); private final Map nameToWorldMap = new HashMap(); + private final Set backupDirs = new HashSet(); private TIntSet isolatedDataDims; public MultiWorld(MinecraftServer server) @@ -129,21 +130,23 @@ if(dim == mainConf.dimension) continue; String name = dimToNameMap.get(dim); - WorldConfig conf = name == null ? null : worlds.get(name); - WorldServer world; + WorldConfig conf; - if(conf == null) + if(name == null) { - log.warn("World with dimension id:%d was loaded bypass worlds configuration. Using global config", dim); - world = new WorldServerMulti(server, mainSaveHandler, mainWorldName, dim, mainSettings, mainWorld, server.theProfiler); + log.warn("World with dimension id:{} was loaded bypass worlds configuration. Using global config", dim); + name = "world_unnamed" + dim; + conf = ConfigurationHandler.getWorldsConfig().global; } else { - ISaveHandler save = format.getSaveLoader(name, usingPlayerDir && conf.settings.useIsolatedPlayerData); - ((AnvilSaveHandler)save).setSingleStorage(); - world = new WorldServer(server, save, name, dim, makeSettings(save, conf), server.theProfiler); + conf = worlds.get(name); } + ISaveHandler save = format.getSaveLoader(name, usingPlayerDir && conf.settings.useIsolatedPlayerData); + ((AnvilSaveHandler)save).setSingleStorage(); + WorldServer world = new WorldServer(server, save, name, dim, makeSettings(save, conf), server.theProfiler); + initWorld(world, conf); } } @@ -174,23 +177,22 @@ String name = dimToNameMap.get(dim); WorldConfig conf = name == null ? null : ConfigurationHandler.getWorldsConfig().worlds.get(name); - WorldServer world; - if(conf == null) + if(name == null) { log.warn("World with dimension id:%d was loaded bypass worlds configuration. Using global config", dim); - WorldServer mainWorld = getWorldByID(0); - ISaveHandler mainSaveHandler = mainWorld.getSaveHandler(); - WorldSettings mainSettings = new WorldSettings(mainWorld.getWorldInfo()); - world = new WorldServerMulti(server, mainSaveHandler, mainWorld.getWorldInfo().getWorldName(), dim, mainSettings, mainWorld, server.theProfiler); + name = "world_dim" + dim; + conf = ConfigurationHandler.getWorldsConfig().global; } else { - ISaveHandler save = format.getSaveLoader(name, false); - ((AnvilSaveHandler)save).setSingleStorage(); - world = new WorldServer(server, save, name, dim, makeSettings(save, conf), server.theProfiler); + conf = ConfigurationHandler.getWorldsConfig().worlds.get(name); } + ISaveHandler save = format.getSaveLoader(name, false); + ((AnvilSaveHandler)save).setSingleStorage(); + WorldServer world = new WorldServer(server, save, name, dim, makeSettings(save, conf), server.theProfiler); + initWorld(world, conf); } @@ -265,6 +267,8 @@ nameToWorldMap.put(name + world.provider.dimensionId, world); else nameToWorldMap.put(name, world); + + backupDirs.add(name); } public WorldServer getWorldByID(int dim) @@ -287,6 +291,11 @@ return nameToWorldMap.keySet(); } + public Set getDirsForBackup() + { + return backupDirs; + } + public TIntSet getIsolatedDataDims() { return isolatedDataDims;