Визуальная часть Indicator | 1.21.8 Fabric

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Дек 2022
Сообщения
118
Реакции
2
Выберите загрузчик игры
  1. Fabric
Помню многие пасточки хавали у меня данную функцию с Nexgen Client 3.0 вот решил вам дать уже новей и на другую версию
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.


code:
Expand Collapse Copy
package fun.Nexgen.function.impl.render;

import fun.Nexgen.NexgenClient;
import fun.Nexgen.api.events.impl.EventRender2D;
import fun.Nexgen.function.api.Category;
import fun.Nexgen.function.api.Function;
import fun.Nexgen.function.settings.impl.BooleanSetting;
import fun.Nexgen.utils.render.Render2D;
import fun.Nexgen.utils.render.fonts.Font;
import fun.Nexgen.utils.render.fonts.Fonts;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;

import java.awt.*;

public class Indicator extends Function {

    private Color lerpColor(Color a, Color b, float p) {
        p = Math.max(0f, Math.min(1f, p));
        int r = (int) (a.getRed() * (1 - p) + b.getRed() * p);
        int g = (int) (a.getGreen() * (1 - p) + b.getGreen() * p);
        int bl = (int) (a.getBlue() * (1 - p) + b.getBlue() * p);
        return new Color(r, g, bl);
    }

    private final BooleanSetting health = new BooleanSetting("Здоровье", true);
    private final BooleanSetting totems = new BooleanSetting("Тотемы", true);
    private final BooleanSetting armor = new BooleanSetting("Броня", true);

private static final Identifier TOTEM_TEX = Identifier.of("minecraft", "textures/item/totem_of_undying.png");

    public Indicator() {
        super("Indicator", Category.Render, "Отоброжение полезной ифнормации на экране");
    }

    public boolean isHealthEnabled() { return health.getValue(); }

    @EventHandler
    public void onRender2D(EventRender2D e) {
        if (fullNullCheck()) return;
        var ms = e.getContext().getMatrices();
        float sw = mc.getWindow().getScaledWidth();
        float sh = mc.getWindow().getScaledHeight();
        float cx = sw / 2f;
        float cy = sh / 2f;
        float scale = NexgenClient.getInstance().getHudManager().getScale();
        Font font = Fonts.SFPROSTEXT;
        float fs = 9f * scale;

        if (health.getValue()) {
            float hp = mc.player.getHealth();
            float ab = mc.player.getAbsorptionAmount();
            float max = mc.player.getMaxHealth();
            float total = Math.max(0f, hp + ab);
            String val = String.format("%.1f", total);
            String text = "(" + val + ") HP";
            float tw = font.getWidth(text, fs);
            float x = cx - tw / 2f;
            float y = cy + 18f * scale;
            float ratio = Math.min(1f, Math.max(0f, total / Math.max(1f, max)));
            Color low = new Color(220, 60, 60);
            Color mid = new Color(230, 200, 80);
            Color hi = new Color(80, 220, 120);
            Color base = ratio < 0.5f ? lerpColor(low, mid, ratio / 0.5f) : lerpColor(mid, hi, (ratio - 0.5f) / 0.5f);
            float acc = 0f;
            String leftPar = "(";
            Render2D.drawFont(ms, font.getFont(fs), leftPar, x, y, NexgenClient.getInstance().getHudManager().themeTextColor());
            acc += font.getWidth(leftPar, fs);
            for (int i = 0; i < val.length(); i++) {
                float p = (float) i / Math.max(1, val.length() - 1);
                Color c = lerpColor(base, new Color(
                        Math.min(255, (int)(base.getRed() * 1.08f)),
                        Math.min(255, (int)(base.getGreen() * 1.08f)),
                        Math.min(255, (int)(base.getBlue() * 1.08f))
                ), 0.25f * (float) Math.sin((i) * 0.9f));
                String ch = String.valueOf(val.charAt(i));
                Render2D.drawFont(ms, font.getFont(fs), ch, x + acc, y, c);
                acc += font.getWidth(ch, fs);
            }
            String right = ") HP";
            Render2D.drawFont(ms, font.getFont(fs), right, x + acc, y, NexgenClient.getInstance().getHudManager().themeTextColor());
        }

        if (totems.getValue()) {
            int cnt = 0;
            for (int i = 0; i < 36; i++) if (mc.player.getInventory().getStack(i).getItem() == Items.TOTEM_OF_UNDYING) cnt++;
            if (mc.player.getOffHandStack().getItem() == Items.TOTEM_OF_UNDYING) cnt++;
            String t = String.valueOf(cnt);
            float tx = cx + 28f * scale;
            float ty = cy - fs / 2f;
            Render2D.drawTexture(ms, tx, ty, fs + 6f * scale, fs + 6f * scale, 2f * scale, TOTEM_TEX, Color.WHITE);
            Render2D.drawFont(ms, font.getFont(fs), t, tx + (fs + 6f * scale) + 3f * scale, ty + 2f * scale, NexgenClient.getInstance().getHudManager().themeTextColor());
        }

        if (armor.getValue()) {
            float min = 1f;
            for (int i = 0; i < 4; i++) {
                var st = mc.player.getInventory().getArmorStack(i);
                if (st.isEmpty() || !st.isDamageable()) continue;
                int max = st.getMaxDamage();
                int dmg = st.getDamage();
                float left = 1f - (max == 0 ? 0f : (float)dmg / (float)max);
                if (left < min) min = left;
            }
            if (min < 0.14f) {
                String msg = "Броня " + (int)(min * 100f) + "%";
                float tw = font.getWidth(msg, fs);
                float x = cx - tw / 2f;
                float y = cy - 22f * scale;
                Color c = new Color(255, 120, 80, 220);
                Render2D.drawFont(ms, font.getFont(fs), msg, x, y, c);
            }
        }
    }
}
 
