diff --git a/src/main/java/biomesoplenty/api/biome/BOPBiomes.java b/src/main/java/biomesoplenty/api/biome/BOPBiomes.java index ba057b4d4..9a24659e4 100644 --- a/src/main/java/biomesoplenty/api/biome/BOPBiomes.java +++ b/src/main/java/biomesoplenty/api/biome/BOPBiomes.java @@ -55,6 +55,7 @@ public class BOPBiomes public static Optional prairie = Optional.absent(); public static Optional quagmire = Optional.absent(); public static Optional sacred_springs = Optional.absent(); + public static Optional seasonal_forest = Optional.absent(); public static Optional shrubland = Optional.absent(); public static Optional steppe = Optional.absent(); public static Optional thicket = Optional.absent(); diff --git a/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenGarden.java b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenGarden.java index 185894916..c02e10c76 100644 --- a/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenGarden.java +++ b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenGarden.java @@ -43,7 +43,7 @@ public class BiomeGenGarden extends BOPBiome this.setTemperatureRainfall(0.7F, 0.8F); this.topBlock = BOPBlocks.grass.getDefaultState().withProperty(BlockBOPGrass.VARIANT, BlockBOPGrass.BOPGrassType.DAISY); - this.addWeight(BOPClimates.COOL_TEMPERATE, 3); + this.addWeight(BOPClimates.COOL_TEMPERATE, 1); this.spawnableCreatureList.clear(); // TODO: implement rosester? this.spawnableCreatureList.add(new SpawnListEntry(EntityRosester.class, 10, 4, 4)); diff --git a/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenSeasonalForest.java b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenSeasonalForest.java new file mode 100644 index 000000000..d6fe60cd0 --- /dev/null +++ b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenSeasonalForest.java @@ -0,0 +1,96 @@ +package biomesoplenty.common.biome.overworld; + +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; +import biomesoplenty.api.biome.BOPBiome; +import biomesoplenty.api.biome.generation.GeneratorStage; +import biomesoplenty.api.biome.generation.GeneratorWeighted; +import biomesoplenty.common.block.BlockBOPDoublePlant; +import biomesoplenty.common.block.BlockBOPLilypad; +import biomesoplenty.common.block.BlockBOPMushroom; +import biomesoplenty.common.enums.BOPClimates; +import biomesoplenty.common.enums.BOPGems; +import biomesoplenty.common.enums.BOPPlants; +import biomesoplenty.common.enums.BOPTrees; +import biomesoplenty.common.world.BOPWorldSettings; +import biomesoplenty.common.world.feature.GeneratorDoubleFlora; +import biomesoplenty.common.world.feature.GeneratorFlora; +import biomesoplenty.common.world.feature.GeneratorGrass; +import biomesoplenty.common.world.feature.GeneratorOreSingle; +import biomesoplenty.common.world.feature.tree.GeneratorBasicTree; +import biomesoplenty.common.world.feature.tree.GeneratorBigTree; + +public class BiomeGenSeasonalForest extends BOPBiome +{ + public BiomeGenSeasonalForest() + { + // terrain + this.terrainSettings.avgHeight(70).heightVariation(10, 30); + + this.setColor(0xBEC44C); + this.setTemperatureRainfall(0.5F, 0.8F); + this.addWeight(BOPClimates.COOL_TEMPERATE, 7); + + + this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 5, 4, 4)); + + + // trees & logs + GeneratorWeighted treeGenerator = new GeneratorWeighted(20); + this.addGenerator("trees", GeneratorStage.TREE, treeGenerator); + treeGenerator.add("large_oak", 1, (new GeneratorBigTree.Builder()).log(BlockPlanks.EnumType.OAK).leaves(BlockPlanks.EnumType.OAK).create()); + treeGenerator.add("oak", 1, (new GeneratorBasicTree.Builder()).minHeight(8).maxHeight(12).create()); + treeGenerator.add("yellow_autumn", 4, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.BIRCH).leaves(BOPTrees.YELLOW_AUTUMN).minHeight(5).maxHeight(8).create()); + treeGenerator.add("red_autumn", 4, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.OAK).leaves(BOPTrees.MAPLE).minHeight(5).maxHeight(8).create()); + treeGenerator.add("orange_autumn", 5, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.DARK_OAK).leaves(BOPTrees.ORANGE_AUTUMN).minHeight(5).maxHeight(8).create()); + treeGenerator.add("dying_tree", 2, (new GeneratorBigTree.Builder()).minHeight(5).maxHeight(12).foliageHeight(2).leaves(BOPTrees.DEAD).create()); + + // grasses + GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F); + this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator); + grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create()); + grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create()); + grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create()); + + // other plants + this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.SHRUB).create()); + this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BOPPlants.LEAFPILE).generationAttempts(64).create()); + this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(5.0F).with(BOPPlants.DEADLEAFPILE).create()); + this.addGenerator("flax", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).create()); + + // shrooms + this.addGenerator("toadstools", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create()); + this.addGenerator("blue_milk_caps", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create()); + this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(Blocks.brown_mushroom.getDefaultState()).create()); + this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(Blocks.red_mushroom.getDefaultState()).create()); + + // water plants + this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create()); + this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BOPPlants.REED).generationAttempts(32).create()); + + // gem + this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create()); + + } + + @Override + public void applySettings(BOPWorldSettings settings) + { + if (!settings.generateBopGems) {this.removeGenerator("amber");} + } + + @Override + public int getGrassColorAtPos(BlockPos pos) + { + return 0xBEC44C; + } + + @Override + public int getFoliageColorAtPos(BlockPos pos) + { + return 0xB3C442; + } +} diff --git a/src/main/java/biomesoplenty/common/init/ModBiomes.java b/src/main/java/biomesoplenty/common/init/ModBiomes.java index 8e45768f0..27c9a4afa 100644 --- a/src/main/java/biomesoplenty/common/init/ModBiomes.java +++ b/src/main/java/biomesoplenty/common/init/ModBiomes.java @@ -60,6 +60,7 @@ import static biomesoplenty.api.biome.BOPBiomes.quagmire; import static biomesoplenty.api.biome.BOPBiomes.roofed_forest_extension; import static biomesoplenty.api.biome.BOPBiomes.sacred_springs; import static biomesoplenty.api.biome.BOPBiomes.savanna_extension; +import static biomesoplenty.api.biome.BOPBiomes.seasonal_forest; import static biomesoplenty.api.biome.BOPBiomes.shrubland; import static biomesoplenty.api.biome.BOPBiomes.steppe; import static biomesoplenty.api.biome.BOPBiomes.swampland_extension; @@ -124,6 +125,7 @@ import biomesoplenty.common.biome.overworld.BiomeGenOutback; import biomesoplenty.common.biome.overworld.BiomeGenPrairie; import biomesoplenty.common.biome.overworld.BiomeGenQuagmire; import biomesoplenty.common.biome.overworld.BiomeGenSacredSprings; +import biomesoplenty.common.biome.overworld.BiomeGenSeasonalForest; import biomesoplenty.common.biome.overworld.BiomeGenShrubland; import biomesoplenty.common.biome.overworld.BiomeGenSteppe; import biomesoplenty.common.biome.overworld.BiomeGenThicket; @@ -335,6 +337,7 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry prairie = registerBOPBiome(new BiomeGenPrairie(), "Prairie"); quagmire = registerBOPBiome(new BiomeGenQuagmire(), "Quagmire"); sacred_springs = registerBOPBiome(new BiomeGenSacredSprings(), "Sacred Springs"); + seasonal_forest = registerBOPBiome(new BiomeGenSeasonalForest(), "Seasonal Forest"); shrubland = registerBOPBiome(new BiomeGenShrubland(), "Shrubland"); steppe = registerBOPBiome(new BiomeGenSteppe(), "Steppe"); thicket = registerBOPBiome(new BiomeGenThicket(), "Thicket"); @@ -395,6 +398,7 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry registerBiomeToDictionary(BOPBiomes.outback, Type.SANDY, Type.PLAINS, Type.SAVANNA, Type.DRY, Type.HOT); registerBiomeToDictionary(BOPBiomes.prairie, Type.PLAINS, Type.DRY, Type.SPARSE); registerBiomeToDictionary(BOPBiomes.quagmire, Type.SWAMP, Type.WATER, Type.DEAD, Type.WET, Type.WASTELAND); + registerBiomeToDictionary(BOPBiomes.seasonal_forest, Type.FOREST, Type.DENSE, Type.LUSH); registerBiomeToDictionary(BOPBiomes.shrubland, Type.PLAINS, Type.SPARSE, Type.DRY); registerBiomeToDictionary(BOPBiomes.steppe, Type.PLAINS, Type.SANDY, Type.DRY, Type.HOT, Type.SAVANNA, Type.SPARSE, Type.DEAD); registerBiomeToDictionary(BOPBiomes.thicket, Type.PLAINS, Type.FOREST, Type.DRY, Type.DEAD, Type.DENSE);