From 48899f85f97cc4ec9cff03408517f71a5a23dfc8 Mon Sep 17 00:00:00 2001 From: retuci0 Date: Thu, 1 Jan 2026 18:29:46 +0100 Subject: [PATCH] v2.0.1 --- .gitignore | 4 +- gradle.properties | 2 +- .../me/retucio/camtweaks/CameraTweaks.java | 19 +- .../command/commands/PrefixCommand.java | 2 +- .../camtweaks/config/ClientConfig.java | 18 +- .../camtweaks/config/ConfigManager.java | 16 +- .../events/camtweaks/SettingsFrameEvent.java | 2 +- .../retucio/camtweaks/mixin/ScreenMixin.java | 7 +- .../camtweaks/module/settings/KeySetting.java | 2 +- .../camtweaks/ui/buttons/ColorButton.java | 96 --------- .../camtweaks/ui/buttons/SettingButton.java | 80 ------- .../camtweaks/ui/buttons/ToggleButton.java | 56 ----- .../camtweaks/ui/hud/HudEditorScreen.java | 4 +- .../retucio/camtweaks/ui/screen/ClickGUI.java | 137 +++++++----- .../camtweaks/ui/screen/PreviewScreen.java | 2 +- .../retucio/camtweaks/ui/widgets/Button.java | 29 +-- .../retucio/camtweaks/ui/widgets/Frame.java | 60 +++--- .../retucio/camtweaks/ui/widgets/Widget.java | 58 +++++ .../{ => widgets}/buttons/ModuleButton.java | 62 +++--- .../ui/widgets/buttons/SettingButton.java | 30 +++ .../buttons/settings}/BindButton.java | 49 ++--- .../buttons/settings}/ChooseButton.java | 51 ++--- .../widgets/buttons/settings/ColorButton.java | 78 +++++++ .../buttons/settings}/CycleButton.java | 78 +++---- .../buttons/settings}/ListButton.java | 60 +++--- .../buttons/settings}/SliderButton.java | 56 +++-- .../buttons/settings}/TextButton.java | 40 ++-- .../buttons/settings/ToggleButton.java | 49 +++++ .../ui/{ => widgets}/frames/ModuleFrame.java | 69 +++--- .../{ => widgets}/frames/SettingsFrame.java | 200 +++++++++--------- .../frames/settings}/ClientSettingsFrame.java | 23 +- .../frames/settings}/ColorPickerFrame.java | 27 +-- .../widgets/{ => misc}/ScrollBarWidget.java | 34 +-- .../widgets/{ => misc}/SearchBarWidget.java | 48 ++--- .../me/retucio/camtweaks/util/ChatUtil.java | 2 +- .../me/retucio/camtweaks/util/Colors.java | 2 +- 36 files changed, 728 insertions(+), 824 deletions(-) delete mode 100644 src/main/java/me/retucio/camtweaks/ui/buttons/ColorButton.java delete mode 100644 src/main/java/me/retucio/camtweaks/ui/buttons/SettingButton.java delete mode 100644 src/main/java/me/retucio/camtweaks/ui/buttons/ToggleButton.java create mode 100644 src/main/java/me/retucio/camtweaks/ui/widgets/Widget.java rename src/main/java/me/retucio/camtweaks/ui/{ => widgets}/buttons/ModuleButton.java (50%) create mode 100644 src/main/java/me/retucio/camtweaks/ui/widgets/buttons/SettingButton.java rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/BindButton.java (64%) rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/ChooseButton.java (72%) create mode 100644 src/main/java/me/retucio/camtweaks/ui/widgets/buttons/settings/ColorButton.java rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/CycleButton.java (56%) rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/ListButton.java (64%) rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/SliderButton.java (55%) rename src/main/java/me/retucio/camtweaks/ui/{buttons => widgets/buttons/settings}/TextButton.java (69%) create mode 100644 src/main/java/me/retucio/camtweaks/ui/widgets/buttons/settings/ToggleButton.java rename src/main/java/me/retucio/camtweaks/ui/{ => widgets}/frames/ModuleFrame.java (72%) rename src/main/java/me/retucio/camtweaks/ui/{ => widgets}/frames/SettingsFrame.java (71%) rename src/main/java/me/retucio/camtweaks/ui/{frames => widgets/frames/settings}/ClientSettingsFrame.java (79%) rename src/main/java/me/retucio/camtweaks/ui/{frames => widgets/frames/settings}/ColorPickerFrame.java (96%) rename src/main/java/me/retucio/camtweaks/ui/widgets/{ => misc}/ScrollBarWidget.java (79%) rename src/main/java/me/retucio/camtweaks/ui/widgets/{ => misc}/SearchBarWidget.java (87%) diff --git a/.gitignore b/.gitignore index bbd79d1..decfc82 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,4 @@ replay_*.log todo.txt cambios.md -remappedSrc/ -src/main/java/me/retucio/camtweaks/ui/widgets/Frame.java -src/main/java/me/retucio/camtweaks/ui/widgets/Button.java \ No newline at end of file +remappedSrc/ \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 227a1f5..0644fc4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings=1.21.10+build.2 loader_version=0.17.3 loom_version=1.11-SNAPSHOT -mod_version=2.0 +mod_version=2.1 maven_group=me.retucio archives_base_name=camtweaks diff --git a/src/main/java/me/retucio/camtweaks/CameraTweaks.java b/src/main/java/me/retucio/camtweaks/CameraTweaks.java index 5fee35c..4d2e943 100644 --- a/src/main/java/me/retucio/camtweaks/CameraTweaks.java +++ b/src/main/java/me/retucio/camtweaks/CameraTweaks.java @@ -20,12 +20,13 @@ import me.retucio.camtweaks.module.modules.HUD; import me.retucio.camtweaks.ui.screen.ClickGUI; import me.retucio.camtweaks.ui.hud.HudEditorScreen; import me.retucio.camtweaks.ui.hud.HudRenderer; -import me.retucio.camtweaks.ui.buttons.BindButton; -import me.retucio.camtweaks.ui.buttons.SettingButton; -import me.retucio.camtweaks.ui.buttons.TextButton; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; -import me.retucio.camtweaks.ui.frames.SettingsFrame; +import me.retucio.camtweaks.ui.widgets.buttons.settings.BindButton; +import me.retucio.camtweaks.ui.widgets.buttons.SettingButton; +import me.retucio.camtweaks.ui.widgets.buttons.settings.TextButton; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.SettingsFrame; +import me.retucio.camtweaks.ui.widgets.Button; import me.retucio.camtweaks.util.*; @@ -84,7 +85,7 @@ public class CameraTweaks implements ClientModInitializer { EVENT_BUS.register(this); - EVENT_BUS.register(new HudRenderer()); + EVENT_BUS.register(HudRenderer.class); EVENT_BUS.register(ChatUtil.class); EVENT_BUS.register(DrawUtil.class); @@ -149,7 +150,7 @@ public class CameraTweaks implements ClientModInitializer { // verifica si algún botón de ajustes está escuchando private boolean isAnySettingButtonFocused() { for (SettingsFrame sf : ClickGUI.INSTANCE.getSettingsFrames()) - for (SettingButton sb : sf.getButtons()) + for (Button sb : sf.getButtons()) if ((sb instanceof BindButton b && b.isFocused()) || (sb instanceof TextButton t && t.isFocused())) return true; return false; @@ -173,8 +174,8 @@ public class CameraTweaks implements ClientModInitializer { private void handleSettingButtonsKey(int key, int action) { for (SettingsFrame sf : ClickGUI.INSTANCE.getSettingsFrames()) { for (SettingButton sb : sf.getButtons()) { - if (sb instanceof BindButton b) b.onKey(key, action); - else if (sb instanceof TextButton t) t.onKey(key, action); + if (sb instanceof BindButton bb) bb.onKey(key, action); + if (sb instanceof TextButton tb) tb.onKey(key, action); } } } diff --git a/src/main/java/me/retucio/camtweaks/command/commands/PrefixCommand.java b/src/main/java/me/retucio/camtweaks/command/commands/PrefixCommand.java index 53aff00..45bfe80 100644 --- a/src/main/java/me/retucio/camtweaks/command/commands/PrefixCommand.java +++ b/src/main/java/me/retucio/camtweaks/command/commands/PrefixCommand.java @@ -3,7 +3,7 @@ package me.retucio.camtweaks.command.commands; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.retucio.camtweaks.command.Command; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.camtweaks.util.ChatUtil; import net.minecraft.command.CommandSource; import net.minecraft.text.Text; diff --git a/src/main/java/me/retucio/camtweaks/config/ClientConfig.java b/src/main/java/me/retucio/camtweaks/config/ClientConfig.java index 79a7d14..8e769ea 100644 --- a/src/main/java/me/retucio/camtweaks/config/ClientConfig.java +++ b/src/main/java/me/retucio/camtweaks/config/ClientConfig.java @@ -80,39 +80,39 @@ public class ClientConfig { @SubscribeEvent public void onMoveSettingsFrame(SettingsFrameEvent.Move event) { - settingsFrames.replace(event.getFrame().module.getName(), new int[]{event.getFrame().x, event.getFrame().y}); + settingsFrames.replace(event.getFrame().module.getName(), new int[]{event.getFrame().getX(), event.getFrame().getY()}); ConfigManager.save(); } @SubscribeEvent public void onExtendModuleFrame(ModuleFrameEvent.Extend event) { extendableFrames.put("M", new FrameData( - ClickGUI.INSTANCE.getModulesFrame().x, - ClickGUI.INSTANCE.getModulesFrame().y, + ClickGUI.INSTANCE.getModulesFrame().getX(), + ClickGUI.INSTANCE.getModulesFrame().getY(), ClickGUI.INSTANCE.getModulesFrame().extended)); } @SubscribeEvent public void onMoveModuleFrame(ModuleFrameEvent.Move event) { extendableFrames.replace("M", new FrameData( - ClickGUI.INSTANCE.getModulesFrame().x, - ClickGUI.INSTANCE.getModulesFrame().y, + ClickGUI.INSTANCE.getModulesFrame().getX(), + ClickGUI.INSTANCE.getModulesFrame().getY(), ClickGUI.INSTANCE.getModulesFrame().extended)); } @SubscribeEvent public void onExtendGUISettingsFrame(GUISettingsFrameEvent.Extend event) { extendableFrames.put("S", new FrameData( - ClickGUI.INSTANCE.getGuiSettingsFrame().x, - ClickGUI.INSTANCE.getGuiSettingsFrame().y, + ClickGUI.INSTANCE.getGuiSettingsFrame().getX(), + ClickGUI.INSTANCE.getGuiSettingsFrame().getY(), ClickGUI.INSTANCE.getGuiSettingsFrame().extended)); } @SubscribeEvent public void onMoveGUISettingsFrame(GUISettingsFrameEvent.Move event) { extendableFrames.replace("S", new FrameData( - ClickGUI.INSTANCE.getGuiSettingsFrame().x, - ClickGUI.INSTANCE.getGuiSettingsFrame().y, + ClickGUI.INSTANCE.getGuiSettingsFrame().getX(), + ClickGUI.INSTANCE.getGuiSettingsFrame().getY(), ClickGUI.INSTANCE.getGuiSettingsFrame().extended)); } diff --git a/src/main/java/me/retucio/camtweaks/config/ConfigManager.java b/src/main/java/me/retucio/camtweaks/config/ConfigManager.java index 6093d1d..c0f922c 100644 --- a/src/main/java/me/retucio/camtweaks/config/ConfigManager.java +++ b/src/main/java/me/retucio/camtweaks/config/ConfigManager.java @@ -6,10 +6,10 @@ import me.retucio.camtweaks.CameraTweaks; import me.retucio.camtweaks.module.Module; import me.retucio.camtweaks.module.ModuleManager; import me.retucio.camtweaks.module.settings.*; -import me.retucio.camtweaks.ui.frames.ModuleFrame; +import me.retucio.camtweaks.ui.widgets.frames.ModuleFrame; import me.retucio.camtweaks.ui.screen.ClickGUI; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; -import me.retucio.camtweaks.ui.frames.SettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.SettingsFrame; import java.io.File; import java.io.FileReader; @@ -100,7 +100,7 @@ public class ConfigManager { public static void setFramePosition(SettingsFrame frame) { ensureConfig(); - config.settingsFrames.put(frame.module.getName(), new int[] {frame.x, frame.y}); + config.settingsFrames.put(frame.module.getName(), new int[] {frame.getX(), frame.getY()}); save(); } @@ -203,8 +203,8 @@ public class ConfigManager { private static void applyExtendableFrame(ModuleFrame frame) { ClientConfig.FrameData frameData = config.extendableFrames.get("M"); if (frameData != null) { - frame.x = frameData.x(); - frame.y = frameData.y(); + frame.setX(frameData.x()); + frame.setY(frameData.y()); frame.extended = frameData.extended(); } } @@ -212,8 +212,8 @@ public class ConfigManager { private static void applyExtendableFrame(ClientSettingsFrame frame) { ClientConfig.FrameData frameData = config.extendableFrames.get("S"); if (frameData != null) { - frame.x = frameData.x(); - frame.y = frameData.y(); + frame.setX(frameData.x()); + frame.setY(frameData.y()); frame.extended = frameData.extended(); } } diff --git a/src/main/java/me/retucio/camtweaks/event/events/camtweaks/SettingsFrameEvent.java b/src/main/java/me/retucio/camtweaks/event/events/camtweaks/SettingsFrameEvent.java index d733660..b4c6601 100644 --- a/src/main/java/me/retucio/camtweaks/event/events/camtweaks/SettingsFrameEvent.java +++ b/src/main/java/me/retucio/camtweaks/event/events/camtweaks/SettingsFrameEvent.java @@ -1,7 +1,7 @@ package me.retucio.camtweaks.event.events.camtweaks; import me.retucio.camtweaks.event.Event; -import me.retucio.camtweaks.ui.frames.SettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.SettingsFrame; // se genera cada que se interactúa con un marco de ajustes de un módulo public class SettingsFrameEvent { diff --git a/src/main/java/me/retucio/camtweaks/mixin/ScreenMixin.java b/src/main/java/me/retucio/camtweaks/mixin/ScreenMixin.java index 1d29f66..177ef49 100644 --- a/src/main/java/me/retucio/camtweaks/mixin/ScreenMixin.java +++ b/src/main/java/me/retucio/camtweaks/mixin/ScreenMixin.java @@ -1,12 +1,10 @@ package me.retucio.camtweaks.mixin; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import me.retucio.camtweaks.CameraTweaks; import me.retucio.camtweaks.command.CommandManager; import me.retucio.camtweaks.config.ConfigManager; import me.retucio.camtweaks.event.events.ClientClickEvent; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; -import net.minecraft.SharedConstants; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; @@ -16,9 +14,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.awt.*; - -import static me.retucio.camtweaks.CameraTweaks.getVersionName; import static me.retucio.camtweaks.CameraTweaks.mc; @Mixin(Screen.class) diff --git a/src/main/java/me/retucio/camtweaks/module/settings/KeySetting.java b/src/main/java/me/retucio/camtweaks/module/settings/KeySetting.java index 4be90d3..47160a6 100644 --- a/src/main/java/me/retucio/camtweaks/module/settings/KeySetting.java +++ b/src/main/java/me/retucio/camtweaks/module/settings/KeySetting.java @@ -2,7 +2,7 @@ package me.retucio.camtweaks.module.settings; import me.retucio.camtweaks.module.Module; import me.retucio.camtweaks.module.ModuleManager; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.camtweaks.util.ChatUtil; import me.retucio.camtweaks.util.KeyUtil; import org.lwjgl.glfw.GLFW; diff --git a/src/main/java/me/retucio/camtweaks/ui/buttons/ColorButton.java b/src/main/java/me/retucio/camtweaks/ui/buttons/ColorButton.java deleted file mode 100644 index 5e04cf6..0000000 --- a/src/main/java/me/retucio/camtweaks/ui/buttons/ColorButton.java +++ /dev/null @@ -1,96 +0,0 @@ -package me.retucio.camtweaks.ui.buttons; - -import me.retucio.camtweaks.module.Module; -import me.retucio.camtweaks.module.settings.ColorSetting; -import me.retucio.camtweaks.ui.screen.ClickGUI; -import me.retucio.camtweaks.ui.frames.SettingsFrame; -import me.retucio.camtweaks.util.ChatUtil; -import me.retucio.camtweaks.util.Colors; -import me.retucio.camtweaks.util.render.DrawUtil; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - -import static me.retucio.camtweaks.CameraTweaks.mc; - -public class ColorButton extends SettingButton { - - private final ColorSetting setting; - - public ColorButton(ColorSetting setting, SettingsFrame parent, int offset) { - super(setting, parent, offset); - this.setting = setting; - } - - @Override - public void render(DrawContext ctx, double mouseX, double mouseY, float delta) { - // fondo - Color bgColor = isHovered((int) mouseX, (int) mouseY) - ? Colors.buttonColor.brighter() - : Colors.buttonColor; - - ctx.fill(x, y, x + w, y + h, bgColor.getRGB()); - - // prev. del color - int previewSize = h - 6; - int previewX = x + 5; - int previewY = y + 3; - - DrawUtil.drawBorder(ctx, previewX - 1, previewY - 1, previewSize + 2, previewSize + 2, setting.isRainbow() ? Colors.mainColor.getRGB() : -1); - ctx.fill(previewX, previewY, previewX + previewSize, previewY + previewSize, setting.getColor().getRGB()); - - // texto - String label = setting.getName(); - int textX = previewX + previewSize + 5; - ctx.drawText(parent.mc.textRenderer, label, textX, y + 3, -1, true); - - // valor actual - String valueText = setting.isRainbow() ? "gay." : Colors.ARGBtoHex(setting.getA(), setting.getR(), setting.getG(), setting.getB()); - int valueWidth = parent.mc.textRenderer.getWidth(valueText); - ctx.drawText(parent.mc.textRenderer, valueText, x + w - valueWidth - 5, y + 3, -1, true); - } - - @Override - public void drawTooltip(DrawContext ctx, double mouseX, double mouseY) { - if (isHovered((int) mouseX, (int) mouseY)) { - List tooltip = new ArrayList<>(); - tooltip.add(Text.of(setting.getDescription())); - tooltip.add(setting.getTooltipText()); - - ctx.drawTooltip(mc.textRenderer, tooltip, (int) mouseX, (int) mouseY + 20); - } - } - - @Override - public void mouseClicked(double mouseX, double mouseY, int button) { - if (isHovered((int) mouseX, (int) mouseY) && ClickGUI.INSTANCE.trySelect(this)) { - if (button == 0) { - // click izq.: abrir selector de colores - ClickGUI.INSTANCE.openColorPickerFrame(setting.getModule(), setting, parent.x + parent.w + 120, parent.renderY + offset); - } else if (button == 1 && mc.isShiftPressed()) { - // shift + clic dcho.: restablecer color - setting.reset(); - } - } - } - - @Override - public void mouseReleased(double mouseX, double mouseY, int button) { - ClickGUI.INSTANCE.unselect(this); - } - - @Override - public void mouseDragged(double mouseX, double mouseY) {} - - public ColorSetting getSetting() { - return setting; - } - - public void refreshDummy() { - // This is called when the color picker frame needs to be refreshed - // We'll update any linked dummy module in the color picker frame - } -} \ No newline at end of file diff --git a/src/main/java/me/retucio/camtweaks/ui/buttons/SettingButton.java b/src/main/java/me/retucio/camtweaks/ui/buttons/SettingButton.java deleted file mode 100644 index 130214b..0000000 --- a/src/main/java/me/retucio/camtweaks/ui/buttons/SettingButton.java +++ /dev/null @@ -1,80 +0,0 @@ -package me.retucio.camtweaks.ui.buttons; - -import me.retucio.camtweaks.module.settings.Setting; -import me.retucio.camtweaks.ui.screen.ClickGUI; -import me.retucio.camtweaks.ui.frames.SettingsFrame; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; - -// clase base para los botones de los ajustes -public abstract class SettingButton { - - protected final Setting setting; - protected final SettingsFrame parent; - protected int offset; - - protected int x, y, w, h; - - public SettingButton(Setting setting, SettingsFrame parent, int offset) { - this.setting = setting; - this.parent = parent; - this.offset = offset; - } - - public abstract void render(DrawContext ctx, double mouseX, double mouseY, float delta); - public abstract void mouseClicked(double mouseX, double mouseY, int button); - public abstract void mouseReleased(double mouseX, double mouseY, int button); - public abstract void mouseDragged(double mouseX, double mouseY); - - // dibujar "tooltips" (cajitas de texto bajo el puntero del ratón) con la descripción para asistir al usuario en el caso de que tenga down - public void drawTooltip(DrawContext ctx, double mouseX, double mouseY) { - if (isHovered((int) mouseX, (int) mouseY)) - ctx.drawTooltip(Text.of(setting.getDescription()), (int) mouseX, (int) mouseY + 20); - } - - protected boolean isHovered(double mouseX, double mouseY) { - return isHovered((int) mouseX, (int) mouseY); - } - - protected boolean isHovered(int mouseX, int mouseY) { - if (!ClickGUI.INSTANCE.canSelect(this)) return false; - return mouseX > x && mouseX < x + w && - mouseY > y && mouseY < y + h; - } - - public Setting getSetting() { - return setting; - } - - public int getX() { - return x; - } - - public void setX(int x) { - this.x = x; - } - - public int getY() { - return y; - } - - public void setY(int y) { - this.y = y; - } - - public int getW() { - return w; - } - - public void setW(int w) { - this.w = w; - } - - public int getH() { - return h; - } - - public void setH(int h) { - this.h = h; - } -} \ No newline at end of file diff --git a/src/main/java/me/retucio/camtweaks/ui/buttons/ToggleButton.java b/src/main/java/me/retucio/camtweaks/ui/buttons/ToggleButton.java deleted file mode 100644 index 79e242d..0000000 --- a/src/main/java/me/retucio/camtweaks/ui/buttons/ToggleButton.java +++ /dev/null @@ -1,56 +0,0 @@ -package me.retucio.camtweaks.ui.buttons; - -import me.retucio.camtweaks.module.settings.BooleanSetting; -import me.retucio.camtweaks.ui.screen.ClickGUI; -import me.retucio.camtweaks.ui.frames.SettingsFrame; -import me.retucio.camtweaks.util.Colors; -import net.minecraft.client.gui.DrawContext; - -import java.awt.*; - -import static me.retucio.camtweaks.CameraTweaks.mc; - -// botón para los ajustes booleanos (funciona como un interruptor) -public class ToggleButton extends SettingButton { - - private final BooleanSetting setting; - - public ToggleButton(BooleanSetting setting, SettingsFrame parent, int offset) { - super(setting, parent, offset); - this.setting = setting; - } - - @Override - public void render(DrawContext ctx, double mouseX, double mouseY, float delta) { - Color color = setting.isEnabled() - ? Colors.enabledToggleButtonColor - : Colors.disabledToggleButtonColor; - - if (isHovered((int) mouseX, (int) mouseY)) - color = color.brighter(); - - ctx.fill(x, y, x + w, y + h, color.getRGB()); - ctx.drawText(parent.mc.textRenderer, setting.getName(), x + 5, y + 3, -1, true); - } - - @Override - public void mouseClicked(double mouseX, double mouseY, int button) { - if (isHovered((int) mouseX, (int) mouseY) && ClickGUI.INSTANCE.trySelect(this)) { - if (button == 0) setting.toggle(); // clic izquierdo para alternar - else if (button == 1 && mc.isShiftPressed()) // shift izquierdo + clic derecho para restablecer al valor por defecto - setting.reset(); - } - } - - @Override - public void mouseReleased(double mouseX, double mouseY, int button) { - ClickGUI.INSTANCE.unselect(this); - } - - @Override - public void mouseDragged(double mouseX, double mouseY) {} - - public BooleanSetting getSetting() { - return setting; - } -} \ No newline at end of file diff --git a/src/main/java/me/retucio/camtweaks/ui/hud/HudEditorScreen.java b/src/main/java/me/retucio/camtweaks/ui/hud/HudEditorScreen.java index 621e2ed..2b1b68e 100644 --- a/src/main/java/me/retucio/camtweaks/ui/hud/HudEditorScreen.java +++ b/src/main/java/me/retucio/camtweaks/ui/hud/HudEditorScreen.java @@ -1,9 +1,7 @@ package me.retucio.camtweaks.ui.hud; import me.retucio.camtweaks.config.ConfigManager; -import me.retucio.camtweaks.module.ModuleManager; -import me.retucio.camtweaks.module.modules.HUD; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.camtweaks.util.Colors; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Click; diff --git a/src/main/java/me/retucio/camtweaks/ui/screen/ClickGUI.java b/src/main/java/me/retucio/camtweaks/ui/screen/ClickGUI.java index 9a52de6..76bee52 100644 --- a/src/main/java/me/retucio/camtweaks/ui/screen/ClickGUI.java +++ b/src/main/java/me/retucio/camtweaks/ui/screen/ClickGUI.java @@ -9,15 +9,18 @@ import me.retucio.camtweaks.event.events.camtweaks.SettingsFrameEvent; import me.retucio.camtweaks.module.Module; import me.retucio.camtweaks.module.settings.Setting; import me.retucio.camtweaks.module.settings.ColorSetting; -import me.retucio.camtweaks.ui.buttons.ListButton; -import me.retucio.camtweaks.ui.buttons.ModuleButton; -import me.retucio.camtweaks.ui.buttons.SettingButton; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; -import me.retucio.camtweaks.ui.frames.ColorPickerFrame; -import me.retucio.camtweaks.ui.frames.ModuleFrame; -import me.retucio.camtweaks.ui.frames.SettingsFrame; -import me.retucio.camtweaks.ui.widgets.ScrollBarWidget; -import me.retucio.camtweaks.ui.widgets.SearchBarWidget; +import me.retucio.camtweaks.ui.widgets.buttons.settings.ListButton; +import me.retucio.camtweaks.ui.widgets.buttons.ModuleButton; +import me.retucio.camtweaks.ui.widgets.buttons.SettingButton; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ColorPickerFrame; +import me.retucio.camtweaks.ui.widgets.frames.ModuleFrame; +import me.retucio.camtweaks.ui.widgets.frames.SettingsFrame; +import me.retucio.camtweaks.ui.widgets.Button; +import me.retucio.camtweaks.ui.widgets.Frame; +import me.retucio.camtweaks.ui.widgets.Widget; +import me.retucio.camtweaks.ui.widgets.misc.ScrollBarWidget; +import me.retucio.camtweaks.ui.widgets.misc.SearchBarWidget; import me.retucio.camtweaks.util.KeyUtil; import net.minecraft.client.MinecraftClient; @@ -29,16 +32,19 @@ import net.minecraft.text.Text; import org.lwjgl.glfw.GLFW; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import static me.retucio.camtweaks.ui.frames.ClientSettingsFrame.guiSettings; +import static me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame.guiSettings; // interfaz gráfica, se abre con el shift derecho por defecto. aquí se encuentran los módulos y sus ajustes public class ClickGUI extends Screen { + private final MinecraftClient mc = MinecraftClient.getInstance(); public static ClickGUI INSTANCE; + private boolean anyFocused; - private Object selected = null; + private Widget selected = null; private final ModuleFrame modulesFrame = new ModuleFrame(20, 30, 100, 20); private final List settingsFrames = new ArrayList<>(); @@ -46,8 +52,7 @@ public class ClickGUI extends Screen { private final ScrollBarWidget scrollBar = new ScrollBarWidget(); private final SearchBarWidget searchBar = new SearchBarWidget(340, 16, 300, 20); - - private final MinecraftClient mc = MinecraftClient.getInstance(); + private final List miscWidgets = Arrays.asList(scrollBar, searchBar); public ClickGUI() { super(Text.of("interfaz")); @@ -59,7 +64,7 @@ public class ClickGUI extends Screen { public void render(DrawContext ctx, int mouseX, int mouseY, float delta) { scrollBar.setWindowHeight(mc.getWindow().getScaledHeight()); scrollBar.setContentHeight(calculateContentHeight()); - scrollBar.render(ctx, mouseX, mouseY); + scrollBar.render(ctx, mouseX, mouseY, delta); int scrollOffset = scrollBar.getScrollOffset(); @@ -111,43 +116,52 @@ public class ClickGUI extends Screen { } private int calculateContentHeight() { - int bottom = modulesFrame.y + modulesFrame.h + modulesFrame.totalHeight; + int bottom = modulesFrame.getY() + modulesFrame.getH() + modulesFrame.getTotalHeight(); for (SettingsFrame frame : settingsFrames) - bottom = Math.max(bottom, frame.y + frame.h + frame.totalHeight); + bottom = Math.max(bottom, frame.getY() + frame.getH() + frame.getTotalHeight()); return bottom + 20; // padding } public boolean mouseClicked(Click click, boolean doubled) { - scrollBar.mouseClicked(click.x(), click.y(), click.button()); - searchBar.mouseClicked(click.x(), click.y(), click.button()); + miscWidgets.forEach(w -> w.mouseClicked( + (int) click.x(), + (int) click.y(), + click.button())); // detectar clics sobre los marcos - modulesFrame.mouseClicked(click.x(), click.y(), click.button()); + modulesFrame.mouseClicked((int) click.x(), (int) click.y(), click.button()); for (SettingsFrame sf : new ArrayList<>(settingsFrames)) - sf.mouseClicked(click.x(), click.y(), click.button()); + sf.mouseClicked((int) click.x(), (int) click.y(), click.button()); return super.mouseClicked(click, doubled); } @Override public boolean mouseReleased(Click click) { - scrollBar.mouseReleased(click.x(), click.y(), click.button()); - searchBar.mouseReleased(click.x(), click.y(), click.button()); + miscWidgets.forEach(w -> w.mouseReleased( + (int) click.x(), + (int) click.y(), + click.button())); // registrar cuándo se suelta el clic, en cada marco respectivamente - modulesFrame.mouseReleased(click.x(), click.y(), click.button()); + modulesFrame.mouseReleased((int) click.x(), (int) click.y(), click.button()); for (SettingsFrame sf : new ArrayList<>(settingsFrames)) - sf.mouseReleased(click.x(), click.y(), click.button()); + sf.mouseReleased((int) click.x(), (int) click.y(), click.button()); + return super.mouseReleased(click); } @Override public boolean mouseDragged(Click click, double deltaX, double deltaY) { - scrollBar.mouseDragged(click.y()); + miscWidgets.forEach(w -> w.mouseDragged( + (int) click.x(), + (int) click.y())); + for (SettingsFrame sf : new ArrayList<>(settingsFrames)) - sf.mouseDragged(click.x(), click.y()); + sf.mouseDragged((int) click.x(), (int) click.y()); + return super.mouseDragged(click, deltaX, deltaY); } @@ -158,8 +172,8 @@ public class ClickGUI extends Screen { @SubscribeEvent public void onMouseScroll(MouseScrollEvent event) { - // subir y bajar la pantalla con la rueda del ratón - scrollBar.onMouseScroll(event.getVertical() * guiSettings.scrollSens.getValue()); + miscWidgets.forEach(w -> w.mouseScrolled( + event.getVertical() * guiSettings.scrollSens.getValue())); } @SubscribeEvent @@ -168,13 +182,13 @@ public class ClickGUI extends Screen { if (CameraTweaks.mc.currentScreen != this || event.getButton() != 2 || !KeyUtil.isKeyDown(GLFW.GLFW_KEY_LEFT_SHIFT)) return; int h = CameraTweaks.mc.getWindow().getScaledHeight(); - int minY = Math.min(modulesFrame.y, settingsFrames.stream().mapToInt(sf -> sf.y).min().orElse(modulesFrame.y)); - int maxY = Math.max(modulesFrame.y + modulesFrame.h, settingsFrames.stream().mapToInt(sf -> sf.y + sf.h).max().orElse(modulesFrame.y + modulesFrame.h)); + int minY = Math.min(modulesFrame.getY(), settingsFrames.stream().mapToInt(Frame::getY).min().orElse(modulesFrame.getY())); + int maxY = Math.max(modulesFrame.getY() + modulesFrame.getH(), settingsFrames.stream().mapToInt(sf -> sf.getY() + sf.getH()).max().orElse(modulesFrame.getY() + modulesFrame.getH())); int correction = minY < 0 ? -minY + 4 : (maxY > h ? h - maxY - 4 : 0); if (correction != 0) { - modulesFrame.y += correction; - settingsFrames.forEach(sf -> sf.y += correction); + modulesFrame.setY(modulesFrame.getY() + correction); + settingsFrames.forEach(sf -> sf.setY(sf.getY() + correction)); } } @@ -183,7 +197,8 @@ public class ClickGUI extends Screen { String searchInput = searchBar.getSearchInput().trim(); if (!guiSettings.matchCase.isEnabled()) searchInput = searchInput.toLowerCase(); - for (ModuleButton mb : modulesFrame.getButtons()) { + for (Button b : modulesFrame.getButtons()) { + if (!(b instanceof ModuleButton mb)) return; Module module = mb.getModule(); if (searchInput.isEmpty()) { @@ -203,7 +218,8 @@ public class ClickGUI extends Screen { } for (SettingsFrame sf : settingsFrames) { - for (SettingButton sb : sf.getButtons()) { + for (Button b : sf.getButtons()) { + if (!(b instanceof SettingButton sb)) return; Setting setting = sb.getSetting(); if (searchInput.isEmpty()) { @@ -224,17 +240,18 @@ public class ClickGUI extends Screen { } } + // abrir un marco donde se encuentran los ajustes del módulo deseado public void openSettingsFrame(Module module, int x, int y) { - // abrir un marco donde se encuentran los ajustes del módulo deseado if (isSettingsFrameOpen(module)) return; // permitir un solo marco de ajustes por módulo SettingsFrame frame = new SettingsFrame(module, x, y, 120, 20); settingsFrames.add(frame); CameraTweaks.EVENT_BUS.post(new SettingsFrameEvent.Open(frame)); } - public void openListSettingsFrame(Module module, int x, int y) { - if (isSettingsFrameOpen(module)) return; - SettingsFrame frame = new SettingsFrame(module, x, y, 120, 18); + // abrir un marco de ajustes específicamente para ajustes de selección múltiple + public void openListSettingsFrame(Module dummy, int x, int y) { + if (isSettingsFrameOpen(dummy)) return; + SettingsFrame frame = new SettingsFrame(dummy, x, y, 120, 18); settingsFrames.add(frame); } @@ -244,12 +261,13 @@ public class ClickGUI extends Screen { List toRemove = new ArrayList<>(); for (SettingsFrame sf : settingsFrames) { if ((sf instanceof ColorPickerFrame cpf && cpf.dummyModule == module) // para los selectores de colores - || (!(sf instanceof ColorPickerFrame) && sf.module == module)) { // lógica muy mierdas, lo sé, pero paso de hacerlo bien - CameraTweaks.EVENT_BUS.post(new SettingsFrameEvent.Close(sf)); + || (!(sf instanceof ColorPickerFrame) && sf.module == module)) { // lógica muy mierdas, lo sé, pero paso de hacerlo bien toRemove.add(sf); + CameraTweaks.EVENT_BUS.post(new SettingsFrameEvent.Close(sf)); unselect(sf); } } + settingsFrames.removeAll(toRemove); } @@ -259,13 +277,6 @@ public class ClickGUI extends Screen { .anyMatch(sf -> sf.module.getName().equals(module.getName())); } - public void refreshListButtons() { - for (SettingsFrame frame : settingsFrames) - for (SettingButton button : frame.getButtons()) - if (button instanceof ListButton lb) - lb.refreshDummy(); - } - public boolean isColorPickerFrameOpen(ColorSetting setting) { for (SettingsFrame sf : getSettingsFrames()) { if (sf instanceof ColorPickerFrame cpf) @@ -279,7 +290,7 @@ public class ClickGUI extends Screen { if (isColorPickerFrameOpen(frame.getColorSetting())) { closeColorPickerFrame(frame.getColorSetting()); return; - }; + } settingsFrames.add(frame); } @@ -292,6 +303,14 @@ public class ClickGUI extends Screen { } } + public void refreshListButtons() { + for (SettingsFrame frame : settingsFrames) + for (Button button : frame.getButtons()) + if (button instanceof ListButton lb) + lb.refreshDummy(); + } + + // métodos del súper @Override @@ -332,6 +351,8 @@ public class ClickGUI extends Screen { return guiSettingsFrame; } + public List getMiscWidgets() { return miscWidgets; } + public List getSettingsFrames() { return settingsFrames; } @@ -347,27 +368,27 @@ public class ClickGUI extends Screen { // selección de widgets - public Object getSelected() { + public Widget getSelected() { return selected; } - public void setSelected(Object object) { - this.selected = object; + public void setSelected(Widget widget) { + this.selected = widget; } - public boolean canSelect(Object object) { - return getSelected() == null || getSelected() == object; + public boolean canSelect(Widget widget) { + return getSelected() == null || getSelected() == widget; } - public boolean trySelect(Object object) { - if (canSelect(object)) { - setSelected(object); + public boolean trySelect(Widget widget) { + if (canSelect(widget)) { + setSelected(widget); return true; } return false; } - public void unselect(Object object) { - if (selected == object) setSelected(null); + public void unselect(Widget widget) { + if (selected == widget) setSelected(null); } } diff --git a/src/main/java/me/retucio/camtweaks/ui/screen/PreviewScreen.java b/src/main/java/me/retucio/camtweaks/ui/screen/PreviewScreen.java index c492ad0..bed9ad6 100644 --- a/src/main/java/me/retucio/camtweaks/ui/screen/PreviewScreen.java +++ b/src/main/java/me/retucio/camtweaks/ui/screen/PreviewScreen.java @@ -2,7 +2,7 @@ package me.retucio.camtweaks.ui.screen; import me.retucio.camtweaks.CameraTweaks; import me.retucio.camtweaks.module.modules.ShulkerPeek; -import me.retucio.camtweaks.ui.frames.ClientSettingsFrame; +import me.retucio.camtweaks.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.camtweaks.util.Colors; import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; diff --git a/src/main/java/me/retucio/camtweaks/ui/widgets/Button.java b/src/main/java/me/retucio/camtweaks/ui/widgets/Button.java index 878eed7..01134ae 100644 --- a/src/main/java/me/retucio/camtweaks/ui/widgets/Button.java +++ b/src/main/java/me/retucio/camtweaks/ui/widgets/Button.java @@ -1,36 +1,27 @@ package me.retucio.camtweaks.ui.widgets; -import me.retucio.camtweaks.module.settings.Setting; -import me.retucio.camtweaks.ui.frames.SettingsFrame; import me.retucio.camtweaks.ui.screen.ClickGUI; import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -public abstract class Button { +public abstract class Button extends Widget { - protected Frame parent; + protected Frame parent; protected int offset; - protected int x, y, w, h; - - public Button(Frame parent, int offset) { + public Button(Frame parent, int offset) { + super(parent.getX(), parent.getRenderY(), parent.getW(), parent.getH()); this.parent = parent; this.offset = offset; } - public abstract void render(DrawContext ctx, int mouseX, int mouseY, float delta); - public abstract void mouseClicked(int mouseX, int mouseY, int button); - public abstract void mouseDragged(int mouseX, int mouseY); - public void mouseReleased(int mouseX, int mouseY, int button) { - ClickGUI.INSTANCE.unselect(this); + public abstract void drawTooltip(DrawContext ctx, int mouseX, int mouseY); + + public int getOffset() { + return offset; } - public abstract void drawTooltip(DrawContext ctx, double mouseX, double mouseY); - - protected boolean isHovered(int mouseX, int mouseY) { - if (!ClickGUI.INSTANCE.canSelect(this)) return false; - return mouseX > x && mouseX < x + w && - mouseY > y && mouseY < y + h; + public void setOffset(int offset) { + this.offset = offset; } } diff --git a/src/main/java/me/retucio/camtweaks/ui/widgets/Frame.java b/src/main/java/me/retucio/camtweaks/ui/widgets/Frame.java index 9ac2487..9116bed 100644 --- a/src/main/java/me/retucio/camtweaks/ui/widgets/Frame.java +++ b/src/main/java/me/retucio/camtweaks/ui/widgets/Frame.java @@ -1,63 +1,51 @@ package me.retucio.camtweaks.ui.widgets; -import me.retucio.camtweaks.ui.screen.ClickGUI; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import java.util.ArrayList; import java.util.List; -public abstract class Frame { +public abstract class Frame extends Widget { - private final MinecraftClient mc = MinecraftClient.getInstance(); + protected String title; - public final String title; - private final List