package net.minecraft.world.biome;
import java.util.Arrays;
import java.util.Random;
import net.minecraft.block.BlockColored;
import net.minecraft.block.BlockDirt;
import net.minecraft.block.BlockSand;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.chunk.ChunkPrimer;
import net.minecraft.world.gen.NoiseGeneratorPerlin;
import net.minecraft.world.gen.feature.WorldGenAbstractTree;
public class BiomeGenMesa extends BiomeGenBase
{
private IBlockState[] field_150621_aC;
private long field_150622_aD;
private NoiseGeneratorPerlin field_150623_aE;
private NoiseGeneratorPerlin field_150624_aF;
private NoiseGeneratorPerlin field_150625_aG;
private boolean field_150626_aH;
private boolean field_150620_aI;
private static final String __OBFID = "CL_00000176";
public BiomeGenMesa(int p_i45380_1_, boolean p_i45380_2_, boolean p_i45380_3_)
{
super(p_i45380_1_);
this.field_150626_aH = p_i45380_2_;
this.field_150620_aI = p_i45380_3_;
this.setDisableRain();
this.setTemperatureRainfall(2.0F, 0.0F);
this.spawnableCreatureList.clear();
this.topBlock = Blocks.sand.getDefaultState().withProperty(BlockSand.VARIANT_PROP, BlockSand.EnumType.RED_SAND);
this.fillerBlock = Blocks.stained_hardened_clay.getDefaultState();
this.theBiomeDecorator.treesPerChunk = -999;
this.theBiomeDecorator.deadBushPerChunk = 20;
this.theBiomeDecorator.reedsPerChunk = 3;
this.theBiomeDecorator.cactiPerChunk = 5;
this.theBiomeDecorator.flowersPerChunk = 0;
this.spawnableCreatureList.clear();
if (p_i45380_3_)
{
this.theBiomeDecorator.treesPerChunk = 5;
}
}
public WorldGenAbstractTree genBigTreeChance(Random p_150567_1_)
{
return this.worldGeneratorTrees;
}
public void func_180624_a(World worldIn, Random p_180624_2_, BlockPos p_180624_3_)
{
super.func_180624_a(worldIn, p_180624_2_, p_180624_3_);
}
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_)
{
if (this.field_150621_aC == null || this.field_150622_aD != worldIn.getSeed())
{
this.func_150619_a(worldIn.getSeed());
}
if (this.field_150623_aE == null || this.field_150624_aF == null || this.field_150622_aD != worldIn.getSeed())
{
Random var8 = new Random(this.field_150622_aD);
this.field_150623_aE = new NoiseGeneratorPerlin(var8, 4);
this.field_150624_aF = new NoiseGeneratorPerlin(var8, 1);
}
this.field_150622_aD = worldIn.getSeed();
double var22 = 0.0D;
int var10;
int var11;
if (this.field_150626_aH)
{
var10 = (p_180622_4_ & -16) + (p_180622_5_ & 15);
var11 = (p_180622_5_ & -16) + (p_180622_4_ & 15);
double var12 = Math.min(Math.abs(p_180622_6_), this.field_150623_aE.func_151601_a((double)var10 * 0.25D, (double)var11 * 0.25D));
if (var12 > 0.0D)
{
double var14 = 0.001953125D;
double var16 = Math.abs(this.field_150624_aF.func_151601_a((double)var10 * var14, (double)var11 * var14));
var22 = var12 * var12 * 2.5D;
double var18 = Math.ceil(var16 * 50.0D) + 14.0D;
if (var22 > var18)
{
var22 = var18;
}
var22 += 64.0D;
}
}
var10 = p_180622_4_ & 15;
var11 = p_180622_5_ & 15;
boolean var23 = true;
IBlockState var13 = Blocks.stained_hardened_clay.getDefaultState();
IBlockState var24 = this.fillerBlock;
int var15 = (int)(p_180622_6_ / 3.0D + 3.0D + p_180622_2_.nextDouble() * 0.25D);
boolean var25 = Math.cos(p_180622_6_ / 3.0D * Math.PI) > 0.0D;
int var17 = -1;
boolean var26 = false;
for (int var19 = 255; var19 >= 0; --var19)
{
if (p_180622_3_.getBlockState(var11, var19, var10).getBlock().getMaterial() == Material.air && var19 < (int)var22)
{
p_180622_3_.setBlockState(var11, var19, var10, Blocks.stone.getDefaultState());
}
if (var19 <= p_180622_2_.nextInt(5))
{
p_180622_3_.setBlockState(var11, var19, var10, Blocks.bedrock.getDefaultState());
}
else
{
IBlockState var20 = p_180622_3_.getBlockState(var11, var19, var10);
if (var20.getBlock().getMaterial() == Material.air)
{
var17 = -1;
}
else if (var20.getBlock() == Blocks.stone)
{
IBlockState var21;
if (var17 == -1)
{
var26 = false;
if (var15 <= 0)
{
var13 = null;
var24 = Blocks.stone.getDefaultState();
}
else if (var19 >= 59 && var19 <= 64)
{
var13 = Blocks.stained_hardened_clay.getDefaultState();
var24 = this.fillerBlock;
}
if (var19 < 63 && (var13 == null || var13.getBlock().getMaterial() == Material.air))
{
var13 = Blocks.water.getDefaultState();
}
var17 = var15 + Math.max(0, var19 - 63);
if (var19 >= 62)
{
if (this.field_150620_aI && var19 > 86 + var15 * 2)
{
if (var25)
{
p_180622_3_.setBlockState(var11, var19, var10, Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.COARSE_DIRT));
}
else
{
p_180622_3_.setBlockState(var11, var19, var10, Blocks.grass.getDefaultState());
}
}
else if (var19 > 66 + var15)
{
if (var19 >= 64 && var19 <= 127)
{
if (var25)
{
var21 = Blocks.hardened_clay.getDefaultState();
}
else
{
var21 = this.func_180629_a(p_180622_4_, var19, p_180622_5_);
}
}
else
{
var21 = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.ORANGE);
}
p_180622_3_.setBlockState(var11, var19, var10, var21);
}
else
{
p_180622_3_.setBlockState(var11, var19, var10, this.topBlock);
var26 = true;
}
}
else
{
p_180622_3_.setBlockState(var11, var19, var10, var24);
if (var24.getBlock() == Blocks.stained_hardened_clay)
{
p_180622_3_.setBlockState(var11, var19, var10, var24.getBlock().getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.ORANGE));
}
}
}
else if (var17 > 0)
{
--var17;
if (var26)
{
p_180622_3_.setBlockState(var11, var19, var10, Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.ORANGE));
}
else
{
var21 = this.func_180629_a(p_180622_4_, var19, p_180622_5_);
p_180622_3_.setBlockState(var11, var19, var10, var21);
}
}
}
}
}
}
private void func_150619_a(long p_150619_1_)
{
this.field_150621_aC = new IBlockState[64];
Arrays.fill(this.field_150621_aC, Blocks.hardened_clay.getDefaultState());
Random var3 = new Random(p_150619_1_);
this.field_150625_aG = new NoiseGeneratorPerlin(var3, 1);
int var4;
for (var4 = 0; var4 < 64; ++var4)
{
var4 += var3.nextInt(5) + 1;
if (var4 < 64)
{
this.field_150621_aC[var4] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.ORANGE);
}
}
var4 = var3.nextInt(4) + 2;
int var5;
int var6;
int var7;
int var8;
for (var5 = 0; var5 < var4; ++var5)
{
var6 = var3.nextInt(3) + 1;
var7 = var3.nextInt(64);
for (var8 = 0; var7 + var8 < 64 && var8 < var6; ++var8)
{
this.field_150621_aC[var7 + var8] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.YELLOW);
}
}
var5 = var3.nextInt(4) + 2;
int var9;
for (var6 = 0; var6 < var5; ++var6)
{
var7 = var3.nextInt(3) + 2;
var8 = var3.nextInt(64);
for (var9 = 0; var8 + var9 < 64 && var9 < var7; ++var9)
{
this.field_150621_aC[var8 + var9] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.BROWN);
}
}
var6 = var3.nextInt(4) + 2;
for (var7 = 0; var7 < var6; ++var7)
{
var8 = var3.nextInt(3) + 1;
var9 = var3.nextInt(64);
for (int var10 = 0; var9 + var10 < 64 && var10 < var8; ++var10)
{
this.field_150621_aC[var9 + var10] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.RED);
}
}
var7 = var3.nextInt(3) + 3;
var8 = 0;
for (var9 = 0; var9 < var7; ++var9)
{
byte var12 = 1;
var8 += var3.nextInt(16) + 4;
for (int var11 = 0; var8 + var11 < 64 && var11 < var12; ++var11)
{
this.field_150621_aC[var8 + var11] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.WHITE);
if (var8 + var11 > 1 && var3.nextBoolean())
{
this.field_150621_aC[var8 + var11 - 1] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.SILVER);
}
if (var8 + var11 < 63 && var3.nextBoolean())
{
this.field_150621_aC[var8 + var11 + 1] = Blocks.stained_hardened_clay.getDefaultState().withProperty(BlockColored.COLOR, EnumDyeColor.SILVER);
}
}
}
}
private IBlockState func_180629_a(int p_180629_1_, int p_180629_2_, int p_180629_3_)
{
int var4 = (int)Math.round(this.field_150625_aG.func_151601_a((double)p_180629_1_ * 1.0D / 512.0D, (double)p_180629_1_ * 1.0D / 512.0D) * 2.0D);
return this.field_150621_aC[(p_180629_2_ + var4 + 64) % 64];
}
protected BiomeGenBase createMutatedBiome(int p_180277_1_)
{
boolean var2 = this.biomeID == BiomeGenBase.mesa.biomeID;
BiomeGenMesa var3 = new BiomeGenMesa(p_180277_1_, var2, this.field_150620_aI);
if (!var2)
{
var3.setHeight(height_LowHills);
var3.setBiomeName(this.biomeName + " M");
}
else
{
var3.setBiomeName(this.biomeName + " (Bryce)");
}
var3.func_150557_a(this.color, true);
return var3;
}
}