Скрытое содержимое
ну это, пожалуйста, я тоже взял за базу драг, а времени на перенос 0, есп 11/10
		
		
	 
package fun.waileent.modules.impl.render;
import fun.waileent.Waileent;
import fun.waileent.api.events.impl.EventRender2D;
import fun.waileent.modules.api.Category;
import fun.waileent.modules.api.Module;
import fun.waileent.modules.impl.combat.Aura;
import fun.waileent.modules.settings.impl.NumberSetting;
import fun.waileent.utils.animations.Animation;
import fun.waileent.utils.animations.Easing;
import fun.waileent.utils.render.ColorUtils;
import fun.waileent.utils.render.Render2D;
import fun.waileent.utils.world.WorldUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import com.mojang.blaze3d.systems.RenderSystem;
import java.awt.*;
public class TargetEsp extends Module {
private final NumberSetting size = new NumberSetting("Size", 15f, 10f, 25f, 1f);
 public TargetEsp() {
super("TargetEsp", Category.Render);
    }
private final Animation markerAnimation = new Animation(300, 1f, true, Easing.BOTH_SINE);
private LivingEntity lastTarget = null;
private static final Identifier BLOOM_TEXTURE = Waileent.id("hud/bloom.png");
    
@EventHandler
 public void onRender2D(EventRender2D e) {
if (fullNullCheck()) return;
Aura aura = Waileent.getInstance().getModuleManager().getModule(Aura.class);
if (aura.getTarget() != null) lastTarget = aura.getTarget();
markerAnimation.update(aura.getTarget() != null);
if (markerAnimation.getValue() > 0 && lastTarget != null) {
 if (lastTarget.isRemoved() || !lastTarget.isAlive()) {
lastTarget = null;
 return;
            }
            drawGhosts(e.getContext().getMatrices(), lastTarget);
        }
    }
 private void drawGhosts(MatrixStack matrix, LivingEntity target) {
        matrix.push();
 float alphaPC = markerAnimation.getValue();
if (alphaPC == 0.0F || target == null) {
            matrix.pop();
 return;
        }
Vec3d vec = target.getLerpedPos(mc.getRenderTickCounter().getTickDelta(true));
 double baseX = vec.x;
double baseY = vec.y + target.getHeight() / 2f;
 double baseZ = vec.z;
final double radius = 0.55f;
final float speed = 30f;
final double distanceStep = 1.5;
final int trailLength = 200; // уменьшил длину для оптимизации
        long time = System.currentTimeMillis();
float hurtPC = (float) Math.sin(target.hurtTime * (1F * Math.PI / 25F));
        Vec3d cameraPos = mc.gameRenderer.getCamera().getPos();
        RenderSystem.getShader();
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableDepthTest();
RenderSystem.depthMask(false);
RenderSystem.setShaderTexture(0, BLOOM_TEXTURE);
for (int i = 0; i < trailLength; i++) {
double angle = 0.1f * (time - i * distanceStep) / speed;
 double s = Math.sin(angle) * radius;
 double c = Math.cos(angle) * radius;
double[][] points = new double[][]{
                    {baseX + s, baseY + c, baseZ - c},
                    {baseX - s, baseY + s, baseZ - c},
                    {baseX - s, baseY - s, baseZ + c}
            };
float progress = (float) i / trailLength;
float sizeFactor = (float) Math.pow(1.0f - progress, 1.1F);
for (double[] pos : points) {
Vec3d particlePos = new Vec3d(pos[0], pos[1], pos[2]);
                Vec3d screenPos = WorldUtils.getPosition(particlePos);
if (!(screenPos.z > 0) || !(screenPos.z < 1)) continue;
 double distance = cameraPos.distanceTo(particlePos);
float distanceScale = (float) (85.0f / Math.max(0.1, distance));
 float finalSize = distanceScale * sizeFactor;
float alphaTrail = alphaPC * (1f - progress * progress) * 0.4f;
Color baseColor = ColorUtils.multAlpha(new Color(255, 255, 255), alphaTrail);
Color red = ColorUtils.multAlpha(new Color(255, 0, 0), alphaTrail);
                Color finalColor = ColorUtils.overColor(baseColor, red, hurtPC);
float rotation = (float) (time / 5.0 + i * 5) % 180;
                matrix.push();
matrix.translate(screenPos.x, screenPos.y, 0);
                matrix.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(rotation));
                Render2D.drawTexture(matrix,
-finalSize / 2f, -finalSize / 2f,
finalSize, finalSize, 0f,
                        BLOOM_TEXTURE, finalColor);
                matrix.pop();
            }
        }
        RenderSystem.enableDepthTest();
        RenderSystem.disableBlend();
RenderSystem.depthMask(true);
        matrix.pop();
    }
}
вот тебе призраки