Files
OpenSlinky/SlinkyClient/src/main/java/dev/slinky/client/packet/TimingAccess.java
T
2026-10-14 22:15:53 -05:00

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);
}
}