package net.minecraft.block;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
public abstract class BlockLeaves extends BlockLeavesBase
{
public static final PropertyBool field_176237_a = PropertyBool.create("decayable");
public static final PropertyBool field_176236_b = PropertyBool.create("check_decay");
int[] field_150128_a;
private static final String __OBFID = "CL_00000263";
public BlockLeaves()
{
super(Material.leaves, false);
this.setTickRandomly(true);
this.setCreativeTab(CreativeTabs.tabDecorations);
this.setHardness(0.2F);
this.setLightOpacity(1);
this.setStepSound(soundTypeGrass);
}
public void breakBlock(World worldIn, BlockPos pos, IBlockState state)
{
byte var4 = 1;
int var5 = var4 + 1;
int var6 = pos.getX();
int var7 = pos.getY();
int var8 = pos.getZ();
if (worldIn.isAreaLoaded(new BlockPos(var6 - var5, var7 - var5, var8 - var5), new BlockPos(var6 + var5, var7 + var5, var8 + var5)))
{
for (int var9 = -var4; var9 <= var4; ++var9)
{
for (int var10 = -var4; var10 <= var4; ++var10)
{
for (int var11 = -var4; var11 <= var4; ++var11)
{
BlockPos var12 = pos.add(var9, var10, var11);
IBlockState var13 = worldIn.getBlockState(var12);
if (var13.getBlock().getMaterial() == Material.leaves && !((Boolean)var13.getValue(field_176236_b)).booleanValue())
{
worldIn.setBlockState(var12, var13.withProperty(field_176236_b, Boolean.valueOf(true)), 4);
}
}
}
}
}
}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
if (!worldIn.isRemote)
{
if (((Boolean)state.getValue(field_176236_b)).booleanValue() && ((Boolean)state.getValue(field_176237_a)).booleanValue())
{
byte var5 = 4;
int var6 = var5 + 1;
int var7 = pos.getX();
int var8 = pos.getY();
int var9 = pos.getZ();
byte var10 = 32;
int var11 = var10 * var10;
int var12 = var10 / 2;
if (this.field_150128_a == null)
{
this.field_150128_a = new int[var10 * var10 * var10];
}
int var13;
if (worldIn.isAreaLoaded(new BlockPos(var7 - var6, var8 - var6, var9 - var6), new BlockPos(var7 + var6, var8 + var6, var9 + var6)))
{
int var14;
int var15;
for (var13 = -var5; var13 <= var5; ++var13)
{
for (var14 = -var5; var14 <= var5; ++var14)
{
for (var15 = -var5; var15 <= var5; ++var15)
{
Block var16 = worldIn.getBlockState(new BlockPos(var7 + var13, var8 + var14, var9 + var15)).getBlock();
if (var16 != Blocks.log && var16 != Blocks.log2)
{
if (var16.getMaterial() == Material.leaves)
{
this.field_150128_a[(var13 + var12) * var11 + (var14 + var12) * var10 + var15 + var12] = -2;
}
else
{
this.field_150128_a[(var13 + var12) * var11 + (var14 + var12) * var10 + var15 + var12] = -1;
}
}
else
{
this.field_150128_a[(var13 + var12) * var11 + (var14 + var12) * var10 + var15 + var12] = 0;
}
}
}
}
for (var13 = 1; var13 <= 4; ++var13)
{
for (var14 = -var5; var14 <= var5; ++var14)
{
for (var15 = -var5; var15 <= var5; ++var15)
{
for (int var17 = -var5; var17 <= var5; ++var17)
{
if (this.field_150128_a[(var14 + var12) * var11 + (var15 + var12) * var10 + var17 + var12] == var13 - 1)
{
if (this.field_150128_a[(var14 + var12 - 1) * var11 + (var15 + var12) * var10 + var17 + var12] == -2)
{
this.field_150128_a[(var14 + var12 - 1) * var11 + (var15 + var12) * var10 + var17 + var12] = var13;
}
if (this.field_150128_a[(var14 + var12 + 1) * var11 + (var15 + var12) * var10 + var17 + var12] == -2)
{
this.field_150128_a[(var14 + var12 + 1) * var11 + (var15 + var12) * var10 + var17 + var12] = var13;
}
if (this.field_150128_a[(var14 + var12) * var11 + (var15 + var12 - 1) * var10 + var17 + var12] == -2)
{
this.field_150128_a[(var14 + var12) * var11 + (var15 + var12 - 1) * var10 + var17 + var12] = var13;
}
if (this.field_150128_a[(var14 + var12) * var11 + (var15 + var12 + 1) * var10 + var17 + var12] == -2)
{
this.field_150128_a[(var14 + var12) * var11 + (var15 + var12 + 1) * var10 + var17 + var12] = var13;
}
if (this.field_150128_a[(var14 + var12) * var11 + (var15 + var12) * var10 + (var17 + var12 - 1)] == -2)
{
this.field_150128_a[(var14 + var12) * var11 + (var15 + var12) * var10 + (var17 + var12 - 1)] = var13;
}
if (this.field_150128_a[(var14 + var12) * var11 + (var15 + var12) * var10 + var17 + var12 + 1] == -2)
{
this.field_150128_a[(var14 + var12) * var11 + (var15 + var12) * var10 + var17 + var12 + 1] = var13;
}
}
}
}
}
}
}
var13 = this.field_150128_a[var12 * var11 + var12 * var10 + var12];
if (var13 >= 0)
{
worldIn.setBlockState(pos, state.withProperty(field_176236_b, Boolean.valueOf(false)), 4);
}
else
{
this.func_176235_d(worldIn, pos);
}
}
}
}
private void func_176235_d(World worldIn, BlockPos p_176235_2_)
{
this.dropBlockAsItem(worldIn, p_176235_2_, worldIn.getBlockState(p_176235_2_), 0);
worldIn.setBlockToAir(p_176235_2_);
}
/**
* Returns the quantity of items to drop on block destruction.
*/
public int quantityDropped(Random random)
{
return random.nextInt(20) == 0 ? 1 : 0;
}
/**
* Get the Item that this Block should drop when harvested.
*
* @param fortune the level of the Fortune enchantment on the player's tool
*/
public Item getItemDropped(IBlockState state, Random rand, int fortune)
{
return Item.getItemFromBlock(Blocks.sapling);
}
/**
* Spawns this Block's drops into the World as EntityItems.
*
* @param chance The chance that each Item is actually spawned (1.0 = always, 0.0 = never)
* @param fortune The player's fortune level
*/
public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune)
{
if (!worldIn.isRemote)
{
int var6 = this.func_176232_d(state);
if (fortune > 0)
{
var6 -= 2 << fortune;
if (var6 < 10)
{
var6 = 10;
}
}
if (worldIn.rand.nextInt(var6) == 0)
{
Item var7 = this.getItemDropped(state, worldIn.rand, fortune);
spawnAsEntity(worldIn, pos, new ItemStack(var7, 1, this.damageDropped(state)));
}
var6 = 200;
if (fortune > 0)
{
var6 -= 10 << fortune;
if (var6 < 40)
{
var6 = 40;
}
}
this.func_176234_a(worldIn, pos, state, var6);
}
}
protected void func_176234_a(World worldIn, BlockPos p_176234_2_, IBlockState p_176234_3_, int p_176234_4_) {}
protected int func_176232_d(IBlockState p_176232_1_)
{
return 20;
}
public boolean isOpaqueCube()
{
return !this.field_150121_P;
}
public boolean isVisuallyOpaque()
{
return false;
}
public abstract BlockPlanks.EnumType func_176233_b(int p_176233_1_);
}