f37812be3e
I may have got a bit behind with version control. A lot behind, in fact. Maybe I'll go back and split this sometime - then again, I probably won't. But hey, at least it's here!
62 lines
2.2 KiB
Java
62 lines
2.2 KiB
Java
package electroblob.wizardry.worldgen;
|
|
|
|
import com.google.common.primitives.Ints;
|
|
import electroblob.wizardry.Wizardry;
|
|
import electroblob.wizardry.registry.WizardryBlocks;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.util.EnumFacing;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.chunk.IChunkProvider;
|
|
import net.minecraft.world.gen.IChunkGenerator;
|
|
import net.minecraftforge.fml.common.IWorldGenerator;
|
|
|
|
import java.util.Random;
|
|
|
|
public class WorldGenCrystalFlower implements IWorldGenerator {
|
|
|
|
@Override
|
|
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){
|
|
|
|
if(Ints.contains(Wizardry.settings.flowerDimensions, world.provider.getDimension())){
|
|
this.generatePlant(WizardryBlocks.crystal_flower.getDefaultState(), world, random, 8 + chunkX * 16, 8 + chunkZ * 16, 2, 20);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generates the specified plant randomly throughout the world.
|
|
*
|
|
* @param state The plant block
|
|
* @param world The world
|
|
* @param random A instance of {@code Random} to use
|
|
* @param x The x coordinate of the first block in the chunk
|
|
* @param z The y coordinate of the first block in the chunk
|
|
* @param chancesToSpawn Number of chances to spawn a flower patch
|
|
* @param groupSize The number of times to try generating a flower per flower patch spawn
|
|
*/
|
|
public void generatePlant(IBlockState state, World world, Random random, int x, int z, int chancesToSpawn, int groupSize){
|
|
|
|
for(int i = 0; i < chancesToSpawn; i++){
|
|
|
|
int randPosX = x + random.nextInt(16);
|
|
int randPosY = random.nextInt(256);
|
|
int randPosZ = z + random.nextInt(16);
|
|
|
|
for(int l = 0; l < groupSize; ++l){
|
|
|
|
int i1 = randPosX + random.nextInt(8) - random.nextInt(8);
|
|
int j1 = randPosY + random.nextInt(4) - random.nextInt(4);
|
|
int k1 = randPosZ + random.nextInt(8) - random.nextInt(8);
|
|
|
|
BlockPos pos = new BlockPos(i1, j1, k1);
|
|
|
|
if(world.isBlockLoaded(pos) && world.isAirBlock(pos) && (!world.provider.isNether() || j1 < 127)
|
|
&& state.getBlock().canPlaceBlockOnSide(world, pos, EnumFacing.UP)){
|
|
|
|
world.setBlockState(pos, state, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|