Загрузка данных
package dev.dikson.wtf.module.impl.render;
import com.darkmagician6.eventapi.EventTarget;
import dev.dikson.wtf.Furios;
import dev.dikson.wtf.event.render.EventRender2D;
import dev.dikson.wtf.manager.dragging.DragManager;
import dev.dikson.wtf.manager.dragging.Draggable;
import dev.dikson.wtf.manager.theme.Themes;
import dev.dikson.wtf.module.Category;
import dev.dikson.wtf.module.Module;
import dev.dikson.wtf.module.ModuleAnnotation;
import dev.dikson.wtf.module.impl.combat.AttackAura;
import dev.dikson.wtf.module.setting.impl.BooleanSetting;
import dev.dikson.wtf.module.setting.impl.ModeSetting;
import dev.dikson.wtf.module.setting.impl.NumberSetting;
import dev.dikson.wtf.utility.math.MathUtility;
import dev.dikson.wtf.utility.misc.TimerHelper;
import dev.dikson.wtf.utility.render.RenderUtility;
import dev.dikson.wtf.utility.render.StencilUtility;
import dev.dikson.wtf.utility.render.animation.Animation;
import dev.dikson.wtf.utility.render.animation.AnimationMath;
import dev.dikson.wtf.utility.render.animation.Direction;
import dev.dikson.wtf.utility.render.animation.impl.EaseInOutQuad;
import dev.dikson.wtf.utility.render.font.FontRenderer;
import dev.dikson.wtf.utility.render.font.Fonts;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.gui.GuiChat;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.ThreadDownloadImageData;
import net.minecraft.client.renderer.texture.ITextureObject;
import net.minecraft.client.renderer.texture.SimpleTexture;
import net.minecraft.client.renderer.texture.TextureUtil;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import lombok.Getter;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Objects;
@ModuleAnnotation(name = "TargetHUD", category = Category.RENDER)
public class TargetHud extends Module {
public static ModeSetting targetMode;
private final Draggable targetHudDraggable;
public static BooleanSetting glow, absor, hporprocent;
public NumberSetting glowRadius;
public static BooleanSetting glowHP, winning, shadow;
private float hp;
public int posY, posX;
public static float animWidth123123123 = 0.0F;
public static TimerHelper thudTimer = new TimerHelper();
public static HashMap<String, SkinData> cache;
private final Animation animation;
private EntityLivingBase currentTarget;
private float absorhp;
public TargetHud() {
this.targetHudDraggable = DragManager.create(this, "Target HUD", 300, 10);
this.glowRadius = new NumberSetting("Glow Radius", 10.0f, 7.0f, 10.0f, 1.0f, () -> glow.get() && targetMode.is("Skeet"));
this.animation = new EaseInOutQuad(175, 1.0f);
}
@EventTarget
public void onRender2D(final EventRender2D ignoredEventRender2D) {
if (Minecraft.gameSettings.showDebugInfo) return;
if (targetMode.is("Test")) renderTestMode();
else if (targetMode.is("Skeet")) renderSkeetMode();
}
private void renderTestMode() {
this.targetHudDraggable.setWidth(108);
this.targetHudDraggable.setHeight(39.5f);
if (AttackAura.targetEntity != null) currentTarget = AttackAura.targetEntity;
else if (mc.currentScreen instanceof GuiChat) currentTarget = Minecraft.player;
if (currentTarget != null) {
if (AttackAura.targetEntity == null && !(mc.currentScreen instanceof GuiChat)) animation.setDirection(Direction.BACKWARDS);
else animation.setDirection(Direction.FORWARDS);
posX = targetHudDraggable.getX();
posY = targetHudDraggable.getY();
RenderUtility.scaleStart(posX + 55, posY + 21.5f, animation.getOutput());
RenderUtility.furiosshader(posX, posY + 2, 107, 36, 10);
if (currentTarget instanceof EntityPlayer) {
RenderUtility.scaleStart(posX, posY, 0.1255f);
RenderUtility.drawFace228(posX + 14, posY + 32, 0, 0, 256, 256, (AbstractClientPlayer) currentTarget);
RenderUtility.scaleEnd();
} else {
Fonts.furios4.drawCenteredString("N", posX + 18, posY + 14, Furios.getInstance().getThemeManager().getCurrentGuiTheme().equals(Themes.DARK.getTheme()) ? Color.WHITE.getRGB() : Color.BLACK.getRGB());
}
absorhp = MathUtility.clamp(MathUtility.lerp(absorhp, currentTarget.getAbsorptionAmount(), (float) (5.0 * AnimationMath.deltaTime())), 0.0F, 5.0F);
hp = MathUtility.clamp(MathUtility.lerp(hp, currentTarget.getHealth() / currentTarget.getMaxHealth(), (float) (5.0 * AnimationMath.deltaTime())), 0.0F, 1.0F);
animWidth123123123 = AnimationMath.fast(animWidth123123123, hp, 1.0F);
RenderUtility.drawRoundedRect(posX + 36F, posY + 27, 67.0F, 8.0F, 5.0F, new Color(77, 77, 77, 44).getRGB());
float currentHP = currentTarget.getHealth();
if (currentHP >= 13.0F) {
RenderUtility.drawRoundedGradientRect(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 7.0F, 8.0F, new Color(12, 71, 0, 250).brighter().getRGB(), new Color(26, 26, 26, 250).brighter().getRGB(), new Color(1, 231, 1, 250).brighter().getRGB(), new Color(0, 153, 0, 250).brighter().getRGB());
RenderUtility.drawGradientGlow(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 4, new Color(12, 71, 0, 250).brighter(), new Color(26, 26, 26, 250).brighter(), new Color(1, 231, 1, 250).brighter(), new Color(0, 153, 0, 250).brighter());
} else if (currentHP >= 6.5F) {
RenderUtility.drawRoundedGradientRect(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 7.0F, 8.0F, new Color(62, 71, 0, 250).brighter().getRGB(), new Color(32, 32, 32, 250).brighter().getRGB(), new Color(255, 255, 0, 250).brighter().getRGB(), new Color(153, 153, 0, 250).brighter().getRGB());
RenderUtility.drawGradientGlow(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 4, new Color(62, 71, 0, 250).brighter(), new Color(32, 32, 32, 250).brighter(), new Color(255, 255, 0, 250).brighter(), new Color(153, 153, 0, 250).brighter());
} else {
RenderUtility.drawRoundedGradientRect(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 7.0F, 8.0F, new Color(71, 0, 0, 250).brighter().getRGB(), new Color(32, 32, 32, 250).brighter().getRGB(), new Color(102, 0, 0, 250).brighter().getRGB(), new Color(204, 0, 0, 250).brighter().getRGB());
RenderUtility.drawGradientGlow(posX + 36F, posY + 27, 67.0F * hp, 8.0F, 4, new Color(71, 0, 0, 250).brighter(), new Color(32, 32, 32, 250).brighter(), new Color(102, 0, 0, 250).brighter(), new Color(204, 0, 0, 250).brighter());
}
RenderUtility.drawRoundedGradientRect(posX + 36F, posY + 27, 50.0F * absorhp / currentTarget.getMaxHealth() * 3.0F, 8.0F, 6.0F, 1.0F, -39424, -39424, -10496, -10496);
RenderUtility.drawGradientGlowth(posX + 36F, posY + 27, 50.0F * absorhp / currentTarget.getMaxHealth() * 3.0F, 8.0F, 4, -39424, -39424, -10496, -10496);
Fonts.SEMI_BOLD_14.drawString("HP: " + MathUtility.round(hp * 20.0F, 0.1), posX + 37, posY + 18, Furios.getInstance().getThemeManager().getCurrentGuiTheme().equals(Themes.DARK.getTheme()) ? Color.WHITE.getRGB() : Color.BLACK.getRGB());
Fonts.SEMI_BOLD_15.drawSubstring(currentTarget.getName(), posX + 36.5f, posY + 7.5f, Furios.getInstance().getThemeManager().getCurrentGuiTheme().equals(Themes.DARK.getTheme()) ? Color.WHITE.getRGB() : Color.BLACK.getRGB(), 55.0F);
RenderUtility.scaleEnd();
}
}
private void renderSkeetMode() {
this.targetHudDraggable.setWidth(137);
this.targetHudDraggable.setHeight(44);
if (AttackAura.targetEntity != null) currentTarget = AttackAura.targetEntity;
else if (mc.currentScreen instanceof GuiChat) currentTarget = Minecraft.player;
if (currentTarget != null) {
if (AttackAura.targetEntity == null && !(mc.currentScreen instanceof GuiChat)) animation.setDirection(Direction.BACKWARDS);
else animation.setDirection(Direction.FORWARDS);
RenderUtility.scaleStart(targetHudDraggable.getX() + 56, targetHudDraggable.getY() + 19, animation.getOutput());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() - 7.8F, targetHudDraggable.getY() - 6.5F, 144.8F, 49.8F, 0.0F, new Color(0, 0, 0, 255).getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() - 7.3F, targetHudDraggable.getY() - 6.0F, 143.8F, 49.0F, 0.0F, new Color(44, 44, 44, 255).getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() - 3, targetHudDraggable.getY() - 2, 135.0F, 41.0F, 0.0F, new Color(21, 24, 21, 255).getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() + 2, targetHudDraggable.getY() + 1.0F, 33.0F, 35.5F, 0.0F, new Color(44, 44, 44, 255).getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() + 3, targetHudDraggable.getY() + 2.0F, 31.0F, 33.5F, 0.0F, new Color(21, 24, 21, 255).getRGB());
if (currentTarget instanceof EntityPlayer) {
float var12 = getHurtPercent(currentTarget);
GlStateManager.enableColorMaterial();
GlStateManager.color(1.0F, 1.0F - var12, 1.0F - var12, 1.0F);
}
StencilUtility.initStencilToWrite();
RenderUtility.drawRoundedRect(targetHudDraggable.getX(), targetHudDraggable.getY(), 112.0F, 32.0F, 5.0F, new Color(30, 30, 30).getRGB());
StencilUtility.readStencilBuffer(1);
Fonts.tenacityBold16.drawSubstring(TextFormatting.getTextWithoutFormattingCodes(currentTarget.getName()), targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 4, Color.WHITE.getRGB(), 65.0F);
StencilUtility.uninitStencilBuffer();
int var9 = 36;
for (Iterator<ItemStack> var13 = currentTarget.getEquipmentAndArmor().iterator(); var13.hasNext(); var9 -= 15) {
ItemStack var5 = var13.next();
if (!var5.isEmpty()) {
GlStateManager.pushMatrix();
GlStateManager.translate(targetHudDraggable.getX() + var9 + 79, targetHudDraggable.getY() + 25, 0.0F);
GlStateManager.scale(0.8, 0.9, 0.9);
RenderUtility.drawItemStack(var5, 0, 0);
GlStateManager.popMatrix();
}
}
hp = MathUtility.clamp(MathUtility.lerp(hp, currentTarget.getHealth() / currentTarget.getMaxHealth(), (float) (45.0 * AnimationMath.deltaTime())), 0.0F, 1.0F);
Color var11 = getVar11();
RenderUtility.drawEntityOnScreen(targetHudDraggable.getX() + 19, targetHudDraggable.getY() + 36, 17, currentTarget);
RenderUtility.drawRect(targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 13.5F, 79.0F, 5.0F, Color.black.getRGB());
RenderUtility.drawRect(targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 13.5F, 79.0F * hp, 5.0F, var11.getRGB());
if (absor.get()) {
absorhp = MathUtility.clamp(MathUtility.lerp(absorhp, currentTarget.getAbsorptionAmount(), (float) (12.0 * AnimationMath.deltaTime())), 0.0F, 1.3F);
RenderUtility.drawRect(targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 13.5F, 237.0F * absorhp / currentTarget.getMaxHealth(), 5.0F, Color.ORANGE.getRGB());
}
Fonts.tenacityBold13.drawCenteredString(" | | | | | | | | | ", targetHudDraggable.getX() + 74.0F, targetHudDraggable.getY() + 14.5F, Color.BLACK.getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() + 38, targetHudDraggable.getY() + 18, 82.0F, 2.0F, 0.0F, new Color(22, 22, 22, 255).getRGB());
RenderUtility.drawRoundedRect(targetHudDraggable.getX() + 38, targetHudDraggable.getY() + 11, 82.0F, 2.0F, 0.0F, new Color(22, 22, 22, 255).getRGB());
if (glow.get()) {
RenderUtility.drawGlow(targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 13, 79.0F * hp, 5.0F, glowRadius.getInt(), var11);
}
FontRenderer var14 = Fonts.tenacityBold16;
if (!hporprocent.get()) {
int var10 = (int) MathUtility.round(hp * 20.0F + currentTarget.getAbsorptionAmount(), 0.5);
var14.drawString("HP:" + var10 + " | Dist:" + (int) Minecraft.player.getDistance(currentTarget), targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 20.5F, Color.WHITE.getRGB());
} else {
int var10 = (int) MathUtility.round(hp * 100.0F + currentTarget.getAbsorptionAmount(), 0.5);
var14.drawString("HP: " + var10 + "% | Dist:" + (int) Minecraft.player.getDistance(currentTarget), targetHudDraggable.getX() + 41, targetHudDraggable.getY() + 20.5F, Color.WHITE.getRGB());
}
RenderUtility.scaleEnd();
}
}
private Color getVar11() {
Color var11 = Color.GREEN;
if (!(currentTarget.getHealth() >= 17.0F)) {
if (currentTarget.getHealth() >= 6.0F && currentTarget.getHealth() <= 14.0F) {
var11 = Color.YELLOW;
} else if (currentTarget.getHealth() > 0.0F && currentTarget.getHealth() <= 6.0F) {
var11 = Color.RED;
} else if (currentTarget != null && currentTarget.getHealth() <= 0.0F) {
var11 = Color.RED;
}
}
return var11;
}
public static BufferedImage parseBufferedImage(final ITextureObject ito) throws Exception {
if (ito instanceof ThreadDownloadImageData t) {
new BufferedImage(64, 64, 2);
return Objects.requireNonNull(t.imageBuffer).cache();
}
if (ito instanceof final SimpleTexture st) {
return TextureUtil.readBufferedImage(TargetHud.mc.renderEngine.resourceManager.getResource(st.textureLocation).getInputStream());
}
return null;
}
public static int getTooltipOffset() {
int offset = 63;
if (!Minecraft.player.isCreative()) {
if (Minecraft.player.isInsideOfMaterial(Material.WATER)) {
offset += 10;
}
}
return offset;
}
private static float getHurtPercent(final EntityLivingBase entity) {
return (entity.hurtTime - ((entity.hurtTime != 0) ? TargetHud.mc.timer.renderPartialTicks : 0.0f)) / 10.0f;
}
static {
TargetHud.targetMode = new ModeSetting("Mode", "Skeet", "Skeet", "Test");
TargetHud.glow = new BooleanSetting("Glow", true, () -> TargetHud.targetMode.is("Skeet"));
TargetHud.absor = new BooleanSetting("Absorb", false);
TargetHud.hporprocent = new BooleanSetting("HP Per", false, () -> TargetHud.targetMode.is("Skeet"));
TargetHud.cache = new HashMap<>();
}
public static class SkinData {
private int texture;
@Getter
private boolean loaded;
public void setBufferedImage(final BufferedImage bi) {
TextureUtil.uploadTextureImageAllocate(this.texture = TextureUtil.glGenTextures(), bi.getSubimage(8, 8, 8, 8), false, true);
}
public void setLoaded() {
this.loaded = true;
}
public int getTextureID() {
return this.texture;
}
}
}