Начинающий
- Статус
- Оффлайн
- Регистрация
- 12 Мар 2026
- Сообщения
- 8
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- OptiFine
Сделал самый вырвиглазный в мире TargetHUD для ваших PisynVisuals
ss -
code -
Ну хз, не судите строго да не судимыми будете
ss -
code -
Java:
package im.expensive.ui.display.impl;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.events.EventDisplay;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.ui.styles.Style;
import im.expensive.utils.animations.Animation;
import im.expensive.utils.animations.Direction;
import im.expensive.utils.animations.impl.EaseBackIn;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.drag.Dragging;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.math.Vector4i;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.Scissor;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.scoreboard.Score;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector4f;
import org.lwjgl.opengl.GL11;
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class TargetInfoRenderer implements ElementRenderer {
final StopWatch stopWatch = new StopWatch();
final Dragging drag;
LivingEntity entity = null;
boolean allow;
final Animation animation = new EaseBackIn(400, 1, 1);
float healthAnimation = 0.0f;
float absorptionAnimation = 0.0f;
@Override
public void render(EventDisplay eventDisplay) {
entity = getTarget(entity);
float rounding = 6;
boolean out = !allow || stopWatch.isReached(1000);
animation.setDuration(out ? 400 : 300);
animation.setDirection(out ? Direction.BACKWARDS : Direction.FORWARDS);
if (animation.getOutput() == 0.0f) {
entity = null;
}
if (entity != null) {
String name = entity.getName().getString();
float posX = drag.getX();
float posY = drag.getY();
float headSize = 32;
float spacing = 6;
float width = 150;
float height = 58;
drag.setWidth(width);
drag.setHeight(height);
Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
float hp = entity.getHealth();
float maxHp = entity.getMaxHealth();
String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime")
&& (header.contains("анархия") || header.contains("гриферский")) && entity instanceof PlayerEntity) {
hp = score.getScorePoints();
maxHp = 20;
}
healthAnimation = MathUtil.fast(healthAnimation, MathHelper.clamp(hp / maxHp, 0, 1), 10);
absorptionAnimation = MathUtil.fast(absorptionAnimation, MathHelper.clamp(entity.getAbsorptionAmount() / maxHp, 0, 1), 10);
float animationValue = (float) animation.getOutput();
float halfAnimationValueRest = (1 - animationValue) / 2f;
float testX = posX + (width * halfAnimationValueRest);
float testY = posY + (height * halfAnimationValueRest);
float testW = width * animationValue;
float testH = height * animationValue;
GlStateManager.pushMatrix();
Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
sizeAnimation(posX + (width / 2), posY + (height / 2), animation.getOutput());
DisplayUtils.drawShadow(posX, posY, width, height, 10, ColorUtils.rgba(0, 0, 0, 128), ColorUtils.rgba(0, 0, 0, 128));
DisplayUtils.drawRoundedRect(posX, posY, width, height, rounding, ColorUtils.rgba(0, 0, 0, 150));
drawTargetHead(entity, posX + spacing, posY + spacing, headSize, headSize);
float nameX = posX + headSize + spacing * 2;
float nameY = posY + spacing + 2;
Scissor.push();
Scissor.setFromComponentCoordinates(testX, testY, testW - 6, testH);
Fonts.sfui.drawText(eventDisplay.getMatrixStack(), entity.getName().getString(), nameX, nameY, -1, 8);
Scissor.unset();
Scissor.pop();
//отрисовка слотов
if (entity instanceof PlayerEntity) {
PlayerEntity player = (PlayerEntity) entity;
float itemX = nameX;
float itemY = nameY + 12;
float itemSize = 15;
float itemSpacing = 17;
drawItemStack(eventDisplay.getMatrixStack(), player.getHeldItemMainhand(), itemX, itemY, itemSize);
drawItemStack(eventDisplay.getMatrixStack(), player.getItemStackFromSlot(EquipmentSlotType.HEAD), itemX + itemSpacing, itemY, itemSize);
drawItemStack(eventDisplay.getMatrixStack(), player.getItemStackFromSlot(EquipmentSlotType.CHEST), itemX + itemSpacing * 2, itemY, itemSize);
drawItemStack(eventDisplay.getMatrixStack(), player.getItemStackFromSlot(EquipmentSlotType.LEGS), itemX + itemSpacing * 3, itemY, itemSize);
drawItemStack(eventDisplay.getMatrixStack(), player.getItemStackFromSlot(EquipmentSlotType.FEET), itemX + itemSpacing * 4, itemY, itemSize);
drawItemStack(eventDisplay.getMatrixStack(), player.getHeldItemOffhand(), itemX + itemSpacing * 5, itemY, itemSize);
}
float lineX = posX + spacing;
float lineY = posY + height - 16;
float lineWidth = width - spacing * 2;
DisplayUtils.drawRoundedRect(lineX, lineY, lineWidth, 1, 0.5f, ColorUtils.rgba(255, 255, 255, 30));
//здоровье
float healthBarX = posX + spacing;
float healthBarHeight = 5;
float healthBarY = posY + height - spacing - healthBarHeight;
String hpText = String.format("%.0fhp", hp);
float textWidth = Fonts.sfui.getWidth(hpText, 8);
float healthBarWidth = width - (spacing * 3) - textWidth;
DisplayUtils.drawRoundedRect(healthBarX, healthBarY, healthBarWidth, healthBarHeight, 2.5f, ColorUtils.rgba(32, 32, 32, 200));
DisplayUtils.drawRoundedRect(healthBarX, healthBarY, healthBarWidth * healthAnimation, healthBarHeight, 2.5f, ColorUtils.rgba(255, 105, 180, 255));
Fonts.sfui.drawText(eventDisplay.getMatrixStack(), hpText, healthBarX + healthBarWidth + spacing, healthBarY - 1.5f, ColorUtils.rgba(255, 105, 180, 255), 8);
GlStateManager.popMatrix();
}
}
private LivingEntity getTarget(LivingEntity nullTarget) {
LivingEntity auraTarget = Expensive.getInstance().getFunctionRegistry().getKillAura().getTarget();
LivingEntity target = nullTarget;
if (auraTarget != null) {
stopWatch.reset();
allow = true;
target = auraTarget;
} else if (mc.currentScreen instanceof ChatScreen) {
stopWatch.reset();
allow = true;
target = mc.player;
} else if (mc.pointedEntity instanceof LivingEntity) {
stopWatch.reset();
allow = true;
target = (LivingEntity) mc.pointedEntity;
} else {
allow = false;
}
return target;
}
private void drawItemStack(MatrixStack matrixStack, ItemStack stack, float x, float y, float size) {
if (stack.isEmpty()) {
float crossSize = 7.5f;
float thickness = 1.2f;
int color = ColorUtils.rgba(100, 100, 100, 150);
GlStateManager.pushMatrix();
GlStateManager.translated(x + size / 2.0f, y + size / 2.0f, 0);
GlStateManager.rotatef(45, 0, 0, 1);
DisplayUtils.drawRoundedRect(-crossSize / 2.0f, -thickness / 2.0f, crossSize, thickness, 0.5f, color);
GlStateManager.rotatef(90, 0, 0, 1);
DisplayUtils.drawRoundedRect(-crossSize / 2.0f, -thickness / 2.0f, crossSize, thickness, 0.5f, color);
GlStateManager.popMatrix();
return;
}
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GlStateManager.blendFunc(770, 771);
float scale = size / 16.0f;
GlStateManager.scaled(scale, scale, scale);
mc.getItemRenderer().renderItemAndEffectIntoGUI(stack, (int)(x / scale), (int)(y / scale));
mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, stack, (int)(x / scale), (int)(y / scale), null);
GlStateManager.disableBlend();
GlStateManager.popMatrix();
}
public void drawTargetHead(LivingEntity entity, float x, float y, float width, float height) {
if (entity != null) {
EntityRenderer<? super LivingEntity> rendererManager = mc.getRenderManager().getRenderer(entity);
GlStateManager.pushMatrix();
Stencil.initStencilToWrite();
DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
Stencil.readStencilBuffer(1);
drawFace(rendererManager.getEntityTexture(entity), x, y, 8F, 8F, 8F, 8F, width, height, 64F, 64F, entity);
Stencil.uninitStencilBuffer();
GlStateManager.popMatrix();
}
}
public static void sizeAnimation(double width, double height, double scale) {
GlStateManager.translated(width, height, 0);
GlStateManager.scaled(scale, scale, scale);
GlStateManager.translated(-width, -height, 0);
}
public void drawFace(ResourceLocation res, float d,
float y,
float u,
float v,
float uWidth,
float vHeight,
float width,
float height,
float tileWidth,
float tileHeight,
LivingEntity target) {
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
mc.getTextureManager().bindTexture(res);
float hurtPercent = (target.hurtTime - (target.hurtTime != 0 ? mc.timer.renderPartialTicks : 0.0f)) / 10.0f;
GL11.glColor4f(1, 1 - hurtPercent, 1 - hurtPercent, 1);
AbstractGui.drawScaledCustomSizeModalRect(d, y, u, v, uWidth, vHeight, width, height, tileWidth, tileHeight);
GL11.glColor4f(1, 1, 1, 1);
GL11.glPopMatrix();
}
}
Ну хз, не судите строго да не судимыми будете