diff --git a/README.md b/README.md index 37a3b383e..dbbd3ddff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ----------------- -**Note:** To use the mod on a **server**, you must set the **level-type** setting in your server's config file to **BIOMESOP** +**Note:** To use the mod on a **server**, you must set the **level-type** setting in your server's config file to **biomesoplenty** If you want to **disable or add certain world generation features** in certain biomes, check out our guide for creating **biome configuration files**: https://github.com/Glitchfiend/BiomesOPlenty/wiki/Configuring-Biomes diff --git a/src/main/java/biomesoplenty/client/util/BiomeMapColours.java b/src/main/java/biomesoplenty/client/util/BiomeMapColours.java index d916633f3..67c35c376 100644 --- a/src/main/java/biomesoplenty/client/util/BiomeMapColours.java +++ b/src/main/java/biomesoplenty/client/util/BiomeMapColours.java @@ -7,7 +7,6 @@ ******************************************************************************/ package biomesoplenty.client.util; -import javafx.scene.paint.Color; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockModelShapes; diff --git a/src/main/java/biomesoplenty/common/biome/BOPBiome.java b/src/main/java/biomesoplenty/common/biome/BiomeBOP.java similarity index 92% rename from src/main/java/biomesoplenty/common/biome/BOPBiome.java rename to src/main/java/biomesoplenty/common/biome/BiomeBOP.java index eacceab64..021c5bdf7 100644 --- a/src/main/java/biomesoplenty/common/biome/BOPBiome.java +++ b/src/main/java/biomesoplenty/common/biome/BiomeBOP.java @@ -13,11 +13,11 @@ import net.minecraft.world.biome.Biome; import java.util.HashMap; import java.util.Map; -public class BOPBiome extends Biome +public class BiomeBOP extends Biome { protected Map weightMap = new HashMap(); - public BOPBiome(BiomeBuilder builder) + public BiomeBOP(BiomeBuilder builder) { super(builder); } diff --git a/src/main/java/biomesoplenty/common/biome/overworld/BiomeConiferousForest.java b/src/main/java/biomesoplenty/common/biome/overworld/BiomeConiferousForest.java deleted file mode 100644 index 186d30fe7..000000000 --- a/src/main/java/biomesoplenty/common/biome/overworld/BiomeConiferousForest.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright 2014-2019, the Biomes O' Plenty Team - * - * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. - * - * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. - ******************************************************************************/ -package biomesoplenty.common.biome.overworld; - -import biomesoplenty.api.enums.BOPClimates; -import biomesoplenty.common.biome.BOPBiome; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.surfacebuilders.CompositeSurfaceBuilder; - -public class BiomeConiferousForest extends BOPBiome -{ - public BiomeConiferousForest() - { - super((new Biome.BiomeBuilder()).surfaceBuilder(new CompositeSurfaceBuilder(SWAMP_SURFACE_BUILDER, GRASS_DIRT_GRAVEL_SURFACE)).precipitation(Biome.RainType.RAIN).category(Biome.Category.SWAMP).depth(-0.2F).scale(0.1F).temperature(0.8F).downfall(0.9F).waterColor(6388580).waterFogColor(2302743).parent((String)null)); - - for (BOPClimates climate : BOPClimates.values()) - { - this.addWeight(climate, 100); - } - } -} diff --git a/src/main/java/biomesoplenty/common/biome/overworld/ConiferousForestBiome.java b/src/main/java/biomesoplenty/common/biome/overworld/ConiferousForestBiome.java new file mode 100644 index 000000000..20746f264 --- /dev/null +++ b/src/main/java/biomesoplenty/common/biome/overworld/ConiferousForestBiome.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright 2014-2019, the Biomes O' Plenty Team + * + * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. + * + * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. + ******************************************************************************/ +package biomesoplenty.common.biome.overworld; + +import com.google.common.collect.Lists; + +import biomesoplenty.api.block.BOPBlocks; +import biomesoplenty.api.enums.BOPClimates; +import biomesoplenty.common.biome.BiomeBOP; +import biomesoplenty.common.world.gen.feature.BOPBiomeFeatures; +import biomesoplenty.common.world.gen.feature.ConiferousForestGrassFeature; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.init.Fluids; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.GenerationStage; +import net.minecraft.world.gen.feature.BushConfig; +import net.minecraft.world.gen.feature.DoublePlantConfig; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.IFeatureConfig; +import net.minecraft.world.gen.feature.LakesConfig; +import net.minecraft.world.gen.feature.LiquidsConfig; +import net.minecraft.world.gen.feature.MinableConfig; +import net.minecraft.world.gen.feature.ProbabilityConfig; +import net.minecraft.world.gen.feature.RandomDefaultFeatureListConfig; +import net.minecraft.world.gen.feature.RandomFeatureListConfig; +import net.minecraft.world.gen.feature.SphereReplaceConfig; +import net.minecraft.world.gen.feature.TallGrassConfig; +import net.minecraft.world.gen.feature.structure.MineshaftConfig; +import net.minecraft.world.gen.feature.structure.MineshaftStructure; +import net.minecraft.world.gen.feature.structure.StrongholdConfig; +import net.minecraft.world.gen.placement.AtSurfaceWithExtraConfig; +import net.minecraft.world.gen.placement.ChanceConfig; +import net.minecraft.world.gen.placement.CountRangeConfig; +import net.minecraft.world.gen.placement.DepthAverageConfig; +import net.minecraft.world.gen.placement.DungeonRoomConfig; +import net.minecraft.world.gen.placement.FrequencyConfig; +import net.minecraft.world.gen.placement.IPlacementConfig; +import net.minecraft.world.gen.placement.LakeChanceConfig; +import net.minecraft.world.gen.surfacebuilders.CompositeSurfaceBuilder; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; + +public class ConiferousForestBiome extends BiomeBOP +{ + public ConiferousForestBiome() + { + super((new Biome.BiomeBuilder()).surfaceBuilder(new CompositeSurfaceBuilder(DEFAULT_SURFACE_BUILDER, BOPBiomeFeatures.LOAMY_GRASS_DIRT_GRAVEL_SURFACE)).precipitation(Biome.RainType.RAIN).category(Biome.Category.TAIGA).depth(0.2F).scale(0.1F).temperature(0.45F).downfall(0.5F).waterColor(4159204).waterFogColor(329011).parent((String)null)); + this.addStructure(Feature.MINESHAFT, new MineshaftConfig(0.004D, MineshaftStructure.Type.NORMAL)); + this.addStructure(Feature.STRONGHOLD, new StrongholdConfig()); + this.addStructure(Feature.STRONGHOLD, new StrongholdConfig()); + this.addCarver(GenerationStage.Carving.AIR, createWorldCarverWrapper(CAVE_WORLD_CARVER, new ProbabilityConfig(0.14285715F))); + this.addCarver(GenerationStage.Carving.AIR, createWorldCarverWrapper(CANYON_WORLD_CARVER, new ProbabilityConfig(0.02F))); + this.addStructureFeatures(); + this.addFeature(GenerationStage.Decoration.LOCAL_MODIFICATIONS, createCompositeFeature(Feature.LAKES, new LakesConfig(Blocks.WATER), LAKE_WATER, new LakeChanceConfig(4))); + this.addFeature(GenerationStage.Decoration.LOCAL_MODIFICATIONS, createCompositeFeature(Feature.LAKES, new LakesConfig(Blocks.LAVA), LAVA_LAKE, new LakeChanceConfig(80))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_STRUCTURES, createCompositeFeature(Feature.DUNGEONS, IFeatureConfig.NO_FEATURE_CONFIG, DUNGEON_ROOM, new DungeonRoomConfig(8))); + //this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.DEFAULT_RANDOM_FEATURE_LIST, new RandomFeatureListConfig(new Feature[]{Feature.DOUBLE_PLANT, Feature.DOUBLE_PLANT, Feature.DOUBLE_PLANT}, new IFeatureConfig[]{new DoublePlantConfig(Blocks.LILAC.getDefaultState()), new DoublePlantConfig(Blocks.ROSE_BUSH.getDefaultState()), new DoublePlantConfig(Blocks.PEONY.getDefaultState())}, 0), SURFACE_PLUS_32, new FrequencyConfig(5))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.DIRT.getDefaultState(), 33), COUNT_RANGE, new CountRangeConfig(10, 0, 0, 256))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.GRAVEL.getDefaultState(), 33), COUNT_RANGE, new CountRangeConfig(8, 0, 0, 256))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.GRANITE.getDefaultState(), 33), COUNT_RANGE, new CountRangeConfig(10, 0, 0, 80))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.DIORITE.getDefaultState(), 33), COUNT_RANGE, new CountRangeConfig(10, 0, 0, 80))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.ANDESITE.getDefaultState(), 33), COUNT_RANGE, new CountRangeConfig(10, 0, 0, 80))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.COAL_ORE.getDefaultState(), 17), COUNT_RANGE, new CountRangeConfig(20, 0, 0, 128))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.IRON_ORE.getDefaultState(), 9), COUNT_RANGE, new CountRangeConfig(20, 0, 0, 64))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.GOLD_ORE.getDefaultState(), 9), COUNT_RANGE, new CountRangeConfig(2, 0, 0, 32))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.REDSTONE_ORE.getDefaultState(), 8), COUNT_RANGE, new CountRangeConfig(8, 0, 0, 16))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.DIAMOND_ORE.getDefaultState(), 8), COUNT_RANGE, new CountRangeConfig(1, 0, 0, 16))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.MINABLE, new MinableConfig(MinableConfig.IS_ROCK, Blocks.LAPIS_ORE.getDefaultState(), 7), DEPTH_AVERAGE, new DepthAverageConfig(1, 16, 16))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.SPHERE_REPLACE, new SphereReplaceConfig(Blocks.SAND, 7, 2, Lists.newArrayList(BOPBlocks.loamy_dirt, BOPBlocks.loamy_grass_block)), TOP_SOLID, new FrequencyConfig(3))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.SPHERE_REPLACE, new SphereReplaceConfig(Blocks.CLAY, 4, 1, Lists.newArrayList(BOPBlocks.loamy_dirt, Blocks.CLAY)), TOP_SOLID, new FrequencyConfig(1))); + this.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, createCompositeFeature(Feature.SPHERE_REPLACE, new SphereReplaceConfig(Blocks.GRAVEL, 6, 2, Lists.newArrayList(BOPBlocks.loamy_dirt, BOPBlocks.loamy_grass_block)), TOP_SOLID, new FrequencyConfig(1))); + //this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.RANDOM_FEATURE_LIST, new RandomDefaultFeatureListConfig(new Feature[]{Feature.BIRCH_TREE, Feature.BIG_TREE}, new IFeatureConfig[]{IFeatureConfig.NO_FEATURE_CONFIG, IFeatureConfig.NO_FEATURE_CONFIG}, new float[]{0.2F, 0.1F}, Feature.TREE, IFeatureConfig.NO_FEATURE_CONFIG), AT_SURFACE_WITH_EXTRA, new AtSurfaceWithExtraConfig(10, 0.1F, 1))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFlowerFeature(Feature.DEFAULT_FLOWERS, SURFACE_PLUS_32, new FrequencyConfig(2))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(new ConiferousForestGrassFeature(), IFeatureConfig.NO_FEATURE_CONFIG, TWICE_SURFACE, new FrequencyConfig(2))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.BUSH, new BushConfig(Blocks.BROWN_MUSHROOM), TWICE_SURFACE_WITH_CHANCE, new ChanceConfig(4))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.BUSH, new BushConfig(Blocks.RED_MUSHROOM), TWICE_SURFACE_WITH_CHANCE, new ChanceConfig(8))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.BUSH, new BushConfig(BOPBlocks.toadstool), TWICE_SURFACE_WITH_CHANCE, new ChanceConfig(6))); + //this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.REED, IFeatureConfig.NO_FEATURE_CONFIG, TWICE_SURFACE, new FrequencyConfig(10))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.PUMPKIN, IFeatureConfig.NO_FEATURE_CONFIG, TWICE_SURFACE_WITH_CHANCE, new ChanceConfig(32))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.LIQUIDS, new LiquidsConfig(Fluids.WATER), HEIGHT_BIASED_RANGE, new CountRangeConfig(50, 8, 8, 256))); + this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, createCompositeFeature(Feature.LIQUIDS, new LiquidsConfig(Fluids.LAVA), HEIGHT_VERY_BIASED_RANGE, new CountRangeConfig(20, 8, 16, 256))); + this.addFeature(GenerationStage.Decoration.TOP_LAYER_MODIFICATION, createCompositeFeature(Feature.ICE_AND_SNOW, IFeatureConfig.NO_FEATURE_CONFIG, PASSTHROUGH, IPlacementConfig.NO_PLACEMENT_CONFIG)); + this.addSpawn(EnumCreatureType.CREATURE, new Biome.SpawnListEntry(EntityType.SHEEP, 12, 4, 4)); + this.addSpawn(EnumCreatureType.CREATURE, new Biome.SpawnListEntry(EntityType.PIG, 10, 4, 4)); + this.addSpawn(EnumCreatureType.CREATURE, new Biome.SpawnListEntry(EntityType.CHICKEN, 10, 4, 4)); + this.addSpawn(EnumCreatureType.CREATURE, new Biome.SpawnListEntry(EntityType.COW, 8, 4, 4)); + this.addSpawn(EnumCreatureType.CREATURE, new Biome.SpawnListEntry(EntityType.WOLF, 5, 4, 4)); + this.addSpawn(EnumCreatureType.WATER_CREATURE, new Biome.SpawnListEntry(EntityType.SQUID, 10, 1, 2)); + this.addSpawn(EnumCreatureType.AMBIENT, new Biome.SpawnListEntry(EntityType.BAT, 10, 8, 8)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.SPIDER, 100, 4, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.ZOMBIE, 95, 4, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.ZOMBIE_VILLAGER, 5, 1, 1)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.SKELETON, 100, 4, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.CREEPER, 100, 4, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.SLIME, 100, 4, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.ENDERMAN, 10, 1, 4)); + this.addSpawn(EnumCreatureType.MONSTER, new Biome.SpawnListEntry(EntityType.WITCH, 5, 1, 1)); + + for (BOPClimates climate : BOPClimates.values()) + { + this.addWeight(climate, 100); + } + } +} diff --git a/src/main/java/biomesoplenty/common/block/BlockGrassBOP.java b/src/main/java/biomesoplenty/common/block/BlockGrassBOP.java index 0a5f713c0..402ec3f6c 100644 --- a/src/main/java/biomesoplenty/common/block/BlockGrassBOP.java +++ b/src/main/java/biomesoplenty/common/block/BlockGrassBOP.java @@ -8,7 +8,15 @@ package biomesoplenty.common.block; import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.block.BlockGlazedTerracotta; import net.minecraft.block.BlockGrass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; public class BlockGrassBOP extends BlockGrass { @@ -16,4 +24,26 @@ public class BlockGrassBOP extends BlockGrass { super(properties); } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockReader world, BlockPos pos, EnumFacing facing, net.minecraftforge.common.IPlantable plantable) { + net.minecraftforge.common.EnumPlantType type = plantable.getPlantType(world, pos.offset(facing)); + + switch (type) { + case Desert: return false; + case Nether: return false; + case Crop: return false; + case Cave: return true; + case Plains: return true; + case Water: return false; + case Beach: + boolean isBeach = true; + boolean hasWater = (world.getBlockState(pos.east()).getMaterial() == Material.WATER || + world.getBlockState(pos.west()).getMaterial() == Material.WATER || + world.getBlockState(pos.north()).getMaterial() == Material.WATER || + world.getBlockState(pos.south()).getMaterial() == Material.WATER); + return isBeach && hasWater; + } + return false; + } } diff --git a/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java b/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java index 1fa6c9b82..b7376baaa 100644 --- a/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java +++ b/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java @@ -17,7 +17,7 @@ public class WorldTypeBOP extends WorldType { public WorldTypeBOP() { - super("BIOMESOP"); + super("biomesoplenty"); } @Override diff --git a/src/main/java/biomesoplenty/common/world/gen/feature/BOPBiomeFeatures.java b/src/main/java/biomesoplenty/common/world/gen/feature/BOPBiomeFeatures.java new file mode 100644 index 000000000..e29bce17b --- /dev/null +++ b/src/main/java/biomesoplenty/common/world/gen/feature/BOPBiomeFeatures.java @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright 2014-2019, the Biomes O' Plenty Team + * + * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. + * + * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. + ******************************************************************************/ +package biomesoplenty.common.world.gen.feature; + +import biomesoplenty.api.block.BOPBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; + +public class BOPBiomeFeatures +{ + public static final SurfaceBuilderConfig LOAMY_GRASS_DIRT_GRAVEL_SURFACE = new SurfaceBuilderConfig(BOPBlocks.loamy_grass_block.getDefaultState(), BOPBlocks.loamy_dirt.getDefaultState(), Blocks.GRAVEL.getDefaultState()); +} diff --git a/src/main/java/biomesoplenty/common/world/gen/feature/ConiferousForestGrassFeature.java b/src/main/java/biomesoplenty/common/world/gen/feature/ConiferousForestGrassFeature.java new file mode 100644 index 000000000..5c43ee913 --- /dev/null +++ b/src/main/java/biomesoplenty/common/world/gen/feature/ConiferousForestGrassFeature.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright 2014-2019, the Biomes O' Plenty Team + * + * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. + * + * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. + ******************************************************************************/ +package biomesoplenty.common.world.gen.feature; + +import java.util.Random; + +import biomesoplenty.api.block.BOPBlocks; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.gen.IChunkGenSettings; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.NoFeatureConfig; + +public class ConiferousForestGrassFeature extends Feature +{ + public IBlockState func_202388_a(Random p_202388_1_) { + return p_202388_1_.nextInt(3) > 0 ? BOPBlocks.short_grass.getDefaultState() : (p_202388_1_.nextInt(2) > 0 ? Blocks.FERN.getDefaultState() : Blocks.GRASS.getDefaultState()); + } + + public boolean place(IWorld p_212245_1_, IChunkGenerator p_212245_2_, Random p_212245_3_, BlockPos p_212245_4_, NoFeatureConfig p_212245_5_) { + IBlockState iblockstate = this.func_202388_a(p_212245_3_); + + for(IBlockState iblockstate1 = p_212245_1_.getBlockState(p_212245_4_); (iblockstate1.isAir(p_212245_1_, p_212245_4_) || iblockstate1.isIn(BlockTags.LEAVES)) && p_212245_4_.getY() > 0; iblockstate1 = p_212245_1_.getBlockState(p_212245_4_)) { + p_212245_4_ = p_212245_4_.down(); + } + + int i = 0; + + for(int j = 0; j < 128; ++j) { + BlockPos blockpos = p_212245_4_.add(p_212245_3_.nextInt(8) - p_212245_3_.nextInt(8), p_212245_3_.nextInt(4) - p_212245_3_.nextInt(4), p_212245_3_.nextInt(8) - p_212245_3_.nextInt(8)); + if (p_212245_1_.isAirBlock(blockpos) && iblockstate.isValidPosition(p_212245_1_, blockpos)) { + p_212245_1_.setBlockState(blockpos, iblockstate, 2); + ++i; + } + } + + return i > 0; + } + } \ No newline at end of file diff --git a/src/main/java/biomesoplenty/init/ModBiomes.java b/src/main/java/biomesoplenty/init/ModBiomes.java index eaa0b137f..bc10dd157 100644 --- a/src/main/java/biomesoplenty/init/ModBiomes.java +++ b/src/main/java/biomesoplenty/init/ModBiomes.java @@ -10,8 +10,8 @@ package biomesoplenty.init; import static biomesoplenty.api.biome.BOPBiomes.*; import biomesoplenty.api.enums.BOPClimates; -import biomesoplenty.common.biome.BOPBiome; -import biomesoplenty.common.biome.overworld.BiomeConiferousForest; +import biomesoplenty.common.biome.BiomeBOP; +import biomesoplenty.common.biome.overworld.ConiferousForestBiome; import biomesoplenty.common.world.WorldTypeBOP; import net.minecraft.item.Item; import net.minecraft.world.biome.Biome; @@ -33,10 +33,10 @@ public class ModBiomes private static void registerBiomes() { - coniferous_forest = registerBiome(new BiomeConiferousForest(), "coniferous_forest"); + coniferous_forest = registerBiome(new ConiferousForestBiome(), "coniferous_forest"); } - public static Optional registerBiome(BOPBiome biome, String name) + public static Optional registerBiome(BiomeBOP biome, String name) { biome.setRegistryName(name); ForgeRegistries.BIOMES.register(biome);