Citizens2/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/EntityMoveControl.java

130 lines
3.6 KiB
Java

package net.citizensnpcs.nms.v1_16_R3.util;
import java.util.Random;
import net.citizensnpcs.util.NMS;
import net.minecraft.server.v1_16_R3.AttributeModifiable;
import net.minecraft.server.v1_16_R3.ControllerMove;
import net.minecraft.server.v1_16_R3.EntityInsentient;
import net.minecraft.server.v1_16_R3.EntityLiving;
import net.minecraft.server.v1_16_R3.EntitySlime;
import net.minecraft.server.v1_16_R3.EntityTypes;
import net.minecraft.server.v1_16_R3.GenericAttributes;
import net.minecraft.server.v1_16_R3.MathHelper;
public class EntityMoveControl extends ControllerMove {
protected EntityLiving a;
private final MobAI ai;
protected double b;
protected double c;
protected double d;
protected double e;
protected boolean f;
private int h;
public EntityMoveControl(EntityLiving entityinsentient) {
super(entityinsentient instanceof EntityInsentient ? (EntityInsentient) entityinsentient
: new EntitySlime(EntityTypes.SLIME, entityinsentient.world));
this.a = entityinsentient;
this.ai = MobAI.from(entityinsentient);
this.b = entityinsentient.locX();
this.c = entityinsentient.locY();
this.d = entityinsentient.locZ();
}
@Override
public void a() {
this.a.aT = 0F;
if (this.f) {
this.f = false;
int i = MathHelper.floor(this.a.getBoundingBox().minY + 0.5D);
double d0 = this.b - this.a.locX();
double d1 = this.d - this.a.locZ();
double d2 = this.c - i;
double d3 = d0 * d0 + d2 * d2 + d1 * d1;
if (d3 < 2.500000277905201E-007D) {
this.a.aT = 0.0F;
return;
}
float f = (float) Math.toDegrees(Math.atan2(d1, d0)) - 90.0F;
this.a.yaw = a(this.a.yaw, f, 90.0F);
NMS.setHeadYaw(a.getBukkitEntity(), this.a.yaw);
AttributeModifiable speed = this.a.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
speed.setValue(0.3D * this.e);
float movement = (float) (this.e * speed.getValue());
this.a.q(movement);
this.a.aT = movement;
if (shouldSlimeJump() || (d2 >= NMS.getStepHeight(a.getBukkitEntity()) && (d0 * d0 + d1 * d1) < 1.0D)) {
this.h = cg();
this.h /= 3;
ai.getJumpControl().jump();
}
}
}
@Override
public void a(double d0, double d1, double d2, double d3) {
this.b = d0;
this.c = d1;
this.d = d2;
this.e = d3;
this.f = true;
}
@Override
protected float a(float f, float f1, float f2) {
float f3 = MathHelper.g(f1 - f);
if (f3 > f2) {
f3 = f2;
}
if (f3 < -f2) {
f3 = -f2;
}
float f4 = f + f3;
if (f4 < 0.0F)
f4 += 360.0F;
else if (f4 > 360.0F) {
f4 -= 360.0F;
}
return f4;
}
@Override
public boolean b() {
return this.f;
}
@Override
public double c() {
return this.e;
}
protected int cg() {
return new Random().nextInt(20) + 10;
}
@Override
public double d() {
return this.b;
}
@Override
public double e() {
return this.c;
}
@Override
public double f() {
return this.d;
}
private boolean shouldSlimeJump() {
if (!(this.a instanceof EntitySlime)) {
return false;
}
if (this.h-- <= 0) {
return true;
}
return false;
}
}