From f794457538659f2e05abaf621ca3f4f9917fb89b Mon Sep 17 00:00:00 2001 From: retuci0 Date: Tue, 6 Jan 2026 18:09:52 +0100 Subject: [PATCH] v2.5 --- cambios.md | 8 +- gradle.properties | 2 +- src/main/java/me/retucio/sputnik/Sputnik.java | 1 - .../sputnik/command/commands/BindCommand.java | 2 +- .../retucio/sputnik/config/ClientConfig.java | 6 +- .../retucio/sputnik/config/ConfigManager.java | 38 +-- .../sputnik/event/events/Render2DEvent.java | 24 ++ ...nderWorldEvent.java => Render3DEvent.java} | 4 +- .../events/sputnik/UpdateSettingEvent.java | 2 +- .../retucio/sputnik/mixin/InGameHudMixin.java | 7 + .../sputnik/mixin/MinecraftClientMixin.java | 3 +- .../sputnik/mixin/WorldRendererMixin.java | 4 +- .../me/retucio/sputnik/module/Module.java | 55 ++-- .../retucio/sputnik/module/ModuleManager.java | 2 +- .../module/modules/camera/Freecam.java | 28 +- .../module/modules/camera/Freelook.java | 10 +- .../module/modules/camera/Fullbright.java | 8 +- .../modules/camera/PerspectivePlus.java | 21 +- .../module/modules/camera/Rotations.java | 12 +- .../sputnik/module/modules/camera/Zoom.java | 32 +- .../sputnik/module/modules/client/GUI.java | 34 +- .../sputnik/module/modules/client/HUD.java | 27 +- .../module/modules/misc/AnvilFont.java | 4 +- .../module/modules/misc/BossbarStack.java | 10 +- .../sputnik/module/modules/misc/ChatPlus.java | 23 +- .../module/modules/misc/FakePlayer.java | 4 +- .../module/modules/misc/ScreenshotPlus.java | 17 +- .../module/modules/misc/ShulkerPeek.java | 8 +- .../modules/network/BungeecordSpoofer.java | 4 +- .../module/modules/network/LogoutSpots.java | 29 +- .../module/modules/network/PacketDelay.java | 10 +- .../modules/player/AttributeSwapper.java | 10 +- .../sputnik/module/modules/player/Capes.java | 4 +- .../module/modules/player/FastUse.java | 12 +- .../module/modules/player/HandView.java | 70 ++-- .../module/modules/player/Headhitters.java | 4 +- .../module/modules/player/InventoryPlus.java | 8 +- .../module/modules/player/Offhand.java | 12 +- .../module/modules/player/SafeWalk.java | 4 +- .../sputnik/module/modules/player/UIMove.java | 4 +- .../modules/player/WarnLowDurability.java | 22 +- .../module/modules/render/BlockESP.java | 32 +- .../module/modules/render/BlockOutline.java | 4 +- .../modules/render/BreakingProgress.java | 29 +- .../module/modules/render/CritsPlus.java | 24 +- .../module/modules/render/DamageOverlay.java | 4 +- .../module/modules/render/GlintPlus.java | 10 +- .../module/modules/render/Nametags.java | 34 +- .../module/modules/render/NoRender.java | 57 ++-- .../module/modules/world/ColoredSigns.java | 4 +- .../module/modules/world/LightOverlay.java | 31 +- .../modules/world/NoMiningInterruptions.java | 8 +- .../module/modules/world/TimeChanger.java | 20 +- .../module/{settings => setting}/Setting.java | 20 +- .../sputnik/module/setting/SettingGroup.java | 71 ++++ .../settings/BooleanSetting.java | 4 +- .../{ => setting}/settings/ColorSetting.java | 3 +- .../{ => setting}/settings/EnumSetting.java | 4 +- .../{ => setting}/settings/KeySetting.java | 3 +- .../{ => setting}/settings/ListSetting.java | 4 +- .../{ => setting}/settings/NumberSetting.java | 4 +- .../{ => setting}/settings/OptionSetting.java | 6 +- .../{ => setting}/settings/StringSetting.java | 4 +- .../retucio/sputnik/ui/screen/ClickGUI.java | 18 +- .../ui/widgets/buttons/SettingButton.java | 8 +- .../widgets/buttons/settings/BindButton.java | 2 +- .../buttons/settings/ChooseButton.java | 6 +- .../widgets/buttons/settings/ColorButton.java | 5 +- .../widgets/buttons/settings/CycleButton.java | 2 +- .../widgets/buttons/settings/ListButton.java | 6 +- .../buttons/settings/SliderButton.java | 2 +- .../widgets/buttons/settings/TextButton.java | 2 +- .../buttons/settings/ToggleButton.java | 2 +- .../ui/widgets/frames/SettingsFrame.java | 310 +++++++++++++----- .../frames/settings/ClientSettingsFrame.java | 45 +-- .../frames/settings/ColorPickerFrame.java | 16 +- src/main/resources/sputnik.accesswidener | 3 + 77 files changed, 882 insertions(+), 514 deletions(-) create mode 100644 src/main/java/me/retucio/sputnik/event/events/Render2DEvent.java rename src/main/java/me/retucio/sputnik/event/events/{RenderWorldEvent.java => Render3DEvent.java} (84%) rename src/main/java/me/retucio/sputnik/module/{settings => setting}/Setting.java (70%) create mode 100644 src/main/java/me/retucio/sputnik/module/setting/SettingGroup.java rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/BooleanSetting.java (92%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/ColorSetting.java (98%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/EnumSetting.java (95%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/KeySetting.java (95%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/ListSetting.java (97%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/NumberSetting.java (96%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/OptionSetting.java (95%) rename src/main/java/me/retucio/sputnik/module/{ => setting}/settings/StringSetting.java (92%) diff --git a/cambios.md b/cambios.md index e251d78..f3b72fd 100644 --- a/cambios.md +++ b/cambios.md @@ -1,19 +1,15 @@ -# v2.4 +# v2.5 ## novedades -ahora se usa el formato binario (.dat) en vez de .json para guardar ajustes, lo que los hace más rápidos, y el archivo más liviano +- grupos de ajustes, para mayor orden, y arreglo de algún que otro bug ### adiciones #### módulos nuevos: -- capas: cambia (solo visualmente, para ti) la capa que usas a una custom de las disponibles - ### arreglos / mejoras -- renombrado bien todo que lo hice con prisa - ## problemas reconocidos - muchos, pero repórtalos en la página de problemas si quieres para que queden bien registrados \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 74a4a2b..d84facd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,6 +8,6 @@ loom_version=1.13-SNAPSHOT fabric_api_version=0.140.2+1.21.11 -mod_version=2.4 +mod_version=2.5 maven_group=me.retucio archives_base_name=sputnik \ No newline at end of file diff --git a/src/main/java/me/retucio/sputnik/Sputnik.java b/src/main/java/me/retucio/sputnik/Sputnik.java index c846429..48f0ab8 100644 --- a/src/main/java/me/retucio/sputnik/Sputnik.java +++ b/src/main/java/me/retucio/sputnik/Sputnik.java @@ -120,7 +120,6 @@ public class Sputnik implements ClientModInitializer { // se ejecuta cada vez que se presiona una tecla public void onKey(int key, int action) { if (key == GLFW.GLFW_KEY_F3) return; // prevenir activación de módulos al usar combinaciones de F3 - ModuleManager.INSTANCE.getEnabledModules().forEach(module -> module.onKey(key, action)); boolean anyFocused = isAnySettingButtonFocused() || ClickGUI.INSTANCE.getSearchBar().isFocused(); ClickGUI.INSTANCE.setAnyFocused(anyFocused); diff --git a/src/main/java/me/retucio/sputnik/command/commands/BindCommand.java b/src/main/java/me/retucio/sputnik/command/commands/BindCommand.java index 25819f0..917a449 100644 --- a/src/main/java/me/retucio/sputnik/command/commands/BindCommand.java +++ b/src/main/java/me/retucio/sputnik/command/commands/BindCommand.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.retucio.sputnik.command.Command; import me.retucio.sputnik.command.args.ModuleArgumentType; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.KeyUtil; import net.minecraft.command.CommandSource; diff --git a/src/main/java/me/retucio/sputnik/config/ClientConfig.java b/src/main/java/me/retucio/sputnik/config/ClientConfig.java index 1652c34..b4eab77 100644 --- a/src/main/java/me/retucio/sputnik/config/ClientConfig.java +++ b/src/main/java/me/retucio/sputnik/config/ClientConfig.java @@ -2,7 +2,7 @@ package me.retucio.sputnik.config; import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.sputnik.*; -import me.retucio.sputnik.module.settings.*; +import me.retucio.sputnik.module.setting.settings.*; import me.retucio.sputnik.ui.screen.ClickGUI; import java.io.Serial; @@ -78,13 +78,13 @@ public class ClientConfig { @SubscribeEvent public void onCloseSettingsFrame(SettingsFrameEvent.Close event) { - settingsFrames.remove(event.getFrame().module.getName()); + settingsFrames.remove(event.getFrame().getModule().getName()); ConfigManager.save(); } @SubscribeEvent public void onMoveSettingsFrame(SettingsFrameEvent.Move event) { - settingsFrames.replace(event.getFrame().module.getName(), new int[]{event.getFrame().getX(), event.getFrame().getY()}); + settingsFrames.replace(event.getFrame().getModule().getName(), new int[]{event.getFrame().getX(), event.getFrame().getY()}); ConfigManager.save(); } diff --git a/src/main/java/me/retucio/sputnik/config/ConfigManager.java b/src/main/java/me/retucio/sputnik/config/ConfigManager.java index 1795e6a..8580546 100644 --- a/src/main/java/me/retucio/sputnik/config/ConfigManager.java +++ b/src/main/java/me/retucio/sputnik/config/ConfigManager.java @@ -5,20 +5,20 @@ import com.google.gson.GsonBuilder; import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.ModuleManager; -import me.retucio.sputnik.module.settings.*; +import me.retucio.sputnik.module.setting.*; +import me.retucio.sputnik.module.setting.settings.*; import me.retucio.sputnik.ui.widgets.Frame; import me.retucio.sputnik.ui.widgets.frames.ModuleFrame; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; -import me.retucio.sputnik.util.ChatUtil; import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; // se ocupa de guardar, cargar y aplicar ajustes public class ConfigManager { @@ -115,10 +115,10 @@ public class ConfigManager { public static void setFramePosition(SettingsFrame frame) { ensureConfig(); - if (!config.settingsFrames.containsKey(frame.module.getName())) - config.settingsFrames.put(frame.module.getName(), new int[] {frame.getX(), frame.getY()}); + if (!config.settingsFrames.containsKey(frame.getModule().getName())) + config.settingsFrames.put(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()}); else - config.settingsFrames.replace(frame.module.getName(), new int[] {frame.getX(), frame.getY()}); + config.settingsFrames.replace(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()}); save(); } @@ -140,17 +140,6 @@ public class ConfigManager { save(); } - public static void setHudImagePath(String id, String imagePath) { - ensureConfig(); - config.hudImagePaths.put(id, imagePath); - save(); - } - - public static String getHudImagePath(String id) { - ensureConfig(); - return config.hudImagePaths.getOrDefault(id, ""); - } - public static void setSearchBarPosition(int x, int y) { ensureConfig(); config.searchBarPosition = new int[] {x, y}; @@ -248,6 +237,7 @@ public class ConfigManager { } } + // ajustes de módulos private static void applyBooleanSetting(BooleanSetting setting, Object value) { @@ -306,8 +296,14 @@ public class ConfigManager { Number b = (Number) map.get("b"); Number a = (Number) map.get("a"); - if (r != null && g != null && b != null && a != null) - setting.setRGB(r.intValue(), g.intValue(), b.intValue(), a.intValue()); + if (r != null && g != null && b != null && a != null) { + setting.setRGB( + r.intValue(), + g.intValue(), + b.intValue(), + a.intValue() + ); + } applyOptionalProperty(map, "rb", Boolean.class, setting::setRainbow); applyOptionalProperty(map, "rs", Number.class, val -> setting.setRainbowSpeed(val.intValue())); @@ -321,7 +317,7 @@ public class ConfigManager { } } - private static void applyOptionalProperty(Map map, String key, Class type, java.util.function.Consumer setter) { + private static void applyOptionalProperty(Map map, String key, Class type, Consumer setter) { Object value = map.get(key); if (type.isInstance(value)) { setter.accept(type.cast(value)); @@ -340,7 +336,7 @@ public class ConfigManager { } private static String getSettingKey(Setting setting) { - return setting.getModule().getName() + ":" + setting.getName(); + return setting.getSg().getModule().getName() + ":" + setting.getName(); } public static boolean hasLoaded() { diff --git a/src/main/java/me/retucio/sputnik/event/events/Render2DEvent.java b/src/main/java/me/retucio/sputnik/event/events/Render2DEvent.java new file mode 100644 index 0000000..7a73612 --- /dev/null +++ b/src/main/java/me/retucio/sputnik/event/events/Render2DEvent.java @@ -0,0 +1,24 @@ +package me.retucio.sputnik.event.events; + +import me.retucio.sputnik.event.Event; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderTickCounter; + +public class Render2DEvent extends Event { + + private final DrawContext ctx; + private final RenderTickCounter tc; + + public Render2DEvent(DrawContext ctx, RenderTickCounter tc) { + this.ctx = ctx; + this.tc = tc; + } + + public DrawContext getCtx() { + return ctx; + } + + public RenderTickCounter getTc() { + return tc; + } +} diff --git a/src/main/java/me/retucio/sputnik/event/events/RenderWorldEvent.java b/src/main/java/me/retucio/sputnik/event/events/Render3DEvent.java similarity index 84% rename from src/main/java/me/retucio/sputnik/event/events/RenderWorldEvent.java rename to src/main/java/me/retucio/sputnik/event/events/Render3DEvent.java index be03ce1..de46498 100644 --- a/src/main/java/me/retucio/sputnik/event/events/RenderWorldEvent.java +++ b/src/main/java/me/retucio/sputnik/event/events/Render3DEvent.java @@ -9,13 +9,13 @@ import net.minecraft.client.util.math.MatrixStack; /** * @see me.retucio.sputnik.mixin.WorldRendererMixin#render */ -public class RenderWorldEvent extends Event { +public class Render3DEvent extends Event { private final MatrixStack matrices; private final RenderTickCounter tc; private final Camera camera; - public RenderWorldEvent(MatrixStack matrices, RenderTickCounter tc, Camera camera) { + public Render3DEvent(MatrixStack matrices, RenderTickCounter tc, Camera camera) { this.matrices = matrices; this.tc = tc; this.camera = camera; diff --git a/src/main/java/me/retucio/sputnik/event/events/sputnik/UpdateSettingEvent.java b/src/main/java/me/retucio/sputnik/event/events/sputnik/UpdateSettingEvent.java index 1eed2f0..c521342 100644 --- a/src/main/java/me/retucio/sputnik/event/events/sputnik/UpdateSettingEvent.java +++ b/src/main/java/me/retucio/sputnik/event/events/sputnik/UpdateSettingEvent.java @@ -1,7 +1,7 @@ package me.retucio.sputnik.event.events.sputnik; import me.retucio.sputnik.event.Event; -import me.retucio.sputnik.module.settings.Setting; +import me.retucio.sputnik.module.setting.Setting; // se genera cada que se cambia el valor de un ajuste public class UpdateSettingEvent extends Event { diff --git a/src/main/java/me/retucio/sputnik/mixin/InGameHudMixin.java b/src/main/java/me/retucio/sputnik/mixin/InGameHudMixin.java index b7e7d30..497f142 100644 --- a/src/main/java/me/retucio/sputnik/mixin/InGameHudMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/InGameHudMixin.java @@ -1,6 +1,8 @@ package me.retucio.sputnik.mixin; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import me.retucio.sputnik.Sputnik; +import me.retucio.sputnik.event.events.Render2DEvent; import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.misc.ChatPlus; import me.retucio.sputnik.module.modules.camera.Freecam; @@ -28,6 +30,11 @@ public abstract class InGameHudMixin { noRender = ModuleManager.INSTANCE.getModuleByClass(NoRender.class); } + @Inject(method = "render", at = @At("TAIL")) + private void onRenderHud(DrawContext ctx, RenderTickCounter tc, CallbackInfo ci) { + Sputnik.EVENT_BUS.post(new Render2DEvent(ctx, tc)); + } + // norender diff --git a/src/main/java/me/retucio/sputnik/mixin/MinecraftClientMixin.java b/src/main/java/me/retucio/sputnik/mixin/MinecraftClientMixin.java index 74ae770..88bdb80 100644 --- a/src/main/java/me/retucio/sputnik/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/MinecraftClientMixin.java @@ -14,8 +14,7 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.world.ClientWorld; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; diff --git a/src/main/java/me/retucio/sputnik/mixin/WorldRendererMixin.java b/src/main/java/me/retucio/sputnik/mixin/WorldRendererMixin.java index be0e33e..7a3f4aa 100644 --- a/src/main/java/me/retucio/sputnik/mixin/WorldRendererMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/WorldRendererMixin.java @@ -3,7 +3,7 @@ package me.retucio.sputnik.mixin; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.buffers.GpuBufferSlice; import me.retucio.sputnik.Sputnik; -import me.retucio.sputnik.event.events.RenderWorldEvent; +import me.retucio.sputnik.event.events.Render3DEvent; import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.render.BlockOutline; import me.retucio.sputnik.module.modules.camera.Freecam; @@ -47,7 +47,7 @@ public abstract class WorldRendererMixin { matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(camera.getYaw() + 180f)); profiler.push(Sputnik.MOD_ID + "-3d"); - EVENT_BUS.post(new RenderWorldEvent(matrices, tickCounter, camera)); + EVENT_BUS.post(new Render3DEvent(matrices, tickCounter, camera)); profiler.pop(); matrices.pop(); diff --git a/src/main/java/me/retucio/sputnik/module/Module.java b/src/main/java/me/retucio/sputnik/module/Module.java index 0646122..a341fff 100644 --- a/src/main/java/me/retucio/sputnik/module/Module.java +++ b/src/main/java/me/retucio/sputnik/module/Module.java @@ -4,10 +4,11 @@ import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.config.ConfigManager; import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.sputnik.ToggleModuleEvent; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.KeySetting; -import me.retucio.sputnik.module.settings.Setting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; +import me.retucio.sputnik.module.setting.Setting; import me.retucio.sputnik.util.ChatUtil; import net.minecraft.client.MinecraftClient; import org.lwjgl.glfw.GLFW; @@ -15,6 +16,7 @@ import org.lwjgl.glfw.GLFW; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; // clase base para los módulos public class Module { @@ -33,22 +35,24 @@ public class Module { protected KeySetting bind = new KeySetting("tecla", "tecla asignada al módulo, ESC para desactivar", GLFW.GLFW_KEY_UNKNOWN); protected BooleanSetting notify = new BooleanSetting("notificar", "notificar en el chat al activar / desactivar", true); - private final List settings = new ArrayList<>(); + protected final List sgs = new ArrayList<>(); + protected final SettingGroup sgGeneral = addSg(new SettingGroup("general", true)); protected MinecraftClient mc = MinecraftClient.getInstance(); + public Module(String name, String description, Category category) { this.name = name; this.description = description; this.category = category; - addSettings(bind, keyMode, notify); + sgGeneral.addAll(bind, keyMode, notify); } public Module(String name, String description, Category category, int key) { this.name = name; this.description = description; this.category = category; - addSettings(bind, keyMode, notify); + sgGeneral.addAll(bind, keyMode, notify); this.bind.setDefaultKey(key); // puto marcos @@ -57,22 +61,34 @@ public class Module { this.bind.setKey(key); } + // ajustes + + public SettingGroup addSg(SettingGroup sg) { + sgs.add(sg); + sg.setModule(this); + return sg; + } + + public List getSgs() { + return sgs; + } + + public SettingGroup getSg(String name) { + for (SettingGroup sg : sgs) { + if (sg.getName().equals(name)) { + return sg; + } + } + return null; + } + public List getSettings() { + List settings = new ArrayList<>(); + sgs.forEach(sg -> sg.forEach(settings::add)); return settings; } - @SuppressWarnings("unchecked") - public S addSetting(Setting setting) { - settings.add(setting); - setting.setModule(this); - return (S) setting; // por conveniencia - } - - public void addSettings(Setting... settings) { - for (Setting setting : settings) addSetting(setting); - } - // encendido y apagado del módulo public void toggle() { @@ -100,9 +116,8 @@ public class Module { } - // otros métodos + // tick (ejecutado 20 veces por segundo) public void onTick() {} - public void onKey(int key, int action) {} // getters y setters public String getName() { diff --git a/src/main/java/me/retucio/sputnik/module/ModuleManager.java b/src/main/java/me/retucio/sputnik/module/ModuleManager.java index 771dfd0..38bd586 100644 --- a/src/main/java/me/retucio/sputnik/module/ModuleManager.java +++ b/src/main/java/me/retucio/sputnik/module/ModuleManager.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.module; import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.event.SubscribeEvent; -import me.retucio.sputnik.module.modules.camera.*; import me.retucio.sputnik.module.modules.client.HUD; +import me.retucio.sputnik.module.modules.camera.*; import me.retucio.sputnik.module.modules.misc.*; import me.retucio.sputnik.module.modules.network.*; import me.retucio.sputnik.module.modules.player.*; diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/Freecam.java b/src/main/java/me/retucio/sputnik/module/modules/camera/Freecam.java index 654f723..28528be 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/Freecam.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/Freecam.java @@ -5,9 +5,10 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.*; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.KeySetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.MiscUtil; @@ -41,21 +42,22 @@ import org.lwjgl.glfw.GLFW; public class Freecam extends Module { // ajustes + SettingGroup sgSpeed = addSg(new SettingGroup("velocidad", true)); - public BooleanSetting toggleOnDamage = addSetting(new BooleanSetting("desactivar al recibir daño", "desactiva el módulo tras recibir daño", true)); - public BooleanSetting reloadChunks = addSetting(new BooleanSetting("recargar chunks", "recargar chunks para arreglar el culling de las cuevas", true)); - public BooleanSetting renderHands = addSetting(new BooleanSetting("manos visibles", "decide si se renderizan las manos mientras la cámara esté libre", true)); - public BooleanSetting stayCrouching = addSetting(new BooleanSetting("mantenerse agachado", "mantener al jugador agachado tras entrar en el modo de cámara libre", false)); - public BooleanSetting staticView = addSetting(new BooleanSetting("visión estática", "desactiva ajustes que muevan la cámara", true)); - public BooleanSetting cancelActionPackets = addSetting(new BooleanSetting("cancelar paquetes", "evita flaggear el anticheat al interactuar con bloques / entidades", true)); - public BooleanSetting blockOutlines = addSetting(new BooleanSetting("contorno de bloques", "mostrar el contorno de los bloques estando en el modo de cámara libre", true)); + public BooleanSetting toggleOnDamage = sgGeneral.add(new BooleanSetting("desactivar al recibir daño", "desactiva el módulo tras recibir daño", true)); + public BooleanSetting reloadChunks = sgGeneral.add(new BooleanSetting("recargar chunks", "recargar chunks para arreglar el culling de las cuevas", true)); + public BooleanSetting renderHands = sgGeneral.add(new BooleanSetting("manos visibles", "decide si se renderizan las manos mientras la cámara esté libre", true)); + public BooleanSetting stayCrouching = sgGeneral.add(new BooleanSetting("mantenerse agachado", "mantener al jugador agachado tras entrar en el modo de cámara libre", false)); + public BooleanSetting staticView = sgGeneral.add(new BooleanSetting("visión estática", "desactiva ajustes que muevan la cámara", true)); + public BooleanSetting cancelActionPackets = sgGeneral.add(new BooleanSetting("cancelar paquetes", "evita flaggear el anticheat al interactuar con bloques / entidades", true)); + public BooleanSetting blockOutlines = sgGeneral.add(new BooleanSetting("contorno de bloques", "mostrar el contorno de los bloques estando en el modo de cámara libre", true)); - public NumberSetting speedSetting = addSetting(new NumberSetting( + public NumberSetting speedSetting = sgSpeed.add(new NumberSetting( "velocidad", "velocidad de movimiento de la cámara", 1, 0, 10, 0.2)); - public KeySetting scrollKey = addSetting(new KeySetting("tecla del scroll", "tecla a mantener pulsada para cambiar velocidad con el scroll", GLFW.GLFW_KEY_LEFT_CONTROL)); - public NumberSetting scrollSens = addSetting(new NumberSetting( + public KeySetting scrollKey = sgSpeed.add(new KeySetting("tecla del scroll", "tecla a mantener pulsada para cambiar velocidad con el scroll", GLFW.GLFW_KEY_LEFT_CONTROL)); + public NumberSetting scrollSens = sgSpeed.add(new NumberSetting( "sensibilidad del scroll", "sensibilidad de la rueda del ratón para modificar la velocidad, 0 para desactivar", 1, 0, 2, 0.1)); diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/Freelook.java b/src/main/java/me/retucio/sputnik/module/modules/camera/Freelook.java index 318dd35..4545c79 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/Freelook.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/Freelook.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.camera; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.KeyUtil; import net.minecraft.client.option.Perspective; import net.minecraft.util.math.MathHelper; @@ -16,13 +16,13 @@ import org.lwjgl.glfw.GLFW; public class Freelook extends Module { - public EnumSetting mode = addSetting(new EnumSetting<>("cámara a mover", "elige cual cámara mover con el ratón y cuál se queda estática", + public EnumSetting mode = sgGeneral.add(new EnumSetting<>("cámara a mover", "elige cual cámara mover con el ratón y cuál se queda estática", CameraMode.class, CameraMode.CAMERA)); - public NumberSetting arrowSens = addSetting(new NumberSetting("sensibilidad de las flechas", "cuánto rotan la cámara estática las flechas (0 para desactivar)", + public NumberSetting arrowSens = sgGeneral.add(new NumberSetting("sensibilidad de las flechas", "cuánto rotan la cámara estática las flechas (0 para desactivar)", 4, 0, 10, 0.1)); - public NumberSetting mouseSens = addSetting(new NumberSetting("sensibilidad del ratón", ".", + public NumberSetting mouseSens = sgGeneral.add(new NumberSetting("sensibilidad del ratón", ".", 0.1, 0, 2, 0.05)); private float yaw; diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/Fullbright.java b/src/main/java/me/retucio/sputnik/module/modules/camera/Fullbright.java index ab0dc93..508304c 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/Fullbright.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/Fullbright.java @@ -3,8 +3,8 @@ package me.retucio.sputnik.module.modules.camera; import me.retucio.sputnik.mixin.accessor.StatusEffectInstanceAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.registry.Registries; @@ -18,9 +18,9 @@ import java.awt.*; public class Fullbright extends Module { - public EnumSetting mode = addSetting(new EnumSetting<>("modo", "qué modo de iluminación emplear (usar poción con shaders)", Modes.class, Modes.GAMMA)); + public EnumSetting mode = sgGeneral.add(new EnumSetting<>("modo", "qué modo de iluminación emplear (usar poción con shaders)", Modes.class, Modes.GAMMA)); - public ColorSetting color = addSetting(new ColorSetting("filtro", "filtro de color", new Color(255, 255, 255, 255), false)); + public ColorSetting color = sgGeneral.add(new ColorSetting("filtro", "filtro de color", new Color(255, 255, 255, 255), false)); public Fullbright() { super("brilli brilli", diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/PerspectivePlus.java b/src/main/java/me/retucio/sputnik/module/modules/camera/PerspectivePlus.java index 15fd09d..cddcba6 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/PerspectivePlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/PerspectivePlus.java @@ -5,28 +5,35 @@ import me.retucio.sputnik.event.events.MouseScrollEvent; import me.retucio.sputnik.event.events.PerspectiveChangeEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.*; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.KeyUtil; import org.lwjgl.glfw.GLFW; // continúa en CameraMixin public class PerspectivePlus extends Module { - private double distance; - // ajustes - public BooleanSetting clip = addSetting(new BooleanSetting( + + SettingGroup sgScroll = addSg(new SettingGroup("scrolleo", true)); + + public BooleanSetting clip = sgGeneral.add(new BooleanSetting( "clip", "atravesar bloques con la cámara", true)); - public NumberSetting defaultDistance = addSetting(new NumberSetting( + public NumberSetting defaultDistance = sgGeneral.add(new NumberSetting( "distancia", "distancia a la que está la cámara del jugador por defecto", 4, 1, 20, 0.2)); - public NumberSetting scrollSens = addSetting(new NumberSetting( + public NumberSetting scrollSens = sgScroll.add(new NumberSetting( "sensibilidad del scroll", "sensibilidad de la rueda del ratón (0 para desactivar)", 1, 0, 8, 0.1)); - public KeySetting scrollKey = addSetting(new KeySetting("tecla del scroll", "qué tecla mantener para usar la rueda del ratón", GLFW.GLFW_KEY_LEFT_ALT)); + public KeySetting scrollKey = sgScroll.add(new KeySetting("tecla del scroll", "qué tecla mantener para usar la rueda del ratón", + GLFW.GLFW_KEY_LEFT_ALT)); + + private double distance; public PerspectivePlus() { super("perspectiva plus", diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/Rotations.java b/src/main/java/me/retucio/sputnik/module/modules/camera/Rotations.java index 3c315e8..7ab1931 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/Rotations.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/Rotations.java @@ -4,17 +4,17 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.ChangeRotationEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; public class Rotations extends Module { - public NumberSetting yaw = addSetting(new NumberSetting("guiñada", "eje vertical - giro horizontal (yaw)", 0, -180, 180, 1)); - public NumberSetting pitch = addSetting(new NumberSetting("cabeceo", "eje horizontal - giro vertical (pitch)", 0, -90, 90, 1)); + public NumberSetting yaw = sgGeneral.add(new NumberSetting("guiñada", "eje vertical - giro horizontal (yaw)", 0, -180, 180, 1)); + public NumberSetting pitch = sgGeneral.add(new NumberSetting("cabeceo", "eje horizontal - giro vertical (pitch)", 0, -90, 90, 1)); - public BooleanSetting smooth = addSetting(new BooleanSetting("evitar movimiento", "cancela todo movimiento de la cámara", false)); - public BooleanSetting serverSide = addSetting(new BooleanSetting("serverside", "espamea paquetes de rotación al servidor", false)); + public BooleanSetting smooth = sgGeneral.add(new BooleanSetting("evitar movimiento", "cancela todo movimiento de la cámara", false)); + public BooleanSetting serverSide = sgGeneral.add(new BooleanSetting("serverside", "espamea paquetes de rotación al servidor", false)); public Rotations() { super("rotaciones", diff --git a/src/main/java/me/retucio/sputnik/module/modules/camera/Zoom.java b/src/main/java/me/retucio/sputnik/module/modules/camera/Zoom.java index 33bebf3..de7f311 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/camera/Zoom.java +++ b/src/main/java/me/retucio/sputnik/module/modules/camera/Zoom.java @@ -5,30 +5,34 @@ import me.retucio.sputnik.event.events.GetFOVEvent; import me.retucio.sputnik.event.events.MouseScrollEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.KeySetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.KeyUtil; import org.lwjgl.glfw.GLFW; // continúa en GameRendererMixin public class Zoom extends Module { - public BooleanSetting showHands = addSetting(new BooleanSetting("mostrar manos", "esconde o muestra las manos al hacer zoom", true)); - public BooleanSetting showHUD = addSetting(new BooleanSetting("mostrar HUD", "esconde o muestra los indicadores en pantalla", true)); + SettingGroup sgVisual = addSg(new SettingGroup("visual", true)); + SettingGroup sgScroll = addSg(new SettingGroup("scrolleo", true)); + SettingGroup sgCam = addSg(new SettingGroup("cámara", true)); - public NumberSetting scrollSens = addSetting(new NumberSetting("sensibilidad del scroll", "sensibilidad de la rueda del ratón (0 para desactivar)", - 0.4, 0, 8, 0.1)); - - public KeySetting scrollKey = addSetting(new KeySetting("tecla del scroll", "qué tecla mantener para usar la rueda del ratón", GLFW.GLFW_KEY_LEFT_CONTROL)); - - public NumberSetting defaultZoom = addSetting(new NumberSetting("zoom", "cantidad de zoom", + public NumberSetting defaultZoom = sgGeneral.add(new NumberSetting("zoom", "cantidad de zoom", 6, 1, 10, 0.1)); - public NumberSetting mouseSensMultiplier = addSetting(new NumberSetting("sensibilidad", "multiplicador de la sensibilidad del ratón", - 0.4, 0, 1, 0.05)); + public BooleanSetting showHands = sgVisual.add(new BooleanSetting("mostrar manos", "esconde o muestra las manos al hacer zoom", true)); + public BooleanSetting showHUD = sgVisual.add(new BooleanSetting("mostrar HUD", "esconde o muestra los indicadores en pantalla", true)); - public BooleanSetting smoothCam = addSetting(new BooleanSetting("cámara cinemática", "usa la cámara cinemática mientras hagas zoom", false)); + public NumberSetting scrollSens = sgScroll.add(new NumberSetting("sensibilidad del scroll", "sensibilidad de la rueda del ratón (0 para desactivar)", + 0.4, 0, 8, 0.1)); + public KeySetting scrollKey = sgScroll.add(new KeySetting("tecla del scroll", "qué tecla mantener para usar la rueda del ratón", + GLFW.GLFW_KEY_LEFT_CONTROL)); + + public NumberSetting mouseSensMultiplier = sgCam.add(new NumberSetting("sensibilidad", "multiplicador de la sensibilidad del ratón", + 0.4, 0, 1, 0.05)); + public BooleanSetting smoothCam = sgCam.add(new BooleanSetting("cámara cinemática", "usa la cámara cinemática mientras hagas zoom", false)); private boolean prevSmoothCam; private double prevMouseSens; diff --git a/src/main/java/me/retucio/sputnik/module/modules/client/GUI.java b/src/main/java/me/retucio/sputnik/module/modules/client/GUI.java index 6260450..032080b 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/client/GUI.java +++ b/src/main/java/me/retucio/sputnik/module/modules/client/GUI.java @@ -9,10 +9,11 @@ import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.misc.ChatPlus; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.NumberSetting; -import me.retucio.sputnik.module.settings.StringSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.StringSetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.Colors; import org.lwjgl.glfw.GLFW; @@ -22,25 +23,30 @@ import java.awt.*; // módulo no visible solo para los ajustes de la interfaz (y del cliente en general) public class GUI extends Module { - public ColorSetting color = addSetting(new ColorSetting("color", "color principal de la interfaz y el mod", + SettingGroup sgWidgets = addSg(new SettingGroup("widgets", true)); + SettingGroup sgUi = addSg(new SettingGroup("interfaz", true)); + SettingGroup sgChat = addSg(new SettingGroup("chat", true)); + SettingGroup sgMisc = addSg(new SettingGroup("misc.", true)); + + public ColorSetting color = sgGeneral.add(new ColorSetting("color", "color principal de la interfaz y el mod", new Color(70, 20, 210, 230), false)); // números negativos para deslizamiento inverso, 0 para desactivar - public NumberSetting scrollSens = addSetting(new NumberSetting("sensibilidad del scroll", "qué tan sensible es la interfaz a la rueda del ratón", + public NumberSetting scrollSens = sgWidgets.add(new NumberSetting("sensibilidad del scroll", "qué tan sensible es la interfaz a la rueda del ratón", 5, -15, 15, 0.5)); - public BooleanSetting scrollBar = addSetting(new BooleanSetting("barra de desplazamiento", "renderizar una barra de desplazamiento a la derecha de la interfaz", true)); + public BooleanSetting scrollBar = sgWidgets.add(new BooleanSetting("barra de desplazamiento", "renderizar una barra de desplazamiento a la derecha de la interfaz", true)); - public BooleanSetting searchBar = addSetting(new BooleanSetting("barra de búsqueda", "renderizar una barra de búsqueda que filtra resultados en todos los marcos abiertos", true)); - public BooleanSetting matchCase = addSetting(new BooleanSetting("distinguir mayúsculas", "la búsqueda es sensible a mayúsculas y minúsculas", false)); + public BooleanSetting searchBar = sgWidgets.add(new BooleanSetting("barra de búsqueda", "renderizar una barra de búsqueda que filtra resultados en todos los marcos abiertos", true)); + public BooleanSetting matchCase = sgWidgets.add(new BooleanSetting("distinguir mayúsculas", "la búsqueda es sensible a mayúsculas y minúsculas", false)); // ^^^ no sé de qué sirve porque está todo en minúsculas pero bueno - public BooleanSetting blur = addSetting(new BooleanSetting("desenfoque", "desenfocar el fondo mientras la interfaz está abierta", true)); - public StringSetting watermark = addSetting(new StringSetting("marca de agua", "marca de agua para interfaces (dejar vacío para desactivar)", me.retucio.sputnik.Sputnik.getVersionName(), 40)); + public BooleanSetting blur = sgUi.add(new BooleanSetting("desenfoque", "desenfocar el fondo mientras la interfaz está abierta", true)); + public StringSetting watermark = sgUi.add(new StringSetting("marca de agua", "marca de agua para interfaces (dejar vacío para desactivar)", me.retucio.sputnik.Sputnik.getVersionName(), 40)); - public StringSetting commandPrefix = addSetting(new StringSetting("prefijo", "prefijo de los comandos", "$", 10)); - public StringSetting chatName = addSetting(new StringSetting("nombre", "qué nombre usar en notificaciones por el chat", "smegma", 20)); + public StringSetting commandPrefix = sgChat.add(new StringSetting("prefijo", "prefijo de los comandos", "$", 10)); + public StringSetting chatName = sgChat.add(new StringSetting("nombre", "qué nombre usar en notificaciones por el chat", "smegma", 20)); - public BooleanSetting multipleKeybinds = addSetting(new BooleanSetting("teclas multimódulo", "permitir asignar la misma tecla a más de un módulo", false)); + public BooleanSetting multipleKeybinds = sgMisc.add(new BooleanSetting("teclas multimódulo", "permitir asignar la misma tecla a más de un módulo", false)); public GUI() { super("interfaz", diff --git a/src/main/java/me/retucio/sputnik/module/modules/client/HUD.java b/src/main/java/me/retucio/sputnik/module/modules/client/HUD.java index f50f699..3e8dc82 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/client/HUD.java +++ b/src/main/java/me/retucio/sputnik/module/modules/client/HUD.java @@ -2,7 +2,8 @@ package me.retucio.sputnik.module.modules.client; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.*; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.*; import me.retucio.sputnik.ui.hud.HudElement; import me.retucio.sputnik.ui.hud.HudRenderer; import me.retucio.sputnik.ui.hud.HudEditorScreen; @@ -19,21 +20,25 @@ import java.awt.*; public class HUD extends Module { + SettingGroup sgEditor = addSg(new SettingGroup("editor", true)); + SettingGroup sgDisplay = addSg(new SettingGroup("visualización", true)); + SettingGroup sgElements = addSg(new SettingGroup("elementos", false)); + // editor - public KeySetting editorKey = addSetting(new KeySetting("tecla del editor", "tecla asignada al editor de elementos del hud", GLFW.GLFW_KEY_PAGE_UP)); + public KeySetting editorKey = sgEditor.add(new KeySetting("tecla del editor", "tecla asignada al editor de elementos del hud", GLFW.GLFW_KEY_PAGE_UP)); // ajustes - public ColorSetting color = addSetting(new ColorSetting("color", "color del texto de los elementos del HUD", + public ColorSetting color = sgDisplay.add(new ColorSetting("color", "color del texto de los elementos del HUD", new Color(255, 255, 255, 255), false)); - public BooleanSetting showOnF3 = addSetting(new BooleanSetting("mostrar en F3", "renderizar HUD en el menú de debug", false)); - public BooleanSetting showOnChat = addSetting(new BooleanSetting("mostrar en chat", "renderizar HUD en la pantalla del chat", false)); + public BooleanSetting shadow = sgDisplay.add(new BooleanSetting("sombra", "texto con sombra", true)); + public BooleanSetting showOnF3 = sgDisplay.add(new BooleanSetting("mostrar en F3", "renderizar HUD en el menú de debug", false)); + public BooleanSetting showOnChat = sgDisplay.add(new BooleanSetting("mostrar en chat", "renderizar HUD en la pantalla del chat", false)); - public BooleanSetting shadow = addSetting(new BooleanSetting("sombra", "texto con sombra", true)); - public NumberSetting timezone = addSetting(new NumberSetting("zona horaria", "zona horaria en UTC+n", 1, -6, 6, 1)); - public EnumSetting timeFormat = addSetting(new EnumSetting<>("formato de la hora", "12h o 24h", TimeFormat.class, TimeFormat.TWENTY_FOUR_HOUR)); - public StringSetting customText = addSetting(new StringSetting("texto custom", "marca de agua (dejar vacío para quitar)", "adolf jitler inshtagram feishbuc twiter", 40)); - public EnumSetting coordsMode = addSetting(new EnumSetting<>("modo de coordenadas", "qué coordenadas mostrar", CoordsMode.class, CoordsMode.OVERWORLD)); - public EnumSetting dyno = addSetting(new EnumSetting<>("dinosaurio", "qué dinosaurio mostrar", + public NumberSetting timezone = sgElements.add(new NumberSetting("zona horaria", "zona horaria en UTC+n", 1, -6, 6, 1)); + public EnumSetting timeFormat = sgElements.add(new EnumSetting<>("formato de la hora", "12h o 24h", TimeFormat.class, TimeFormat.TWENTY_FOUR_HOUR)); + public StringSetting customText = sgElements.add(new StringSetting("texto custom", "marca de agua (dejar vacío para quitar)", "adolf jitler inshtagram feishbuc twiter", 40)); + public EnumSetting coordsMode = sgElements.add(new EnumSetting<>("modo de coordenadas", "qué coordenadas mostrar", CoordsMode.class, CoordsMode.OVERWORLD)); + public EnumSetting dyno = sgElements.add(new EnumSetting<>("dinosaurio", "qué dinosaurio mostrar", Dynosaurs.class, Dynosaurs.SPINOSAURUS)); public HUD() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/AnvilFont.java b/src/main/java/me/retucio/sputnik/module/modules/misc/AnvilFont.java index e3df1cf..c17df20 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/AnvilFont.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/AnvilFont.java @@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.misc; import me.retucio.sputnik.mixin.accessor.AnvilScreenAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; import net.minecraft.client.gui.screen.ingame.AnvilScreen; import net.minecraft.client.gui.widget.TextFieldWidget; @@ -17,7 +17,7 @@ import java.util.Map; public class AnvilFont extends Module { - public EnumSetting fontMode = addSetting(new EnumSetting<>("tipografía", "qué tipografía utilizar", + public EnumSetting fontMode = sgGeneral.add(new EnumSetting<>("tipografía", "qué tipografía utilizar", FontMode.class, FontMode.NORMAL)); String text; diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/BossbarStack.java b/src/main/java/me/retucio/sputnik/module/modules/misc/BossbarStack.java index f4b39e2..bf2bb64 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/BossbarStack.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/BossbarStack.java @@ -4,8 +4,8 @@ import me.retucio.sputnik.event.events.RenderBossbarEvent; import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.client.gui.hud.ClientBossBar; import net.minecraft.text.Text; @@ -15,9 +15,9 @@ import java.util.WeakHashMap; public class BossbarStack extends Module { - public BooleanSetting stackBars = addSetting(new BooleanSetting("apilar barras", "apilar las bossbars", true)); - public BooleanSetting hideNames = addSetting(new BooleanSetting("esconder nombres", "no renderiza el nombre de los bosses", false)); - public NumberSetting spaceReduction = addSetting(new NumberSetting("reducción de espacio", "cuánto reducir el espacio entre bossbars", + public BooleanSetting stackBars = sgGeneral.add(new BooleanSetting("apilar barras", "apilar las bossbars", true)); + public BooleanSetting hideNames = sgGeneral.add(new BooleanSetting("esconder nombres", "no renderiza el nombre de los bosses", false)); + public NumberSetting spaceReduction = sgGeneral.add(new NumberSetting("reducción de espacio", "cuánto reducir el espacio entre bossbars", 0, 0, 10, 0.1)); private final Map bossBarMap = new WeakHashMap<>(); diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java b/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java index 2fefdb6..f58cf4a 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java @@ -10,8 +10,9 @@ import me.retucio.sputnik.event.events.ReceiveMessageEvent; import me.retucio.sputnik.event.events.SendMessageEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.interfaces.IChatHudLine; import me.retucio.sputnik.util.interfaces.IChatHudLineVisible; @@ -43,15 +44,17 @@ import java.util.regex.Pattern; public class ChatPlus extends Module { // ajustes - public BooleanSetting timestamps = addSetting(new BooleanSetting("sello de tiempo", "muestra a qué hora se ha enviado un mensaje", true)); - public BooleanSetting timestampSecs = addSetting(new BooleanSetting("mostrar segundos", "muestra segundos también en el sello de tiempo", false)); - public BooleanSetting showHeads = addSetting(new BooleanSetting("cabezas", "muestra la cabeza del jugador junto a su mensaje", true)); - public BooleanSetting coordsProtection = addSetting(new BooleanSetting("proteger coordenadas", "evitar enviar coordenadas por el chat", true)); + SettingGroup sgChat = addSg(new SettingGroup("funcionamiento del chat", true)); - public BooleanSetting keepHistory = addSetting(new BooleanSetting("no borrar chat", "no borrar el chat tras desconectarse", true)); - public BooleanSetting logger = addSetting(new BooleanSetting("registro", "evita que se borre el chat de un server", true)); - public BooleanSetting noCharLimit = addSetting(new BooleanSetting("quitar límite de caracteres", "te deja escribir mensajes tan largos como desees", false)); - public NumberSetting chatHistoryExtraLength = addSetting(new NumberSetting("expandir chat", "cuántas líneas añadir al historial del chat", + public BooleanSetting timestamps = sgGeneral.add(new BooleanSetting("sello de tiempo", "muestra a qué hora se ha enviado un mensaje", true)); + public BooleanSetting timestampSecs = sgGeneral.add(new BooleanSetting("mostrar segundos", "muestra segundos también en el sello de tiempo", false)); + public BooleanSetting showHeads = sgGeneral.add(new BooleanSetting("cabezas", "muestra la cabeza del jugador junto a su mensaje", true)); + + public BooleanSetting coordsProtection = sgChat.add(new BooleanSetting("proteger coordenadas", "evitar enviar coordenadas por el chat", true)); + public BooleanSetting keepHistory = sgChat.add(new BooleanSetting("no borrar chat", "no borrar el chat tras desconectarse", true)); + public BooleanSetting logger = sgChat.add(new BooleanSetting("registro", "evita que se borre el chat de un server", true)); + public BooleanSetting noCharLimit = sgChat.add(new BooleanSetting("quitar límite de caracteres", "te deja escribir mensajes tan largos como desees", false)); + public NumberSetting chatHistoryExtraLength = sgChat.add(new NumberSetting("expandir chat", "cuántas líneas añadir al historial del chat", 0, 0, 1000, 1)); public ChatPlus() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/FakePlayer.java b/src/main/java/me/retucio/sputnik/module/modules/misc/FakePlayer.java index 8d29728..a36a715 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/FakePlayer.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/FakePlayer.java @@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.misc; import com.mojang.authlib.GameProfile; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.StringSetting; +import me.retucio.sputnik.module.setting.settings.StringSetting; import net.minecraft.client.network.OtherClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -12,7 +12,7 @@ import java.util.UUID; public class FakePlayer extends Module { - public StringSetting name = addSetting(new StringSetting("nombre", "qué nombre asignarle al jugador", "apio boy", 22)); + public StringSetting name = sgGeneral.add(new StringSetting("nombre", "qué nombre asignarle al jugador", "apio boy", 22)); private OtherClientPlayerEntity player = null; diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/ScreenshotPlus.java b/src/main/java/me/retucio/sputnik/module/modules/misc/ScreenshotPlus.java index 9f0f981..55dd63b 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/ScreenshotPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/ScreenshotPlus.java @@ -4,8 +4,9 @@ import me.retucio.sputnik.command.CommandManager; import me.retucio.sputnik.event.events.ClientClickEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; import me.retucio.sputnik.util.ChatUtil; import net.minecraft.client.texture.NativeImage; import net.minecraft.text.ClickEvent; @@ -30,14 +31,16 @@ import java.io.IOException; public class ScreenshotPlus extends Module { - public BooleanSetting saveButton = addSetting(new BooleanSetting("botón de guardar", "mostrar botón para guardar la captura localmente", true)); - public BooleanSetting copyButton = addSetting(new BooleanSetting("botón de copiar", "mostrar botón para copiar la captura al portapapeles", true)); - public BooleanSetting openButton = addSetting(new BooleanSetting("botón de abrir", "mostrar botón para abrir el archivo de la captura", true)); - public BooleanSetting discardButton = addSetting(new BooleanSetting("botón de descartar", "mostrar botón para descartar la captura", true)); + SettingGroup sgButtons = addSg(new SettingGroup("botones", true)); - public EnumSetting defaultAction = addSetting(new EnumSetting<>("por defecto", "qué acción tomar por defecto", + public EnumSetting defaultAction = sgGeneral.add(new EnumSetting<>("por defecto", "qué acción tomar por defecto", ScreenshotActions.class, ScreenshotActions.NONE)); + public BooleanSetting saveButton = sgButtons.add(new BooleanSetting("botón de guardar", "mostrar botón para guardar la captura localmente", true)); + public BooleanSetting copyButton = sgButtons.add(new BooleanSetting("botón de copiar", "mostrar botón para copiar la captura al portapapeles", true)); + public BooleanSetting openButton = sgButtons.add(new BooleanSetting("botón de abrir", "mostrar botón para abrir el archivo de la captura", true)); + public BooleanSetting discardButton = sgButtons.add(new BooleanSetting("botón de descartar", "mostrar botón para descartar la captura", true)); + private NativeImage screenshot; private File screenshotFile; diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/ShulkerPeek.java b/src/main/java/me/retucio/sputnik/module/modules/misc/ShulkerPeek.java index 89cee67..fcf67c3 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/ShulkerPeek.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/ShulkerPeek.java @@ -5,8 +5,8 @@ import me.retucio.sputnik.event.events.KeyEvent; import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; import me.retucio.sputnik.ui.screen.PreviewScreen; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.Colors; @@ -29,8 +29,8 @@ import java.util.HashMap; public class ShulkerPeek extends Module { - public KeySetting previewKey = addSetting(new KeySetting("tecla de previsualización", "tecla a mantener para previsualizar", GLFW.GLFW_KEY_LEFT_ALT)); - public BooleanSetting showTooltips = addSetting(new BooleanSetting("mostrar tooltips", "añadir texto a los tooltips (cajas de texto) de los shulkers", true)); + public KeySetting previewKey = sgGeneral.add(new KeySetting("tecla de previsualización", "tecla a mantener para previsualizar", GLFW.GLFW_KEY_LEFT_ALT)); + public BooleanSetting showTooltips = sgGeneral.add(new BooleanSetting("mostrar tooltips", "añadir texto a los tooltips (cajas de texto) de los shulkers", true)); public static final HashMap SHULKER_COLORS = new HashMap<>(); diff --git a/src/main/java/me/retucio/sputnik/module/modules/network/BungeecordSpoofer.java b/src/main/java/me/retucio/sputnik/module/modules/network/BungeecordSpoofer.java index d18c995..ce085d1 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/network/BungeecordSpoofer.java +++ b/src/main/java/me/retucio/sputnik/module/modules/network/BungeecordSpoofer.java @@ -2,12 +2,12 @@ package me.retucio.sputnik.module.modules.network; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.StringSetting; +import me.retucio.sputnik.module.setting.settings.StringSetting; import me.retucio.sputnik.util.ChatUtil; public class BungeecordSpoofer extends Module { - public StringSetting address = addSetting(new StringSetting("dirección", "la dirección IP que será enviada al server", "127.0.0.1", 15)); + public StringSetting address = sgGeneral.add(new StringSetting("dirección", "la dirección IP que será enviada al server", "127.0.0.1", 15)); public BungeecordSpoofer() { super("spoofer de bungeecord", diff --git a/src/main/java/me/retucio/sputnik/module/modules/network/LogoutSpots.java b/src/main/java/me/retucio/sputnik/module/modules/network/LogoutSpots.java index b02391e..4c52d36 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/network/LogoutSpots.java +++ b/src/main/java/me/retucio/sputnik/module/modules/network/LogoutSpots.java @@ -2,14 +2,15 @@ package me.retucio.sputnik.module.modules.network; import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.AddEntityEvent; -import me.retucio.sputnik.event.events.RenderWorldEvent; +import me.retucio.sputnik.event.events.Render3DEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.misc.FakePlayer; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.MiscUtil; import me.retucio.sputnik.util.render.RenderUtil; import net.minecraft.client.network.OtherClientPlayerEntity; @@ -31,16 +32,20 @@ import java.util.UUID; // lógica sutilmente robada de MeteorClient porque la mía era una mierda public class LogoutSpots extends Module { - public BooleanSetting outlines = addSetting(new BooleanSetting("contorno", "renderizar contorno de la caja (lados)", true)); - public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "Color de las líneas", new Color(255, 0, 0, 230), false)); - public NumberSetting lineWidth = addSetting(new NumberSetting("grosor de línea", "grosor de las líneas del contorno", 1.5, 0.5, 5, 0.1)); + SettingGroup sgOutlines = addSg(new SettingGroup("contorno", true)); + SettingGroup sgFilling = addSg(new SettingGroup("relleno", true)); + SettingGroup sgMisc = addSg(new SettingGroup("misc.", true)); - public BooleanSetting filling = addSetting(new BooleanSetting("relleno", "renderizar relleno de la caja (caras)", true)); - public ColorSetting fillingColor = addSetting(new ColorSetting("color del relleno", "Color de los lados", new Color(230, 0, 0, 55), false)); + public BooleanSetting outlines = sgOutlines.add(new BooleanSetting("contorno", "renderizar contorno de la caja (lados)", true)); + public ColorSetting outlineColor = sgOutlines.add(new ColorSetting("color del contorno", "Color de las líneas", new Color(255, 0, 0, 230), false)); + public NumberSetting lineWidth = sgOutlines.add(new NumberSetting("grosor de línea", "grosor de las líneas del contorno", 1.5, 0.5, 5, 0.1)); - public BooleanSetting fullHeight = addSetting(new BooleanSetting("hitbox completa", "renderizar la caja completa de la hitbox, o solo marcar la posición", true)); + public BooleanSetting filling = sgFilling.add(new BooleanSetting("relleno", "renderizar relleno de la caja (caras)", true)); + public ColorSetting fillingColor = sgFilling.add(new ColorSetting("color del relleno", "Color de los lados", new Color(230, 0, 0, 55), false)); - public BooleanSetting dummy = addSetting(new BooleanSetting("monigote", "spawnear un monigote para marcar la posición", true)); + public BooleanSetting fullHeight = sgMisc.add(new BooleanSetting("hitbox completa", "renderizar la caja completa de la hitbox, o solo marcar la posición", true)); + + public BooleanSetting dummy = sgMisc.add(new BooleanSetting("monigote", "spawnear un monigote para marcar la posición", true)); private final List players = new ArrayList<>(); private final List lastPlayerList = new ArrayList<>(); @@ -165,7 +170,7 @@ public class LogoutSpots extends Module { } @SubscribeEvent - public void onWorldRender(RenderWorldEvent event) { + public void onWorldRender(Render3DEvent event) { if (mc.player == null || mc.world == null) return; for (LogoutEntry entry : players) diff --git a/src/main/java/me/retucio/sputnik/module/modules/network/PacketDelay.java b/src/main/java/me/retucio/sputnik/module/modules/network/PacketDelay.java index ef1f012..57d36c8 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/network/PacketDelay.java +++ b/src/main/java/me/retucio/sputnik/module/modules/network/PacketDelay.java @@ -5,8 +5,8 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.NetworkUtil; @@ -22,10 +22,10 @@ import java.util.concurrent.CopyOnWriteArrayList; public class PacketDelay extends Module { - public NumberSetting delay = addSetting(new NumberSetting("delay", "delay a añadir a los paquetes, en milisegundos", 1500, 0, 3000, 5)); - public EnumSetting directions = addSetting(new EnumSetting<>("dirección", "dirección de los paquetes a los que añadir delay", + public NumberSetting delay = sgGeneral.add(new NumberSetting("delay", "delay a añadir a los paquetes, en milisegundos", 1500, 0, 3000, 5)); + public EnumSetting directions = sgGeneral.add(new EnumSetting<>("dirección", "dirección de los paquetes a los que añadir delay", Directions.class, Directions.BOTH)); - public EnumSetting packets = addSetting(new EnumSetting<>("paquetes", "paquetes a los que aplicar el delay", + public EnumSetting packets = sgGeneral.add(new EnumSetting<>("paquetes", "paquetes a los que aplicar el delay", Packets.class, Packets.ALL)); private final List delayedPackets = new CopyOnWriteArrayList<>(); diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/AttributeSwapper.java b/src/main/java/me/retucio/sputnik/module/modules/player/AttributeSwapper.java index 7b9516d..8796956 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/AttributeSwapper.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/AttributeSwapper.java @@ -4,14 +4,14 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.AttackEntityEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; public class AttributeSwapper extends Module { - public NumberSetting slot = addSetting(new NumberSetting("slot", "slot al que cambiar", 1, 1, 9, 1)); - public BooleanSetting swap = addSetting(new BooleanSetting("cambiar de vuelta", "volver al slot inicial tras haber aplicado el swapping", true)); - public NumberSetting swapDelay = addSetting(new NumberSetting("delay de cambio de vuelta", "tiempo que se tarda en volver al slot inicial", 1, 1, 20, 1)); + public NumberSetting slot = sgGeneral.add(new NumberSetting("slot", "slot al que cambiar", 1, 1, 9, 1)); + public BooleanSetting swap = sgGeneral.add(new BooleanSetting("cambiar de vuelta", "volver al slot inicial tras haber aplicado el swapping", true)); + public NumberSetting swapDelay = sgGeneral.add(new NumberSetting("delay de cambio de vuelta", "tiempo que se tarda en volver al slot inicial", 1, 1, 20, 1)); private int delay = 0; private int prevSlot = -1; diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/Capes.java b/src/main/java/me/retucio/sputnik/module/modules/player/Capes.java index 7775eea..06f88b8 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/Capes.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/Capes.java @@ -4,11 +4,11 @@ import me.retucio.sputnik.cape.Cape; import me.retucio.sputnik.cape.CapeManager; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.OptionSetting; +import me.retucio.sputnik.module.setting.settings.OptionSetting; public class Capes extends Module { - public OptionSetting cape = addSetting(new OptionSetting<>("capa", "qué capa llevar puesta", + public OptionSetting cape = sgGeneral.add(new OptionSetting<>("capa", "qué capa llevar puesta", CapeManager.INSTANCE.getCapes(), CapeManager.INSTANCE.getCape("hollow-knight"))); public Capes() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/FastUse.java b/src/main/java/me/retucio/sputnik/module/modules/player/FastUse.java index ef66e6b..9eff3b5 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/FastUse.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/FastUse.java @@ -2,18 +2,18 @@ package me.retucio.sputnik.module.modules.player; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; public class FastUse extends Module { - public BooleanSetting items = addSetting(new BooleanSetting("items", "usar items precozmente", true)); - public NumberSetting itemCooldown = addSetting(new NumberSetting("cooldown de items", "cooldown para usar items en ticks", 0, 0, 4, 1)); + public BooleanSetting items = sgGeneral.add(new BooleanSetting("items", "usar items precozmente", true)); + public NumberSetting itemCooldown = sgGeneral.add(new NumberSetting("cooldown de items", "cooldown para usar items en ticks", 0, 0, 4, 1)); - public BooleanSetting blocks = addSetting(new BooleanSetting("bloques", "colocar bloques precozmente", true)); - public NumberSetting blockCooldown = addSetting(new NumberSetting("cooldown de bloques", "cooldown para colocar bloques en ticks", 0, 0, 4, 1)); + public BooleanSetting blocks = sgGeneral.add(new BooleanSetting("bloques", "colocar bloques precozmente", true)); + public NumberSetting blockCooldown = sgGeneral.add(new NumberSetting("cooldown de bloques", "cooldown para colocar bloques en ticks", 0, 0, 4, 1)); public FastUse() { super("precoz", diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/HandView.java b/src/main/java/me/retucio/sputnik/module/modules/player/HandView.java index 82299d5..0d0b950 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/HandView.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/HandView.java @@ -5,8 +5,9 @@ import me.retucio.sputnik.event.events.RenderHeldItemEvent; import me.retucio.sputnik.event.events.RenderArmEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Hand; import net.minecraft.util.math.RotationAxis; @@ -18,75 +19,80 @@ import org.joml.Vector3d; public class HandView extends Module { + SettingGroup sgAnimations = addSg(new SettingGroup("animaciones", false)); + SettingGroup sgMainHand = addSg(new SettingGroup("mano principal", false)); + SettingGroup sgOffhand = addSg(new SettingGroup("mano secundaria", false)); + SettingGroup sgArm = addSg(new SettingGroup("brazo", false)); + // ajustes de animaciones - public BooleanSetting oldAnimations = addSetting(new BooleanSetting("animaciones viejas", "como las de la 1.8, al pegar", false)); - public BooleanSetting skipSwapping = addSetting(new BooleanSetting("no swap", "se salta la animación de cambiar items de mano", false)); - public BooleanSetting noFood = addSetting(new BooleanSetting("no comer", "no renderiza la animación de comer", false)); + public BooleanSetting oldAnimations = sgAnimations.add(new BooleanSetting("animaciones viejas", "como las de la 1.8, al pegar", false)); + public BooleanSetting skipSwapping = sgAnimations.add(new BooleanSetting("no swap", "se salta la animación de cambiar items de mano", false)); + public BooleanSetting noFood = sgAnimations.add(new BooleanSetting("no comer", "no renderiza la animación de comer", false)); // ajustes de mano principal - public NumberSetting scaleMainX = addSetting(new NumberSetting("escala de la mano principal (X)", ".", + public NumberSetting scaleMainX = sgMainHand.add(new NumberSetting("escala de la mano principal (X)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleMainY = addSetting(new NumberSetting("escala de la mano principal (Y)", ".", + public NumberSetting scaleMainY = sgMainHand.add(new NumberSetting("escala de la mano principal (Y)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleMainZ = addSetting(new NumberSetting("escala de la mano principal (Z)", ".", + public NumberSetting scaleMainZ = sgMainHand.add(new NumberSetting("escala de la mano principal (Z)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting posMainX = addSetting(new NumberSetting("posición de la mano principal (X)", ".", + public NumberSetting posMainX = sgMainHand.add(new NumberSetting("posición de la mano principal (X)", ".", 0, -3, 3, 0.1)); - public NumberSetting posMainY = addSetting(new NumberSetting("posición de la mano principal (Y)", ".", + public NumberSetting posMainY = sgMainHand.add(new NumberSetting("posición de la mano principal (Y)", ".", 0, -3, 3, 0.1)); - public NumberSetting posMainZ = addSetting(new NumberSetting("posición de la mano principal (Z)", ".", + public NumberSetting posMainZ = sgMainHand.add(new NumberSetting("posición de la mano principal (Z)", ".", 0, -3, 3, 0.1)); - public NumberSetting rotMainX = addSetting(new NumberSetting("rotación de la mano principal (X)", ".", + public NumberSetting rotMainX = sgMainHand.add(new NumberSetting("rotación de la mano principal (X)", ".", 0, -180, 180, 1)); - public NumberSetting rotMainY = addSetting(new NumberSetting("rotación de la mano principal (Y)", ".", + public NumberSetting rotMainY = sgMainHand.add(new NumberSetting("rotación de la mano principal (Y)", ".", 0, -180, 180, 1)); - public NumberSetting rotMainZ = addSetting(new NumberSetting("rotación de la mano principal (Z)", ".", + public NumberSetting rotMainZ = sgMainHand.add(new NumberSetting("rotación de la mano principal (Z)", ".", 0, -180, 180, 1)); // ajustes de mano secundaria - public NumberSetting scaleOffX = addSetting(new NumberSetting("escala de la mano secundaria (X)", ".", + public NumberSetting scaleOffX = sgOffhand.add(new NumberSetting("escala de la mano secundaria (X)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleOffY = addSetting(new NumberSetting("escala de la mano secundaria (Y)", ".", + public NumberSetting scaleOffY = sgOffhand.add(new NumberSetting("escala de la mano secundaria (Y)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleOffZ = addSetting(new NumberSetting("escala de la mano secundaria (Z)", ".", + public NumberSetting scaleOffZ = sgOffhand.add(new NumberSetting("escala de la mano secundaria (Z)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting posOffX = addSetting(new NumberSetting("posición de la mano secundaria (X)", ".", + public NumberSetting posOffX = sgOffhand.add(new NumberSetting("posición de la mano secundaria (X)", ".", 0, -3, 3, 0.1)); - public NumberSetting posOffY = addSetting(new NumberSetting("posición de la mano secundaria (Y)", ".", + public NumberSetting posOffY = sgOffhand.add(new NumberSetting("posición de la mano secundaria (Y)", ".", 0, -3, 3, 0.1)); - public NumberSetting posOffZ = addSetting(new NumberSetting("posición de la mano secundaria (Z)", ".", + public NumberSetting posOffZ = sgOffhand.add(new NumberSetting("posición de la mano secundaria (Z)", ".", 0, -3, 3, 0.1)); - public NumberSetting rotOffX = addSetting(new NumberSetting("rotación de la mano secundaria (X)", ".", + public NumberSetting rotOffX = sgOffhand.add(new NumberSetting("rotación de la mano secundaria (X)", ".", 0, -180, 180, 1)); - public NumberSetting rotOffY = addSetting(new NumberSetting("rotación de la mano secundaria (Y)", ".", + public NumberSetting rotOffY = sgOffhand.add(new NumberSetting("rotación de la mano secundaria (Y)", ".", 0, -180, 180, 1)); - public NumberSetting rotOffZ = addSetting(new NumberSetting("rotación de la mano secundaria (Z)", ".", + public NumberSetting rotOffZ = sgOffhand.add(new NumberSetting("rotación de la mano secundaria (Z)", ".", 0, -180, 180, 1)); // brazo - public NumberSetting scaleArmX = addSetting(new NumberSetting("escala del brazo (X)", ".", + public NumberSetting scaleArmX = sgArm.add(new NumberSetting("escala del brazo (X)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleArmY = addSetting(new NumberSetting("escala del brazo (Y)", ".", + public NumberSetting scaleArmY = sgArm.add(new NumberSetting("escala del brazo (Y)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting scaleArmZ = addSetting(new NumberSetting("escala del brazo (Z)", ".", + public NumberSetting scaleArmZ = sgArm.add(new NumberSetting("escala del brazo (Z)", ".", 1, 0.01, 5, 0.1)); - public NumberSetting posArmX = addSetting(new NumberSetting("posición del brazo (X)", ".", + public NumberSetting posArmX = sgArm.add(new NumberSetting("posición del brazo (X)", ".", 0, -3, 3, 0.1)); - public NumberSetting posArmY = addSetting(new NumberSetting("posición del brazo (Y)", ".", + public NumberSetting posArmY = sgArm.add(new NumberSetting("posición del brazo (Y)", ".", 0, -3, 3, 0.1)); - public NumberSetting posArmZ = addSetting(new NumberSetting("posición del brazo (Z)", ".", + public NumberSetting posArmZ = sgArm.add(new NumberSetting("posición del brazo (Z)", ".", 0, -3, 3, 0.1)); - public NumberSetting rotArmX = addSetting(new NumberSetting("rotación del brazo (X)", ".", + public NumberSetting rotArmX = sgArm.add(new NumberSetting("rotación del brazo (X)", ".", 0, -180, 180, 1)); - public NumberSetting rotArmY = addSetting(new NumberSetting("rotación del brazo (Y)", ".", + public NumberSetting rotArmY = sgArm.add(new NumberSetting("rotación del brazo (Y)", ".", 0, -180, 180, 1)); - public NumberSetting rotArmZ = addSetting(new NumberSetting("rotación del brazo (Z)", ".", + public NumberSetting rotArmZ = sgArm.add(new NumberSetting("rotación del brazo (Z)", ".", 0, -180, 180, 1)); public HandView() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/Headhitters.java b/src/main/java/me/retucio/sputnik/module/modules/player/Headhitters.java index b46e219..e2e014d 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/Headhitters.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/Headhitters.java @@ -2,11 +2,11 @@ package me.retucio.sputnik.module.modules.player; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; public class Headhitters extends Module { - public NumberSetting delay = addSetting(new NumberSetting("delay", "delay de saltos", 0, 0, 20, 1)); + public NumberSetting delay = sgGeneral.add(new NumberSetting("delay", "delay de saltos", 0, 0, 20, 1)); public Headhitters() { super("headhitters", diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/InventoryPlus.java b/src/main/java/me/retucio/sputnik/module/modules/player/InventoryPlus.java index 741a752..853083a 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/InventoryPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/InventoryPlus.java @@ -7,7 +7,7 @@ import me.retucio.sputnik.event.events.MouseClickEvent; import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; import me.retucio.sputnik.util.InventoryUtil; import me.retucio.sputnik.util.KeyUtil; import net.minecraft.client.gui.screen.ingame.HandledScreen; @@ -16,9 +16,9 @@ import org.lwjgl.glfw.GLFW; public class InventoryPlus extends Module { - public KeySetting row1key = addSetting(new KeySetting("fila 1", "tecla para mover items a la primera fila", GLFW.GLFW_KEY_A)); - public KeySetting row2key = addSetting(new KeySetting("fila 2", "tecla para mover items a la segunda fila", GLFW.GLFW_KEY_S)); - public KeySetting row3key = addSetting(new KeySetting("fila 3", "tecla para mover items a la tercera fila", GLFW.GLFW_KEY_D)); + public KeySetting row1key = sgGeneral.add(new KeySetting("fila 1", "tecla para mover items a la primera fila", GLFW.GLFW_KEY_A)); + public KeySetting row2key = sgGeneral.add(new KeySetting("fila 2", "tecla para mover items a la segunda fila", GLFW.GLFW_KEY_S)); + public KeySetting row3key = sgGeneral.add(new KeySetting("fila 3", "tecla para mover items a la tercera fila", GLFW.GLFW_KEY_D)); public InventoryPlus() { super("inventario plus", diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/Offhand.java b/src/main/java/me/retucio/sputnik/module/modules/player/Offhand.java index c6af19e..25dc1d5 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/Offhand.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/Offhand.java @@ -2,9 +2,9 @@ package me.retucio.sputnik.module.modules.player; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; -import me.retucio.sputnik.module.settings.OptionSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.OptionSetting; import me.retucio.sputnik.util.Lists; import net.minecraft.item.Item; import net.minecraft.item.Items; @@ -16,10 +16,10 @@ import net.minecraft.util.math.Direction; public class Offhand extends Module { - public OptionSetting item = addSetting(new OptionSetting<>("ítem", "ítem a equipar", + public OptionSetting item = sgGeneral.add(new OptionSetting<>("ítem", "ítem a equipar", Lists.itemList, Items.TOTEM_OF_UNDYING, Lists.itemNames)); - public NumberSetting delaySetting = addSetting(new NumberSetting("delay", "delay del cambiazo (en ticks)", 0, 0, 20, 1)); - public BooleanSetting override = addSetting(new BooleanSetting("anular", "ignora que ya haya un ítem en la mano secundaria", true)); + public NumberSetting delaySetting = sgGeneral.add(new NumberSetting("delay", "delay del cambiazo (en ticks)", 0, 0, 20, 1)); + public BooleanSetting override = sgGeneral.add(new BooleanSetting("anular", "ignora que ya haya un ítem en la mano secundaria", true)); private int delay; diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/SafeWalk.java b/src/main/java/me/retucio/sputnik/module/modules/player/SafeWalk.java index ebdc44b..8461cd8 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/SafeWalk.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/SafeWalk.java @@ -4,7 +4,7 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.ClipAtLedgeEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; @@ -13,7 +13,7 @@ import net.minecraft.world.RaycastContext; public class SafeWalk extends Module { - public NumberSetting fallDistance = addSetting(new NumberSetting("distancia de caída", "distancia de caída máxima permitida", 1, 0, 10, 0.1)); + public NumberSetting fallDistance = sgGeneral.add(new NumberSetting("distancia de caída", "distancia de caída máxima permitida", 1, 0, 10, 0.1)); public SafeWalk() { super("muletas", diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/UIMove.java b/src/main/java/me/retucio/sputnik/module/modules/player/UIMove.java index 3102324..de6cf0e 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/UIMove.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/UIMove.java @@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.player; import me.retucio.sputnik.mixin.accessor.KeyBindingAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.ListSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.Lists; @@ -19,7 +19,7 @@ import java.util.List; public class UIMove extends Module { - public ListSetting> screens = addSetting(new ListSetting<>("interfaces", "interfaces en las que te podrás mover", + public ListSetting> screens = sgGeneral.add(new ListSetting<>("interfaces", "interfaces en las que te podrás mover", Lists.screenList, Lists.allTrue(Lists.screenList), Lists.screenNames)); private List movementKeys; diff --git a/src/main/java/me/retucio/sputnik/module/modules/player/WarnLowDurability.java b/src/main/java/me/retucio/sputnik/module/modules/player/WarnLowDurability.java index 0f4a673..b7d8878 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/player/WarnLowDurability.java +++ b/src/main/java/me/retucio/sputnik/module/modules/player/WarnLowDurability.java @@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.player; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.NumberSetting; -import me.retucio.sputnik.module.settings.OptionSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.OptionSetting; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.Lists; import net.minecraft.item.ItemStack; @@ -21,16 +22,19 @@ import java.util.List; public class WarnLowDurability extends Module { - public NumberSetting limitPercentage = addSetting(new NumberSetting("porcentaje", "porcentaje de durabilidad restante a la que se te avisa", + SettingGroup sgWarn = addSg(new SettingGroup("aviso", true)); + SettingGroup sgSound = addSg(new SettingGroup("sonido", true)); + + public NumberSetting limitPercentage = sgGeneral.add(new NumberSetting("porcentaje", "porcentaje de durabilidad restante a la que se te avisa", 5, 1, 100, 1)); - public BooleanSetting message = addSetting(new BooleanSetting("enviar mensaje", "enviar un mensaje para alertar al usuario", true)); + public BooleanSetting message = sgWarn.add(new BooleanSetting("enviar mensaje", "enviar un mensaje para alertar al usuario", true)); + public BooleanSetting playSound = sgWarn.add(new BooleanSetting("reproducir sonido", "reproducir un sonido para alertar al usuario", true)); - public BooleanSetting playSound = addSetting(new BooleanSetting("reproducir sonido", "reproducir un sonido para alertar al usuario", true)); - public OptionSetting sound = addSetting(new OptionSetting<>("sonido", "qué sonido reproducir", + public OptionSetting sound = sgSound.add(new OptionSetting<>("sonido", "qué sonido reproducir", Lists.soundList, SoundEvents.BLOCK_NOTE_BLOCK_BELL.value(), Lists.soundNames)); - public NumberSetting volume = addSetting(new NumberSetting("volumen", "volumen del sonido", 70, 0, 125, 1)); - public NumberSetting pitch = addSetting(new NumberSetting("frecuencia", "altura del sonido", 70, 0, 125, 1)); + public NumberSetting volume = sgSound.add(new NumberSetting("volumen", "volumen del sonido", 70, 0, 125, 1)); + public NumberSetting pitch = sgSound.add(new NumberSetting("frecuencia", "altura del sonido", 70, 0, 125, 1)); private final List warned = new ArrayList<>(); private float prevPercentage = -1; diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/BlockESP.java b/src/main/java/me/retucio/sputnik/module/modules/render/BlockESP.java index 128d756..352f103 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/BlockESP.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/BlockESP.java @@ -1,13 +1,14 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.event.SubscribeEvent; -import me.retucio.sputnik.event.events.RenderWorldEvent; +import me.retucio.sputnik.event.events.Render3DEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.ListSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.Colors; import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.render.RenderUtil; @@ -23,17 +24,20 @@ import java.util.List; public class BlockESP extends Module { - public ListSetting blocks = addSetting(new ListSetting<>("bloques", "bloques a resaltar", + SettingGroup sgOulines = addSg(new SettingGroup("contorno", true)); + SettingGroup sgFilling = addSg(new SettingGroup("relleno", true)); + + public ListSetting blocks = sgGeneral.add(new ListSetting<>("bloques", "bloques a resaltar", Lists.blockList, Lists.allFalse(Lists.blockList), Lists.blockNames)); + public NumberSetting radius = sgGeneral.add(new NumberSetting("radio", "radio de búsqueda de bloques", + 24, 2, 128, 1)); - public NumberSetting radius = addSetting(new NumberSetting("radio", "radio de búsqueda de bloques", 24, 2, 128, 1)); + public BooleanSetting outlines = sgOulines.add(new BooleanSetting("contorno", "renderizar contorno de bloques", true)); + public ColorSetting outlineColor = sgOulines.add(new ColorSetting("color del contorno", "color del contorno", Colors.CELESTE, false)); + public NumberSetting lineWidth = sgOulines.add(new NumberSetting("grosor del contorno", "grosor de las líneas del contorno", 1, 1, 5, 0.2)); - public BooleanSetting outlines = addSetting(new BooleanSetting("contorno", "renderizar contorno de bloques", true)); - public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "color del contorno", Colors.CELESTE, false)); - public NumberSetting lineWidth = addSetting(new NumberSetting("grosor del contorno", "grosor de las líneas del contorno", 1, 1, 5, 0.2)); - - public BooleanSetting fillings = addSetting(new BooleanSetting("relleno", "renderizar relleno de bloques", true)); - public ColorSetting fillingColor = addSetting(new ColorSetting("color del relleno", "color del relleno", new Color(57, 177, 215, 67), false)); + public BooleanSetting fillings = sgFilling.add(new BooleanSetting("relleno", "renderizar relleno de bloques", true)); + public ColorSetting fillingColor = sgFilling.add(new ColorSetting("color del relleno", "color del relleno", new Color(57, 177, 215, 67), false)); public BlockESP() { @@ -50,7 +54,7 @@ public class BlockESP extends Module { } @SubscribeEvent - public void onRenderWorld(RenderWorldEvent event) { + public void onRenderWorld(Render3DEvent event) { if (mc.player == null || mc.world == null) return; for (Block block : blocks.getOptions()) { diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/BlockOutline.java b/src/main/java/me/retucio/sputnik/module/modules/render/BlockOutline.java index 7303117..e927e9c 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/BlockOutline.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/BlockOutline.java @@ -2,7 +2,7 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; import java.awt.*; @@ -12,7 +12,7 @@ import java.awt.*; public class BlockOutline extends Module { - public ColorSetting color = addSetting(new ColorSetting("color", "color del contorno de los bloques", + public ColorSetting color = sgGeneral.add(new ColorSetting("color", "color del contorno de los bloques", new Color(0, 0, 0, 102), true)); public BlockOutline() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/BreakingProgress.java b/src/main/java/me/retucio/sputnik/module/modules/render/BreakingProgress.java index c109396..ba945cc 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/BreakingProgress.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/BreakingProgress.java @@ -1,13 +1,14 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.event.SubscribeEvent; -import me.retucio.sputnik.event.events.RenderWorldEvent; +import me.retucio.sputnik.event.events.Render3DEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.render.RenderUtil; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -18,18 +19,22 @@ import java.awt.*; public class BreakingProgress extends Module { - public EnumSetting breakMode = addSetting(new EnumSetting<>("modo de minado", "elige si el cubo se encoge o se dilata", + SettingGroup sgOulines = addSg(new SettingGroup("contorno", true)); + SettingGroup sgFilling = addSg(new SettingGroup("relleno", true)); + + public EnumSetting breakMode = sgGeneral.add(new EnumSetting<>("modo de minado", "elige si el cubo se encoge o se dilata", BreakMode.class, BreakMode.INWARDS)); - public BooleanSetting outlines = addSetting(new BooleanSetting("contorno", "renderizar contorno", true)); - public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "color del contorno", + public BooleanSetting outlines = sgOulines.add(new BooleanSetting("contorno", "renderizar contorno", true)); + public ColorSetting outlineColor = sgOulines.add(new ColorSetting("color del contorno", "color del contorno", new Color(0, 255, 0, 200), false)); - public NumberSetting lineWidth = addSetting(new NumberSetting("grosor de línea", "grosor de las líneas del contorno", 1, 1, 5, 0.1)); + public NumberSetting lineWidth = sgOulines.add(new NumberSetting("grosor de línea", "grosor de las líneas del contorno", 1, 1, 5, 0.1)); - public BooleanSetting fillings = addSetting(new BooleanSetting("relleno", "renderizar relleno", true)); - public ColorSetting fillingColor = addSetting(new ColorSetting("color del relleno", "color del relleno", + public BooleanSetting fillings = sgFilling.add(new BooleanSetting("relleno", "renderizar relleno", true)); + public ColorSetting fillingColor = sgFilling.add(new ColorSetting("color del relleno", "color del relleno", new Color(0, 255, 0, 60), false)); + public BreakingProgress() { super("progreso de minado", "te muestra el progreso de minado de un bloque de manera más visible", @@ -37,7 +42,7 @@ public class BreakingProgress extends Module { } @SubscribeEvent - public void onRenderWorld(RenderWorldEvent event) { + public void onRenderWorld(Render3DEvent event) { if (mc.interactionManager == null || mc.world == null) return; if (!(mc.crosshairTarget instanceof BlockHitResult hitResult)) return; BlockPos pos = hitResult.getBlockPos(); diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/CritsPlus.java b/src/main/java/me/retucio/sputnik/module/modules/render/CritsPlus.java index 398a601..0f6e547 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/CritsPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/CritsPlus.java @@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import java.awt.*; @@ -15,14 +16,17 @@ import java.awt.*; public class CritsPlus extends Module { - public ColorSetting color = addSetting(new ColorSetting("color", "color de las partículas", new Color(0, 0, 255, 255), false)); + SettingGroup sgAppearance = addSg(new SettingGroup("aspecto", true)); + SettingGroup sgBehaviour = addSg(new SettingGroup("funcionamiento", true)); - public NumberSetting scale = addSetting(new NumberSetting("escala", "tamaño", 1, 0, 2, 0.05)); - public NumberSetting multiplier = addSetting(new NumberSetting("múltiplo", "número por el que multiplicar la cantidad de partículas generadas", 1, 0, 10, 0.1)); - public NumberSetting velocityMultipler = addSetting(new NumberSetting("dispersión", "multiplicador de la velocidad de dispersión", 1, 0, 10, 0.1)); - public NumberSetting gravity = addSetting(new NumberSetting("gravedad", "multiplicador de fuerza de gravedad", 1, 0, 10, 0.1)); - public NumberSetting maxAge = addSetting(new NumberSetting("vida máxima", "cuánto persiste la partícula", 10, 0, 50, 1)); - public BooleanSetting collide = addSetting(new BooleanSetting("colisionar", "colisionar con bloques", false)); + public ColorSetting color = sgAppearance.add(new ColorSetting("color", "color de las partículas", new Color(0, 0, 255, 255), false)); + public NumberSetting scale = sgAppearance.add(new NumberSetting("escala", "tamaño", 1, 0, 2, 0.05)); + public NumberSetting multiplier = sgAppearance.add(new NumberSetting("múltiplo", "número por el que multiplicar la cantidad de partículas generadas", 1, 0, 10, 0.1)); + + public NumberSetting velocityMultipler = sgBehaviour.add(new NumberSetting("dispersión", "multiplicador de la velocidad de dispersión", 1, 0, 10, 0.1)); + public NumberSetting gravity = sgBehaviour.add(new NumberSetting("gravedad", "multiplicador de fuerza de gravedad", 1, 0, 10, 0.1)); + public NumberSetting maxAge = sgBehaviour.add(new NumberSetting("vida máxima", "cuánto persiste la partícula", 10, 0, 50, 1)); + public BooleanSetting collide = sgBehaviour.add(new BooleanSetting("colisionar", "colisionar con bloques", false)); public CritsPlus() { super("críticos", diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/DamageOverlay.java b/src/main/java/me/retucio/sputnik/module/modules/render/DamageOverlay.java index 4a1f3de..4add2eb 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/DamageOverlay.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/DamageOverlay.java @@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.mixin.accessor.OverlayTextureAccessor; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; import net.minecraft.client.texture.NativeImage; import net.minecraft.client.texture.NativeImageBackedTexture; @@ -16,7 +16,7 @@ import java.awt.*; public class DamageOverlay extends Module { - public ColorSetting colorSetting = addSetting(new ColorSetting("color", "color", new Color(255, 0, 0, 77), false)); + public ColorSetting colorSetting = sgGeneral.add(new ColorSetting("color", "color", new Color(255, 0, 0, 77), false)); private NativeImageBackedTexture texture = null; diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java b/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java index 86e2512..fb6a917 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; import me.retucio.sputnik.util.render.GlintRenderLayer; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayers; @@ -17,9 +17,9 @@ import net.minecraft.util.DyeColor; public class GlintPlus extends Module { - public BooleanSetting items = addSetting(new BooleanSetting("items", "modificar el destello de encantamiento de los items", true)); - public BooleanSetting armor = addSetting(new BooleanSetting("armadura", "modificar el destello de encantamiento de la armadura", true)); - public EnumSetting glintColor = addSetting(new EnumSetting<>("colores", "color del glint", GlintColors.class, GlintColors.PURPLE)); + public BooleanSetting items = sgGeneral.add(new BooleanSetting("items", "modificar el destello de encantamiento de los items", true)); + public BooleanSetting armor = sgGeneral.add(new BooleanSetting("armadura", "modificar el destello de encantamiento de la armadura", true)); + public EnumSetting glintColor = sgGeneral.add(new EnumSetting<>("colores", "color del glint", GlintColors.class, GlintColors.PURPLE)); public GlintPlus() { super("destello de enchants.", diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/Nametags.java b/src/main/java/me/retucio/sputnik/module/modules/render/Nametags.java index 35d98b5..59511e9 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/Nametags.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/Nametags.java @@ -4,9 +4,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.ListSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; import me.retucio.sputnik.util.Lists; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityType; @@ -38,22 +39,25 @@ import java.util.concurrent.Executors; public class Nametags extends Module { + SettingGroup sgInfo = addSg(new SettingGroup("info. adicional", true)); + Map, Boolean> defaultEntities = Lists.allFalse(Lists.entityList); - public ListSetting> entities = addSetting(new ListSetting<>("entidades", "entidades cuyo nametag será visible", + public ListSetting> entities = sgGeneral.add(new ListSetting<>("entidades", "entidades cuyo nametag será visible", Lists.entityList, defaultEntities, Lists.entityNames)); - - public BooleanSetting alwaysVisible = addSetting(new BooleanSetting("siempre mostrar nametags", "mostrar nametag cuando el jugador está agachado o es invisible", false)); - public BooleanSetting health = addSetting(new BooleanSetting("mostrar vida", "muestra la vida de una entidad en su nametag", true)); - public EnumSetting healthMode = addSetting(new EnumSetting<>("mostrar vida en", "de qué manera mostrar la vida", HealthMode.class, HealthMode.POINTS)); - - public BooleanSetting countItems = addSetting(new BooleanSetting("contar items", "muestra cuánto de un item hay en un stack dropeado", true)); - public ListSetting items = addSetting(new ListSetting<>("items", "te permite elegir cuáles items tienen su nombre visible", + public ListSetting items = sgGeneral.add(new ListSetting<>("items", "te permite elegir cuáles items tienen su nombre visible", Lists.itemList, Lists.allTrue(Lists.itemList), Lists.itemNames)); - public BooleanSetting showProjectileDamage = addSetting(new BooleanSetting("daño del proyectil", "muestra cuánto daño hace un proyectil en su nametag", true)); - public BooleanSetting showSelf = addSetting(new BooleanSetting("mostrar propio", "mostrar nametag propio", false)); - public BooleanSetting distinguishBabies = addSetting(new BooleanSetting("distinguir bebés", "cambia el nametag cuando una entidad está en su fase bebé", false)); - public BooleanSetting petOwner = addSetting(new BooleanSetting("mostrar dueño", "muestra el dueño de una mascota (no funciona en servers no premium)", false)); + public BooleanSetting health = sgGeneral.add(new BooleanSetting("mostrar vida", "muestra la vida de una entidad en su nametag", true)); + public EnumSetting healthMode = sgGeneral.add(new EnumSetting<>("mostrar vida en", "de qué manera mostrar la vida", HealthMode.class, HealthMode.POINTS)); + + public BooleanSetting alwaysVisible = sgGeneral.add(new BooleanSetting("siempre mostrar nametags", "mostrar nametag cuando el jugador está agachado o es invisible", false)); + public BooleanSetting showSelf = sgGeneral.add(new BooleanSetting("mostrar propio", "mostrar nametag propio", false)); + + public BooleanSetting countItems = sgInfo.add(new BooleanSetting("contar items", "muestra cuánto de un item hay en un stack dropeado", true)); + public BooleanSetting showProjectileDamage = sgInfo.add(new BooleanSetting("daño del proyectil", "muestra cuánto daño hace un proyectil en su nametag", true)); + public BooleanSetting distinguishBabies = sgInfo.add(new BooleanSetting("distinguir bebés", "cambia el nametag cuando una entidad está en su fase bebé", false)); + public BooleanSetting petOwner = sgInfo.add(new BooleanSetting("mostrar dueño", "muestra el dueño de una mascota (no funciona en servers no premium)", false)); + private final Map cache = new ConcurrentHashMap<>(); private static final ExecutorService executor = Executors.newCachedThreadPool(); diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/NoRender.java b/src/main/java/me/retucio/sputnik/module/modules/render/NoRender.java index 784a4eb..1b78b74 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/NoRender.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/NoRender.java @@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.render; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.ListSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; import me.retucio.sputnik.util.Lists; import net.minecraft.particle.ParticleType; import net.minecraft.util.Formatting; @@ -24,35 +25,41 @@ import net.minecraft.util.Formatting; public class NoRender extends Module { - public BooleanSetting spyglassOverlay = addSetting(new BooleanSetting("catalejo", "renderizar overlay del catalejo", false)); - public BooleanSetting fluidOverlay = addSetting(new BooleanSetting("fluídos", "renderizar fluídos sobre la cámara como el agua, lava o nieve en polvo (aunque no sea un fluído)", false)); - public BooleanSetting pumpkinOverlay = addSetting(new BooleanSetting("calabaza", "renderiza el overlay de la calabaza tallada", false)); - public BooleanSetting fireOverlay = addSetting(new BooleanSetting("fuego", "renderizar llamas sobre la cámara", false)); - public BooleanSetting portalOverlay = addSetting(new BooleanSetting("portal", "renderizar el overlay del portal del nether", false)); + SettingGroup sgOverlays = addSg(new SettingGroup("overlays", true)); + SettingGroup sgAmbient = addSg(new SettingGroup("ambiente", true)); + SettingGroup sgEffects = addSg(new SettingGroup("efectos", true)); + SettingGroup sgUi = addSg(new SettingGroup("interfaz", true)); + SettingGroup sgText = addSg(new SettingGroup("texto", true)); + SettingGroup sgMisc = addSg(new SettingGroup("misc.", true)); - public BooleanSetting rain = addSetting(new BooleanSetting("lluvia", "l l u v i a", true)); - public BooleanSetting snow = addSetting(new BooleanSetting("nieve", "n i e v e", true)); - public BooleanSetting endFlashes = addSetting(new BooleanSetting("flashes del end", "renderizar los recientemente añadidos flashes en el end", true)); + public BooleanSetting spyglassOverlay = sgOverlays.add(new BooleanSetting("catalejo", "renderizar overlay del catalejo", false)); + public BooleanSetting fluidOverlay = sgOverlays.add(new BooleanSetting("fluídos", "renderizar fluídos sobre la cámara como el agua, lava o nieve en polvo (aunque no sea un fluído)", false)); + public BooleanSetting pumpkinOverlay = sgOverlays.add(new BooleanSetting("calabaza", "renderiza el overlay de la calabaza tallada", false)); + public BooleanSetting fireOverlay = sgOverlays.add(new BooleanSetting("fuego", "renderizar llamas sobre la cámara", false)); + public BooleanSetting portalOverlay = sgOverlays.add(new BooleanSetting("portal", "renderizar el overlay del portal del nether", false)); - public ListSetting> particles = addSetting(new ListSetting<>("partículas", "lista de partículas que se renderizan", + public BooleanSetting rain = sgAmbient.add(new BooleanSetting("lluvia", "l l u v i a", true)); + public BooleanSetting snow = sgAmbient.add(new BooleanSetting("nieve", "n i e v e", true)); + public BooleanSetting endFlashes = sgAmbient.add(new BooleanSetting("flashes del end", "renderizar los recientemente añadidos flashes en el end", true)); + public ListSetting> particles = sgAmbient.add(new ListSetting<>("partículas", "lista de partículas que se renderizan", Lists.particleList, Lists.allTrue(Lists.particleList), Lists.particleNames)); - public BooleanSetting nauseaEffect = addSetting(new BooleanSetting("náusea", "renderizar borrachera", false)); - public BooleanSetting blindnessEffect = addSetting(new BooleanSetting("ceguera", "renderizar miopía", false)); - public BooleanSetting darknessEffect = addSetting(new BooleanSetting("oscuridad", "renderizar miedo a la oscuridad", false)); + public BooleanSetting nauseaEffect = sgEffects.add(new BooleanSetting("náusea", "renderizar borrachera", false)); + public BooleanSetting blindnessEffect = sgEffects.add(new BooleanSetting("ceguera", "renderizar miopía", false)); + public BooleanSetting darknessEffect = sgEffects.add(new BooleanSetting("oscuridad", "renderizar miedo a la oscuridad", false)); - public BooleanSetting scoreboard = addSetting(new BooleanSetting("marcador", "mostrar marcador a la derecha", false)); - public BooleanSetting titles = addSetting(new BooleanSetting("títulos", "mostrar títulos (del comando /title)", false)); - public BooleanSetting totemPop = addSetting(new BooleanSetting("tótem", "renderizar el pop del tótem", true)); + public BooleanSetting scoreboard = sgUi.add(new BooleanSetting("marcador", "mostrar marcador a la derecha", false)); + public BooleanSetting titles = sgUi.add(new BooleanSetting("títulos", "mostrar títulos (del comando /title)", false)); + public BooleanSetting totemPop = sgUi.add(new BooleanSetting("tótem", "renderizar el pop del tótem", true)); - public BooleanSetting stuckArrows = addSetting(new BooleanSetting("flechas clavadas", "renderizar flechas clavadas en jugadores", false)); - - public BooleanSetting bold = addSetting(new BooleanSetting("negrita", "letra pero §lgorda", true)); + public BooleanSetting bold = sgText.add(new BooleanSetting("negrita", "letra pero §lgorda", true)); // public BooleanSetting italics = addSetting(new BooleanSetting("cursiva", "letra pero §otorcida", true)); - public BooleanSetting underlined = addSetting(new BooleanSetting("subrayado", "letra pero §nen el suelo", true)); - public BooleanSetting strikethrough = addSetting(new BooleanSetting("tachado", "letra pero §mdiscriminada", true)); - public EnumSetting color = addSetting(new EnumSetting<>("colores", "§co§4r§6g§eu§al§2l§9o §1g§5a§dy", Colors.class, Colors.DEFAULT)); - public BooleanSetting scrambledText = addSetting(new BooleanSetting("garabato", "engarabatar texto (o como se diga) (§kasí§r)", false)); + public BooleanSetting underlined = sgText.add(new BooleanSetting("subrayado", "letra pero §nen el suelo", true)); + public BooleanSetting strikethrough = sgText.add(new BooleanSetting("tachado", "letra pero §mdiscriminada", true)); + public EnumSetting color = sgText.add(new EnumSetting<>("colores", "§co§4r§6g§eu§al§2l§9o §1g§5a§dy", Colors.class, Colors.DEFAULT)); + public BooleanSetting scrambledText = sgText.add(new BooleanSetting("garabato", "engarabatar texto (o como se diga) (§kasí§r)", false)); + + public BooleanSetting stuckArrows = sgMisc.add(new BooleanSetting("flechas clavadas", "renderizar flechas clavadas en jugadores", false)); public NoRender() { super("no render", diff --git a/src/main/java/me/retucio/sputnik/module/modules/world/ColoredSigns.java b/src/main/java/me/retucio/sputnik/module/modules/world/ColoredSigns.java index e206ef9..22e5df5 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/world/ColoredSigns.java +++ b/src/main/java/me/retucio/sputnik/module/modules/world/ColoredSigns.java @@ -4,12 +4,12 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.StringSetting; +import me.retucio.sputnik.module.setting.settings.StringSetting; import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket; public class ColoredSigns extends Module { - public StringSetting symbol = addSetting(new StringSetting("símbolo", "símbolo a reemplazar por \"§\"", "&", 5)); + public StringSetting symbol = sgGeneral.add(new StringSetting("símbolo", "símbolo a reemplazar por \"§\"", "&", 5)); public ColoredSigns() { super("carteles gays", diff --git a/src/main/java/me/retucio/sputnik/module/modules/world/LightOverlay.java b/src/main/java/me/retucio/sputnik/module/modules/world/LightOverlay.java index a842d9f..c95f527 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/world/LightOverlay.java +++ b/src/main/java/me/retucio/sputnik/module/modules/world/LightOverlay.java @@ -1,12 +1,13 @@ package me.retucio.sputnik.module.modules.world; import me.retucio.sputnik.event.SubscribeEvent; -import me.retucio.sputnik.event.events.RenderWorldEvent; +import me.retucio.sputnik.event.events.Render3DEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.util.render.RenderUtil; import net.minecraft.block.*; import net.minecraft.block.Blocks; @@ -20,20 +21,25 @@ import java.util.List; public class LightOverlay extends Module { - public NumberSetting radius = addSetting(new NumberSetting("radio", "radio a tener en cuenta al renderizar superposición", + SettingGroup sgDetection = addSg(new SettingGroup("detección", true)); + SettingGroup sgColors = addSg(new SettingGroup("colores", true)); + + public NumberSetting radius = sgDetection.add(new NumberSetting("radio", "radio a tener en cuenta al renderizar superposición", 16, 5, 128, 1)); - public NumberSetting yRadius = addSetting(new NumberSetting("rango vertical", "distancia vertical a tener en cuenta", + public NumberSetting yRadius = sgDetection.add(new NumberSetting("rango vertical", "distancia vertical a tener en cuenta", 4, 1, 16, 1)); - public NumberSetting interval = addSetting(new NumberSetting("intervalo", "cada cuántos ticks comprobar el nivel de luz", + public NumberSetting interval = sgDetection.add(new NumberSetting("intervalo", "cada cuántos ticks comprobar el nivel de luz", 10, 1, 80, 1)); - public ColorSetting lightColor = addSetting(new ColorSetting("color de la luz", "color de los bloques con luz", + public BooleanSetting onWater = sgDetection.add(new BooleanSetting("en agua", "mostrar también bloques cubiertos en agua", true)); + public BooleanSetting dontCullWater = sgDetection.add(new BooleanSetting("evitar culling en agua", "mostrar superposición a través de bloques para poder verla desde fuera del agua", false)); + + public ColorSetting lightColor = sgColors.add(new ColorSetting("color de la luz", "color de los bloques con luz", new Color(0, 255, 0, 67), false)); - public ColorSetting darknessColor = addSetting(new ColorSetting("color de oscuridad", "color de bloques con 0 luz", + public ColorSetting darknessColor = sgColors.add(new ColorSetting("color de oscuridad", "color de bloques con 0 luz", new Color(255, 0, 0, 67), false)); - public BooleanSetting onWater = addSetting(new BooleanSetting("en agua", "mostrar también bloques cubiertos en agua", true)); List blocks = new ArrayList<>(); @@ -44,7 +50,7 @@ public class LightOverlay extends Module { } @SubscribeEvent - public void onRenderWorld(RenderWorldEvent event) { + public void onRenderWorld(Render3DEvent event) { if (mc.player == null || mc.world == null) return; if (mc.player.age % interval.getIntValue() == 0) { blocks = findExposedBlocks( @@ -65,7 +71,8 @@ public class LightOverlay extends Module { (lightColor.getB() / 15) * light, lightColor.getA()); - RenderUtil.drawBlockFaceFilled(event.getMatrices(), block, Direction.UP, color, 0.001f, true); + boolean shouldCull = !(onWater.isEnabled() && mc.world.getBlockState(block.up()).isOf(Blocks.WATER) && dontCullWater.isEnabled()); + RenderUtil.drawBlockFaceFilled(event.getMatrices(), block, Direction.UP, color, 0.001f, shouldCull); } } diff --git a/src/main/java/me/retucio/sputnik/module/modules/world/NoMiningInterruptions.java b/src/main/java/me/retucio/sputnik/module/modules/world/NoMiningInterruptions.java index c5c1f34..5655ede 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/world/NoMiningInterruptions.java +++ b/src/main/java/me/retucio/sputnik/module/modules/world/NoMiningInterruptions.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.world; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ListSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; import me.retucio.sputnik.util.Lists; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; @@ -11,8 +11,8 @@ import net.minecraft.registry.tag.ItemTags; public class NoMiningInterruptions extends Module { - public BooleanSetting withPickaxeOnly = addSetting(new BooleanSetting("solo con pico", "ignorar entidades solamente cuando se sujeta un pico", false)); - public ListSetting> entities = addSetting(new ListSetting<>("entidades", "entidades a ignorar", + public BooleanSetting withPickaxeOnly = sgGeneral.add(new BooleanSetting("solo con pico", "ignorar entidades solamente cuando se sujeta un pico", false)); + public ListSetting> entities = sgGeneral.add(new ListSetting<>("entidades", "entidades a ignorar", Lists.entityList, Lists.allTrue(Lists.entityList), Lists.entityNames)); public NoMiningInterruptions() { diff --git a/src/main/java/me/retucio/sputnik/module/modules/world/TimeChanger.java b/src/main/java/me/retucio/sputnik/module/modules/world/TimeChanger.java index e242c7f..24d05cd 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/world/TimeChanger.java +++ b/src/main/java/me/retucio/sputnik/module/modules/world/TimeChanger.java @@ -4,20 +4,24 @@ import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.EnumSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.SettingGroup; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import net.minecraft.network.packet.s2c.play.WorldTimeUpdateS2CPacket; // continúa en ClientWorldPropertiesMixin, DimensionTypeMixin, public class TimeChanger extends Module { - public BooleanSetting renderSun = addSetting(new BooleanSetting("sol", "que haya sol o no", true)); - public BooleanSetting renderMoon = addSetting(new BooleanSetting("luna", "que haya luna o no", true)); - public BooleanSetting renderStars = addSetting(new BooleanSetting("estrellas", "que hayan estrellas o no", true)); + SettingGroup sgCelestialBodies = addSg(new SettingGroup("cuerpos celeste", false)); - public EnumSetting moonPhase = addSetting(new EnumSetting<>("fase lunar", "fase lunar actual", MoonPhases.class, MoonPhases.DEFAULT)); - public NumberSetting time = addSetting(new NumberSetting("hora", "hora del juego", 0, -20000, 20000, 1)); + public NumberSetting time = sgGeneral.add(new NumberSetting("hora", "hora del juego", 0, -20000, 20000, 1)); + + public BooleanSetting renderSun = sgCelestialBodies.add(new BooleanSetting("sol", "que haya sol o no", true)); + public BooleanSetting renderMoon = sgCelestialBodies.add(new BooleanSetting("luna", "que haya luna o no", true)); + public BooleanSetting renderStars = sgCelestialBodies.add(new BooleanSetting("estrellas", "que hayan estrellas o no", true)); + + public EnumSetting moonPhase = sgCelestialBodies.add(new EnumSetting<>("fase lunar", "fase lunar actual", MoonPhases.class, MoonPhases.DEFAULT)); public TimeChanger() { super("cielo custom", diff --git a/src/main/java/me/retucio/sputnik/module/settings/Setting.java b/src/main/java/me/retucio/sputnik/module/setting/Setting.java similarity index 70% rename from src/main/java/me/retucio/sputnik/module/settings/Setting.java rename to src/main/java/me/retucio/sputnik/module/setting/Setting.java index abdca85..1ed9b99 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/Setting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/Setting.java @@ -1,4 +1,4 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting; import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.event.events.sputnik.UpdateSettingEvent; @@ -13,7 +13,7 @@ public abstract class Setting { private boolean visible = true; private boolean searchMatch = true; - private Module module; + private SettingGroup sg; protected Setting(String name, String description) { this.name = name; @@ -44,15 +44,21 @@ public abstract class Setting { return description; } - public Module getModule() { - return module; + public SettingGroup getSg() { + return sg; } - public void setModule(Module module) { - this.module = module; + public void setSg(SettingGroup sg) { + this.sg = sg; } public void fireUpdateEvent() { - Sputnik.EVENT_BUS.post(new UpdateSettingEvent(this, module.shouldSaveSettings())); + Sputnik.EVENT_BUS.post( + new UpdateSettingEvent( + this, + sg.getModule() + .shouldSaveSettings() + ) + ); } } diff --git a/src/main/java/me/retucio/sputnik/module/setting/SettingGroup.java b/src/main/java/me/retucio/sputnik/module/setting/SettingGroup.java new file mode 100644 index 0000000..4f4b3a2 --- /dev/null +++ b/src/main/java/me/retucio/sputnik/module/setting/SettingGroup.java @@ -0,0 +1,71 @@ +package me.retucio.sputnik.module.setting; + +import me.retucio.sputnik.module.Module; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + + +public class SettingGroup implements Iterable { + + private Module module; + private final String name; + private boolean extended; + + final List settings = new ArrayList<>(1); + + public SettingGroup(String name, boolean extended) { + this.name = name; + this.extended = extended; + } + + @Override + public @NotNull Iterator iterator() { + return settings.iterator(); + } + + public S add(S setting) { + setting.setSg(this); + settings.add(setting); + return setting; + } + + @SafeVarargs + public final void addAll(S... ss) { + for (S s : ss) { + add(s); + } + } + + public Setting getSetting(String name) { + for (Setting setting : this) + if (setting.getName().equals(name)) + return setting; + + return null; + } + + public String getName() { + return name; + } + + public boolean isExtended() { + return extended; + } + + public void setExtended(boolean extended) { + this.extended = extended; + } + + public Module getModule() { + return module; + } + + public void setModule(Module module) { + this.module = module; + } +} diff --git a/src/main/java/me/retucio/sputnik/module/settings/BooleanSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/BooleanSetting.java similarity index 92% rename from src/main/java/me/retucio/sputnik/module/settings/BooleanSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/BooleanSetting.java index 53b6207..6007f3a 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/BooleanSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/BooleanSetting.java @@ -1,4 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.function.Consumer; diff --git a/src/main/java/me/retucio/sputnik/module/settings/ColorSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/ColorSetting.java similarity index 98% rename from src/main/java/me/retucio/sputnik/module/settings/ColorSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/ColorSetting.java index 195cb50..31ecab7 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/ColorSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/ColorSetting.java @@ -1,5 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; +import me.retucio.sputnik.module.setting.Setting; import me.retucio.sputnik.util.Colors; import net.minecraft.text.Text; diff --git a/src/main/java/me/retucio/sputnik/module/settings/EnumSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/EnumSetting.java similarity index 95% rename from src/main/java/me/retucio/sputnik/module/settings/EnumSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/EnumSetting.java index 421d08d..87671e5 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/EnumSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/EnumSetting.java @@ -1,4 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/me/retucio/sputnik/module/settings/KeySetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/KeySetting.java similarity index 95% rename from src/main/java/me/retucio/sputnik/module/settings/KeySetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/KeySetting.java index 395bfde..9c1e17d 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/KeySetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/KeySetting.java @@ -1,7 +1,8 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.ModuleManager; +import me.retucio.sputnik.module.setting.Setting; import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.KeyUtil; diff --git a/src/main/java/me/retucio/sputnik/module/settings/ListSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/ListSetting.java similarity index 97% rename from src/main/java/me/retucio/sputnik/module/settings/ListSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/ListSetting.java index ef5d427..54db86f 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/ListSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/ListSetting.java @@ -1,4 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/me/retucio/sputnik/module/settings/NumberSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/NumberSetting.java similarity index 96% rename from src/main/java/me/retucio/sputnik/module/settings/NumberSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/NumberSetting.java index eca22fc..546c486 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/NumberSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/NumberSetting.java @@ -1,4 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.function.Consumer; diff --git a/src/main/java/me/retucio/sputnik/module/settings/OptionSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/OptionSetting.java similarity index 95% rename from src/main/java/me/retucio/sputnik/module/settings/OptionSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/OptionSetting.java index 6735133..2010306 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/OptionSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/OptionSetting.java @@ -1,10 +1,12 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.List; import java.util.Map; import java.util.function.Consumer; -public class OptionSetting extends Setting{ +public class OptionSetting extends Setting { private final List options; private Map displayNames; diff --git a/src/main/java/me/retucio/sputnik/module/settings/StringSetting.java b/src/main/java/me/retucio/sputnik/module/setting/settings/StringSetting.java similarity index 92% rename from src/main/java/me/retucio/sputnik/module/settings/StringSetting.java rename to src/main/java/me/retucio/sputnik/module/setting/settings/StringSetting.java index 9a0e621..c798af2 100644 --- a/src/main/java/me/retucio/sputnik/module/settings/StringSetting.java +++ b/src/main/java/me/retucio/sputnik/module/setting/settings/StringSetting.java @@ -1,4 +1,6 @@ -package me.retucio.sputnik.module.settings; +package me.retucio.sputnik.module.setting.settings; + +import me.retucio.sputnik.module.setting.Setting; import java.util.function.Consumer; diff --git a/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java b/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java index 57b23fb..168e3cd 100644 --- a/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java +++ b/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java @@ -7,8 +7,8 @@ import me.retucio.sputnik.event.events.MouseClickEvent; import me.retucio.sputnik.event.events.MouseScrollEvent; import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.Setting; -import me.retucio.sputnik.module.settings.ColorSetting; +import me.retucio.sputnik.module.setting.Setting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; import me.retucio.sputnik.ui.widgets.buttons.settings.ListButton; import me.retucio.sputnik.ui.widgets.buttons.ModuleButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; @@ -233,15 +233,17 @@ public class ClickGUI extends Screen { continue; } - String name = setting.getName(); - String description = setting.getDescription(); + String name = MiscUtil.removeAccentMarks(setting.getName()); + String description = MiscUtil.removeAccentMarks(setting.getDescription()); + String sgName = MiscUtil.removeAccentMarks(setting.getSg().getName()); if (!guiSettings.matchCase.isEnabled()) { name = name.toLowerCase(); description = description.toLowerCase(); + sgName = sgName.toLowerCase(); } - setting.setSearchMatch(name.contains(searchInput) || description.contains(searchInput)); + setting.setSearchMatch(name.contains(searchInput) || description.contains(searchInput) || sgName.contains(searchInput)); } } } @@ -249,7 +251,7 @@ 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) { for (SettingsFrame frame : settingsFrames) { - if (frame.module == module) { + if (frame.getModule() == module) { frame.setX(x); frame.setY(y); return; @@ -275,7 +277,7 @@ 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 + || (!(sf instanceof ColorPickerFrame) && sf.getModule() == module)) { // lógica muy mierdas, lo sé, pero paso de hacerlo bien toRemove.add(sf); Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Close(sf)); unselect(sf); @@ -288,7 +290,7 @@ public class ClickGUI extends Screen { // verificar si un módulo tiene su marco de ajustes abierto public boolean isSettingsFrameOpen(Module module) { return settingsFrames.stream() - .anyMatch(sf -> sf.module.getName().equals(module.getName())); + .anyMatch(sf -> sf.getModule().getName().equals(module.getName())); } public boolean isColorPickerFrameOpen(ColorSetting setting) { diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/SettingButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/SettingButton.java index 416a3c9..068470f 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/SettingButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/SettingButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons; -import me.retucio.sputnik.module.settings.Setting; +import me.retucio.sputnik.module.setting.Setting; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.Button; import net.minecraft.client.gui.DrawContext; @@ -24,6 +24,12 @@ public abstract class SettingButton extends Button { ctx.drawTooltip(Text.of(setting.getDescription()), mouseX, mouseY + 20); } + @Override + public boolean isHovered(int mouseX, int mouseY) { + return setting.getSg().isExtended() + && super.isHovered(mouseX, mouseY); + } + public S getSetting() { return setting; } diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/BindButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/BindButton.java index 30f3417..3102301 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/BindButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/BindButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.KeySetting; +import me.retucio.sputnik.module.setting.settings.KeySetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame; diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ChooseButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ChooseButton.java index f041050..ec8c0ae 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ChooseButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ChooseButton.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.OptionSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.OptionSetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.screen.ClickGUI; @@ -99,7 +99,7 @@ public class ChooseButton extends SettingButton> { } }); - dummy.addSetting(b); + dummy.getSg("general").add(b); optionButtons.put(option, b); }); } diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ColorButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ColorButton.java index 4bf0844..1edf887 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ColorButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ColorButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; @@ -28,6 +28,7 @@ public class ColorButton extends SettingButton { Color bgColor = isHovered(mouseX, mouseY) ? Colors.buttonColor.brighter() : Colors.buttonColor; + ctx.fill(x, y, x + w, y + h, bgColor.getRGB()); // prev. del color @@ -55,7 +56,7 @@ public class ColorButton extends SettingButton { if (button == 0) { // clic izq.: abrir selector de colores ClickGUI.INSTANCE.openColorPickerFrame( - setting.getModule(), setting, + setting.getSg().getModule(), setting, parent.getX() + parent.getW() + 120, parent.getRenderY() + offset); } else if (button == 1 && KeyUtil.isShiftDown()) { diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/CycleButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/CycleButton.java index 235fad7..113e043 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/CycleButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/CycleButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.EnumSetting; +import me.retucio.sputnik.module.setting.settings.EnumSetting; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ListButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ListButton.java index 24979c9..7382b0f 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ListButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ListButton.java @@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ListSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ListSetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; @@ -90,7 +90,7 @@ public class ListButton extends SettingButton> { .sorted(Comparator.comparing(setting::getDisplayName, String.CASE_INSENSITIVE_ORDER)) .forEach(option -> { String displayName = setting.getDisplayName(option); - BooleanSetting b = dummy.addSetting(new BooleanSetting( + BooleanSetting b = dummy.getSg("general").add(new BooleanSetting( displayName, "incluir " + displayName, setting.isEnabled(option) diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/SliderButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/SliderButton.java index 8c77773..3fe60f8 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/SliderButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/SliderButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/TextButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/TextButton.java index 3de2511..800a062 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/TextButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/TextButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.StringSetting; +import me.retucio.sputnik.module.setting.settings.StringSetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ToggleButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ToggleButton.java index 2befa4d..c37bc77 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ToggleButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/settings/ToggleButton.java @@ -1,6 +1,6 @@ package me.retucio.sputnik.ui.widgets.buttons.settings; -import me.retucio.sputnik.module.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/frames/SettingsFrame.java b/src/main/java/me/retucio/sputnik/ui/widgets/frames/SettingsFrame.java index 9f482d4..a02275b 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/frames/SettingsFrame.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/frames/SettingsFrame.java @@ -3,7 +3,8 @@ package me.retucio.sputnik.ui.widgets.frames; import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.*; +import me.retucio.sputnik.module.setting.*; +import me.retucio.sputnik.module.setting.settings.*; import me.retucio.sputnik.ui.widgets.buttons.settings.*; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.buttons.*; @@ -20,19 +21,16 @@ import java.util.List; // marco para los botones de los ajustes de cada módulo public class SettingsFrame extends Frame> { - public Module module; + private Module module; + protected List settingGroups; + private static final int PADDING = 4; // para ser consistente public SettingsFrame(Module module, int x, int y, int w, int h) { super("ajustes de " + module.getName(), x, y, w, h); this.module = module; + this.settingGroups = module.getSgs(); - // asegurarse de que no se sale de la pantalla - if (mc.getWindow() != null) { - this.x = Math.clamp(this.x, 0, mc.getWindow().getScaledWidth() - w); - this.y = Math.clamp(this.y, 0, mc.getWindow().getScaledHeight() - totalHeight - h); - } - - addButtons(); + addButtonsByGroups(); visibleButtons = buttons.stream() .filter(sb -> sb.getSetting().isVisible()) @@ -46,7 +44,7 @@ public class SettingsFrame extends Frame> { // cabezal int centerX = x + w / 2; int centerY = renderY + h / 2; - int titleX = x + 8; + int titleX = x + 2 * PADDING; int titleY = centerY - mc.textRenderer.fontHeight / 2; int headerColor = module.isEnabled() @@ -57,31 +55,96 @@ public class SettingsFrame extends Frame> { ? Color.RED.getRGB() : -1; - if (!module.shouldSaveSettings()) headerColor = (int) module.getSettings().stream().filter(s -> ((BooleanSetting) s).isEnabled()).count() > 0 - ? Colors.enabledToggleButtonColor.getRGB() - : Colors.disabledToggleButtonColor.getRGB(); - ctx.fill(x, renderY, x + w, renderY + h, headerColor); ctx.drawText(mc.textRenderer, title, titleX, titleY, -1, true); - ctx.drawText(mc.textRenderer, "×", x + w - mc.textRenderer.getWidth("×") - 8, titleY, closeButtonColor, true); + ctx.drawText(mc.textRenderer, "×", x + w - mc.textRenderer.getWidth("×") - 2 * PADDING, titleY, closeButtonColor, true); + // filtrar botones visibles visibleButtons = buttons.stream() .filter(sb -> sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) .toList(); // descripción - List descLines = wrapDescription(module.getDescription(), w - 8); + List descLines = wrapDescription(module.getDescription(), w - 2 * PADDING); int lineSpacing = 2; int descHeight = descLines.size() * mc.textRenderer.fontHeight + (descLines.size() - 1) * lineSpacing; - int descBoxTop = renderY + h + 5; - int descBoxBottom = descBoxTop + descHeight + 8; + int descBoxTop = renderY + h + PADDING; + int descBoxBottom = descBoxTop + descHeight + PADDING * 2; - totalHeight = descHeight + 8 + h * visibleButtons.size() + 4; + totalHeight = descHeight + 3 * PADDING; + int currentY; - ctx.fill(x, descBoxTop - 4, x + w, descBoxTop + totalHeight, Colors.frameBGColor.getRGB()); - ctx.fill(x + 4, descBoxTop, x + w - 4, descBoxBottom, Colors.buttonColor.getRGB()); + // obtener valores de altura y tal + for (SettingGroup group : settingGroups) { + if (hasVisibleSettingsInGroup(group)) { + totalHeight += h + PADDING; + if (group.isExtended()) { + List> groupButtons = getButtonsForGroup(group); + for (int j = 0; j < groupButtons.size(); j++) { + SettingButton sb = groupButtons.get(j); + if (sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) { + if (j < groupButtons.size() - 1) { + totalHeight += (h - h / 4) + PADDING; + } else { + totalHeight += (h - h / 4); + } + } + } + totalHeight += PADDING; + } + } + } + + // fondo del marco + ctx.fill(x, descBoxTop - PADDING + 1, x + w, descBoxTop + totalHeight, Colors.frameBGColor.getRGB()); + + // fondo de la descripción + ctx.fill(x + PADDING, descBoxTop, x + w - PADDING, descBoxBottom, Colors.buttonColor.getRGB()); + + // restablecer currentY + currentY = descBoxBottom + PADDING; + + // dibujar botones y cabezales + for (int i = 0; i < settingGroups.size(); i++) { + SettingGroup group = settingGroups.get(i); + if (hasVisibleSettingsInGroup(group)) { + int groupHeaderColor = isGroupHeaderHovered(mouseX, mouseY, i) + ? Colors.buttonColor.brighter().getRGB() + : Colors.buttonColor.getRGB(); + + ctx.fill(x + PADDING, currentY, x + w - PADDING, currentY + h, groupHeaderColor); + ctx.drawText(mc.textRenderer, group.getName(), x + PADDING * 2, currentY + (h - mc.textRenderer.fontHeight) / 2, -1, true); + ctx.drawText(mc.textRenderer, group.isExtended() ? "-" : "+", x + w - 4 * PADDING, currentY + (h - mc.textRenderer.fontHeight) / 2, -1, true); + + currentY += h + PADDING; + + // ajustes de grupos extendidos + if (group.isExtended()) { + List> groupButtons = getButtonsForGroup(group); + for (int j = 0; j < groupButtons.size(); j++) { + SettingButton sb = groupButtons.get(j); + if (sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) { + sb.setX(x + PADDING * 2); + sb.setY(currentY); + sb.setW(w - PADDING * 4); + sb.setH(h - h / 4); + sb.render(ctx, mouseX, mouseY, delta); + + if (j < groupButtons.size() - 1) { + currentY += (h - h / 4) + PADDING; + } else { + currentY += (h - h / 4); + } + } + } + currentY += PADDING; + } + } + } + + // texto de la desc. int firstLineY = descBoxTop + ((descBoxBottom - descBoxTop) - descHeight) / 2; for (int i = 0; i < descLines.size(); i++) { String line = descLines.get(i); @@ -89,16 +152,6 @@ public class SettingsFrame extends Frame> { int lineY = firstLineY + i * (mc.textRenderer.fontHeight + lineSpacing); ctx.drawText(mc.textRenderer, line, lineX, lineY, -1, true); } - - int startButtonY = firstLineY - descBoxTop + descBoxBottom; - for (SettingButton sb : visibleButtons) { - sb.setX(x + 4); - sb.setY(startButtonY); - sb.setW(w - 8); - sb.setH(h - h / 4); - sb.render(ctx, mouseX, mouseY, delta); - startButtonY += h; - } } @Override @@ -113,7 +166,8 @@ public class SettingsFrame extends Frame> { if (isCloseButtonHovered(mouseX, mouseY)) { ClickGUI.INSTANCE.closeSettingsFrame(this.module); return; - } if (button == 0) { + } + if (button == 0) { dragging = true; dragX = mouseX - x; dragY = mouseY - y; @@ -122,8 +176,19 @@ public class SettingsFrame extends Frame> { } } - for (SettingButton sb : visibleButtons) + // al hacer clic en los cabezales de los grupos de ajustes + for (int i = 0; i < settingGroups.size(); i++) { + SettingGroup group = settingGroups.get(i); + if (hasVisibleSettingsInGroup(group) && isGroupHeaderHovered(mouseX, mouseY, i)) { + group.setExtended(!group.isExtended()); + updateVisibleButtonsForGroup(group); + return; + } + } + + for (SettingButton sb : visibleButtons) { sb.mouseClicked(mouseX, mouseY, button); + } } @Override @@ -132,8 +197,9 @@ public class SettingsFrame extends Frame> { if (button == 0) { dragging = false; - if (isHovered(mouseX, mouseY)) + if (isHovered(mouseX, mouseY)) { Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Move(this)); + } } for (SettingButton sb : visibleButtons) @@ -166,6 +232,12 @@ public class SettingsFrame extends Frame> { int textWidth = mc.textRenderer.getWidth(text); maxWidth = Math.max(maxWidth, textWidth); } + + for (SettingGroup group : settingGroups) { + int groupTextWidth = mc.textRenderer.getWidth("▶ " + group.getName()); + maxWidth = Math.max(maxWidth, groupTextWidth); + } + this.w = maxWidth + 30; } @@ -176,6 +248,109 @@ public class SettingsFrame extends Frame> { } } + public int getGroupHeaderY(int groupIndex) { + int currentY = renderY + h + PADDING; + List descLines = wrapDescription(module.getDescription(), w - 2 * PADDING); + int descHeight = descLines.size() * mc.textRenderer.fontHeight + (descLines.size() - 1) * 2; + currentY += descHeight + 3 * PADDING; // descBoxBottom + padding + + // iterar hasta llegar al grupo deseado + int currentIndex = 0; + for (SettingGroup group : settingGroups) { + if (hasVisibleSettingsInGroup(group)) { + if (currentIndex == groupIndex) { + return currentY; + } + + currentY += h + PADDING; + + if (group.isExtended()) { + List> groupButtons = getButtonsForGroup(group); + for (int j = 0; j < groupButtons.size(); j++) { + SettingButton sb = groupButtons.get(j); + if (sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) { + if (j < groupButtons.size() - 1) { + currentY += (h - h / 4) + PADDING; + } else { + currentY += (h - h / 4); + } + } + } + currentY += PADDING; + } + currentIndex++; + } + } // fallback + return currentY; + } + + public boolean isGroupHeaderHovered(int mouseX, int mouseY, int groupIndex) { + int headerY = getGroupHeaderY(groupIndex); + + return mouseX > x + PADDING && mouseX < x + w - PADDING && + mouseY > headerY && mouseY < headerY + h; + } + + private void addButtonsByGroups() { + int offset = h; + + for (SettingGroup group : settingGroups) { + for (Setting setting : group) { + SettingButton button = createSettingButton(setting, offset); + if (button != null) { + addButton(button); + offset += button.getH() + PADDING; + } + } + } + } + + private SettingButton createSettingButton(Setting setting, int offset) { + return switch (setting) { + case BooleanSetting b -> new ToggleButton(b, this, offset); + case NumberSetting n -> new SliderButton(n, this, offset); + case EnumSetting e -> new CycleButton<>(e, this, offset); + case KeySetting k -> new BindButton(k, this, offset); + case StringSetting s -> new TextButton(s, this, offset); + case ListSetting l -> new ListButton<>(l, this, offset); + case ColorSetting c -> new ColorButton(c, this, offset); + case OptionSetting o -> new ChooseButton<>(o, this, offset); + default -> null; + }; + } + + protected boolean hasVisibleSettingsInGroup(SettingGroup group) { + for (Setting setting : group) { + if (setting.isVisible()) { + return true; + } + } + return false; + } + + private List> getButtonsForGroup(SettingGroup group) { + List> groupButtons = new ArrayList<>(); + for (SettingButton button : buttons) { + for (Setting setting : group) { + if (setting == button.getSetting()) { + groupButtons.add(button); + break; + } + } + } + return groupButtons; + } + + protected void updateVisibleButtonsForGroup(SettingGroup group) { + visibleButtons = new ArrayList<>(); + for (SettingGroup sg : settingGroups) { + if (sg.isExtended()) { + visibleButtons.addAll(getButtonsForGroup(sg).stream() + .filter(sb -> sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) + .toList()); + } + } + } private List wrapDescription(String text, int maxWidth) { List lines = new ArrayList<>(); @@ -186,7 +361,7 @@ public class SettingsFrame extends Frame> { for (String word : words) { String testLine = line.isEmpty() ? word : line + " " + word; - if (mc.textRenderer.getWidth(testLine) > maxWidth - 8) { // padding of 4 each side + if (mc.textRenderer.getWidth(testLine) > maxWidth - 2 * PADDING) { if (!line.isEmpty()) lines.add(line.toString()); line = new StringBuilder(word); } else { @@ -197,56 +372,29 @@ public class SettingsFrame extends Frame> { return lines; } - private void addButtons() { - int offset = h; - - for (Setting setting : module.getSettings()) { - switch (setting) { - case BooleanSetting b -> { - addButton(new ToggleButton(b, this, offset)); - offset += 18; - } - case NumberSetting n -> { - addButton(new SliderButton(n, this, offset)); - offset += 18; - } - case EnumSetting e -> { - addButton(new CycleButton<>(e, this, offset)); - offset += 18; - } - case KeySetting k -> { - addButton(new BindButton(k, this, offset)); - offset += 18; - } - case StringSetting s -> { - addButton(new TextButton(s, this, offset)); - offset += 18; - } - case ListSetting l -> { - addButton(new ListButton<>(l, this, offset)); - offset += 18; - } - case ColorSetting c -> { - addButton(new ColorButton(c, this, offset)); - offset += 18; - } - case OptionSetting o -> { - addButton(new ChooseButton<>(o, this, offset)); - offset += 18; - } - default -> { - } - } - } - } - public void addButton(SettingButton button) { buttons.add(button); updateWidth(); // actualizar anchura del frame tras cada iteración } protected boolean isCloseButtonHovered(double mouseX, double mouseY) { - return mouseX > x + w - mc.textRenderer.getWidth("×") - 12 && mouseX < x + w - 4 - && mouseY > renderY + 4 && mouseY < renderY + h - 4; + return mouseX > x + w - mc.textRenderer.getWidth("×") - 3 * PADDING && mouseX < x + w - PADDING + && mouseY > renderY + PADDING && mouseY < renderY + h - PADDING; } -} + + public Module getModule() { + return module; + } + + public void setModule(Module module) { + this.module = module; + } + + public List getSettingGroups() { + return settingGroups; + } + + public void setSettingGroups(List settingGroups) { + this.settingGroups = settingGroups; + } +} \ No newline at end of file diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ClientSettingsFrame.java b/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ClientSettingsFrame.java index e46a07a..3ec3a6d 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ClientSettingsFrame.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ClientSettingsFrame.java @@ -3,6 +3,7 @@ package me.retucio.sputnik.ui.widgets.frames.settings; import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.event.events.sputnik.GUISettingsFrameEvent; import me.retucio.sputnik.module.modules.client.GUI; +import me.retucio.sputnik.module.setting.SettingGroup; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.widgets.buttons.SettingButton; @@ -24,6 +25,13 @@ public class ClientSettingsFrame extends SettingsFrame { @Override public void render(DrawContext ctx, int mouseX, int mouseY, float delta) { updateWidth(); + + // botones, fondo, etc. + if (extended) { + super.render(ctx, mouseX, mouseY, delta); + } + + // cabezal ctx.fill(x, renderY, x + w, renderY + h, Colors.mainColor.getRGB()); ctx.drawText(mc.textRenderer, title, @@ -36,25 +44,6 @@ public class ClientSettingsFrame extends SettingsFrame { renderY + (h / 2) - (mc.textRenderer.fontHeight / 2), -1, true); - List> visibleButtons = buttons.stream() - .filter(sb -> sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) - .toList(); - - if (extended) { - int currentY = renderY + h + 3; - totalHeight = visibleButtons.size() * h; - ctx.fill(x, currentY - 2, x + w, currentY + totalHeight, Colors.frameBGColor.getRGB()); - - for (SettingButton sb : visibleButtons) { - sb.setX(x + 4); - sb.setY(currentY); - sb.setW(w - 8); - sb.setH(h - h / 4); - sb.render(ctx, mouseX, mouseY, delta); - sb.drawTooltip(ctx, mouseX, mouseY); - currentY += h; - } - } else totalHeight = 0; } @Override @@ -70,9 +59,21 @@ public class ClientSettingsFrame extends SettingsFrame { } } - if (!extended) return; // solo dejar clicar en los módulos si el marco está extendido - for (SettingButton settingButton : buttons) - settingButton.mouseClicked(mouseX, mouseY, button); + // solo dejar clicar en los ajustes si el marco está extendido + if (!extended) return; + + for (int i = 0; i < settingGroups.size(); i++) { + SettingGroup group = settingGroups.get(i); + if (hasVisibleSettingsInGroup(group) && isGroupHeaderHovered(mouseX, mouseY, i)) { + group.setExtended(!group.isExtended()); + updateVisibleButtonsForGroup(group); + return; + } + } + + for (SettingButton sb : buttons) { + sb.mouseClicked(mouseX, mouseY, button); + } } @Override diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ColorPickerFrame.java b/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ColorPickerFrame.java index bfac183..ef044ab 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ColorPickerFrame.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/frames/settings/ColorPickerFrame.java @@ -2,10 +2,10 @@ package me.retucio.sputnik.ui.widgets.frames.settings; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; -import me.retucio.sputnik.module.settings.Setting; -import me.retucio.sputnik.module.settings.BooleanSetting; -import me.retucio.sputnik.module.settings.ColorSetting; -import me.retucio.sputnik.module.settings.NumberSetting; +import me.retucio.sputnik.module.setting.Setting; +import me.retucio.sputnik.module.setting.settings.BooleanSetting; +import me.retucio.sputnik.module.setting.settings.ColorSetting; +import me.retucio.sputnik.module.setting.settings.NumberSetting; import me.retucio.sputnik.ui.widgets.buttons.*; import me.retucio.sputnik.ui.widgets.buttons.settings.SliderButton; import me.retucio.sputnik.ui.widgets.buttons.settings.ToggleButton; @@ -75,7 +75,7 @@ public class ColorPickerFrame extends SettingsFrame { brightnessSetting.setDefaultValue(colorSetting.getDefaultBrightness()); // añadir ajustes y tal - dummyModule.addSettings(redSetting, greenSetting, blueSetting, rainbowSpeedSetting, saturationSetting, brightnessSetting, rainbowSetting); + dummyModule.getSg("general").addAll(redSetting, greenSetting, blueSetting, rainbowSpeedSetting, saturationSetting, brightnessSetting, rainbowSetting); for (Setting setting : dummyModule.getSettings()) { if (setting instanceof NumberSetting n) n.onUpdate(v -> updateColorFromSettings()); if (setting instanceof BooleanSetting b) b.onUpdate(v -> updateColorFromSettings()); @@ -92,8 +92,8 @@ public class ColorPickerFrame extends SettingsFrame { buttons.clear(); - Module originalModule = this.module; - this.module = dummyModule; + Module originalModule = this.getModule(); + this.setModule(dummyModule); // añadir botones int offset = h; @@ -111,7 +111,7 @@ public class ColorPickerFrame extends SettingsFrame { } } - this.module = originalModule; + this.setModule(originalModule); } diff --git a/src/main/resources/sputnik.accesswidener b/src/main/resources/sputnik.accesswidener index 1ecb68a..c3271fe 100644 --- a/src/main/resources/sputnik.accesswidener +++ b/src/main/resources/sputnik.accesswidener @@ -1,5 +1,7 @@ accessWidener v2 named +accessible class net/minecraft/client/MinecraftClient$LoadingContext + accessible field net/minecraft/client/texture/TextureManager textures Ljava/util/Map; accessible method net/minecraft/network/ClientConnection handleQueuedTasks ()V @@ -11,6 +13,7 @@ accessible class net/minecraft/client/network/ClientCommonNetworkHandler$Confirm accessible class net/minecraft/client/network/ClientCommonNetworkHandler$ConfirmServerResourcePackScreen$Pack accessible class net/minecraft/client/font/TextRenderer$Drawer +accessible method net/minecraft/client/font/FontManager getStorageInternal (Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/font/FontStorage; accessible method net/minecraft/entity/Entity setFlag (IZ)V accessible method net/minecraft/entity/player/PlayerEntity canGlide ()Z