Помню многие пасточки хавали у меня данную функцию с Nexgen Client 3.0 вот решил вам дать уже новей и на другую версию
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.


code:
Expand Collapse Copy
package fun.Nexgen.function.impl.render;

import fun.Nexgen.NexgenClient;
import fun.Nexgen.api.events.impl.EventRender2D;
import fun.Nexgen.function.api.Category;
import fun.Nexgen.function.api.Function;
import fun.Nexgen.function.settings.impl.BooleanSetting;
import fun.Nexgen.utils.render.Render2D;
import fun.Nexgen.utils.render.fonts.Font;
import fun.Nexgen.utils.render.fonts.Fonts;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;

import java.awt.*;

public class Indicator extends Function {

    private Color lerpColor(Color a, Color b, float p) {
        p = Math.max(0f, Math.min(1f, p));
        int r = (int) (a.getRed() * (1 - p) + b.getRed() * p);
        int g = (int) (a.getGreen() * (1 - p) + b.getGreen() * p);
        int bl = (int) (a.getBlue() * (1 - p) + b.getBlue() * p);
        return new Color(r, g, bl);
    }

    private final BooleanSetting health = new BooleanSetting("Здоровье", true);
    private final BooleanSetting totems = new BooleanSetting("Тотемы", true);
    private final BooleanSetting armor = new BooleanSetting("Броня", true);

private static final Identifier TOTEM_TEX = Identifier.of("minecraft", "textures/item/totem_of_undying.png");

    public Indicator() {
        super("Indicator", Category.Render, "Отоброжение полезной ифнормации на экране");
    }

    public boolean isHealthEnabled() { return health.getValue(); }

