Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Визуальная часть TargetHud | Opal v2 1.21.11

Начинающий
Начинающий
Статус
Онлайн
Регистрация
9 Мар 2025
Сообщения
137
Реакции
8
Выберите загрузчик игры
  1. Fabric
:roflanBuldiga:
SS:
1770029159249.png

Targethud:
Expand Collapse Copy
package wtf.opal.client.feature.module.impl.visual.overlay.impl.targetinfo;

import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.MathHelper;
import wtf.opal.client.Constants;
import wtf.opal.client.OpalClient;
import wtf.opal.client.feature.helper.impl.LocalDataWatch;
import wtf.opal.client.feature.module.impl.combat.killaura.KillAuraModule;
import wtf.opal.client.feature.module.impl.combat.killaura.target.CurrentTarget;
import wtf.opal.client.feature.module.impl.visual.overlay.IOverlayElement;
import wtf.opal.client.feature.module.impl.visual.overlay.OverlayModule;
import wtf.opal.client.feature.module.property.impl.ScreenPositionProperty;
import wtf.opal.client.renderer.NVGRenderer;
import wtf.opal.client.renderer.repository.FontRepository;
import wtf.opal.client.renderer.text.NVGTextRenderer;
import wtf.opal.utility.render.animation.Animation;
import wtf.opal.utility.render.animation.Easing;

import java.text.DecimalFormat;

import static wtf.opal.client.Constants.mc;

public final class TargetInfoElement implements IOverlayElement {

    private static final NVGTextRenderer BOLD = FontRepository.getFont("productsans-bold");
    private static final NVGTextRenderer MEDIUM = FontRepository.getFont("productsans-medium");
    private static final DecimalFormat DF = new DecimalFormat("0.#");

    private final Animation appear = new Animation(Easing.EASE_OUT_EXPO, 200);
    private final Animation healthAnim = new Animation(Easing.EASE_OUT_EXPO, 300);

    private final TargetInfoSettings settings;
    private Target current, last;

    public TargetInfoElement(OverlayModule module) {
        this.settings = new TargetInfoSettings(module);
        appear.setValue(1);
    }

    @Override
    public void render(DrawContext context, float delta, boolean bloom) {
        Target target = getTarget();
        if (target == null) return;

        float scale = settings.getScale();
        ScreenPositionProperty pos = settings.getScreenPosition();

        float x = pos.getScaledX();
        float y = pos.getScaledY();

        float width = 92;
        float height = 22;
        float padding = 4;

        pos.setWidth(width * scale);
        pos.setHeight(height * scale);

        float hp = target.entity.getHealth() + target.entity.getAbsorptionAmount();
        float hpPct = MathHelper.clamp(hp / target.entity.getMaxHealth(), 0F, 1F);
        healthAnim.run(hpPct);

        float dist = mc.player.distanceTo(target.entity);

        NVGRenderer.scale(scale, x, y, 0, 0, () -> {
            NVGRenderer.globalAlpha(appear.getValue());

            
            NVGRenderer.roundedRect(x, y, width, height, 4, 0xAA0B0B0B);

           
            BOLD.drawString(
                    target.getName(),
                    x + padding,
                    y + 8,
                    6,
                    0xFFFFFFFF
            );

            
            MEDIUM.drawString(
                    DF.format(dist) + "m",
                    x + padding,
                    y + 15,
                    5,
                    0xFF9A9A9A
            );

            // bludnov
            String hpText = DF.format(hp) + "hp";
            MEDIUM.drawString(
                    hpText,
                    x + width - padding - MEDIUM.getStringWidth(hpText, 5),
                    y + 15,
                    5,
                    0xFFFFFFFF
            );

            // hp bar bg
            float barX = x + padding;
            float barY = y + height - 4;
            float barW = width - padding * 2;

            NVGRenderer.roundedRect(
                    barX,
                    barY,
                    barW,
                    2,
                    1,
                    0xFF2A2A2A
            );

            
            NVGRenderer.roundedRect(
                    barX,
                    barY,
                    barW * healthAnim.getValue(),
                    2,
                    1,
                    0xFF9B5CFF
            );
        });
    }

    @Override
    public boolean isActive() {
        return settings.isEnabled();
    }

    private Target getTarget() {
        LivingEntity e = LocalDataWatch.get().lastEntityAttack.getRight();

        if (e == null) {
            KillAuraModule ka = OpalClient.getInstance()
                    .getModuleRepository()
                    .getModule(KillAuraModule.class);

            if (ka.isEnabled()) {
                CurrentTarget ct = ka.getTargeting().getTarget();
                if (ct != null) e = ct.getEntity();
            }
        }

        if (e == null && mc.currentScreen instanceof ChatScreen) {
            e = mc.player;
        }

        if (e != null) {
            if (current == null || current.entity.getId() != e.getId()) {
                current = new Target(e);
            }
            appear.setValue(1);
            appear.reset();
            return current;
        }

        if (!appear.isFinished()) {
            appear.run(0);
            return last;
        }

        last = null;
        return null;
    }

    private static final class Target {
        private final LivingEntity entity;

        Target(LivingEntity e) {
            this.entity = e;
        }

        String getName() {
            return Formatting.WHITE + entity.getName().getString();
        }
    }

    @Override
    public boolean isBloom() {
        return true;
    }
}
 
1:
Expand Collapse Copy
if (current == null || current.entity.getId() != e.getId()) {
    current = new Target(e);
}
appear.setValue(1);
appear.reset();
return current;

:roflanEbalo: :roflanEbalo: :roflanEbalo:
 
с каждым новым постом некропсихоза у меня всё больше возникает желание больше никогда не заходить на этот форум
 
Назад
Сверху Снизу