import java.util.List;
public abstract class OEntityLiving extends OEntity {
public int C = 20;
public float D;
public float E;
public float F = 0.0F;
public float G = 0.0F;
protected float H;
protected float I;
protected float J;
protected float K;
protected boolean L = true;
protected String M = "/mob/char.png";
protected boolean N = true;
protected float O = 0.0F;
protected String P = null;
protected float Q = 1.0F;
protected int R = 0;
protected float S = 0.0F;
public boolean T = false;
public float U;
public float V;
public int W;
public int X;
private int a;
public int Y;
public int Z;
public float aa = 0.0F;
public int ab = 0;
public int ac = 0;
public float ad;
public float ae;
protected boolean af = false;
public int ag = -1;
public float ah = (float) (Math.random() * 0.8999999761581421D + 0.1000000014901161D);
public float ai;
public float aj;
public float ak;
protected int al;
protected double am;
protected double an;
protected double ao;
protected double ap;
protected double aq;
float ar = 0.0F;
protected int as = 0;
protected int at = 0;
protected float au;
protected float av;
protected float aw;
protected boolean ax = false;
protected float ay = 0.0F;
protected float az = 0.7F;
private OEntity b;
protected int aA = 0;
public OEntityLiving(OWorld paramOWorld) {
super(paramOWorld);
W = 10;
aD = true;
E = ((float) (Math.random() + 1.0D) * 0.01F);
a(aK, aL, aM);
D = ((float) Math.random() * 12398.0F);
aQ = (float) (Math.random() * 3.141592741012573D * 2.0D);
bm = 0.5F;
}
@Override
protected void a() {
}
public boolean e(OEntity paramOEntity) {
return aG.a(OVec3D.b(aK, aL + q(), aM), OVec3D.b(paramOEntity.aK, paramOEntity.aL + paramOEntity.q(), paramOEntity.aM)) == null;
}
@Override
public boolean d_() {
return !bb;
}
@Override
public boolean e_() {
return !bb;
}
@Override
public float q() {
return be * 0.85F;
}
public int c() {
return 80;
}
public void K() {
String str = e();
if (str != null)
aG.a(this, str, i(), (bq.nextFloat() - bq.nextFloat()) * 0.2F + 1.0F);
}
@Override
public void L() {
U = V;
super.L();
if (bq.nextInt(1000) < a++) {
a = (-c());
K();
}
if ((N()) && (E()))
// hMod Damage hook: Suffocation
if (!(Boolean) manager.callHook(PluginLoader.Hook.DAMAGE, PluginLoader.DamageType.SUFFOCATION, null, entity, 1))
a((OEntity) null, 1);
if ((by) || (aG.t))
bt = 0;
int i;
if ((N()) && (a(OMaterial.f)) && (!b_())) {
bx -= 1;
if (bx == -20) {
bx = 0;
for (i = 0; i < 8; i++) {
float f1 = bq.nextFloat() - bq.nextFloat();
float f2 = bq.nextFloat() - bq.nextFloat();
float f3 = bq.nextFloat() - bq.nextFloat();
aG.a("bubble", aK + f1, aL + f2, aM + f3, aN, aO, aP);
}
// hMod Damage hook: Drowning
if (!(Boolean) manager.callHook(PluginLoader.Hook.DAMAGE, PluginLoader.DamageType.WATER, null, entity, 2))
a((OEntity) null, 2);
}
bt = 0;
} else
bx = bu;
ad = ae;
if (ac > 0)
ac -= 1;
if (Y > 0)
Y -= 1;
if (bw > 0)
bw -= 1;
if (W <= 0) {
ab += 1;
if (ab > 20) {
Q();
D();
for (i = 0; i < 20; i++) {
double d1 = bq.nextGaussian() * 0.02D;
double d2 = bq.nextGaussian() * 0.02D;
double d3 = bq.nextGaussian() * 0.02D;
aG.a("explode", aK + bq.nextFloat() * bd * 2.0F - bd, aL + bq.nextFloat() * be, aM + bq.nextFloat() * bd * 2.0F - bd, d1, d2, d3);
}
}
}
K = J;
G = F;
aS = aQ;
aT = aR;
}
public void M() {
for (int i = 0; i < 20; i++) {
double d1 = bq.nextGaussian() * 0.02D;
double d2 = bq.nextGaussian() * 0.02D;
double d3 = bq.nextGaussian() * 0.02D;
double d4 = 10.0D;
aG.a("explode", aK + bq.nextFloat() * bd * 2.0F - bd - d1 * d4, aL + bq.nextFloat() * be - d2 * d4, aM + bq.nextFloat() * bd * 2.0F - bd - d3 * d4, d1, d2, d3);
}
}
@Override
public void o_() {
super.o_();
H = I;
I = 0.0F;
}
@Override
public void f_() {
super.f_();
r();
double d1 = aK - aH;
double d2 = aM - aJ;
float f1 = OMathHelper.a(d1 * d1 + d2 * d2);
float f2 = F;
float f3 = 0.0F;
H = I;
float f4 = 0.0F;
if (f1 > 0.05F) {
f4 = 1.0F;
f3 = f1 * 3.0F;
f2 = (float) Math.atan2(d2, d1) * 180.0F / 3.141593F - 90.0F;
}
if (V > 0.0F)
f2 = aQ;
if (!aV)
f4 = 0.0F;
I += (f4 - I) * 0.3F;
float f5 = f2 - F;
while (f5 < -180.0F)
f5 += 360.0F;
while (f5 >= 180.0F)
f5 -= 360.0F;
F += f5 * 0.3F;
float f6 = aQ - F;
while (f6 < -180.0F)
f6 += 360.0F;
while (f6 >= 180.0F)
f6 -= 360.0F;
int i = (f6 < -90.0F) || (f6 >= 90.0F) ? 1 : 0;
if (f6 < -75.0F)
f6 = -75.0F;
if (f6 >= 75.0F)
f6 = 75.0F;
F = (aQ - f6);
if (f6 * f6 > 2500.0F)
F += f6 * 0.2F;
if (i != 0)
f3 *= -1.0F;
while (aQ - aS < -180.0F)
aS -= 360.0F;
while (aQ - aS >= 180.0F)
aS += 360.0F;
while (F - G < -180.0F)
G -= 360.0F;
while (F - G >= 180.0F)
G += 360.0F;
while (aR - aT < -180.0F)
aT -= 360.0F;
while (aR - aT >= 180.0F)
aT += 360.0F;
J += f3;
}
@Override
protected void b(float paramFloat1, float paramFloat2) {
super.b(paramFloat1, paramFloat2);
}
public void b(int paramInt) {
if (W <= 0)
return;
W += paramInt;
if (W > 20)
W = 20;
bw = (C / 2);
}
@Override
public boolean a(OEntity paramOEntity, int paramInt) {
if (aG.t)
return false;
at = 0;
if (W <= 0)
return false;
aj = 1.5F;
// hMod damage entities.
LivingEntity attacker = (paramOEntity != null && paramOEntity instanceof OEntityLiving) ? new LivingEntity((OEntityLiving) paramOEntity) : null;
// hMod attack by entity, but it might not do damage!
if (attacker != null && (Boolean) manager.callHook(PluginLoader.Hook.ATTACK, attacker, entity, paramInt))
return false;
int i = 1;
if (bw > C / 2.0F) {
if (paramInt <= as)
return false;
// hMod: partial damage
if (attacker != null && (Boolean) manager.callHook(PluginLoader.Hook.DAMAGE, PluginLoader.DamageType.ENTITY, attacker, entity, paramInt - as))
return false;
c(paramInt - as);
as = paramInt;
i = 0;
} else {
// hMod: full damage
if (attacker != null && (Boolean) manager.callHook(PluginLoader.Hook.DAMAGE, PluginLoader.DamageType.ENTITY, attacker, entity, paramInt))
return false;
as = paramInt;
X = W;
bw = C;
c(paramInt);
Y = (Z = 10);
}
aa = 0.0F;
if (i != 0) {
// hMod: Forced cast to play Death Animations.
aG.a(this, (byte)2);
W();
if (paramOEntity != null) {
double d1 = paramOEntity.aK - aK;
double d2 = paramOEntity.aM - aM;
while (d1 * d1 + d2 * d2 < 0.0001D) {
d1 = (Math.random() - Math.random()) * 0.01D;
d2 = (Math.random() - Math.random()) * 0.01D;
}
aa = ((float) (Math.atan2(d2, d1) * 180.0D / 3.141592741012573D) - aQ);
a(paramOEntity, paramInt, d1, d2);
} else
aa = ((int) (Math.random() * 2.0D) * 180);
}
if (W <= 0) {
if (i != 0)
aG.a(this, g(), i(), (bq.nextFloat() - bq.nextFloat()) * 0.2F + 1.0F);
a(paramOEntity);
} else if (i != 0)
aG.a(this, f(), i(), (bq.nextFloat() - bq.nextFloat()) * 0.2F + 1.0F);
return true;
}
protected void c(int paramInt) {
W -= paramInt;
}
protected float i() {
return 1.0F;
}
protected String e() {
return null;
}
protected String f() {
return "random.hurt";
}
protected String g() {
return "random.hurt";
}
public void a(OEntity paramOEntity, int paramInt, double paramDouble1, double paramDouble2) {
float f1 = OMathHelper.a(paramDouble1 * paramDouble1 + paramDouble2 * paramDouble2);
float f2 = 0.4F;
aN /= 2.0D;
aO /= 2.0D;
aP /= 2.0D;
aN -= paramDouble1 / f1 * f2;
aO += 0.4000000059604645D;
aP -= paramDouble2 / f1 * f2;
if (aO > 0.4000000059604645D)
aO = 0.4000000059604645D;
}
public void a(OEntity paramOEntity) {
if ((R >= 0) && (paramOEntity != null))
paramOEntity.c(this, R);
af = true;
if (!aG.t)
p();
// hMod: Forced cast to play Death Animations.
aG.a(this, (byte)3);
}
protected void p() {
int i = h();
if (i > 0) {
int j = bq.nextInt(3);
for (int k = 0; k < j; k++)
b(i, 1);
}
}
protected int h() {
return 0;
}
@Override
protected void a(float paramFloat) {
int i = (int) Math.ceil(paramFloat - 3.0F);
if (i > 0) {
// hMod Damage hook: Falling
if (!(Boolean) manager.callHook(PluginLoader.Hook.DAMAGE, PluginLoader.DamageType.FALL, null, entity, i))
a((OEntity) null, i);
int j = aG.a(OMathHelper.b(aK), OMathHelper.b(aL - 0.2000000029802322D - bc), OMathHelper.b(aM));
if (j > 0) {
OStepSound localOStepSound = OBlock.m[j].bu;
aG.a(this, localOStepSound.c(), localOStepSound.a() * 0.5F, localOStepSound.b() * 0.75F);
}
}
}
public void a(float paramFloat1, float paramFloat2) {
if (g_()) {
double d1 = aL;
a(paramFloat1, paramFloat2, 0.02F);
c(aN, aO, aP);
aN *= 0.800000011920929D;
aO *= 0.800000011920929D;
aP *= 0.800000011920929D;
aO -= 0.02D;
if ((aW) && (b(aN, aO + 0.6000000238418579D - aL + d1, aP)))
aO = 0.300000011920929D;
} else if (V()) {
double d1 = aL;
a(paramFloat1, paramFloat2, 0.02F);
c(aN, aO, aP);
aN *= 0.5D;
aO *= 0.5D;
aP *= 0.5D;
aO -= 0.02D;
if ((aW) && (b(aN, aO + 0.6000000238418579D - aL + d1, aP)))
aO = 0.300000011920929D;
} else {
float f1 = 0.91F;
if (aV) {
f1 = 0.5460001F;
int i = aG.a(OMathHelper.b(aK), OMathHelper.b(aU.b) - 1, OMathHelper.b(aM));
if (i > 0)
f1 = OBlock.m[i].bx * 0.91F;
}
float f2 = 0.1627714F / (f1 * f1 * f1);
a(paramFloat1, paramFloat2, aV ? 0.1F * f2 : 0.02F);
f1 = 0.91F;
if (aV) {
f1 = 0.5460001F;
int j = aG.a(OMathHelper.b(aK), OMathHelper.b(aU.b) - 1, OMathHelper.b(aM));
if (j > 0)
f1 = OBlock.m[j].bx * 0.91F;
}
if (n()) {
bh = 0.0F;
if (aO < -0.15D)
aO = -0.15D;
if ((Z()) && (aO < 0.0D))
aO = 0.0D;
}
c(aN, aO, aP);
if ((aW) && (n()))
aO = 0.2D;
aO -= 0.08D;
aO *= 0.9800000190734863D;
aN *= f1;
aP *= f1;
}
ai = aj;
double d1 = aK - aH;
double d2 = aM - aJ;
float f3 = OMathHelper.a(d1 * d1 + d2 * d2) * 4.0F;
if (f3 > 1.0F)
f3 = 1.0F;
aj += (f3 - aj) * 0.4F;
ak += aj;
}
public boolean n() {
int i = OMathHelper.b(aK);
int j = OMathHelper.b(aU.b);
int k = OMathHelper.b(aM);
return (aG.a(i, j, k) == OBlock.aF.bl) || (aG.a(i, j + 1, k) == OBlock.aF.bl);
}
@Override
public void a(ONBTTagCompound paramONBTTagCompound) {
paramONBTTagCompound.a("Health", (short) W);
paramONBTTagCompound.a("HurtTime", (short) Y);
paramONBTTagCompound.a("DeathTime", (short) ab);
paramONBTTagCompound.a("AttackTime", (short) ac);
}
@Override
public void b(ONBTTagCompound paramONBTTagCompound) {
W = paramONBTTagCompound.d("Health");
if (!paramONBTTagCompound.b("Health"))
W = 10;
Y = paramONBTTagCompound.d("HurtTime");
ab = paramONBTTagCompound.d("DeathTime");
ac = paramONBTTagCompound.d("AttackTime");
}
@Override
public boolean N() {
return (!bb) && (W > 0);
}
public boolean b_() {
return false;
}
public void r() {
if (al > 0) {
double d1 = aK + (am - aK) / al;
double d2 = aL + (an - aL) / al;
double d3 = aM + (ao - aM) / al;
double d4 = ap - aQ;
while (d4 < -180.0D)
d4 += 360.0D;
while (d4 >= 180.0D)
d4 -= 360.0D;
aQ = (float) (aQ + d4 / al);
aR = (float) (aR + (aq - aR) / al);
al -= 1;
a(d1, d2, d3);
c(aQ, aR);
}
if (p_()) {
ax = false;
au = 0.0F;
av = 0.0F;
aw = 0.0F;
} else if (!T)
c_();
boolean bool1 = g_();
boolean bool2 = V();
if (ax)
if (bool1)
aO += 0.03999999910593033D;
else if (bool2)
aO += 0.03999999910593033D;
else if (aV)
I();
au *= 0.98F;
av *= 0.98F;
aw *= 0.9F;
a(au, av);
List localList = aG.b(this, aU.b(0.2000000029802322D, 0.0D, 0.2000000029802322D));
if ((localList != null) && (localList.size() > 0))
for (int i = 0; i < localList.size(); i++) {
OEntity localOEntity = (OEntity) localList.get(i);
if (!localOEntity.e_())
continue;
localOEntity.h(this);
}
}
protected boolean p_() {
return W <= 0;
}
protected void I() {
aO = 0.4199999868869782D;
}
protected boolean s() {
return true;
}
protected void c_() {
at += 1;
OEntityPlayer localOEntityPlayer = aG.a(this, -1.0D);
if ((s()) && (localOEntityPlayer != null)) {
double d1 = localOEntityPlayer.aK - aK;
double d2 = localOEntityPlayer.aL - aL;
double d3 = localOEntityPlayer.aM - aM;
double d4 = d1 * d1 + d2 * d2 + d3 * d3;
if (d4 > 16384.0D)
D();
if ((at > 600) && (bq.nextInt(800) == 0))
if (d4 < 1024.0D)
at = 0;
else
D();
}
au = 0.0F;
av = 0.0F;
float f = 8.0F;
if (bq.nextFloat() < 0.02F) {
localOEntityPlayer = aG.a(this, f);
if (localOEntityPlayer != null) {
b = localOEntityPlayer;
aA = (10 + bq.nextInt(20));
} else
aw = ((bq.nextFloat() - 0.5F) * 20.0F);
}
if (b != null) {
a(b, 10.0F, n_());
if ((aA-- <= 0) || (b.bb) || (b.g(this) > f * f))
b = null;
} else {
if (bq.nextFloat() < 0.05F)
aw = ((bq.nextFloat() - 0.5F) * 20.0F);
aQ += aw;
aR = ay;
}
boolean bool1 = g_();
boolean bool2 = V();
if ((bool1) || (bool2))
ax = (bq.nextFloat() < 0.8F);
}
protected int n_() {
return 10;
}
public void a(OEntity paramOEntity, float paramFloat1, float paramFloat2) {
double d1 = paramOEntity.aK - aK;
double d2 = paramOEntity.aM - aM;
double d3;
if ((paramOEntity instanceof OEntityLiving)) {
OEntityLiving localOEntityLiving = (OEntityLiving) paramOEntity;
d3 = aL + q() - (localOEntityLiving.aL + localOEntityLiving.q());
} else
d3 = (paramOEntity.aU.b + paramOEntity.aU.e) / 2.0D - (aL + q());
double d4 = OMathHelper.a(d1 * d1 + d2 * d2);
float f1 = (float) (Math.atan2(d2, d1) * 180.0D / 3.141592741012573D) - 90.0F;
float f2 = (float) (Math.atan2(d3, d4) * 180.0D / 3.141592741012573D);
aR = (-b(aR, f2, paramFloat2));
aQ = b(aQ, f1, paramFloat1);
}
public boolean O() {
return b != null;
}
public OEntity P() {
return b;
}
private float b(float paramFloat1, float paramFloat2, float paramFloat3) {
float f = paramFloat2 - paramFloat1;
while (f < -180.0F)
f += 360.0F;
while (f >= 180.0F)
f -= 360.0F;
if (f > paramFloat3)
f = paramFloat3;
if (f < -paramFloat3)
f = -paramFloat3;
return paramFloat1 + f;
}
public void Q() {
}
public boolean b() {
return (aG.a(aU)) && (aG.a(this, aU).size() == 0) && (!aG.b(aU));
}
@Override
protected void R() {
a((OEntity)null, 4);
}
@Override
public OVec3D S() {
return b(1.0F);
}
public OVec3D b(float paramFloat) {
if (paramFloat == 1.0F) {
float f1 = OMathHelper.b(-aQ * 0.01745329F - 3.141593F);
float f2 = OMathHelper.a(-aQ * 0.01745329F - 3.141593F);
float f3 = -OMathHelper.b(-aR * 0.01745329F);
float f4 = OMathHelper.a(-aR * 0.01745329F);
return OVec3D.b(f2 * f3, f4, f1 * f3);
}
float f1 = aT + (aR - aT) * paramFloat;
float f2 = aS + (aQ - aS) * paramFloat;
float f3 = OMathHelper.b(-f2 * 0.01745329F - 3.141593F);
float f4 = OMathHelper.a(-f2 * 0.01745329F - 3.141593F);
float f5 = -OMathHelper.b(-f1 * 0.01745329F);
float f6 = OMathHelper.a(-f1 * 0.01745329F);
return OVec3D.b(f4 * f5, f6, f3 * f5);
}
public int j() {
return 4;
}
public boolean F() {
return false;
}
}