package com.team.futurecraft.biome;
import java.util.Random;
import com.team.futurecraft.space.Planet;
import com.team.futurecraft.space.PlanetType;
import com.team.futurecraft.world.WorldProviderPlanet;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.ChunkPrimer;
/**
* This is the base Biome gen class that all planets inherit.
* The only use for it so far is to allow top blocks to generate on
* top of the planet's stone type, instead of testing for normal stone and never
* generating top blocks (grass, sand, etc).
*
* @author Joseph
*
*/
public class BiomePlanet extends BiomeGenBase {
public IBlockState underwaterBlock;
public Planet planet;
public BiomePlanet(int id, Planet planet) {
super(id);
this.setDisableRain();
this.planet = planet;
this.underwaterBlock = Blocks.sand.getDefaultState();
}
public int getTurfColor(BlockPos pos) {
return this.planet.turfmap[pos.getY() * this.planet.turfmap.length / 255];
}
public int getStoneColor(BlockPos pos) {
return this.planet.stonemap[pos.getY() * this.planet.stonemap.length / 255];
}
public void genTerrainBlocks(World worldIn, Random p_180622_2_, ChunkPrimer p_180622_3_, int p_180622_4_, int p_180622_5_, double p_180622_6_) {
this.generateBiomeTerrainNew(worldIn, p_180622_2_, p_180622_3_, p_180622_4_, p_180622_5_, p_180622_6_);
}
public void generateBiomeTerrainNew(World worldIn, Random p_180628_2_, ChunkPrimer primer, int p_180628_4_, int p_180628_5_, double p_180628_6_) {
WorldProviderPlanet provider = (WorldProviderPlanet)worldIn.provider;
PlanetType type = provider.planet.type;
IBlockState topState = this.topBlock;
IBlockState fillState = this.fillerBlock;
int x = p_180628_4_ & 15;
int z = p_180628_5_ & 15;
for (int y = 250; y >= 0; --y) {
if (primer.getBlockState(x, y, z).getBlock() == type.getStoneBlock() && primer.getBlockState(x, y + 1, z) == Blocks.air.getDefaultState()) {
if (y > 140 && type.hasWater()) {
primer.setBlockState(x, y, z, Blocks.snow.getDefaultState());
primer.setBlockState(x, y - 1, z, Blocks.snow.getDefaultState());
primer.setBlockState(x, y - 2, z, Blocks.snow.getDefaultState());
}
else {
primer.setBlockState(x, y, z, topState);
primer.setBlockState(x, y - 1, z, fillState);
primer.setBlockState(x, y - 2, z, fillState);
}
}
else if (primer.getBlockState(x, y, z).getBlock() == type.getStoneBlock() && primer.getBlockState(x, y + 1, z).getBlock() == Blocks.water) {
primer.setBlockState(x, y, z, this.underwaterBlock);
primer.setBlockState(x, y - 1, z, this.underwaterBlock);
primer.setBlockState(x, y - 2, z, this.underwaterBlock);
}
if (y <= 80 && type.hasWater()) {
if (primer.getBlockState(x, y, z) == Blocks.air.getDefaultState()) {
primer.setBlockState(x, y, z, Blocks.water.getDefaultState());
}
}
}
}
}