public static Vector2f project(double x, double y, double z) {
Vector3d camera_pos = mc.getRenderManager().info.getProjectedView();
Quaternion cameraRotation = mc.getRenderManager().getCameraOrientation().copy();
cameraRotation.conjugate();
Vector3f result3f = new Vector3f((float) (camera_pos.x - x), (float) (camera_pos.y - y), (float) (camera_pos.z - z));
result3f.transform(cameraRotation);
if (mc.gameSettings.viewBobbing) {
Entity renderViewEntity = mc.getRenderViewEntity();
if (renderViewEntity instanceof PlayerEntity playerentity) {
calculateViewBobbing(playerentity, result3f);
}
}
double fov = mc.gameRenderer.getFOVModifier(mc.getRenderManager().info, mc.getRenderPartialTicks(), true);
return calculateScreenPosition(result3f, fov);
}
private static Vector2f calculateScreenPosition(Vector3f result3f, double fov) {
float halfHeight = mc.getMainWindow().getScaledHeight() / 2.0F;
float scaleFactor = halfHeight / (result3f.getZ() * (float) Math.tan(Math.toRadians(fov / 2.0F)));
if (result3f.getZ() < 0.0F) {
return new Vector2f(-result3f.getX() * scaleFactor + mc.getMainWindow().getScaledWidth() / 2.0F, mc.getMainWindow().getScaledHeight() / 2.0F - result3f.getY() * scaleFactor);
}
return new Vector2f(Float.MAX_VALUE, Float.MAX_VALUE);
}