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 f884b61..cd7c954 100644 --- a/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java +++ b/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java @@ -25,6 +25,7 @@ import java.util.Random; import java.util.Set; +import cpw.mods.fml.common.ModContainer; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; @@ -38,10 +39,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.IChunkProvider; import org.apache.logging.log4j.Level; -import org.ultramine.server.chunk.WrappedWorldGenerator; import com.google.common.base.Objects; import com.google.common.base.Strings; @@ -67,6 +68,7 @@ private static Map worldGeneratorIndex = Maps.newHashMap(); private static List fuelHandlers = Lists.newArrayList(); private static List sortedGeneratorList; + private static Map worldGeneratorOwners = Maps.newHashMap(); /** * Register a world generator - something that inserts new block types into the world @@ -77,9 +79,11 @@ */ public static void registerWorldGenerator(IWorldGenerator generator, int modGenerationWeight) { - generator = new WrappedWorldGenerator(generator, Loader.instance().activeModContainer()); worldGenerators.add(generator); worldGeneratorIndex.put(generator, modGenerationWeight); + ModContainer mod = Loader.instance().activeModContainer(); + if(mod != null) + worldGeneratorOwners.put(generator, mod.getModId()); if (sortedGeneratorList != null) { sortedGeneratorList = null; @@ -110,6 +114,10 @@ for (IWorldGenerator generator : sortedGeneratorList) { + String owner = worldGeneratorOwners.get(generator); + List modGenerationBlackList = ((WorldServer)world).getConfig().generation.modGenerationBlackList; + if(owner != null && modGenerationBlackList != null && modGenerationBlackList.contains(owner)) + continue; fmlRandom.setSeed(chunkSeed); generator.generate(fmlRandom, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } diff --git a/src/main/java/org/ultramine/server/chunk/WrappedWorldGenerator.java b/src/main/java/org/ultramine/server/chunk/WrappedWorldGenerator.java deleted file mode 100644 index f42fc23..0000000 --- a/src/main/java/org/ultramine/server/chunk/WrappedWorldGenerator.java +++ /dev/null @@ -1,40 +0,0 @@ -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 WrappedWorldGenerator implements IWorldGenerator -{ - private final IWorldGenerator wrapped; - private final ModContainer owner; - - public WrappedWorldGenerator(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 WrappedWorldGenerator && ((WrappedWorldGenerator)o).wrapped.equals(wrapped) || wrapped.equals(o); - } -}