2017-12-30 08:36:36 +01:00
|
|
|
package net.citizensnpcs.nms.v1_10_R1.util;
|
|
|
|
|
|
|
|
import java.util.Random;
|
|
|
|
import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC;
|
|
|
|
import net.citizensnpcs.util.NMS;
|
|
|
|
import net.minecraft.server.v1_10_R1.AttributeInstance;
|
|
|
|
import net.minecraft.server.v1_10_R1.ControllerMove;
|
|
|
|
import net.minecraft.server.v1_10_R1.EntityInsentient;
|
|
|
|
import net.minecraft.server.v1_10_R1.EntityLiving;
|
|
|
|
import net.minecraft.server.v1_10_R1.EntitySlime;
|
|
|
|
import net.minecraft.server.v1_10_R1.GenericAttributes;
|
|
|
|
import net.minecraft.server.v1_10_R1.MathHelper;
|
|
|
|
|
|
|
|
public class PlayerControllerMove extends ControllerMove {
|
|
|
|
protected EntityLiving a;
|
|
|
|
protected double b;
|
|
|
|
protected double c;
|
|
|
|
protected double d;
|
|
|
|
protected double e;
|
|
|
|
protected boolean f;
|
|
|
|
private int h;
|
|
|
|
|
|
|
|
public PlayerControllerMove(EntityLiving entityinsentient) {
|
|
|
|
super(entityinsentient instanceof EntityInsentient ? (EntityInsentient) entityinsentient
|
|
|
|
: new EntitySlime(entityinsentient.world));
|
|
|
|
this.a = entityinsentient;
|
|
|
|
this.b = entityinsentient.locX;
|
|
|
|
this.c = entityinsentient.locY;
|
|
|
|
this.d = entityinsentient.locZ;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean a() {
|
|
|
|
return this.f;
|
|
|
|
}
|
|
|
|
|
|
|
|
@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 double b() {
|
|
|
|
return this.e;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void c() {
|
|
|
|
this.a.bf = 0F;
|
|
|
|
if (this.f) {
|
|
|
|
this.f = false;
|
|
|
|
int i = MathHelper.floor(this.a.getBoundingBox().b + 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)
|
|
|
|
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);
|
|
|
|
AttributeInstance speed = this.a.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
|
|
|
|
speed.setValue(0.1D * this.e);
|
|
|
|
float movement = (float) (this.e * speed.getValue()) * 10;
|
2018-04-08 18:17:17 +02:00
|
|
|
this.a.l(movement);
|
2017-12-30 08:36:36 +01:00
|
|
|
this.a.bg = movement;
|
2020-12-15 18:16:04 +01:00
|
|
|
if (shouldSlimeJump() || ((d2 >= NMS.getStepHeight(a.getBukkitEntity())) && (d0 * d0 + d1 * d1 < 1.0D))) {
|
2017-12-30 08:36:36 +01:00
|
|
|
this.h = cg();
|
|
|
|
this.h /= 3;
|
|
|
|
if (this.a instanceof EntityHumanNPC) {
|
|
|
|
((EntityHumanNPC) this.a).getControllerJump().a();
|
|
|
|
} else {
|
|
|
|
((EntityInsentient) this.a).getControllerJump().a();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2014-11-28 16:22:11 +01:00
|
|
|
}
|