    @EventHandler
    public void onRender2D(EventRender2D e) {
        if (fullNullCheck()) return;
        var ms = e.getContext().getMatrices();
        float sw = mc.getWindow().getScaledWidth();
        float sh = mc.getWindow().getScaledHeight();
        float cx = sw / 2f;
        float cy = sh / 2f;
        float scale = NexgenClient.getInstance().getHudManager().getScale();
        Font font = Fonts.SFPROSTEXT;
        float fs = 9f * scale;

        if (health.getValue()) {
            float hp = mc.player.getHealth();
            float ab = mc.player.getAbsorptionAmount();
            float max = mc.player.getMaxHealth();
            float total = Math.max(0f, hp + ab);
            String val = String.format("%.1f", total);
            String text = "(" + val + ") HP";
            float tw = font.getWidth(text, fs);
            float x = cx - tw / 2f;
            float y = cy + 18f * scale;
            float ratio = Math.min(1f, Math.max(0f, total / Math.max(1f, max)));
            Color low = new Color(220, 60, 60);
            Color mid = new Color(230, 200, 80);
            Color hi = new Color(80, 220, 120);
            Color base = ratio < 0.5f ? lerpColor(low, mid, ratio / 0.5f) : lerpColor(mid, hi, (ratio - 0.5f) / 0.5f);
            float acc = 0f;
            String leftPar = "(";
            Render2D.drawFont(ms, font.getFont(fs), leftPar, x, y, NexgenClient.getInstance().getHudManager().themeTextColor());
            acc += font.getWidth(leftPar, fs);
            for (int i = 0; i < val.length(); i++) {
                float p = (float) i / Math.max(1, val.length() - 1);
                Color c = lerpColor(base, new Color(
                        Math.min(255, (int)(base.getRed() * 1.08f)),
                        Math.min(255, (int)(base.getGreen() * 1.08f)),
                        Math.min(255, (int)(base.getBlue() * 1.08f))
                ), 0.25f * (float) Math.sin((i) * 0.9f));
                String ch = String.valueOf(val.charAt(i));
                Render2D.drawFont(ms, font.getFont(fs), ch, x + acc, y, c);
                acc += font.getWidth(ch, fs);
            }
            String right = ") HP";
            Render2D.drawFont(ms, font.getFont(fs), right, x + acc, y, NexgenClient.getInstance().getHudManager().themeTextColor());
        }

        if (totems.getValue()) {
            int cnt = 0;
            for (int i = 0; i < 36; i++) if (mc.player.getInventory().getStack(i).getItem() == Items.TOTEM_OF_UNDYING) cnt++;
            if (mc.player.getOffHandStack().getItem() == Items.TOTEM_OF_UNDYING) cnt++;
            String t = String.valueOf(cnt);
            float tx = cx + 28f * scale;
            float ty = cy - fs / 2f;
            Render2D.drawTexture(ms, tx, ty, fs + 6f * scale, fs + 6f * scale, 2f * scale, TOTEM_TEX, Color.WHITE);
            Render2D.drawFont(ms, font.getFont(fs), t, tx + (fs + 6f * scale) + 3f * scale, ty + 2f * scale, NexgenClient.getInstance().getHudManager().themeTextColor());
        }

        if (armor.getValue()) {
            float min = 1f;
            for (int i = 0; i < 4; i++) {
                var st = mc.player.getInventory().getArmorStack(i);
                if (st.isEmpty() || !st.isDamageable()) continue;
                int max = st.getMaxDamage();
                int dmg = st.getDamage();
                float left = 1f - (max == 0 ? 0f : (float)dmg / (float)max);
                if (left < min) min = left;
            }
            if (min < 0.14f) {
                String msg = "Броня " + (int)(min * 100f) + "%";
                float tw = font.getWidth(msg, fs);
                float x = cx - tw / 2f;
                float y = cy - 22f * scale;
                Color c = new Color(255, 120, 80, 220);
                Render2D.drawFont(ms, font.getFont(fs), msg, x, y, c);
            }
        }
    }
}
и для чего оно нужно? ладно тотемы но хп и армор
 
Назад
Сверху Снизу