package net.minecraft.server;
import java.util.EnumSet;
public class PathfinderGoalMeleeAttack extends PathfinderGoal {
protected final EntityCreature a;
protected int b;
private final double d;
private final boolean e;
private PathEntity f;
private int g;
private double h;
private double i;
private double j;
protected final int c = 20;
private long k;
public PathfinderGoalMeleeAttack(EntityCreature entitycreature, double d0, boolean flag) {
this.a = entitycreature;
this.d = d0;
this.e = flag;
this.a(EnumSet.of(PathfinderGoal.Type.MOVE, PathfinderGoal.Type.LOOK));
}
@Override
public boolean a() {
long i = this.a.world.getTime();
if (i - this.k < 20L) {
return false;
} else {
this.k = i;
EntityLiving entityliving = this.a.getGoalTarget();
if (entityliving == null) {
return false;
} else if (!entityliving.isAlive()) {
return false;
} else {
this.f = this.a.getNavigation().a((Entity) entityliving, 0);
return this.f != null ? true : this.a(entityliving) >= this.a.g(entityliving.locX(), entityliving.locY(), entityliving.locZ());
}
}
}
@Override
public boolean b() {
EntityLiving entityliving = this.a.getGoalTarget();
return entityliving == null ? false : (!entityliving.isAlive() ? false : (!this.e ? !this.a.getNavigation().m() : (!this.a.a(new BlockPosition(entityliving)) ? false : !(entityliving instanceof EntityHuman) || !entityliving.isSpectator() && !((EntityHuman) entityliving).isCreative())));
}
@Override
public void c() {
this.a.getNavigation().a(this.f, this.d);
this.a.q(true);
this.g = 0;
}
@Override
public void d() {
EntityLiving entityliving = this.a.getGoalTarget();
if (!IEntitySelector.e.test(entityliving)) {
this.a.setGoalTarget((EntityLiving) null);
}
this.a.q(false);
this.a.getNavigation().o();
}
@Override
public void e() {
EntityLiving entityliving = this.a.getGoalTarget();
this.a.getControllerLook().a(entityliving, 30.0F, 30.0F);
double d0 = this.a.g(entityliving.locX(), entityliving.locY(), entityliving.locZ());
--this.g;
if ((this.e || this.a.getEntitySenses().a(entityliving)) && this.g <= 0 && (this.h == 0.0D && this.i == 0.0D && this.j == 0.0D || entityliving.g(this.h, this.i, this.j) >= 1.0D || this.a.getRandom().nextFloat() < 0.05F)) {
this.h = entityliving.locX();
this.i = entityliving.locY();
this.j = entityliving.locZ();
this.g = 4 + this.a.getRandom().nextInt(7);
if (d0 > 1024.0D) {
this.g += 10;
} else if (d0 > 256.0D) {
this.g += 5;
}
if (!this.a.getNavigation().a((Entity) entityliving, this.d)) {
this.g += 15;
}
}
this.b = Math.max(this.b - 1, 0);
this.a(entityliving, d0);
}
protected void a(EntityLiving entityliving, double d0) {
double d1 = this.a(entityliving);
if (d0 <= d1 && this.b <= 0) {
this.b = 20;
this.a.a(EnumHand.MAIN_HAND);
this.a.B(entityliving);
}
}
protected double a(EntityLiving entityliving) {
return (double) (this.a.getWidth() * 2.0F * this.a.getWidth() * 2.0F + entityliving.getWidth());
}
}