-
Автор темы
- #1
// By KaTrec
- package im.expensive.ui.display.impl;
- 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.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.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);
- final Animation textAnimation = new EaseBackIn(300, 1, 1);
- float healthAnimation = 0.0f;
- float absorptionAnimation = 0.0f;
override - public void render(EventDisplay eventDisplay) {
- entity = getTarget(entity);
- float rounding = 8; //
- 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 = 28;
- float spacing = 6;
- float width = 200;
- float height = 80;
- drag.setWidth(width);
- drag.setHeight(height);
- float hp = entity.getHealth();
- float maxHp = entity.getMaxHealth();
- // Фикс HP для Funtime и ReallyWorld
- if (isCustomServer()) {
- Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
- hp = score != null ? score.getScorePoints() : 0;
- 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();
- GlStateManager.pushMatrix();
- Style style = Expensive.getInstance().getStyleManager().getCurrentStyle();
- sizeAnimation(posX + (width / 2), posY + (height / 2), animation.getOutput());
- drawStyledRect(posX, posY, width, height, rounding, 230);
- // KaTrec
- DisplayUtils.drawRoundedRectOutline(posX, posY, width, height, rounding, 2, ColorUtils.rgb(128, 0, 128));
- Stencil.initStencilToWrite();
- DisplayUtils.drawRoundedRect(posX + spacing, posY + spacing, headSize, headSize, 8, ColorUtils.rgba(25, 26, 40, 165));
- Stencil.readStencilBuffer(1);
- drawTargetHead(entity, posX + spacing, posY + spacing, headSize, headSize);
- Stencil.uninitStencilBuffer();
- // Текст анимация
- textAnimation.setDirection(hp < maxHp / 2 ? Direction.FORWARDS : Direction.BACKWARDS);
- float textAnimValue = (float) textAnimation.getOutput();
- // Победа/Проигрыш
- String resultText = hp >= maxHp ? "Проигрыш" : "Победа";
- int resultColor = hp >= maxHp ? ColorUtils.rgb(255, 0, 0) : ColorUtils.rgb(0, 255, 0);
- Scissor.push();
- Fonts.sfui.drawText(eventDisplay.getMatrixStack(), name, posX + headSize + spacing * 2, posY + 10, -1, 12);
- Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), "HP: " + (int) hp + " / " + (int) maxHp, posX + headSize + spacing * 2, posY + 30, ColorUtils.rgb(255, 255, 255), 9);
- Fonts.sfMedium.drawText(eventDisplay.getMatrixStack(), resultText, posX + width / 2, posY + height - 20 + textAnimValue * 10, resultColor, 12);
- Scissor.pop();
- Vector4i gradientColor = new Vector4i(style.getFirstColor().getRGB(), style.getFirstColor().getRGB(), style.getSecondColor().getRGB(), style.getSecondColor().getRGB());
- DisplayUtils.drawRoundedRect(posX + headSize + spacing * 2, posY + height - 15, width - headSize - spacing * 3, 5, new Vector4f(3, 3, 3, 3), ColorUtils.rgb(50, 50, 50));
- DisplayUtils.drawRoundedRect(posX + headSize + spacing * 2, posY + height - 15, (width - headSize - spacing * 3) * healthAnimation, 5, new Vector4f(3, 3, 3, 3), gradientColor);
- GlStateManager.popMatrix();
- }
- }
- private boolean isCustomServer() {
- String serverIP = mc.getCurrentServerData() != null ? mc.getCurrentServerData().serverIP : "";
- String header = mc.ingameGUI.getTabList().header != null ? mc.ingameGUI.getTabList().header.getString().toLowerCase() : "";
- return (serverIP.contains("reallyworld") || serverIP.contains("funtime")) && (header.contains("анархия") || header.contains("гриф"));
- }
- 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 {
- allow = false;
- }
- return target;
- }
- public void drawTargetHead(LivingEntity entity, float x, float y, float width, float height) {
- if (entity != null) {
- EntityRenderer<? super LivingEntity> rendererManager = mc.getRenderManager().getRenderer(entity);
- drawFace(rendererManager.getEntityTexture(entity), x, y, 8F, 8F, 8F, 8F, width, height, 64F, 64F, entity);
- }
- }
- 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();
- }
- private void drawStyledRect(float x, float y, float width, float height, float radius, int alpha) {
- DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(21, 21, 21, alpha));
- DisplayUtils.drawShadow(x + 5, y + 5, width, height, 5, ColorUtils.rgba(10, 15, 13, 15));
- }
- }
Последнее редактирование: