84 lines
2.9 KiB
Java
84 lines
2.9 KiB
Java
package dev.slinky.client.packet;
|
|
|
|
import dev.slinky.client.ClientContext;
|
|
import dev.slinky.client.rotation.RotationMath;
|
|
import dev.slinky.inject.ReflectionHelper;
|
|
import java.lang.reflect.Field;
|
|
import net.minecraft.client.entity.EntityOtherPlayerMP;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.util.Vec3;
|
|
|
|
public final strictfp class TimingAccess {
|
|
private static final Field X = ReflectionHelper.findField(EntityOtherPlayerMP.class, "otherPlayerMPX", "field_71185_c");
|
|
private static final Field Y = ReflectionHelper.findField(EntityOtherPlayerMP.class, "otherPlayerMPY", "field_71182_d");
|
|
private static final Field Z = ReflectionHelper.findField(EntityOtherPlayerMP.class, "otherPlayerMPZ", "field_71183_e");
|
|
private static final Field TICKS = ReflectionHelper.findField(EntityOtherPlayerMP.class, "otherPlayerMPPosRotationIncrements", "field_71184_b");
|
|
private static final Field YAW = ReflectionHelper.findField(EntityOtherPlayerMP.class, "otherPlayerMPYaw", "field_71180_f");
|
|
|
|
private TimingAccess() {
|
|
}
|
|
|
|
public static strictfp Vec3 position(Entity p) {
|
|
return new Vec3(p.posX, p.posY, p.posZ);
|
|
}
|
|
|
|
public static strictfp Vec3 server(Entity p) {
|
|
if (!(p instanceof EntityOtherPlayerMP)) {
|
|
return position(p);
|
|
} else {
|
|
try {
|
|
return new Vec3(X.getDouble(p), Y.getDouble(p), Z.getDouble(p));
|
|
} catch (IllegalAccessException var2) {
|
|
throw new IllegalStateException(var2);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static strictfp int interpolationTicks(Entity p) {
|
|
if (!(p instanceof EntityOtherPlayerMP)) {
|
|
return 0;
|
|
} else {
|
|
try {
|
|
return TICKS.getInt(p);
|
|
} catch (IllegalAccessException var2) {
|
|
throw new IllegalStateException(var2);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static strictfp double serverYaw(Entity p) {
|
|
if (!(p instanceof EntityOtherPlayerMP)) {
|
|
return (double)p.rotationYaw;
|
|
} else {
|
|
try {
|
|
return YAW.getDouble(p);
|
|
} catch (IllegalAccessException var2) {
|
|
throw new IllegalStateException(var2);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static strictfp boolean facingPlayer(ClientContext c) {
|
|
Vec3 self = position(c.player());
|
|
|
|
for (EntityPlayer p : c.world().playerEntities) {
|
|
if (p != c.player() && !(squared(self, position(p)) > 36.0)) {
|
|
float angle = RotationMath.wrap(RotationMath.angles(self, position(p))[0] - c.player().rotationYaw);
|
|
if (!(RotationMath.abs(angle) > 90.0F)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static strictfp double squared(Vec3 a, Vec3 b) {
|
|
double x = a.xCoord - b.xCoord;
|
|
double y = a.yCoord - b.yCoord;
|
|
double z = a.zCoord - b.zCoord;
|
|
return z * z + (x * x + y * y);
|
|
}
|
|
}
|