Began work on the Thicket
This commit is contained in:
parent
62a336a25c
commit
567ce24721
6 changed files with 196 additions and 2 deletions
|
@ -19,4 +19,5 @@ public class BOPBiomes
|
||||||
public static Optional<BiomeGenBase> crag = Optional.absent();
|
public static Optional<BiomeGenBase> crag = Optional.absent();
|
||||||
public static Optional<BiomeGenBase> originValley = Optional.absent();
|
public static Optional<BiomeGenBase> originValley = Optional.absent();
|
||||||
public static Optional<BiomeGenBase> steppe = Optional.absent();
|
public static Optional<BiomeGenBase> steppe = Optional.absent();
|
||||||
|
public static Optional<BiomeGenBase> thicket = Optional.absent();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,13 +42,11 @@ public class BiomeGenOriginValley extends BOPBiome
|
||||||
|
|
||||||
GeneratorBasicTree treeGenerator = new GeneratorBasicTree(4, false, 5, 8, Blocks.log.getDefaultState(),
|
GeneratorBasicTree treeGenerator = new GeneratorBasicTree(4, false, 5, 8, Blocks.log.getDefaultState(),
|
||||||
BOPBlocks.leaves_2.getDefaultState().withProperty(BlockBOPLeaves.getVariantProperty(BlockBOPLeaves2.PAGENUM), AllTrees.ORIGIN));
|
BOPBlocks.leaves_2.getDefaultState().withProperty(BlockBOPLeaves.getVariantProperty(BlockBOPLeaves2.PAGENUM), AllTrees.ORIGIN));
|
||||||
|
|
||||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||||
|
|
||||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted();
|
GeneratorWeighted flowerGenerator = new GeneratorWeighted();
|
||||||
flowerGenerator.add(8, new GeneratorFlora(4, BOPBlocks.flower2.getDefaultState().withProperty(BlockBOPFlower2.VARIANT, FlowerType.ROSE)));
|
flowerGenerator.add(8, new GeneratorFlora(4, BOPBlocks.flower2.getDefaultState().withProperty(BlockBOPFlower2.VARIANT, FlowerType.ROSE)));
|
||||||
flowerGenerator.add(10, new GeneratorFlora(4, Blocks.yellow_flower.getDefaultState()));
|
flowerGenerator.add(10, new GeneratorFlora(4, Blocks.yellow_flower.getDefaultState()));
|
||||||
|
|
||||||
this.addGenerator("flowers", GeneratorStage.FLOWERS, flowerGenerator);
|
this.addGenerator("flowers", GeneratorStage.FLOWERS, flowerGenerator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2015, 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 net.minecraft.init.Blocks;
|
||||||
|
import net.minecraft.util.BlockPos;
|
||||||
|
import net.minecraftforge.common.BiomeManager.BiomeType;
|
||||||
|
import biomesoplenty.api.biome.BOPBiome;
|
||||||
|
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||||
|
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||||
|
import biomesoplenty.api.block.BOPBlocks;
|
||||||
|
import biomesoplenty.common.block.BlockFoliage;
|
||||||
|
import biomesoplenty.common.block.BlockGem;
|
||||||
|
import biomesoplenty.common.block.BlockFoliage.FoliageType;
|
||||||
|
import biomesoplenty.common.block.BlockGem.GemType;
|
||||||
|
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||||
|
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||||
|
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||||
|
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||||
|
|
||||||
|
public class BiomeGenThicket extends BOPBiome
|
||||||
|
{
|
||||||
|
private static final Height biomeHeight = new Height(0.1F, 0.1F);
|
||||||
|
|
||||||
|
public BiomeGenThicket()
|
||||||
|
{
|
||||||
|
this.setHeight(biomeHeight);
|
||||||
|
this.setColor(7248193);
|
||||||
|
this.setTemperatureRainfall(0.6F, 0.2F);
|
||||||
|
|
||||||
|
this.addWeight(BiomeType.COOL, 5);
|
||||||
|
|
||||||
|
GeneratorWeighted treeGenerator = new GeneratorWeighted();
|
||||||
|
treeGenerator.add(1, new GeneratorBasicTree(17, false, 4, 3, Blocks.log.getDefaultState(), Blocks.leaves.getDefaultState()));
|
||||||
|
treeGenerator.add(4, new GeneratorBush(17, Blocks.log.getDefaultState(), Blocks.leaves.getDefaultState()));
|
||||||
|
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||||
|
|
||||||
|
//TODO: Add the rest of the generators, requires plant blocks
|
||||||
|
this.addGenerator("flowers", GeneratorStage.FLOWERS, new GeneratorFlora(5, Blocks.red_flower.getDefaultState()));
|
||||||
|
//this.addGenerator("thorns", GeneratorStage.FLOWERS, new GeneratorFlora(55, BOPBlocks.foliage.getDefaultState().withProperty(BlockBOPPlant., FoliageType.LEAFPILE));
|
||||||
|
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS, new GeneratorFlora(5, BOPBlocks.foliage.getDefaultState().withProperty(BlockFoliage.VARIANT, FoliageType.LEAFPILE)));
|
||||||
|
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS, new GeneratorFlora(10, BOPBlocks.foliage.getDefaultState().withProperty(BlockFoliage.VARIANT, FoliageType.DEADLEAFPILE)));
|
||||||
|
|
||||||
|
this.addGenerator("amber", GeneratorStage.SAND, new GeneratorOreSingle(BOPBlocks.gem_ore.getDefaultState().withProperty(BlockGem.VARIANT, GemType.AMBER), 12, 4, 32));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getGrassColorAtPos(BlockPos pos)
|
||||||
|
{
|
||||||
|
return 11049591;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFoliageColorAtPos(BlockPos pos)
|
||||||
|
{
|
||||||
|
return 10854765;
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,6 +22,7 @@ import biomesoplenty.common.biome.overworld.BiomeGenArctic;
|
||||||
import biomesoplenty.common.biome.overworld.BiomeGenCrag;
|
import biomesoplenty.common.biome.overworld.BiomeGenCrag;
|
||||||
import biomesoplenty.common.biome.overworld.BiomeGenOriginValley;
|
import biomesoplenty.common.biome.overworld.BiomeGenOriginValley;
|
||||||
import biomesoplenty.common.biome.overworld.BiomeGenSteppe;
|
import biomesoplenty.common.biome.overworld.BiomeGenSteppe;
|
||||||
|
import biomesoplenty.common.biome.overworld.BiomeGenThicket;
|
||||||
import biomesoplenty.common.command.BOPCommand;
|
import biomesoplenty.common.command.BOPCommand;
|
||||||
import biomesoplenty.common.util.config.JsonBiome;
|
import biomesoplenty.common.util.config.JsonBiome;
|
||||||
import biomesoplenty.common.world.WorldTypeBOP;
|
import biomesoplenty.common.world.WorldTypeBOP;
|
||||||
|
@ -51,6 +52,7 @@ public class ModBiomes
|
||||||
crag = registerBiome(new BiomeGenCrag().setBiomeName("Crag"), "crag");
|
crag = registerBiome(new BiomeGenCrag().setBiomeName("Crag"), "crag");
|
||||||
originValley = registerBiome(new BiomeGenOriginValley().setBiomeName("Origin Valley"), "origin_valley");
|
originValley = registerBiome(new BiomeGenOriginValley().setBiomeName("Origin Valley"), "origin_valley");
|
||||||
steppe = registerBiome(new BiomeGenSteppe().setBiomeName("Steppe"), "steppe");
|
steppe = registerBiome(new BiomeGenSteppe().setBiomeName("Steppe"), "steppe");
|
||||||
|
thicket = registerBiome(new BiomeGenThicket().setBiomeName("Thicket"), "thicket");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void registerExternalBiomes()
|
private static void registerExternalBiomes()
|
||||||
|
|
|
@ -16,6 +16,7 @@ import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||||
import biomesoplenty.common.world.feature.GeneratorOreCluster;
|
import biomesoplenty.common.world.feature.GeneratorOreCluster;
|
||||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||||
|
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||||
|
|
||||||
public class ModGenerators
|
public class ModGenerators
|
||||||
{
|
{
|
||||||
|
@ -26,6 +27,7 @@ public class ModGenerators
|
||||||
registerGenerator("weighted", GeneratorWeighted.class);
|
registerGenerator("weighted", GeneratorWeighted.class);
|
||||||
registerGenerator("weighted_entry", GeneratorWeightedEntry.class);
|
registerGenerator("weighted_entry", GeneratorWeightedEntry.class);
|
||||||
registerGenerator("basic_tree", GeneratorBasicTree.class);
|
registerGenerator("basic_tree", GeneratorBasicTree.class);
|
||||||
|
registerGenerator("bush", GeneratorBush.class);
|
||||||
registerGenerator("flora", GeneratorFlora.class);
|
registerGenerator("flora", GeneratorFlora.class);
|
||||||
registerGenerator("grass", GeneratorGrass.class);
|
registerGenerator("grass", GeneratorGrass.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2015, 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.feature.tree;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockSapling;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.init.Blocks;
|
||||||
|
import net.minecraft.util.BlockPos;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
|
||||||
|
import biomesoplenty.api.biome.generation.GeneratorCustomizable;
|
||||||
|
import biomesoplenty.common.util.biome.GeneratorUtils;
|
||||||
|
|
||||||
|
public class GeneratorBush extends GeneratorCustomizable
|
||||||
|
{
|
||||||
|
private int amountPerChunk;
|
||||||
|
private IBlockState log;
|
||||||
|
private IBlockState leaves;
|
||||||
|
|
||||||
|
public GeneratorBush() {}
|
||||||
|
|
||||||
|
public GeneratorBush(int amountPerChunk, IBlockState log, IBlockState leaves)
|
||||||
|
{
|
||||||
|
this.amountPerChunk = amountPerChunk;
|
||||||
|
this.log = log;
|
||||||
|
this.leaves = leaves;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void scatter(World world, Random random, BlockPos pos)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < amountPerChunk; i++)
|
||||||
|
{
|
||||||
|
int x = random.nextInt(16) + 8;
|
||||||
|
int z = random.nextInt(16) + 8;
|
||||||
|
BlockPos genPos = world.getHeight(pos.add(x, 0, z));
|
||||||
|
|
||||||
|
generate(world, random, genPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean generate(World world, Random random, BlockPos pos)
|
||||||
|
{
|
||||||
|
Block block;
|
||||||
|
|
||||||
|
//Move down until we reach the ground
|
||||||
|
do
|
||||||
|
{
|
||||||
|
block = world.getBlockState(pos).getBlock();
|
||||||
|
if (!block.isAir(world, pos) && !block.isLeaves(world, pos)) break;
|
||||||
|
pos = pos.down();
|
||||||
|
}
|
||||||
|
while (pos.getY() > 0);
|
||||||
|
|
||||||
|
//Check if the ground block can sustain a sapling before generating above it
|
||||||
|
if (block.canSustainPlant(world, pos, EnumFacing.UP, ((BlockSapling)Blocks.sapling)))
|
||||||
|
{
|
||||||
|
pos = pos.up();
|
||||||
|
world.setBlockState(pos, this.log, 2);
|
||||||
|
|
||||||
|
//Generate a bush 3 blocks tall, with the bottom block already set to a log
|
||||||
|
for (int y = pos.getY(); y <= pos.getY() + 2; ++y)
|
||||||
|
{
|
||||||
|
//Determines the distance away from the bottom of the bush
|
||||||
|
int currentLayer = y - pos.getY();
|
||||||
|
//Reduces the radius closer to the top of the bush
|
||||||
|
int leavesRadius = 2 - currentLayer;
|
||||||
|
|
||||||
|
for (int x = pos.getX() - leavesRadius; x <= pos.getX() + leavesRadius; ++x)
|
||||||
|
{
|
||||||
|
int xDiff = x - pos.getX();
|
||||||
|
|
||||||
|
for (int z = pos.getZ() - leavesRadius; z <= pos.getZ() + leavesRadius; ++z)
|
||||||
|
{
|
||||||
|
int zDiff = z - pos.getZ();
|
||||||
|
|
||||||
|
//Randomly prevent the generation of leaves on the corners of each layer
|
||||||
|
if (Math.abs(xDiff) != leavesRadius || Math.abs(zDiff) != leavesRadius || random.nextInt(2) != 0)
|
||||||
|
{
|
||||||
|
BlockPos leavesPos = new BlockPos(x, y, z);
|
||||||
|
|
||||||
|
//Ensures the leaves can replace surrounding blocks, preventing the existing log from being overriden alongside
|
||||||
|
//other terrain
|
||||||
|
if (world.getBlockState(leavesPos).getBlock().canBeReplacedByLeaves(world, leavesPos))
|
||||||
|
{
|
||||||
|
world.setBlockState(leavesPos, this.leaves, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToJson(JsonObject json, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
json.addProperty("amount_per_chunk", this.amountPerChunk);
|
||||||
|
json.add("log_state", context.serialize(this.log));
|
||||||
|
json.add("leaves_state", context.serialize(this.leaves));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromJson(JsonObject json, JsonDeserializationContext context)
|
||||||
|
{
|
||||||
|
this.amountPerChunk = json.get("amount_per_chunk").getAsInt();
|
||||||
|
this.log = GeneratorUtils.deserializeStateNonNull(json, "log_state", context);
|
||||||
|
this.leaves = GeneratorUtils.deserializeStateNonNull(json, "leaves_state", context);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue