So I have been tinkering with my new BiomeDecorator for my custom biome, and I noticed that my custom ore hasn't spawned since I changed the decorator. I have no idea how to generate my custom ore with my BiomeDecorator. Can someone please help me?
MasoniteDecorator
package emerald.emeraldsworld.World.BiomeDecorators;
import java.util.Random;
import emerald.emeraldsworld.Init.ModBlocks;
import emerald.emeraldsworld.World.CustomGrassGenerator;
import net.minecraft.block.BlockStone;
import net.minecraft.block.state.pattern.BlockMatcher;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeDecorator;
import net.minecraft.world.gen.ChunkGeneratorSettings;
import net.minecraft.world.gen.feature.WorldGenAbstractTree;
import net.minecraft.world.gen.feature.WorldGenLiquids;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
import net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType;
import net.minecraftforge.event.terraingen.TerrainGen;
public class MasoniteDecorator extends BiomeDecorator {
public ChunkGeneratorSettings chunkProviderSettings;
protected CustomGrassGenerator grassGen = new CustomGrassGenerator(ModBlocks.MASONITE_TALL_GRASS);
private WorldGenerator masoniteGen;
public int masoniteMinHeight = 0;
public int masoniteMaxHeight = 128;
public MasoniteDecorator() {
super();
}
@Override
public void decorate(World world, Random rand, Biome biome, BlockPos pos) {
if(decorating) {
throw new RuntimeException("Already Decorating");
} else {
this.chunkProviderSettings = ChunkGeneratorSettings.Factory.jsonToFactory(world.getWorldInfo().getGeneratorOptions()).build();
chunkPos = pos;
dirtGen = new WorldGenMinable(Blocks.DIRT.getDefaultState(), chunkProviderSettings.dirtSize);
gravelOreGen = new WorldGenMinable(Blocks.GRAVEL.getDefaultState(), chunkProviderSettings.gravelSize);
graniteGen = new WorldGenMinable(Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.GRANITE), chunkProviderSettings.graniteSize);
dioriteGen = new WorldGenMinable(Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.DIORITE), chunkProviderSettings.dioriteSize);
andesiteGen = new WorldGenMinable(Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.ANDESITE), chunkProviderSettings.andesiteSize);
coalGen = new WorldGenMinable(Blocks.COAL_ORE.getDefaultState(), chunkProviderSettings.coalSize);
ironGen = new WorldGenMinable(Blocks.IRON_ORE.getDefaultState(), chunkProviderSettings.ironSize);
goldGen = new WorldGenMinable(Blocks.GOLD_ORE.getDefaultState(), chunkProviderSettings.goldSize);
redstoneGen = new WorldGenMinable(Blocks.REDSTONE_ORE.getDefaultState(), chunkProviderSettings.redstoneSize);
diamondGen = new WorldGenMinable(Blocks.DIAMOND_ORE.getDefaultState(), chunkProviderSettings.diamondSize);
lapisGen = new WorldGenMinable(Blocks.LAPIS_ORE.getDefaultState(), chunkProviderSettings.lapisSize);
masoniteGen = new WorldGenMinable(ModBlocks.MASONITE_ORE.getDefaultState(), 16, BlockMatcher.forBlock(Blocks.STONE));
genDecorations(biome, world, rand);
decorating = false;
}
}
@Override
protected void genDecorations(Biome biome, World world, Random rand) {
MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(world, rand, chunkPos));
generateOres(world, rand);
generate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.SAND, super.sandGen, super.sandPatchesPerChunk);
generate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.CLAY, super.clayGen, super.clayPerChunk);
generate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.SAND_PASS2, super.gravelGen, super.gravelPatchesPerChunk);
generate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.SAND_PASS2, super.gravelGen, super.gravelPatchesPerChunk);
generateGrass(world, biome, rand, chunkPos);
generateTrees(world, biome, rand, chunkPos);
if (generateFalls) {
generateFalls(world, rand, chunkPos);
}
MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(world, rand, chunkPos));
}
private void generate(World world, Random rand, BlockPos chunkPos, EventType event, WorldGenerator generator, int countPerChunk) {
if(TerrainGen.decorate(world, rand, chunkPos, event)) {
for(int count = 0; count < countPerChunk; count++) {
int x = rand.nextInt(16) + 8;
int z = rand.nextInt(16) + 8;
generator.generate(world, rand, world.getTopSolidOrLiquidBlock(chunkPos.add(x, 0, z)));
}
}
}
private void generateFalls(World world, Random rand, BlockPos chunkPos) {
if(TerrainGen.decorate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.LAKE_WATER)) {
for(int waterCount = 0; waterCount < 50; waterCount++) {
int waterX = rand.nextInt(16) + 8;
int yRange = rand.nextInt(256) + 8;
int waterZ = rand.nextInt(16) + 8;
if(yRange > 0) {
int waterY = rand.nextInt(yRange);
BlockPos waterPos = chunkPos.add(waterX, waterY, waterZ);
(new WorldGenLiquids(Blocks.FLOWING_WATER)).generate(world, rand, waterPos);
}
}
}
if(TerrainGen.decorate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.LAKE_LAVA)) {
for(int lavaCount = 0; lavaCount < 20; lavaCount++) {
int lavaX = rand.nextInt(16) + 8;
int lavaY = rand.nextInt(rand.nextInt(rand.nextInt(240) + 8) + 8);
int lavaZ = rand.nextInt(16) + 8;
BlockPos lavaPos = chunkPos.add(lavaX, lavaY, lavaZ);
(new WorldGenLiquids(Blocks.FLOWING_LAVA)).generate(world, rand, lavaPos);
}
}
}
protected void generateOres(World world, Random rand) {
net.minecraftforge.common.MinecraftForge.ORE_GEN_BUS.post(new net.minecraftforge.event.terraingen.OreGenEvent.Pre(world, rand, chunkPos));
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, dirtGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIRT))
this.genStandardOre1(world, rand, this.chunkProviderSettings.dirtCount, this.dirtGen, this.chunkProviderSettings.dirtMinHeight, this.chunkProviderSettings.dirtMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, gravelOreGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GRAVEL))
this.genStandardOre1(world, rand, this.chunkProviderSettings.gravelCount, this.gravelOreGen, this.chunkProviderSettings.gravelMinHeight, this.chunkProviderSettings.gravelMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, dioriteGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIORITE))
this.genStandardOre1(world, rand, this.chunkProviderSettings.dioriteCount, this.dioriteGen, this.chunkProviderSettings.dioriteMinHeight, this.chunkProviderSettings.dioriteMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, graniteGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GRANITE))
this.genStandardOre1(world, rand, this.chunkProviderSettings.graniteCount, this.graniteGen, this.chunkProviderSettings.graniteMinHeight, this.chunkProviderSettings.graniteMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, andesiteGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.ANDESITE))
this.genStandardOre1(world, rand, this.chunkProviderSettings.andesiteCount, this.andesiteGen, this.chunkProviderSettings.andesiteMinHeight, this.chunkProviderSettings.andesiteMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, coalGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.COAL))
this.genStandardOre1(world, rand, this.chunkProviderSettings.coalCount, this.coalGen, this.chunkProviderSettings.coalMinHeight, this.chunkProviderSettings.coalMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, ironGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.IRON))
this.genStandardOre1(world, rand, this.chunkProviderSettings.ironCount, this.ironGen, this.chunkProviderSettings.ironMinHeight, this.chunkProviderSettings.ironMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, goldGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GOLD))
this.genStandardOre1(world, rand, this.chunkProviderSettings.goldCount, this.goldGen, this.chunkProviderSettings.goldMinHeight, this.chunkProviderSettings.goldMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, redstoneGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.REDSTONE))
this.genStandardOre1(world, rand, this.chunkProviderSettings.redstoneCount, this.redstoneGen, this.chunkProviderSettings.redstoneMinHeight, this.chunkProviderSettings.redstoneMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, diamondGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIAMOND))
this.genStandardOre1(world, rand, this.chunkProviderSettings.diamondCount, this.diamondGen, this.chunkProviderSettings.diamondMinHeight, this.chunkProviderSettings.diamondMaxHeight);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, lapisGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.LAPIS))
this.genStandardOre2(world, rand, this.chunkProviderSettings.lapisCount, this.lapisGen, this.chunkProviderSettings.lapisCenterHeight, this.chunkProviderSettings.lapisSpread);
if (net.minecraftforge.event.terraingen.TerrainGen.generateOre(world, rand, masoniteGen, chunkPos, net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.CUSTOM))
this.genStandardOre1(world, rand, 64, this.masoniteGen, this.masoniteMinHeight, this.masoniteMaxHeight);
net.minecraftforge.common.MinecraftForge.ORE_GEN_BUS.post(new net.minecraftforge.event.terraingen.OreGenEvent.Post(world, rand, chunkPos));
}
private void generateGrass(World world, Biome biome, Random rand, BlockPos chunkPos) {
if(TerrainGen.decorate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.GRASS)) {
for(int numGrassPerChunk = 0; numGrassPerChunk < grassPerChunk; numGrassPerChunk++) {
int grassX = rand.nextInt(16) + 8;
int grassZ = rand.nextInt(16) + 8;
int yRange = world.getHeight(chunkPos.add(grassX, 0, grassZ)).getY() * 2;
if (yRange > 0) {
int grassY = rand.nextInt(yRange);
BlockPos grassPos = chunkPos.add(grassX, grassY, grassZ);
grassGen.generate(world, rand, grassPos);
}
}
}
}
/*private void generateFlowers(World world, Biome biome, Random rand, BlockPos chunkPos) {
if(TerrainGen.decorate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.FLOWERS)) {
for (int numFlowersPerChunk = 0; numFlowersPerChunk < flowersPerChunk; numFlowersPerChunk++) {
int flowerX = rand.nextInt(16) + 8;
int flowerZ = rand.nextInt(16) + 8;
int yRange = world.getHeight(chunkPos.add(flowerX, 0, flowerZ)).getY() + 32;
if (yRange > 0) {
int flowerY = rand.nextInt(yRange);
BlockPos flowerPos = chunkPos.add(flowerX, flowerY, flowerZ);
flowerGen.generate(world, rand, flowerPos);
}
}
}
}*/
private void generateTrees(World world, Biome biome, Random rand, BlockPos chunkPos) {
int treesToGen = treesPerChunk;
if (rand.nextFloat() < extraTreeChance) {
treesToGen++;
}
if(TerrainGen.decorate(world, rand, chunkPos, DecorateBiomeEvent.Decorate.EventType.TREE)) {
for (int numTreesGenerated = 0; numTreesGenerated < treesToGen; ++numTreesGenerated) {
int treeX = rand.nextInt(16) + 8;
int treeZ = rand.nextInt(16) + 8;
WorldGenAbstractTree treeGen = biome.getRandomTreeFeature(rand);
treeGen.setDecorationDefaults();
BlockPos treePos = world.getHeight(chunkPos.add(treeX, 0, treeZ));
if (treeGen.generate(world, rand, treePos)) {
treeGen.generateSaplings(world, rand, treePos);
}
}
}
}
}