- Выберите загрузчик игры
- Fabric
Переделал ТаргейтХуд из этого поста (click) тк он выглядит криво
ss:
таргейт худ полностью под Rich/Zenith
ss:
таргейт худ полностью под Rich/Zenith
TargetHud:
package fun.helsing.display.hud;
import fun.helsing.utils.client.managers.api.draggable.AbstractDraggable;
import fun.helsing.features.impl.combat.Aura;
import fun.helsing.features.impl.render.Hud;
import fun.helsing.common.animation.Animation;
import fun.helsing.common.animation.Direction;
import fun.helsing.common.animation.implement.Decelerate;
import fun.helsing.utils.math.calc.Calculate;
import fun.helsing.utils.display.font.FontRenderer;
import fun.helsing.utils.display.font.Fonts;
import fun.helsing.utils.display.shape.ShapeProperties;
import fun.helsing.utils.display.color.ColorAssist;
import fun.helsing.utils.interactions.interact.PlayerInteractionHelper;
import fun.helsing.utils.display.geometry.Render2D;
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.item.ItemStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
public class TargetHud extends AbstractDraggable {
private final Animation scaleAnimation = new Decelerate().setMs(400).setValue(1);
private final Animation faceAlphaAnimation = new Decelerate().setMs(125).setValue(1);
private LivingEntity lastTarget;
private float health;
public TargetHud() {
super("Target Hud", 10, 40, 110, 80, true);
}
@Override
public boolean visible() {
return scaleAnimation.isDirection(Direction.FORWARDS);
}
@Override
public void tick() {
LivingEntity auraTarget = Aura.getInstance().getTarget();
boolean inChat = PlayerInteractionHelper.isChat(mc.currentScreen);
if (auraTarget != null || inChat) {
showTargetHud();
faceAlphaAnimation.setDirection(Direction.FORWARDS);
if (auraTarget != null) {
lastTarget = auraTarget;
} else if (inChat) {
lastTarget = mc.player;
}
} else {
hideTargetHud();
faceAlphaAnimation.setDirection(Direction.BACKWARDS);
}
}
private void showTargetHud() {
if (scaleAnimation.getDirection() != Direction.FORWARDS) {
scaleAnimation.setDirection(Direction.FORWARDS);
}
}
private void hideTargetHud() {
if (scaleAnimation.getDirection() != Direction.BACKWARDS) {
scaleAnimation.setDirection(Direction.BACKWARDS);
}
}
@Override
public void drawDraggable(DrawContext context) {
if (!Hud.getInstance().interfaceSettings.isSelected("Target Hud") || !Hud.getInstance().state) {
return;
}
if (lastTarget == null) return;
MatrixStack matrix = context.getMatrices();
float scaleAnim = scaleAnimation.getOutput().floatValue();
if (scaleAnim <= 0) return;
Calculate.setAlpha(scaleAnim, () -> {
float offsetX = (1 - scaleAnim) * 10;
float offsetY = (1 - scaleAnim) * 5;
matrix.push();
matrix.translate(offsetX, offsetY, 0);
drawMainContent(context, matrix);
matrix.pop();
});
}
private void drawMainContent(DrawContext context, MatrixStack matrix) {
float localScale = 1.2F;
float centerX = getX() + getWidth() / 2.0F;
float centerY = getY() + getHeight() / 2.0F;
Calculate.scale(matrix, centerX, centerY, localScale, localScale, () -> {
float headerHeight = 12.2F;
float headerPaddingTop = 2.3F;
float gap = 0.8F;
float headerWidth = 54.0F;
float lowerSectionY = getY() + headerHeight + headerPaddingTop + gap;
float headerX = getX() + (getWidth() - headerWidth) / 2.0F;
blur.render(ShapeProperties.create(matrix, headerX, getY() + headerPaddingTop, headerWidth, headerHeight)
.round(1.5f, 0f, 1.5f, 0f).quality(12)
.color(new Color(0, 0, 0, 150).getRGB())
.build());
rectangle.render(ShapeProperties.create(matrix, headerX, getY() + headerPaddingTop, headerWidth, headerHeight)
.round(3.0f, 3.0f, 3.0f, 3.0f)
.thickness(0.1f)
.outlineColor(new Color(33, 33, 33, 255).getRGB())
.color(
new Color(18, 19, 20, 75).getRGB(),
new Color(0, 2, 5, 75).getRGB(),
new Color(0, 2, 5, 75).getRGB(),
new Color(18, 19, 20, 75).getRGB())
.build());
blur.render(ShapeProperties.create(matrix, getX() + 1F, lowerSectionY, getWidth() - 2F, 43.6F)
.round(1.5f, 1.5f, 1.5f, 1.5f).quality(12)
.color(new Color(0, 0, 0, 150).getRGB())
.build());
rectangle.render(ShapeProperties.create(matrix, getX() + 1F, lowerSectionY, getWidth() - 2F, 42)
.round(1.5f, 1.5f, 1.5f, 1.5f)
.thickness(0.1f)
.outlineColor(new Color(33, 33, 33, 255).getRGB())
.color(
new Color(18, 19, 20, 75).getRGB(),
new Color(0, 2, 5, 75).getRGB(),
new Color(0, 2, 5, 75).getRGB(),
new Color(18, 19, 20, 75).getRGB())
.build());
drawInfo(context, matrix, headerPaddingTop);
float contentShift = 0.0F;
drawFace(context);
drawLeftItems(context, matrix, contentShift);
drawRightItems(context, matrix, contentShift);
drawBottomSection(context, matrix);
});
}
private void drawFace(DrawContext context) {
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 textureLocation = renderer.getTexture(state);
float headSize = 27;
float headX = getX() + (getWidth() - headSize) / 2;
float headY = getY() + 15 + 4;
float faceAlpha = faceAlphaAnimation.getOutput().floatValue();
Calculate.setAlpha(faceAlpha, () -> {
Render2D.drawTexture(context, textureLocation, headX, headY,
headSize, 3, 8, 8, 64, 0xFFFFFFFF,
ColorAssist.multRed(-1, 1 + lastTarget.hurtTime / 4F));
});
}
private void drawInfo(DrawContext context, MatrixStack matrix, float paddingTop) {
FontRenderer font = Fonts.getSize(12);
String name = lastTarget.getName().getString();
float nameX = getX() + (getWidth() / 2F) - (font.getStringWidth(name) / 2F);
font.drawString(matrix, name, nameX, getY() + paddingTop + 4.7f, 0xFFFFFFFF);
}
private void drawBottomSection(DrawContext context, MatrixStack matrix) {
float hp = PlayerInteractionHelper.getHealth(lastTarget);
float maxHp = lastTarget.getMaxHealth();
float barWidth = getWidth() - 10;
float barHeight = 5;
float barX = getX() + 5.7f;
float barY = getY() + 50;
float targetHealth = (hp / maxHp) * barWidth;
health = Calculate.interpolateSmooth(1, health, targetHealth);
rectangle.render(ShapeProperties.create(matrix, barX, barY, barWidth, barHeight).round(1.0F).color(0x44000000).build());
rectangle.render(ShapeProperties.create(matrix, barX, barY, MathHelper.clamp(health, 0, barWidth), barHeight).round(1.0F).color(0xFFFFFFFF).build());
FontRenderer smallFont = Fonts.getSize(10);
float infoY = barY + barHeight + 9;
String hpString = String.format("%.1f HP", hp + lastTarget.getAbsorptionAmount());
drawTextWithOutline(matrix, smallFont, hpString, barX, infoY, 0xFFFFFFFF);
boolean winning = mc.player.getHealth() >= lastTarget.getHealth();
String status = winning ? "WIN" : "LOSE";
int statusColor = winning ? 0xFF55FF55 : 0xFFFF5555;
float statusX = (getX() + getWidth()) - smallFont.getStringWidth(status) - 5;
drawTextWithOutline(matrix, smallFont, status, statusX, infoY, statusColor);
}
private void drawTextWithOutline(MatrixStack matrix, FontRenderer font, String text, float x, float y, int color) {
font.drawString(matrix, text, x - 0.5f, y, 0xFF000000);
font.drawString(matrix, text, x + 0.5f, y, 0xFF000000);
font.drawString(matrix, text, x, y - 0.5f, 0xFF000000);
font.drawString(matrix, text, x, y + 0.5f, 0xFF000000);
font.drawString(matrix, text, x, y, color);
}
private void drawLeftItems(DrawContext context, MatrixStack matrix, float shift) {
List<ItemStack> armor = new ArrayList<>();
lastTarget.getArmorItems().forEach(armor::add);
float bgSize = 13, spacing = 14;
float startX = getX() + 5, startY = getY() + 19 + shift;
for (int i = 0; i < 4; i++) {
float x = startX + (i % 2) * spacing, y = startY + (i / 2) * spacing;
blur.render(ShapeProperties.create(matrix, x, y, bgSize, bgSize).round(1.5F).color(0x66000000).build());
if (i < armor.size()) {
ItemStack stack = armor.get(armor.size() - 1 - i);
if (!stack.isEmpty()) Render2D.defaultDrawStack(context, stack, x, y, false, true, 0.7F);
}
}
}
private void drawRightItems(DrawContext context, MatrixStack matrix, float shift) {
List<ItemStack> items = new ArrayList<>();
if (!lastTarget.getMainHandStack().isEmpty()) items.add(lastTarget.getMainHandStack());
if (!lastTarget.getOffHandStack().isEmpty()) items.add(lastTarget.getOffHandStack());
float bgSize = 13, spacing = 14;
float startX = getX() + getWidth() - (spacing * 2) - 4, startY = getY() + 19 + shift;
for (int i = 0; i < 4; i++) {
float x = startX + (i % 2) * spacing, y = startY + (i / 2) * spacing;
blur.render(ShapeProperties.create(matrix, x, y, bgSize, bgSize).round(1.5F).color(0x66000000).build());
if (i < items.size()) {
Render2D.defaultDrawStack(context, items.get(i), x, y, false, true, 0.7F);
}
}
}
}