diff --git a/src/main/java/org/ultramine/server/world/load/AbstractWorldLoader.java b/src/main/java/org/ultramine/server/world/load/AbstractWorldLoader.java index 1c89425..44eaf07 100644 --- a/src/main/java/org/ultramine/server/world/load/AbstractWorldLoader.java +++ b/src/main/java/org/ultramine/server/world/load/AbstractWorldLoader.java @@ -1,5 +1,7 @@ package org.ultramine.server.world.load; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.ultramine.server.WorldsConfig.WorldConfig; import org.ultramine.server.world.WorldDescriptor; @@ -13,6 +15,7 @@ public abstract class AbstractWorldLoader implements IWorldLoader { + private static final Logger log = LogManager.getLogger(); protected final WorldDescriptor desc; protected final MinecraftServer server; @@ -43,20 +46,37 @@ @SideOnly(Side.SERVER) protected WorldSettings makeSettings(WorldInfo wi, WorldConfig conf) { - WorldSettings mainSettings; + WorldSettings settings; if (wi == null) { - mainSettings = new WorldSettings(toSeed(conf.generation.seed), server.getGameType(), conf.generation.generateStructures, - server.isHardcore(), WorldType.parseWorldType(conf.generation.levelType)); - mainSettings.func_82750_a(conf.generation.generatorSettings); + WorldType levelType = WorldType.parseWorldType(conf.generation.levelType); + if(levelType == null) + throw new RuntimeException("Unknown level type \""+conf.generation.levelType+"\""); + settings = new WorldSettings(toSeed(conf.generation.seed), server.getGameType(), conf.generation.generateStructures, + server.isHardcore(), levelType); + settings.func_82750_a(conf.generation.generatorSettings); } else { - mainSettings = new WorldSettings(wi); + settings = new WorldSettings(wi); + + if(wi.getSeed() != toSeed(conf.generation.seed)) + logUnequalOption("Random seed", wi.getSeed()); + if(wi.getGameType() != server.getGameType()) + logUnequalOption("Game type", wi.getGameType()); + if(wi.isMapFeaturesEnabled() != conf.generation.generateStructures) + logUnequalOption("'generateStructures' flag", wi.isMapFeaturesEnabled()); + if(wi.isHardcoreModeEnabled() != server.isHardcore()) + logUnequalOption("'hardcore' flag", wi.isHardcoreModeEnabled()); + if(!wi.getGeneratorOptions().equals(conf.generation.generatorSettings)) + logUnequalOption("Generator settings", wi.getGeneratorOptions()); + WorldType levelType = WorldType.parseWorldType(conf.generation.levelType); + if(levelType == null || !wi.getTerrainType().getWorldTypeName().equals(levelType.getWorldTypeName())) + logUnequalOption("Generator settings", wi.getTerrainType().getWorldTypeName()); } - return mainSettings; + return settings; } protected static long toSeed(String seedstr) @@ -70,4 +90,10 @@ return seedstr.hashCode(); } } + + private void logUnequalOption(String optionName, Object value) + { + log.warn("{} of world [{}]({}) in level.dat and worlds.yml is not equal. Using value from level.dat: {}", + optionName, desc.getDimension(), desc.getName(), value); + } }