package client.main.module.impl.visuals;
import client.autobuy.ClientBlur;
import client.display.hud.impl.*;
import client.events.RenderItemEvent;
import client.events.RenderScoreBoardEvent;
import client.main.Client;
import client.main.module.settings.impl.SliderSetting;
import client.util.display.render.*;
import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import lombok.AccessLevel;
import lombok.Synchronized;
import lombok.experimental.FieldDefaults;
import client.events.EventRenderer2D;
import client.events.EventUpdate;
import client.main.module.api.Category;
import client.main.module.api.Module;
import client.main.module.api.ModuleRegister;
import client.main.module.settings.impl.BooleanSetting;
import client.main.module.settings.impl.ModeListSetting;
import client.main.module.settings.impl.StringSetting;
import client.util.drag.DragManager;
import client.util.drag.Dragging;
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "Interface", type = Category.Visual, desc = "Настроить элементы Interface, чтобы всегда быть в курсе важной информации")
public class HUD extends Module {
public final ModeListSetting elements = new ModeListSetting("Элементы Interface",
new BooleanSetting("Ватермарка", true),
new BooleanSetting("Эффекты", true),
new BooleanSetting("Список модерации", true),
new BooleanSetting("Активные бинды", true),
new BooleanSetting("Броня", true),
new BooleanSetting("Уведомления", true),
new BooleanSetting("Активный таргет", true),
new BooleanSetting("Табло", true),
new BooleanSetting("Предмет Хелпер", true)
);
// Элементы watermark как отдельные BooleanSetting
private final BooleanSetting watermarkName = new BooleanSetting("Нейм", true);
private final BooleanSetting watermarkUsername = new BooleanSetting("Ник", true);
private final BooleanSetting watermarkFPS = new BooleanSetting("FPS", true);
private final BooleanSetting watermarkPing = new BooleanSetting("Пинг", true);
// ModeListSetting для элементов watermark
public final ModeListSetting watermarkElements = new ModeListSetting("Элементы Watermark",
watermarkName,
watermarkUsername,
watermarkFPS,
watermarkPing
);
// Режимы водяного знака как отдельные BooleanSetting
private final BooleanSetting staticModeSetting = new BooleanSetting("Статичный", true);
private final BooleanSetting animatedModeSetting = new BooleanSetting("Анимированный", false);
// ModeListSetting для режима watermark
public final ModeListSetting watermarkMode = new ModeListSetting("Режим",
staticModeSetting,
animatedModeSetting
);
final WatermarkRenderer watermarkRenderer;
final CoordsRenderer coordsRenderer;
final PotionRenderer potionRenderer;
final KeyBindRenderer keyBindRenderer;
final TargetInfoRenderer targetInfoRenderer;
final ArmorRenderer armorRenderer;
final StaffListRenderer staffListRenderer;
final ScoreBoardRenderer scoreBoardRenderer;
final FunRender funRender;
final EventsRenderer eventsRenderer;
final NearbyMinesRenderer nearbyMinesRenderer;
// Для отслеживания предыдущих состояний
private boolean lastStaticState = true;
private boolean lastAnimatedState = false;
@Subscribe
private void onUpdate(EventUpdate e) {
if (mc.gameSettings.showDebugInfo) {
return;
}
if (elements.getValueByName("Список модерации").get()) staffListRenderer.update(e);
updateWatermarkMode();
// Передаем настройки элементов в watermarkRenderer
if (watermarkRenderer != null) {
watermarkRenderer.setShowName(watermarkName.get());
watermarkRenderer.setShowUsername(watermarkUsername.get());
watermarkRenderer.setShowFPS(watermarkFPS.get());
watermarkRenderer.setShowPing(watermarkPing.get());
}
}
@Subscribe
public void onEvent(RenderScoreBoardEvent event) {
if (elements.getValueByName("Табло").get()) scoreBoardRenderer.renderScoreBoard(event);
}
@Subscribe
private void onDisplay(EventRenderer2D e) {
if (mc.gameSettings.showDebugInfo || e.getType() != EventRenderer2D.Type.POST) {
return;
}
// Применяем режим к водяному знаку
watermarkRenderer.setAnimatedMode(animatedModeSetting.get());
if (elements.getValueByName("Эффекты").get()) potionRenderer.render(e);
if (elements.getValueByName("Ватермарка").get()) watermarkRenderer.render(e);
if (elements.getValueByName("Активные бинды").get()) keyBindRenderer.render(e);
if (elements.getValueByName("Список модерации").get()) staffListRenderer.render(e);
if (elements.getValueByName("Активный таргет").get()) targetInfoRenderer.render(e);
if (elements.getValueByName("Броня").get()) armorRenderer.render(e);
if (elements.getValueByName("Предмет Хелпер").get()) funRender.render(e);
}
private void updateWatermarkMode() {
boolean currentStatic = staticModeSetting.get();
boolean currentAnimated = animatedModeSetting.get();
// Если состояния изменились
if (currentStatic != lastStaticState || currentAnimated != lastAnimatedState) {
// Если включили анимированный режим
if (currentAnimated && !lastAnimatedState) {
// Отключаем статичный режим
staticModeSetting.set(false);
watermarkRenderer.setAnimatedMode(true);
lastStaticState = false;
lastAnimatedState = true;
}
// Если включили статичный режим
else if (currentStatic && !lastStaticState) {
// Отключаем анимированный режим
animatedModeSetting.set(false);
watermarkRenderer.setAnimatedMode(false);
lastStaticState = true;
lastAnimatedState = false;
}
// Если оба режима выключены (может произойти при клике на активный режим)
else if (!currentStatic && !currentAnimated) {
// Включаем статичный режим по умолчанию
staticModeSetting.set(true);
watermarkRenderer.setAnimatedMode(false);
lastStaticState = true;
lastAnimatedState = false;
}
// Обновляем состояния
else {
lastStaticState = currentStatic;
lastAnimatedState = currentAnimated;
}
}
}
public HUD() {
Dragging watermark = Client.getInstance().createDrag(this, "WaterMark", 8, 8);
Dragging potions = Client.getInstance().createDrag(this, "Potions", 278, 5);
Dragging keyBinds = Client.getInstance().createDrag(this, "KeyBinds", 185, 5);
Dragging dragging = Client.getInstance().createDrag(this, "TargetHUD", 74, 128);
Dragging dragging45 = Client.getInstance().createDrag(this, "TargetHUD42", 144, 128);
Dragging staffList = Client.getInstance().createDrag(this, "StaffList", 96, 5);
Dragging dragging425 = Client.getInstance().createDrag(this, "TargetHUD422", 144, 128);
Dragging scoreBoardDrag = Client.getInstance().createDrag(this, "TargetHUD4222", 444, 128);
Dragging funDrag = Client.getInstance().createDrag(this, "FunDrag", 244, 428);
Dragging nearbyMinesRenderer1 = Client.getInstance().createDrag(this, "AAALITKA", 226, 45);
Dragging nearbyMinesRenderer12 = Client.getInstance().createDrag(this, "AAALITKA2", 226, 45);
funRender = new FunRender(funDrag);
armorRenderer = new ArmorRenderer();
watermarkRenderer = new WatermarkRenderer(watermark);
potionRenderer = new PotionRenderer(potions);
keyBindRenderer = new KeyBindRenderer(keyBinds);
scoreBoardRenderer = new ScoreBoardRenderer(scoreBoardDrag);
eventsRenderer = new EventsRenderer(dragging45);
staffListRenderer = new StaffListRenderer(staffList);
targetInfoRenderer = new TargetInfoRenderer(dragging);
coordsRenderer = new CoordsRenderer(dragging425);
nearbyMinesRenderer = new NearbyMinesRenderer(nearbyMinesRenderer1);
// Инициализируем последние состояния
lastStaticState = staticModeSetting.get();
lastAnimatedState = animatedModeSetting.get();
// Передаем начальные настройки в watermarkRenderer
watermarkRenderer.setShowName(watermarkName.get());
watermarkRenderer.setShowUsername(watermarkUsername.get());
watermarkRenderer.setShowFPS(watermarkFPS.get());
watermarkRenderer.setShowPing(watermarkPing.get());
// Добавляем настройки
addSettings(elements, watermarkElements, watermarkMode);
DragManager.load();
}
public static void drawClientRect(float x, float y, float width, float height, float anim,float bluranim, MatrixStack ms) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255 * anim)),
ColorUtil.rgba(15,15,15, (int) (255 * anim)),
ColorUtil.rgba(15,15,15, (int) (255 * anim)),
ColorUtil.rgba(30, 30, 30, (int) (255 * anim)),5);
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (255 * anim)),
ColorUtil.rgba(30, 30, 30, (int) (255 * anim )),
ColorUtil.rgba(30,30,30, (int) (255 * anim)),
ColorUtil.rgba(90,90,90, (int) (255 * anim )), Round.of(5));
}
public static void drawClientGuiRect(float x, float y, float width, float height, MatrixStack ms,float radius) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255)),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),5);
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),
ColorUtil.rgba(30,30,30, (int) (255 )),
ColorUtil.rgba(70,70,70, (int) (255 )), Round.of(5));
}
public static void drawCustomRect(float x, float y, float width, float height, MatrixStack ms,float radius,int coloroutile,int colormainrect,int colordb) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255)),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),radius );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(70,70,70, (int) (255 )), Round.of(radius));
}
public static void drawClientRect(float x, float y, float width, float height, MatrixStack ms,float radius,int alpha) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (alpha)),
ColorUtil.rgba(15,15,15, (int) (alpha)),
ColorUtil.rgba(15,15,15, (int) (alpha )),
ColorUtil.rgba(30, 30, 30, (int) (alpha )),radius );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (alpha )),
ColorUtil.rgba(30, 30, 30, (int) (alpha )),
ColorUtil.rgba(15,15,15, (int) (alpha )),
ColorUtil.rgba(70,70,70, (int) (alpha )), Round.of(radius));
}
public static void drawClientRect(float x, float y, float width, float height, MatrixStack ms,float radius) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255)),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),radius );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),
ColorUtil.rgba(30,30,30, (int) (255 )),
ColorUtil.rgba(70,70,70, (int) (255 )), Round.of(radius));
}
public static void drawRectWithOutline(float x, float y, float width, float height, MatrixStack ms,float radius,float alpha) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (alpha)),
ColorUtil.rgba(15,15,15, (int) (alpha )),
ColorUtil.rgba(15,15,15, (int) (alpha )),
ColorUtil.rgba(30, 30, 30, (int) (alpha )),radius );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (alpha )),
ColorUtil.rgba(30, 30, 30, (int) (alpha )),
ColorUtil.rgba(30,30,30, (int) (alpha )),
ColorUtil.rgba(70,70,70, (int) (alpha )), Round.of(radius));
}
public static void drawRectWith(float x, float y, float width, float height, MatrixStack ms,float radius) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255)),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),radius );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70,70,70, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),
ColorUtil.rgba(30,30,30, (int) (255 )),
ColorUtil.rgba(70,70,70, (int) (255 )), Round.of(radius));
}
public static void drawClientRect(float x, float y, float width, float height, MatrixStack ms) {
RenderUtil.Rounded.smooth(ms, x, y, width, height,
ColorUtil.rgba(30,30,30, (int) (255)),
ColorUtil.rgba(15,15,15, (int) (255 )),
ColorUtil.rgba(15,15,15,(int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),5 );
RenderUtil.Rounded.roundedOutline(ms, x, y, width, height,1,
ColorUtil.rgba(70, 70, 70, (int) (255 )),
ColorUtil.rgba(30, 30, 30, (int) (255 )),
ColorUtil.rgba(30,30,30, (int) (255 )),
ColorUtil.rgba(70, 70, 70, (int) (255 )), Round.of(5));
}
}