package net.minecraft.block;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
public class BlockDynamicLiquid extends BlockLiquid
{
int field_149815_a;
private static final String __OBFID = "CL_00000234";
protected BlockDynamicLiquid(Material p_i45403_1_)
{
super(p_i45403_1_);
}
private void func_180690_f(World worldIn, BlockPos p_180690_2_, IBlockState p_180690_3_)
{
worldIn.setBlockState(p_180690_2_, getStaticLiquidForMaterial(this.blockMaterial).getDefaultState().withProperty(LEVEL, p_180690_3_.getValue(LEVEL)), 2);
}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
int var5 = ((Integer)state.getValue(LEVEL)).intValue();
byte var6 = 1;
if (this.blockMaterial == Material.lava && !worldIn.provider.func_177500_n())
{
var6 = 2;
}
int var7 = this.tickRate(worldIn);
int var16;
if (var5 > 0)
{
int var8 = -100;
this.field_149815_a = 0;
EnumFacing var10;
for (Iterator var9 = EnumFacing.Plane.HORIZONTAL.iterator(); var9.hasNext(); var8 = this.func_176371_a(worldIn, pos.offset(var10), var8))
{
var10 = (EnumFacing)var9.next();
}
int var14 = var8 + var6;
if (var14 >= 8 || var8 < 0)
{
var14 = -1;
}
if (this.func_176362_e(worldIn, pos.offsetUp()) >= 0)
{
var16 = this.func_176362_e(worldIn, pos.offsetUp());
if (var16 >= 8)
{
var14 = var16;
}
else
{
var14 = var16 + 8;
}
}
if (this.field_149815_a >= 2 && this.blockMaterial == Material.water)
{
IBlockState var17 = worldIn.getBlockState(pos.offsetDown());
if (var17.getBlock().getMaterial().isSolid())
{
var14 = 0;
}
else if (var17.getBlock().getMaterial() == this.blockMaterial && ((Integer)var17.getValue(LEVEL)).intValue() == 0)
{
var14 = 0;
}
}
if (this.blockMaterial == Material.lava && var5 < 8 && var14 < 8 && var14 > var5 && rand.nextInt(4) != 0)
{
var7 *= 4;
}
if (var14 == var5)
{
this.func_180690_f(worldIn, pos, state);
}
else
{
var5 = var14;
if (var14 < 0)
{
worldIn.setBlockToAir(pos);
}
else
{
state = state.withProperty(LEVEL, Integer.valueOf(var14));
worldIn.setBlockState(pos, state, 2);
worldIn.scheduleUpdate(pos, this, var7);
worldIn.notifyNeighborsOfStateChange(pos, this);
}
}
}
else
{
this.func_180690_f(worldIn, pos, state);
}
IBlockState var13 = worldIn.getBlockState(pos.offsetDown());
if (this.func_176373_h(worldIn, pos.offsetDown(), var13))
{
if (this.blockMaterial == Material.lava && worldIn.getBlockState(pos.offsetDown()).getBlock().getMaterial() == Material.water)
{
worldIn.setBlockState(pos.offsetDown(), Blocks.stone.getDefaultState());
this.func_180688_d(worldIn, pos.offsetDown());
return;
}
if (var5 >= 8)
{
this.func_176375_a(worldIn, pos.offsetDown(), var13, var5);
}
else
{
this.func_176375_a(worldIn, pos.offsetDown(), var13, var5 + 8);
}
}
else if (var5 >= 0 && (var5 == 0 || this.func_176372_g(worldIn, pos.offsetDown(), var13)))
{
Set var15 = this.func_176376_e(worldIn, pos);
var16 = var5 + var6;
if (var5 >= 8)
{
var16 = 1;
}
if (var16 >= 8)
{
return;
}
Iterator var11 = var15.iterator();
while (var11.hasNext())
{
EnumFacing var12 = (EnumFacing)var11.next();
this.func_176375_a(worldIn, pos.offset(var12), worldIn.getBlockState(pos.offset(var12)), var16);
}
}
}
private void func_176375_a(World worldIn, BlockPos p_176375_2_, IBlockState p_176375_3_, int p_176375_4_)
{
if (this.func_176373_h(worldIn, p_176375_2_, p_176375_3_))
{
if (p_176375_3_.getBlock() != Blocks.air)
{
if (this.blockMaterial == Material.lava)
{
this.func_180688_d(worldIn, p_176375_2_);
}
else
{
p_176375_3_.getBlock().dropBlockAsItem(worldIn, p_176375_2_, p_176375_3_, 0);
}
}
worldIn.setBlockState(p_176375_2_, this.getDefaultState().withProperty(LEVEL, Integer.valueOf(p_176375_4_)), 3);
}
}
private int func_176374_a(World worldIn, BlockPos p_176374_2_, int p_176374_3_, EnumFacing p_176374_4_)
{
int var5 = 1000;
Iterator var6 = EnumFacing.Plane.HORIZONTAL.iterator();
while (var6.hasNext())
{
EnumFacing var7 = (EnumFacing)var6.next();
if (var7 != p_176374_4_)
{
BlockPos var8 = p_176374_2_.offset(var7);
IBlockState var9 = worldIn.getBlockState(var8);
if (!this.func_176372_g(worldIn, var8, var9) && (var9.getBlock().getMaterial() != this.blockMaterial || ((Integer)var9.getValue(LEVEL)).intValue() > 0))
{
if (!this.func_176372_g(worldIn, var8.offsetDown(), var9))
{
return p_176374_3_;
}
if (p_176374_3_ < 4)
{
int var10 = this.func_176374_a(worldIn, var8, p_176374_3_ + 1, var7.getOpposite());
if (var10 < var5)
{
var5 = var10;
}
}
}
}
}
return var5;
}
private Set func_176376_e(World worldIn, BlockPos p_176376_2_)
{
int var3 = 1000;
EnumSet var4 = EnumSet.noneOf(EnumFacing.class);
Iterator var5 = EnumFacing.Plane.HORIZONTAL.iterator();
while (var5.hasNext())
{
EnumFacing var6 = (EnumFacing)var5.next();
BlockPos var7 = p_176376_2_.offset(var6);
IBlockState var8 = worldIn.getBlockState(var7);
if (!this.func_176372_g(worldIn, var7, var8) && (var8.getBlock().getMaterial() != this.blockMaterial || ((Integer)var8.getValue(LEVEL)).intValue() > 0))
{
int var9;
if (this.func_176372_g(worldIn, var7.offsetDown(), worldIn.getBlockState(var7.offsetDown())))
{
var9 = this.func_176374_a(worldIn, var7, 1, var6.getOpposite());
}
else
{
var9 = 0;
}
if (var9 < var3)
{
var4.clear();
}
if (var9 <= var3)
{
var4.add(var6);
var3 = var9;
}
}
}
return var4;
}
private boolean func_176372_g(World worldIn, BlockPos p_176372_2_, IBlockState p_176372_3_)
{
Block var4 = worldIn.getBlockState(p_176372_2_).getBlock();
return !(var4 instanceof BlockDoor) && var4 != Blocks.standing_sign && var4 != Blocks.ladder && var4 != Blocks.reeds ? (var4.blockMaterial == Material.portal ? true : var4.blockMaterial.blocksMovement()) : true;
}
protected int func_176371_a(World worldIn, BlockPos p_176371_2_, int p_176371_3_)
{
int var4 = this.func_176362_e(worldIn, p_176371_2_);
if (var4 < 0)
{
return p_176371_3_;
}
else
{
if (var4 == 0)
{
++this.field_149815_a;
}
if (var4 >= 8)
{
var4 = 0;
}
return p_176371_3_ >= 0 && var4 >= p_176371_3_ ? p_176371_3_ : var4;
}
}
private boolean func_176373_h(World worldIn, BlockPos p_176373_2_, IBlockState p_176373_3_)
{
Material var4 = p_176373_3_.getBlock().getMaterial();
return var4 != this.blockMaterial && var4 != Material.lava && !this.func_176372_g(worldIn, p_176373_2_, p_176373_3_);
}
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state)
{
if (!this.func_176365_e(worldIn, pos, state))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
}