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

SS:
Targethud:
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;
}
}
