package net.minecraft.block;
import java.util.Random;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenBigTree;
import net.minecraft.world.gen.feature.WorldGenCanopyTree;
import net.minecraft.world.gen.feature.WorldGenForest;
import net.minecraft.world.gen.feature.WorldGenMegaJungle;
import net.minecraft.world.gen.feature.WorldGenMegaPineTree;
import net.minecraft.world.gen.feature.WorldGenSavannaTree;
import net.minecraft.world.gen.feature.WorldGenTaiga2;
import net.minecraft.world.gen.feature.WorldGenTrees;
import net.minecraft.world.gen.feature.WorldGenerator;
public class BlockSapling extends BlockBush implements IGrowable
{
public static final PropertyEnum TYPE_PROP = PropertyEnum.create("type", BlockPlanks.EnumType.class);
public static final PropertyInteger STAGE_PROP = PropertyInteger.create("stage", 0, 1);
private static final String __OBFID = "CL_00000305";
protected BlockSapling()
{
this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE_PROP, BlockPlanks.EnumType.OAK).withProperty(STAGE_PROP, Integer.valueOf(0)));
float var1 = 0.4F;
this.setBlockBounds(0.5F - var1, 0.0F, 0.5F - var1, 0.5F + var1, var1 * 2.0F, 0.5F + var1);
this.setCreativeTab(CreativeTabs.tabDecorations);
}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
if (!worldIn.isRemote)
{
super.updateTick(worldIn, pos, state, rand);
if (worldIn.getLightFromNeighbors(pos.offsetUp()) >= 9 && rand.nextInt(7) == 0)
{
this.func_176478_d(worldIn, pos, state, rand);
}
}
}
public void func_176478_d(World worldIn, BlockPos p_176478_2_, IBlockState p_176478_3_, Random p_176478_4_)
{
if (((Integer)p_176478_3_.getValue(STAGE_PROP)).intValue() == 0)
{
worldIn.setBlockState(p_176478_2_, p_176478_3_.cycleProperty(STAGE_PROP), 4);
}
else
{
this.func_176476_e(worldIn, p_176478_2_, p_176478_3_, p_176478_4_);
}
}
public void func_176476_e(World worldIn, BlockPos p_176476_2_, IBlockState p_176476_3_, Random p_176476_4_)
{
Object var5 = p_176476_4_.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true);
int var6 = 0;
int var7 = 0;
boolean var8 = false;
switch (BlockSapling.SwitchEnumType.field_177065_a[((BlockPlanks.EnumType)p_176476_3_.getValue(TYPE_PROP)).ordinal()])
{
case 1:
label78:
for (var6 = 0; var6 >= -1; --var6)
{
for (var7 = 0; var7 >= -1; --var7)
{
if (this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7), BlockPlanks.EnumType.SPRUCE) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7), BlockPlanks.EnumType.SPRUCE) && this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7 + 1), BlockPlanks.EnumType.SPRUCE) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7 + 1), BlockPlanks.EnumType.SPRUCE))
{
var5 = new WorldGenMegaPineTree(false, p_176476_4_.nextBoolean());
var8 = true;
break label78;
}
}
}
if (!var8)
{
var7 = 0;
var6 = 0;
var5 = new WorldGenTaiga2(true);
}
break;
case 2:
var5 = new WorldGenForest(true, false);
break;
case 3:
label93:
for (var6 = 0; var6 >= -1; --var6)
{
for (var7 = 0; var7 >= -1; --var7)
{
if (this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7), BlockPlanks.EnumType.JUNGLE) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7), BlockPlanks.EnumType.JUNGLE) && this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7 + 1), BlockPlanks.EnumType.JUNGLE) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7 + 1), BlockPlanks.EnumType.JUNGLE))
{
var5 = new WorldGenMegaJungle(true, 10, 20, BlockPlanks.EnumType.JUNGLE.func_176839_a(), BlockPlanks.EnumType.JUNGLE.func_176839_a());
var8 = true;
break label93;
}
}
}
if (!var8)
{
var7 = 0;
var6 = 0;
var5 = new WorldGenTrees(true, 4 + p_176476_4_.nextInt(7), BlockPlanks.EnumType.JUNGLE.func_176839_a(), BlockPlanks.EnumType.JUNGLE.func_176839_a(), false);
}
break;
case 4:
var5 = new WorldGenSavannaTree(true);
break;
case 5:
label108:
for (var6 = 0; var6 >= -1; --var6)
{
for (var7 = 0; var7 >= -1; --var7)
{
if (this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7), BlockPlanks.EnumType.DARK_OAK) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7), BlockPlanks.EnumType.DARK_OAK) && this.func_176477_a(worldIn, p_176476_2_.add(var6, 0, var7 + 1), BlockPlanks.EnumType.DARK_OAK) && this.func_176477_a(worldIn, p_176476_2_.add(var6 + 1, 0, var7 + 1), BlockPlanks.EnumType.DARK_OAK))
{
var5 = new WorldGenCanopyTree(true);
var8 = true;
break label108;
}
}
}
if (!var8)
{
return;
}
case 6:
}
IBlockState var9 = Blocks.air.getDefaultState();
if (var8)
{
worldIn.setBlockState(p_176476_2_.add(var6, 0, var7), var9, 4);
worldIn.setBlockState(p_176476_2_.add(var6 + 1, 0, var7), var9, 4);
worldIn.setBlockState(p_176476_2_.add(var6, 0, var7 + 1), var9, 4);
worldIn.setBlockState(p_176476_2_.add(var6 + 1, 0, var7 + 1), var9, 4);
}
else
{
worldIn.setBlockState(p_176476_2_, var9, 4);
}
if (!((WorldGenerator)var5).generate(worldIn, p_176476_4_, p_176476_2_.add(var6, 0, var7)))
{
if (var8)
{
worldIn.setBlockState(p_176476_2_.add(var6, 0, var7), p_176476_3_, 4);
worldIn.setBlockState(p_176476_2_.add(var6 + 1, 0, var7), p_176476_3_, 4);
worldIn.setBlockState(p_176476_2_.add(var6, 0, var7 + 1), p_176476_3_, 4);
worldIn.setBlockState(p_176476_2_.add(var6 + 1, 0, var7 + 1), p_176476_3_, 4);
}
else
{
worldIn.setBlockState(p_176476_2_, p_176476_3_, 4);
}
}
}
public boolean func_176477_a(World worldIn, BlockPos p_176477_2_, BlockPlanks.EnumType p_176477_3_)
{
IBlockState var4 = worldIn.getBlockState(p_176477_2_);
return var4.getBlock() == this && var4.getValue(TYPE_PROP) == p_176477_3_;
}
/**
* Get the damage value that this Block should drop
*/
public int damageDropped(IBlockState state)
{
return ((BlockPlanks.EnumType)state.getValue(TYPE_PROP)).func_176839_a();
}
public boolean isStillGrowing(World worldIn, BlockPos p_176473_2_, IBlockState p_176473_3_, boolean p_176473_4_)
{
return true;
}
public boolean canUseBonemeal(World worldIn, Random p_180670_2_, BlockPos p_180670_3_, IBlockState p_180670_4_)
{
return (double)worldIn.rand.nextFloat() < 0.45D;
}
public void grow(World worldIn, Random p_176474_2_, BlockPos p_176474_3_, IBlockState p_176474_4_)
{
this.func_176478_d(worldIn, p_176474_3_, p_176474_4_, p_176474_2_);
}
/**
* Convert the given metadata into a BlockState for this Block
*/
public IBlockState getStateFromMeta(int meta)
{
return this.getDefaultState().withProperty(TYPE_PROP, BlockPlanks.EnumType.func_176837_a(meta & 7)).withProperty(STAGE_PROP, Integer.valueOf((meta & 8) >> 3));
}
/**
* Convert the BlockState into the correct metadata value
*/
public int getMetaFromState(IBlockState state)
{
byte var2 = 0;
int var3 = var2 | ((BlockPlanks.EnumType)state.getValue(TYPE_PROP)).func_176839_a();
var3 |= ((Integer)state.getValue(STAGE_PROP)).intValue() << 3;
return var3;
}
protected BlockState createBlockState()
{
return new BlockState(this, new IProperty[] {TYPE_PROP, STAGE_PROP});
}
static final class SwitchEnumType
{
static final int[] field_177065_a = new int[BlockPlanks.EnumType.values().length];
private static final String __OBFID = "CL_00002067";
static
{
try
{
field_177065_a[BlockPlanks.EnumType.SPRUCE.ordinal()] = 1;
}
catch (NoSuchFieldError var6)
{
;
}
try
{
field_177065_a[BlockPlanks.EnumType.BIRCH.ordinal()] = 2;
}
catch (NoSuchFieldError var5)
{
;
}
try
{
field_177065_a[BlockPlanks.EnumType.JUNGLE.ordinal()] = 3;
}
catch (NoSuchFieldError var4)
{
;
}
try
{
field_177065_a[BlockPlanks.EnumType.ACACIA.ordinal()] = 4;
}
catch (NoSuchFieldError var3)
{
;
}
try
{
field_177065_a[BlockPlanks.EnumType.DARK_OAK.ordinal()] = 5;
}
catch (NoSuchFieldError var2)
{
;
}
try
{
field_177065_a[BlockPlanks.EnumType.OAK.ordinal()] = 6;
}
catch (NoSuchFieldError var1)
{
;
}
}
}
}