Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Июн 2025
- Сообщения
- 56
- Реакции
- 1
- Выберите загрузчик игры
- Fabric
заливаю говно худ
наверное мой первый и последний пост
Пожалуйста, авторизуйтесь для просмотра ссылки.
TargetHud:
package fun.rich.display.hud;
import fun.rich.utils.interactions.interact.PlayerInteractionHelper;
import fun.rich.utils.math.time.StopWatch;
import net.minecraft.client.gui.DrawContext;
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.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.Direction;
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.display.geometry.Render2D;
import fun.rich.utils.client.packet.network.Network;
import java.awt.*;
public class TargetHud extends AbstractDraggable {
private final StopWatch stopWatch = new StopWatch();
private LivingEntity lastTarget;
private float healthAnimation = 0;
private float trailAnimation = 0;
private float absorptionAnimation = 0;
private float displayedHealth = 0;
private long lastUpdateTime = System.currentTimeMillis();
private long startTime = System.currentTimeMillis();
public TargetHud() {
super("Target Hud", 10, 80, 112, 40, 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();
stopWatch.reset();
} else if (PlayerInteractionHelper.isChat(mc.currentScreen)) {
lastTarget = mc.player;
startAnimation();
stopWatch.reset();
} else if (stopWatch.finished(500)) {
stopAnimation();
}
}
private float lerp(float current, float target, float dt, float speed) {
float factor = (float)(1.0 - Math.pow(0.001, dt * speed));
return current + (target - current) * factor;
}
private float getHp(LivingEntity e) {
if (e.isInvisible() && !Network.isSpookyTime() && !Network.isCopyTime())
return e.getMaxHealth();
return e.getHealth();
}
private String getHpString(float hp) {
if (lastTarget != null && lastTarget.isInvisible()
&& !Network.isSpookyTime() && !Network.isCopyTime()) return "??";
if (hp >= 100) return String.valueOf((int) hp);
else if (hp >= 10) return String.format("%.1f", hp);
else return String.format("%.2f", hp);
}
@Override
public void drawDraggable(DrawContext context) {
if (!Hud.getInstance().interfaceSettings.isSelected("Target Hud") || !Hud.getInstance().state) return;
if (lastTarget == null) return;
long now = System.currentTimeMillis();
float dt = Math.min((now - lastUpdateTime) / 1000f, 0.1f);
lastUpdateTime = now;
float scaleAlpha = scaleAnimation.getOutput().floatValue();
if (scaleAlpha <= 0) return;
MatrixStack matrix = context.getMatrices();
setWidth(112);
setHeight(40);
float x = getX();
float y = getY();
drawBackground(matrix, x, y, scaleAlpha);
drawFace(context, x, y, scaleAlpha);
drawContent(matrix, x, y, scaleAlpha, dt);
}
private void drawBackground(MatrixStack matrix, float x, float y, float alpha) {
int a = (int)(255 * alpha);
rectangle.render(ShapeProperties.create(matrix, x + 2, y + 2, getWidth() - 4, getHeight() - 4)
.round(6f)
.thickness(0.35f)
.outlineColor(new Color(90, 90, 90, a).getRGB())
.color(
new Color(52, 52, 52, a).getRGB(),
new Color(22, 22, 22, a).getRGB(),
new Color(52, 52, 52, a).getRGB(),
new Color(22, 22, 22, a).getRGB())
.build());
}
private void drawFace(DrawContext context, float x, float y, float alpha) {
EntityRenderer<? super LivingEntity, ?> baseRenderer = mc.getEntityRenderDispatcher().getRenderer(lastTarget);
if (!(baseRenderer instanceof LivingEntityRenderer<?, ?, ?>)) return;
@SuppressWarnings("unchecked")
LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?> renderer =
(LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?>) baseRenderer;
LivingEntityRenderState state = renderer.getAndUpdateRenderState(lastTarget, tickCounter.getTickDelta(false));
Identifier tex = renderer.getTexture(state);
float faceSize = 24f;
float faceX = x + 9f;
float faceY = y + 8f;
Render2D.drawTexture(context, tex,
faceX, faceY, faceSize,
4f,
8, 8, 64,
ColorAssist.getRect(1),
ColorAssist.multRed(-1, 1 + lastTarget.hurtTime / 4f));
}
private void drawContent(MatrixStack matrix, float x, float y, float alpha, float dt) {
FontRenderer font = Fonts.getSize(12, Fonts.Type.DEFAULT);
float faceSize = 24f;
float contentX = x + 9 + faceSize + 6;
float nameY = y + 13f;
float hp = getHp(lastTarget);
float maxHp = Math.max(lastTarget.getMaxHealth(), 1f);
float absorp = lastTarget.getAbsorptionAmount();
boolean invisible = lastTarget.isInvisible() && !Network.isSpookyTime() && !Network.isCopyTime();
float targetDisplayHp = invisible ? maxHp : hp + absorp;
displayedHealth = lerp(displayedHealth, targetDisplayHp, dt, 5f);
String hpStr = getHpString(displayedHealth);
int textAlpha = (int)(255 * alpha);
float hpWidth = font.getStringWidth(hpStr);
font.drawString(matrix, lastTarget.getName().getString(),
contentX, nameY,
new Color(255, 255, 255, textAlpha).getRGB());
font.drawString(matrix, hpStr,
x + getWidth() - 10 - hpWidth, nameY,
new Color(215, 215, 215, textAlpha).getRGB());
float targetHpPercent = invisible ? 1f : hp / maxHp;
healthAnimation = lerp(healthAnimation, targetHpPercent, dt, 3f);
if (targetHpPercent > trailAnimation) trailAnimation = targetHpPercent;
trailAnimation = lerp(trailAnimation, targetHpPercent, dt, 3.5f);
float targetAbsorp = invisible ? 0f : absorp / maxHp;
absorptionAnimation = lerp(absorptionAnimation, targetAbsorp, dt, 3f);
float barX = contentX;
float barY = nameY + 12f;
float barW = 64f;
float barH = 4f;
float barR = 2f;
rectangle.render(ShapeProperties.create(matrix, barX, barY, barW, barH)
.round(barR)
.color(new Color(30, 30, 30, (int)(200 * alpha)).getRGB())
.build());
float hpPct = MathHelper.clamp(healthAnimation, 0f, 1f);
float trailPct = MathHelper.clamp(trailAnimation, 0f, 1f);
if (trailPct > hpPct) {
rectangle.render(ShapeProperties.create(matrix, barX, barY, barW * trailPct, barH)
.round(barR)
.color(new Color(55, 55, 55, (int)(160 * alpha)).getRGB())
.build());
}
if (hpPct > 0.01f) {
long elapsed = System.currentTimeMillis() - startTime;
float waveSpeed = 1500f;
float wavePhase = (elapsed % (long) waveSpeed) / waveSpeed * (float) Math.PI * 2f;
int[] colors = new int[4];
for (int i = 0; i < 2; i++) {
float wave = (float) Math.sin(wavePhase - i * 1.5f);
float wf = (wave + 1f) / 2f;
int gray = (int)(155 + 100 * wf);
colors[i * 2] = new Color(gray, gray, gray, (int)(255 * alpha)).getRGB();
colors[i * 2 + 1] = new Color(gray, gray, gray, (int)(255 * alpha)).getRGB();
}
rectangle.render(ShapeProperties.create(matrix, barX, barY, barW * hpPct, barH)
.round(barR)
.color(colors)
.build());
}
float absorpPct = MathHelper.clamp(absorptionAnimation, 0f, 1f);
if (absorpPct > 0.01f && !Network.isFunTime()) {
long elapsed = System.currentTimeMillis() - startTime;
float waveSpeed = 1200f;
float wavePhase = (elapsed % (long) waveSpeed) / waveSpeed * (float) Math.PI * 2f;
int[] goldColors = new int[4];
for (int i = 0; i < 2; i++) {
float wave = (float) Math.sin(wavePhase - i * 1.5f);
float wf = (wave + 1f) / 2f;
int cg = (int)(165 + 50 * wf);
goldColors[i * 2] = new Color(255, cg, 0, (int)(200 * alpha)).getRGB();
goldColors[i * 2 + 1] = new Color(255, cg, 0, (int)(200 * alpha)).getRGB();
}
rectangle.render(ShapeProperties.create(matrix, barX, barY, barW * absorpPct, barH)
.round(barR)
.color(goldColors)
.build());
}
}
}
наверное мой первый и последний пост