@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event) {
if (mc.player == null || mc.level == null) {
target = null;
return;
}
if (target != null) {
Entity e = mc.level.getEntity(target.getId());
if (target.removed
|| e == null
|| !target.isAlive()
|| mc.player.distanceTo(target) > distanceSetting.getValue()) {
target = null;
}
}
if (mc.hitResult instanceof EntityRayTraceResult) {
EntityRayTraceResult result = (EntityRayTraceResult) mc.hitResult;
Entity entity = result.getEntity();
if (entity instanceof LivingEntity) {
LivingEntity newTarget = (LivingEntity) entity;
if (!newTarget.removed && newTarget.isAlive()) {
target = newTarget;
}
}
}
}
@SubscribeEvent
public void onRender3D(RenderWorldLastEvent event) {
if (target == null) return;
if (target.removed
|| mc.level.getEntity(target.getId()) == null
|| !target.isAlive()
|| target.isInvisible()
|| !mc.player.canSee(target)
|| mc.player.distanceTo(target) > distanceSetting.getValue()) {
target = null;
return;
}
MatrixStack matrixStack = event.getMatrixStack();
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuilder();
matrixStack.pushPose();
Vector3d cam = mc.getEntityRenderDispatcher().camera.getPosition();
float pt = event.getPartialTicks();
double x = MathHelper.lerp(pt, target.xOld, target.getX()) - cam.x;
double y = MathHelper.lerp(pt, target.yOld, target.getY()) - cam.y + target.getBbHeight() - 0.6f;
double z = MathHelper.lerp(pt, target.zOld, target.getZ()) - cam.z;
matrixStack.translate(x, y, z);
matrixStack.mulPose(mc.gameRenderer.getMainCamera().rotation());
matrixStack.scale(-0.15f, -0.15f, -0.15f);
RenderSystem.disableDepthTest();
RenderSystem.enableBlend();
RenderSystem.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
int index = MathHelper.clamp(espType.getIndex(), 0, espTextures.length - 1);
mc.getTextureManager().bind(espTextures[index]);
if (rotate.isEnabled()) {
updateRotation();
matrixStack.mulPose(Vector3f.ZP.rotationDegrees(rotationAngle));
}
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.vertex(matrixStack.last().pose(), 5, 5, 0).uv(0, 0).endVertex();
buffer.vertex(matrixStack.last().pose(), 5, -5, 0).uv(0, 1).endVertex();
buffer.vertex(matrixStack.last().pose(), -5, -5, 0).uv(1, 1).endVertex();
buffer.vertex(matrixStack.last().pose(), -5, 5, 0).uv(1, 0).endVertex();
tessellator.end();
RenderSystem.disableBlend();
RenderSystem.enableDepthTest();
matrixStack.popPose();
}
private void updateRotation() {
if (!reversing) {
rotationSpeed += acceleration;
if (rotationSpeed >= maxRotationSpeed) {
reversing = true;
}
} else {
rotationSpeed -= acceleration;
if (rotationSpeed <= -maxRotationSpeed) {
reversing = false;
}
}
rotationAngle += rotationSpeed;
rotationAngle = (rotationAngle + 360) % 360;
}
}