Hooked up generator stages with the appropriate events

This commit is contained in:
Adubbz 2015-04-06 15:45:11 +10:00
parent 7d5446375c
commit 7ace8f34f7
6 changed files with 93 additions and 32 deletions

View File

@ -14,6 +14,8 @@ import java.util.Map;
import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.BiomeManager.BiomeType; import net.minecraftforge.common.BiomeManager.BiomeType;
import biomesoplenty.api.biome.generation.GenerationManager; import biomesoplenty.api.biome.generation.GenerationManager;
import biomesoplenty.api.biome.generation.GeneratorStage;
import biomesoplenty.api.biome.generation.IGenerator;
public class BOPBiome extends BiomeGenBase implements IExtendedBiome public class BOPBiome extends BiomeGenBase implements IExtendedBiome
{ {
@ -38,6 +40,12 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome
return BiomeOwner.BIOMESOPLENTY; return BiomeOwner.BIOMESOPLENTY;
} }
@Override
public void addGenerator(String name, GeneratorStage stage, IGenerator<?> generator)
{
this.generationManager.addGenerator(name, stage, generator);
}
@Override @Override
public GenerationManager getGenerationManager() public GenerationManager getGenerationManager()
{ {

View File

@ -11,11 +11,14 @@ package biomesoplenty.api.biome;
import java.util.Map; import java.util.Map;
import biomesoplenty.api.biome.generation.GenerationManager; import biomesoplenty.api.biome.generation.GenerationManager;
import biomesoplenty.api.biome.generation.GeneratorStage;
import biomesoplenty.api.biome.generation.IGenerator;
import net.minecraftforge.common.BiomeManager.BiomeType; import net.minecraftforge.common.BiomeManager.BiomeType;
public interface IExtendedBiome public interface IExtendedBiome
{ {
public BiomeOwner getBiomeOwner(); public BiomeOwner getBiomeOwner();
public void addGenerator(String name, GeneratorStage stage, IGenerator<?> generator);
public GenerationManager getGenerationManager(); public GenerationManager getGenerationManager();
public Map<BiomeType, Integer> getWeightMap(); public Map<BiomeType, Integer> getWeightMap();
public void clearWeights(); public void clearWeights();

View File

@ -8,6 +8,7 @@
package biomesoplenty.api.biome.generation; package biomesoplenty.api.biome.generation;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -21,7 +22,7 @@ public class GenerationManager
public void addGenerator(String name, GeneratorStage stage, IGenerator<?> generator) public void addGenerator(String name, GeneratorStage stage, IGenerator<?> generator)
{ {
if (!generatorTable.containsColumn(name)) if (!this.generatorTable.containsColumn(name))
{ {
generator.setName(name); generator.setName(name);
generator.setStage(stage); generator.setStage(stage);
@ -34,6 +35,11 @@ public class GenerationManager
} }
} }
public Collection<IGenerator<?>> getGeneratorsForStage(GeneratorStage stage)
{
return this.generatorTable.rowMap().get(stage).values();
}
public Map<String, IGenerator<?>> createGeneratorMap() public Map<String, IGenerator<?>> createGeneratorMap()
{ {
Map<String, IGenerator<?>> result = new HashMap<String, IGenerator<?>>(); Map<String, IGenerator<?>> result = new HashMap<String, IGenerator<?>>();

View File

@ -8,42 +8,62 @@
package biomesoplenty.api.biome.generation; package biomesoplenty.api.biome.generation;
import net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
public enum GeneratorStage public enum GeneratorStage
{ {
@SerializedName("pre") @SerializedName("pre")
PRE, PRE(null),
@SerializedName("big_shroom") @SerializedName("big_shroom")
BIG_SHROOM, BIG_SHROOM(Decorate.EventType.BIG_SHROOM),
@SerializedName("cactus") @SerializedName("cactus")
CACTUS, CACTUS(Decorate.EventType.CACTUS),
@SerializedName("clay") @SerializedName("clay")
CLAY, CLAY(Decorate.EventType.CLAY),
@SerializedName("dead_bush") @SerializedName("dead_bush")
DEAD_BUSH, DEAD_BUSH(Decorate.EventType.DEAD_BUSH),
@SerializedName("lilypad") @SerializedName("lilypad")
LILYPAD, LILYPAD(Decorate.EventType.LILYPAD),
@SerializedName("flowers") @SerializedName("flowers")
FLOWERS, FLOWERS(Decorate.EventType.FLOWERS),
@SerializedName("grass") @SerializedName("grass")
GRASS, GRASS(Decorate.EventType.GRASS),
@SerializedName("lake_water") @SerializedName("lake_water")
LAKE_WATER, LAKE_WATER(Decorate.EventType.LAKE_WATER),
@SerializedName("lake_lava") @SerializedName("lake_lava")
LAKE_LAVA, LAKE_LAVA(Decorate.EventType.LAKE_LAVA),
@SerializedName("pumpkin") @SerializedName("pumpkin")
PUMPKIN, PUMPKIN(Decorate.EventType.PUMPKIN),
@SerializedName("reed") @SerializedName("reed")
REED, REED(Decorate.EventType.REED),
@SerializedName("sand") @SerializedName("sand")
SAND, SAND(Decorate.EventType.SAND),
@SerializedName("sand_pass_2") @SerializedName("sand_pass_2")
SAND_PASS2, SAND_PASS2(Decorate.EventType.SAND_PASS2),
@SerializedName("shroom") @SerializedName("shroom")
SHROOM, SHROOM(Decorate.EventType.SHROOM),
@SerializedName("tree") @SerializedName("tree")
TREE, TREE(Decorate.EventType.TREE),
@SerializedName("post") @SerializedName("post")
POST; POST(null);
private Decorate.EventType decorateType;
private GeneratorStage(Decorate.EventType decorateType)
{
this.decorateType = decorateType;
}
public Decorate.EventType getDecorateType()
{
return this.decorateType;
}
public static GeneratorStage mapDecorateType(Decorate.EventType decorateType)
{
//Somewhat of a hack, requires the ordering of our enum to be the s
return decorateType != Decorate.EventType.CUSTOM ? GeneratorStage.values()[decorateType.ordinal() + 1] : null;
}
} }

View File

@ -16,6 +16,8 @@ import net.minecraftforge.common.BiomeManager.BiomeType;
import biomesoplenty.api.biome.BiomeOwner; import biomesoplenty.api.biome.BiomeOwner;
import biomesoplenty.api.biome.IExtendedBiome; import biomesoplenty.api.biome.IExtendedBiome;
import biomesoplenty.api.biome.generation.GenerationManager; import biomesoplenty.api.biome.generation.GenerationManager;
import biomesoplenty.api.biome.generation.GeneratorStage;
import biomesoplenty.api.biome.generation.IGenerator;
public class ExtendedBiomeRegistry public class ExtendedBiomeRegistry
{ {
@ -62,6 +64,12 @@ public class ExtendedBiomeRegistry
return BiomeOwner.OTHER; return BiomeOwner.OTHER;
} }
@Override
public void addGenerator(String name, GeneratorStage stage, IGenerator<?> generator)
{
this.generationManager.addGenerator(name, stage, generator);
}
@Override @Override
public GenerationManager getGenerationManager() public GenerationManager getGenerationManager()
{ {

View File

@ -8,41 +8,57 @@
package biomesoplenty.common.handler.decoration; package biomesoplenty.common.handler.decoration;
import java.util.Map.Entry; import java.util.Random;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
import net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import biomesoplenty.api.biome.IExtendedBiome; import biomesoplenty.api.biome.IExtendedBiome;
import biomesoplenty.api.biome.generation.GenerationManager;
import biomesoplenty.api.biome.generation.GeneratorStage;
import biomesoplenty.api.biome.generation.IGenerator; import biomesoplenty.api.biome.generation.IGenerator;
import biomesoplenty.common.biome.ExtendedBiomeRegistry; import biomesoplenty.common.biome.ExtendedBiomeRegistry;
public class DecorateBiomeEventHandler public class DecorateBiomeEventHandler
{ {
/*TODO: @SubscribeEvent @SubscribeEvent
public void onPreBiomeDecorate(DecorateBiomeEvent.Pre event)
{
runGeneratorStage(event.world, event.rand, event.pos, GeneratorStage.PRE);
}
@SubscribeEvent
public void onBiomeDecorate(DecorateBiomeEvent.Decorate event) public void onBiomeDecorate(DecorateBiomeEvent.Decorate event)
{ {
World world = event.world; if (event.type != Decorate.EventType.CUSTOM)
BlockPos pos = event.pos.add(16, 0, 16); {
runGeneratorStage(event.world, event.rand, event.pos, GeneratorStage.mapDecorateType(event.type));
}
}
@SubscribeEvent
public void onPostBiomeDecorate(DecorateBiomeEvent.Pre event)
{
runGeneratorStage(event.world, event.rand, event.pos, GeneratorStage.POST);
}
private static void runGeneratorStage(World world, Random random, BlockPos pos, GeneratorStage stage)
{
pos.add(16, 0, 16);
BiomeGenBase biome = world.getBiomeGenForCoords(pos); BiomeGenBase biome = world.getBiomeGenForCoords(pos);
IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome); IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome);
if (extendedBiome != null) if (extendedBiome != null)
{ {
GenerationManager generationManager = extendedBiome.getGenerationManager(); GenerationManager generationManager = extendedBiome.getGenerationManager();
for (Entry<String, IGenerator<?>> entry : generationManager.getGeneratorMap().entrySet()) for (IGenerator<?> generator : generationManager.getGeneratorsForStage(stage))
{ {
String key = entry.getKey(); generator.generate(world, random, pos);
IGenerator<?> generator = entry.getValue();
if (generationManager.getGeneratorStage(key) == event.type)
{
generator.generate(world, event.rand, event.pos);
}
} }
} }
}*/ }
} }