Начинающий
- Статус
- Оффлайн
- Регистрация
- 14 Дек 2022
- Сообщения
- 118
- Реакции
- 2
- Выберите загрузчик игры
- Fabric
Помню многие пасточки хавали у меня данную функцию с Nexgen Client 3.0 вот решил вам дать уже новей и на другую версию
ss -
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.
code:
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);
}
}
}
}