diff --git a/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java b/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java index 8bb914d..40acdcd 100644 --- a/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java +++ b/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java @@ -37,6 +37,7 @@ import net.minecraft.world.chunk.IChunkProvider; import org.apache.logging.log4j.Level; +import org.ultramine.server.chunk.WrappedModGenerator; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; @@ -70,6 +71,7 @@ */ public static void registerWorldGenerator(IWorldGenerator generator, int modGenerationWeight) { + generator = new WrappedModGenerator(generator, Loader.instance().activeModContainer()); worldGenerators.add(generator); worldGeneratorIndex.put(generator, modGenerationWeight); if (sortedGeneratorList != null) diff --git a/src/main/java/org/ultramine/server/WorldsConfig.java b/src/main/java/org/ultramine/server/WorldsConfig.java index 3e7d979..ca168cd 100644 --- a/src/main/java/org/ultramine/server/WorldsConfig.java +++ b/src/main/java/org/ultramine/server/WorldsConfig.java @@ -1,6 +1,7 @@ package org.ultramine.server; import java.util.HashMap; +import java.util.List; import java.util.Map; public class WorldsConfig @@ -27,6 +28,7 @@ public String generatorSettings = ""; public boolean generateStructures = true; public boolean disableModGeneration = false; + public List modGenerationBlackList; } public static class MobSpawn diff --git a/src/main/java/org/ultramine/server/chunk/WrappedModGenerator.java b/src/main/java/org/ultramine/server/chunk/WrappedModGenerator.java new file mode 100644 index 0000000..a53f45d --- /dev/null +++ b/src/main/java/org/ultramine/server/chunk/WrappedModGenerator.java @@ -0,0 +1,40 @@ +package org.ultramine.server.chunk; + +import java.util.List; +import java.util.Random; + +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.IChunkProvider; +import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.ModContainer; + +public class WrappedModGenerator implements IWorldGenerator +{ + private final IWorldGenerator wrapped; + private final ModContainer owner; + + public WrappedModGenerator(IWorldGenerator wrapped, ModContainer owner) + { + this.wrapped = wrapped; + this.owner = owner; + } + + @Override + public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) + { + List modGenerationBlackList = ((WorldServer)world).getConfig().generation.modGenerationBlackList; + if(modGenerationBlackList == null || owner == null || !modGenerationBlackList.contains(owner.getModId())) + wrapped.generate(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); + } + + public int hashCode() + { + return wrapped.hashCode(); + } + + public boolean equals(Object o) + { + return o instanceof WrappedModGenerator && ((WrappedModGenerator)o).wrapped.equals(wrapped) || wrapped.equals(o); + } +} diff --git a/src/main/resources/org/ultramine/defaults/defaultworlds.yml b/src/main/resources/org/ultramine/defaults/defaultworlds.yml index 77d8640..2b63e24 100644 --- a/src/main/resources/org/ultramine/defaults/defaultworlds.yml +++ b/src/main/resources/org/ultramine/defaults/defaultworlds.yml @@ -7,6 +7,7 @@ generateStructures: true generatorSettings: '' disableModGeneration: false + modGenerationBlackList: [] mobSpawn: allowAnimals: true spawnAnimals: true