package net.minecraft.block;
import java.util.Iterator;
import java.util.Random;
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.gen.feature.WorldGenBigMushroom;
public class BlockMushroom extends BlockBush implements IGrowable
{
private static final String __OBFID = "CL_00000272";
protected BlockMushroom()
{
float var1 = 0.2F;
this.setBlockBounds(0.5F - var1, 0.0F, 0.5F - var1, 0.5F + var1, var1 * 2.0F, 0.5F + var1);
this.setTickRandomly(true);
}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
if (rand.nextInt(25) == 0)
{
int var5 = 5;
boolean var6 = true;
Iterator var7 = BlockPos.getAllInBoxMutable(pos.add(-4, -1, -4), pos.add(4, 1, 4)).iterator();
while (var7.hasNext())
{
BlockPos var8 = (BlockPos)var7.next();
if (worldIn.getBlockState(var8).getBlock() == this)
{
--var5;
if (var5 <= 0)
{
return;
}
}
}
BlockPos var9 = pos.add(rand.nextInt(3) - 1, rand.nextInt(2) - rand.nextInt(2), rand.nextInt(3) - 1);
for (int var10 = 0; var10 < 4; ++var10)
{
if (worldIn.isAirBlock(var9) && this.canBlockStay(worldIn, var9, this.getDefaultState()))
{
pos = var9;
}
var9 = pos.add(rand.nextInt(3) - 1, rand.nextInt(2) - rand.nextInt(2), rand.nextInt(3) - 1);
}
if (worldIn.isAirBlock(var9) && this.canBlockStay(worldIn, var9, this.getDefaultState()))
{
worldIn.setBlockState(var9, this.getDefaultState(), 2);
}
}
}
public boolean canPlaceBlockAt(World worldIn, BlockPos pos)
{
return super.canPlaceBlockAt(worldIn, pos) && this.canBlockStay(worldIn, pos, this.getDefaultState());
}
/**
* is the block grass, dirt or farmland
*/
protected boolean canPlaceBlockOn(Block ground)
{
return ground.isFullBlock();
}
public boolean canBlockStay(World worldIn, BlockPos p_180671_2_, IBlockState p_180671_3_)
{
if (p_180671_2_.getY() >= 0 && p_180671_2_.getY() < 256)
{
IBlockState var4 = worldIn.getBlockState(p_180671_2_.offsetDown());
return var4.getBlock() == Blocks.mycelium ? true : (var4.getBlock() == Blocks.dirt && var4.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.PODZOL ? true : worldIn.getLight(p_180671_2_) < 13 && this.canPlaceBlockOn(var4.getBlock()));
}
else
{
return false;
}
}
public boolean func_176485_d(World worldIn, BlockPos p_176485_2_, IBlockState p_176485_3_, Random p_176485_4_)
{
worldIn.setBlockToAir(p_176485_2_);
WorldGenBigMushroom var5 = null;
if (this == Blocks.brown_mushroom)
{
var5 = new WorldGenBigMushroom(0);
}
else if (this == Blocks.red_mushroom)
{
var5 = new WorldGenBigMushroom(1);
}
if (var5 != null && var5.generate(worldIn, p_176485_4_, p_176485_2_))
{
return true;
}
else
{
worldIn.setBlockState(p_176485_2_, p_176485_3_, 3);
return false;
}
}
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)p_180670_2_.nextFloat() < 0.4D;
}
public void grow(World worldIn, Random p_176474_2_, BlockPos p_176474_3_, IBlockState p_176474_4_)
{
this.func_176485_d(worldIn, p_176474_3_, p_176474_4_, p_176474_2_);
}
}