Начинающий
- Статус
- Оффлайн
- Регистрация
- 26 Янв 2026
- Сообщения
- 13
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
увидел что многие срут за мой таргет худик любименький
переделал его к чёрту
жоские $$$$elfcode:
package fun.rich.display.hud;
import fun.rich.Rich;
import fun.rich.utils.interactions.interact.PlayerInteractionHelper;
import fun.rich.utils.math.time.StopWatch;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.state.LivingEntityRenderState;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import fun.rich.utils.client.managers.api.draggable.AbstractDraggable;
import fun.rich.features.impl.combat.Aura;
import fun.rich.features.impl.render.Hud;
import fun.rich.common.animation.Animation;
import fun.rich.common.animation.Direction;
import fun.rich.common.animation.implement.Decelerate;
import fun.rich.utils.display.font.FontRenderer;
import fun.rich.utils.display.font.Fonts;
import fun.rich.utils.display.shape.ShapeProperties;
import fun.rich.utils.display.color.ColorAssist;
import fun.rich.utils.interactions.item.ItemTask;
import fun.rich.utils.math.calc.Calculate;
import fun.rich.utils.display.geometry.Render2D;
import fun.rich.utils.display.scissor.ScissorAssist;
import fun.rich.utils.client.packet.network.Network;
import java.awt.*;
import java.util.function.Function;
public class TargetHud extends AbstractDraggable {
private final Animation animation = new Decelerate().setMs(650).setValue(1);
private final Animation faceAlphaAnimation = new Decelerate().setMs(125).setValue(1);
private final StopWatch stopWatch = new StopWatch();
private final StopWatch distanceUpdateTimer = new StopWatch();
private LivingEntity lastTarget;
private Item lastItem = Items.AIR;
private float health;
private float absorption;
private float displayedDistance;
public TargetHud() {
super("Target Hud", 10, 80, 100, 36, true);
}
@Override
public boolean visible() {
return scaleAnimation.isDirection(Direction.FORWARDS);
}
@Override
public void tick() {
LivingEntity auraTarget = Aura.getInstance().getTarget();
if (auraTarget != null) {
lastTarget = auraTarget;
startAnimation();
faceAlphaAnimation.setDirection(Direction.FORWARDS);
} else if (PlayerInteractionHelper.isChat(mc.currentScreen)) {
lastTarget = mc.player;
startAnimation();
faceAlphaAnimation.setDirection(Direction.FORWARDS);
} else if (stopWatch.finished(500)) {
stopAnimation();
faceAlphaAnimation.setDirection(Direction.BACKWARDS);
}
}
@Override
public void drawDraggable(DrawContext context) {
if (Hud.getInstance().interfaceSettings.isSelected("Target Hud") && Hud.getInstance().state) {
if (lastTarget != null) {
MatrixStack matrix = context.getMatrices();
drawUsingItem(context, matrix);
drawMain(context, matrix);
drawArmor(context, matrix);
drawFace(context);
}
}
}
private void drawMain(DrawContext context, MatrixStack matrix) {
if (lastTarget == null) return;
float baseX = getX();
float baseY = getY();
float hp = lastTarget.getHealth();
float maxHp = lastTarget.getMaxHealth();
float percent = MathHelper.clamp(hp / maxHp, 0F, 1F);
health = Calculate.interpolateSmooth(0.35f, health, percent);
float distance = mc.player.distanceTo(lastTarget);
displayedDistance = Calculate.interpolateSmooth(0.35f, displayedDistance, distance);
float width = 102f;
float height = 34f;
setWidth((int) width);
setHeight((int) height);
rectangle.render(ShapeProperties.create(matrix, baseX, baseY, width, height)
.round(8)
.color(new Color(20, 20, 24, 210).getRGB())
.build());
Fonts.getSize(15, Fonts.Type.SEMI).drawString(
matrix,
lastTarget.getName().getString(),
baseX + 32,
baseY + 5,
Color.WHITE.getRGB()
);
Fonts.getSize(10, Fonts.Type.REGULAR).drawString(
matrix,
String.format("%.1fm", displayedDistance),
baseX + 32,
baseY + 15,
new Color(170, 170, 170).getRGB()
);
float barWidth = 55f;
float current = barWidth * health;
rectangle.render(ShapeProperties.create(matrix,
baseX + 32,
baseY + 24,
barWidth,
4)
.round(3)
.color(new Color(45, 45, 45).getRGB())
.build());
Color hpColor = percent > 0.5f
? new Color(80, 200, 120)
: percent > 0.25f
? new Color(255, 170, 0)
: new Color(255, 70, 70);
rectangle.render(ShapeProperties.create(matrix,
baseX + 32,
baseY + 24,
current,
4)
.round(3)
.color(hpColor.getRGB())
.build());
}
private void drawArmor(DrawContext context, MatrixStack matrix) {
if (lastTarget == null) return;
ItemStack[] armor = new ItemStack[]{
lastTarget.getEquippedStack(net.minecraft.entity.EquipmentSlot.HEAD),
lastTarget.getEquippedStack(net.minecraft.entity.EquipmentSlot.CHEST),
lastTarget.getEquippedStack(net.minecraft.entity.EquipmentSlot.LEGS),
lastTarget.getEquippedStack(net.minecraft.entity.EquipmentSlot.FEET)
};
float startX = getX() + 30;
float startY = getY() + 36;
float size = 12f;
float spacing = 14f;
matrix.push();
matrix.translate(startX, startY, 0);
for (int i = 0; i < armor.length; i++) {
float x = i * spacing;
rectangle.render(ShapeProperties.create(matrix,
x,
0,
size,
size)
.round(4)
.color(new Color(28, 28, 32, 200).getRGB())
.build());
if (!armor[i].isEmpty()) {
Render2D.defaultDrawStack(context, armor[i], x + 1.5f, 1.5f, false, false, 0.6f);
}
}
matrix.pop();
}
private void drawUsingItem(DrawContext context, MatrixStack matrix) {
animation.setDirection(lastTarget.isUsingItem() ? Direction.FORWARDS : Direction.BACKWARDS);
if (!lastTarget.getActiveItem().isEmpty() && lastTarget.getActiveItem().getCount() != 0) {
lastItem = lastTarget.getActiveItem().getItem();
}
if (!animation.isFinished(Direction.BACKWARDS) && !lastItem.equals(Items.AIR)) {
int size = 24;
float anim = animation.getOutput().floatValue();
float progress = (lastTarget.getItemUseTime() + tickCounter.getTickDelta(false)) / ItemTask.maxUseTick(lastItem) * 360;
float x = getX() - (size + 5) * anim;
float y = getY() + 4;
ScissorAssist scissorManager = Rich.getInstance().getScissorManager();
scissorManager.push(matrix.peek().getPositionMatrix(), getX() - 50, getY(), 50, getHeight());
Calculate.setAlpha(anim, () -> {
blur.render(ShapeProperties.create(matrix, x, y, size, size).quality(5)
.round(12).softness(1).thickness(2).outlineColor(ColorAssist.getOutline(0)).color(ColorAssist.getRect(0.7F)).build());
arc.render(ShapeProperties.create(matrix, x, y, size, size).round(0.38F).thickness(0.30f).end(progress)
.color(ColorAssist.fade(0), ColorAssist.fade(200), ColorAssist.fade(0), ColorAssist.fade(200)).build());
Render2D.defaultDrawStack(context, lastItem.getDefaultStack(), x + 3f, y + 3f, false, false, 1f);
});
scissorManager.pop();
}
}
private void drawFace(DrawContext context) {
LivingEntity entityToRender;
if (Aura.getInstance().getTarget() != null) {
entityToRender = Aura.getInstance().getTarget();
} else if (PlayerInteractionHelper.isChat(mc.currentScreen)) {
entityToRender = mc.player;
} else {
entityToRender = null;
}
if (entityToRender == null) return;
EntityRenderer<? super LivingEntity, ?> baseRenderer =
mc.getEntityRenderDispatcher().getRenderer(entityToRender);
if (!(baseRenderer instanceof LivingEntityRenderer<?, ?, ?>)) return;
@SuppressWarnings("unchecked")
LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?> renderer =
(LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?>) baseRenderer;
LivingEntityRenderState state =
renderer.getAndUpdateRenderState(entityToRender, tickCounter.getTickDelta(false));
Identifier texture = renderer.getTexture(state);
float alpha = faceAlphaAnimation.getOutput().floatValue();
Calculate.setAlpha(alpha, () -> {
float baseX = getX();
float baseY = getY();
float faceWidth = 22; // ширина под фон
float faceHeight = 22; // высота под фон
float textureSize = 20; // размер головы
rectangle.render(ShapeProperties.create(context.getMatrices(),
baseX + 4,
baseY + 6,
faceWidth,
faceHeight)
.round(5)
.color(new Color(30, 30, 32, 200).getRGB())
.build());
Render2D.drawTexture(context,
texture,
baseX + 5,
baseY + 7,
textureSize,
textureSize,
8,
8,
64,
Color.WHITE.getRGB(),
ColorAssist.multRed(-1, 1 + entityToRender.hurtTime / 4F));
});
}
}