package net.minecraft.world.pathfinder;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.BlockFence;
import net.minecraft.block.BlockFenceGate;
import net.minecraft.block.BlockRailBase;
import net.minecraft.block.BlockWall;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.pathfinding.PathPoint;
import net.minecraft.util.BlockPos;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
public class WalkNodeProcessor extends NodeProcessor
{
private boolean field_176180_f;
private boolean field_176181_g;
private boolean field_176183_h;
private boolean field_176184_i;
private boolean field_176182_j;
private static final String __OBFID = "CL_00001965";
public void func_176162_a(IBlockAccess p_176162_1_, Entity p_176162_2_)
{
super.func_176162_a(p_176162_1_, p_176162_2_);
this.field_176182_j = this.field_176183_h;
}
public void func_176163_a()
{
super.func_176163_a();
this.field_176183_h = this.field_176182_j;
}
public PathPoint func_176161_a(Entity p_176161_1_)
{
int var2;
if (this.field_176184_i && p_176161_1_.isInWater())
{
var2 = (int)p_176161_1_.getEntityBoundingBox().minY;
for (Block var3 = this.field_176169_a.getBlockState(new BlockPos(MathHelper.floor_double(p_176161_1_.posX), var2, MathHelper.floor_double(p_176161_1_.posZ))).getBlock(); var3 == Blocks.flowing_water || var3 == Blocks.water; var3 = this.field_176169_a.getBlockState(new BlockPos(MathHelper.floor_double(p_176161_1_.posX), var2, MathHelper.floor_double(p_176161_1_.posZ))).getBlock())
{
++var2;
}
this.field_176183_h = false;
}
else
{
var2 = MathHelper.floor_double(p_176161_1_.getEntityBoundingBox().minY + 0.5D);
}
return this.func_176159_a(MathHelper.floor_double(p_176161_1_.getEntityBoundingBox().minX), var2, MathHelper.floor_double(p_176161_1_.getEntityBoundingBox().minZ));
}
public PathPoint func_176160_a(Entity p_176160_1_, double p_176160_2_, double p_176160_4_, double p_176160_6_)
{
return this.func_176159_a(MathHelper.floor_double(p_176160_2_ - (double)(p_176160_1_.width / 2.0F)), MathHelper.floor_double(p_176160_4_), MathHelper.floor_double(p_176160_6_ - (double)(p_176160_1_.width / 2.0F)));
}
public int func_176164_a(PathPoint[] p_176164_1_, Entity p_176164_2_, PathPoint p_176164_3_, PathPoint p_176164_4_, float p_176164_5_)
{
int var6 = 0;
byte var7 = 0;
if (this.func_176177_a(p_176164_2_, p_176164_3_.xCoord, p_176164_3_.yCoord + 1, p_176164_3_.zCoord) == 1)
{
var7 = 1;
}
PathPoint var8 = this.func_176171_a(p_176164_2_, p_176164_3_.xCoord, p_176164_3_.yCoord, p_176164_3_.zCoord + 1, var7);
PathPoint var9 = this.func_176171_a(p_176164_2_, p_176164_3_.xCoord - 1, p_176164_3_.yCoord, p_176164_3_.zCoord, var7);
PathPoint var10 = this.func_176171_a(p_176164_2_, p_176164_3_.xCoord + 1, p_176164_3_.yCoord, p_176164_3_.zCoord, var7);
PathPoint var11 = this.func_176171_a(p_176164_2_, p_176164_3_.xCoord, p_176164_3_.yCoord, p_176164_3_.zCoord - 1, var7);
if (var8 != null && !var8.visited && var8.distanceTo(p_176164_4_) < p_176164_5_)
{
p_176164_1_[var6++] = var8;
}
if (var9 != null && !var9.visited && var9.distanceTo(p_176164_4_) < p_176164_5_)
{
p_176164_1_[var6++] = var9;
}
if (var10 != null && !var10.visited && var10.distanceTo(p_176164_4_) < p_176164_5_)
{
p_176164_1_[var6++] = var10;
}
if (var11 != null && !var11.visited && var11.distanceTo(p_176164_4_) < p_176164_5_)
{
p_176164_1_[var6++] = var11;
}
return var6;
}
private PathPoint func_176171_a(Entity p_176171_1_, int p_176171_2_, int p_176171_3_, int p_176171_4_, int p_176171_5_)
{
PathPoint var6 = null;
int var7 = this.func_176177_a(p_176171_1_, p_176171_2_, p_176171_3_, p_176171_4_);
if (var7 == 2)
{
return this.func_176159_a(p_176171_2_, p_176171_3_, p_176171_4_);
}
else
{
if (var7 == 1)
{
var6 = this.func_176159_a(p_176171_2_, p_176171_3_, p_176171_4_);
}
if (var6 == null && p_176171_5_ > 0 && var7 != -3 && var7 != -4 && this.func_176177_a(p_176171_1_, p_176171_2_, p_176171_3_ + p_176171_5_, p_176171_4_) == 1)
{
var6 = this.func_176159_a(p_176171_2_, p_176171_3_ + p_176171_5_, p_176171_4_);
p_176171_3_ += p_176171_5_;
}
if (var6 != null)
{
int var8 = 0;
int var9;
for (var9 = 0; p_176171_3_ > 0; var6 = this.func_176159_a(p_176171_2_, p_176171_3_, p_176171_4_))
{
var9 = this.func_176177_a(p_176171_1_, p_176171_2_, p_176171_3_ - 1, p_176171_4_);
if (this.field_176183_h && var9 == -1)
{
return null;
}
if (var9 != 1)
{
break;
}
if (var8++ >= p_176171_1_.getMaxFallHeight())
{
return null;
}
--p_176171_3_;
if (p_176171_3_ <= 0)
{
return null;
}
}
if (var9 == -2)
{
return null;
}
}
return var6;
}
}
private int func_176177_a(Entity p_176177_1_, int p_176177_2_, int p_176177_3_, int p_176177_4_)
{
return func_176170_a(this.field_176169_a, p_176177_1_, p_176177_2_, p_176177_3_, p_176177_4_, this.field_176168_c, this.field_176165_d, this.field_176166_e, this.field_176183_h, this.field_176181_g, this.field_176180_f);
}
public static int func_176170_a(IBlockAccess p_176170_0_, Entity p_176170_1_, int p_176170_2_, int p_176170_3_, int p_176170_4_, int p_176170_5_, int p_176170_6_, int p_176170_7_, boolean p_176170_8_, boolean p_176170_9_, boolean p_176170_10_)
{
boolean var11 = false;
BlockPos var12 = new BlockPos(p_176170_1_);
for (int var13 = p_176170_2_; var13 < p_176170_2_ + p_176170_5_; ++var13)
{
for (int var14 = p_176170_3_; var14 < p_176170_3_ + p_176170_6_; ++var14)
{
for (int var15 = p_176170_4_; var15 < p_176170_4_ + p_176170_7_; ++var15)
{
BlockPos var16 = new BlockPos(var13, var14, var15);
Block var17 = p_176170_0_.getBlockState(var16).getBlock();
if (var17.getMaterial() != Material.air)
{
if (var17 != Blocks.trapdoor && var17 != Blocks.iron_trapdoor)
{
if (var17 != Blocks.flowing_water && var17 != Blocks.water)
{
if (!p_176170_10_ && var17 instanceof BlockDoor && var17.getMaterial() == Material.wood)
{
return 0;
}
}
else
{
if (p_176170_8_)
{
return -1;
}
var11 = true;
}
}
else
{
var11 = true;
}
if (p_176170_1_.worldObj.getBlockState(var16).getBlock() instanceof BlockRailBase)
{
if (!(p_176170_1_.worldObj.getBlockState(var12).getBlock() instanceof BlockRailBase) && !(p_176170_1_.worldObj.getBlockState(var12.offsetDown()).getBlock() instanceof BlockRailBase))
{
return -3;
}
}
else if (!var17.isPassable(p_176170_0_, var16) && (!p_176170_9_ || !(var17 instanceof BlockDoor) || var17.getMaterial() != Material.wood))
{
if (var17 instanceof BlockFence || var17 instanceof BlockFenceGate || var17 instanceof BlockWall)
{
return -3;
}
if (var17 == Blocks.trapdoor || var17 == Blocks.iron_trapdoor)
{
return -4;
}
Material var18 = var17.getMaterial();
if (var18 != Material.lava)
{
return 0;
}
if (!p_176170_1_.func_180799_ab())
{
return -2;
}
}
}
}
}
}
return var11 ? 2 : 1;
}
public void func_176175_a(boolean p_176175_1_)
{
this.field_176180_f = p_176175_1_;
}
public void func_176172_b(boolean p_176172_1_)
{
this.field_176181_g = p_176172_1_;
}
public void func_176176_c(boolean p_176176_1_)
{
this.field_176183_h = p_176176_1_;
}
public void func_176178_d(boolean p_176178_1_)
{
this.field_176184_i = p_176178_1_;
}
public boolean func_176179_b()
{
return this.field_176180_f;
}
public boolean func_176174_d()
{
return this.field_176184_i;
}
public boolean func_176173_e()
{
return this.field_176183_h;
}
}