This commit is contained in:
retuci0 committed 2026-01-06 18:09:52 +01:00
1 parent ec3e633cec
commit f794457538
77 files changed
+881 -513

No files matched your search

+2 -6
View File
@@ -1,19 +1,15 @@
# v2.4 # v2.5
## novedades ## 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 ### adiciones
#### módulos nuevos: #### módulos nuevos:
- capas: cambia (solo visualmente, para ti) la capa que usas a una custom de las disponibles
### arreglos / mejoras ### arreglos / mejoras
- renombrado bien todo que lo hice con prisa
## problemas reconocidos ## problemas reconocidos
- muchos, pero repórtalos en la página de problemas si quieres para que queden bien registrados - muchos, pero repórtalos en la página de problemas si quieres para que queden bien registrados
+1 -1
View File
@@ -8,6 +8,6 @@ loom_version=1.13-SNAPSHOT
fabric_api_version=0.140.2+1.21.11 fabric_api_version=0.140.2+1.21.11
mod_version=2.4 mod_version=2.5
maven_group=me.retucio maven_group=me.retucio
archives_base_name=sputnik archives_base_name=sputnik
@@ -120,7 +120,6 @@ public class Sputnik implements ClientModInitializer {
// se ejecuta cada vez que se presiona una tecla // se ejecuta cada vez que se presiona una tecla
public void onKey(int key, int action) { 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 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(); boolean anyFocused = isAnySettingButtonFocused() || ClickGUI.INSTANCE.getSearchBar().isFocused();
ClickGUI.INSTANCE.setAnyFocused(anyFocused); ClickGUI.INSTANCE.setAnyFocused(anyFocused);
@@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.retucio.sputnik.command.Command; import me.retucio.sputnik.command.Command;
import me.retucio.sputnik.command.args.ModuleArgumentType; import me.retucio.sputnik.command.args.ModuleArgumentType;
import me.retucio.sputnik.module.Module; 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.ChatUtil;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
@@ -2,7 +2,7 @@ package me.retucio.sputnik.config;
import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.sputnik.*; 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 me.retucio.sputnik.ui.screen.ClickGUI;
import java.io.Serial; import java.io.Serial;
@@ -78,13 +78,13 @@ public class ClientConfig {
@SubscribeEvent @SubscribeEvent
public void onCloseSettingsFrame(SettingsFrameEvent.Close event) { public void onCloseSettingsFrame(SettingsFrameEvent.Close event) {
settingsFrames.remove(event.getFrame().module.getName()); settingsFrames.remove(event.getFrame().getModule().getName());
ConfigManager.save(); ConfigManager.save();
} }
@SubscribeEvent @SubscribeEvent
public void onMoveSettingsFrame(SettingsFrameEvent.Move event) { 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(); ConfigManager.save();
} }
@@ -5,20 +5,20 @@ import com.google.gson.GsonBuilder;
import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager; 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.Frame;
import me.retucio.sputnik.ui.widgets.frames.ModuleFrame; import me.retucio.sputnik.ui.widgets.frames.ModuleFrame;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.util.ChatUtil;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer;
// se ocupa de guardar, cargar y aplicar ajustes // se ocupa de guardar, cargar y aplicar ajustes
public class ConfigManager { public class ConfigManager {
@@ -115,10 +115,10 @@ public class ConfigManager {
public static void setFramePosition(SettingsFrame frame) { public static void setFramePosition(SettingsFrame frame) {
ensureConfig(); ensureConfig();
if (!config.settingsFrames.containsKey(frame.module.getName())) if (!config.settingsFrames.containsKey(frame.getModule().getName()))
config.settingsFrames.put(frame.module.getName(), new int[] {frame.getX(), frame.getY()}); config.settingsFrames.put(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()});
else 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(); save();
} }
@@ -140,17 +140,6 @@ public class ConfigManager {
save(); 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) { public static void setSearchBarPosition(int x, int y) {
ensureConfig(); ensureConfig();
config.searchBarPosition = new int[] {x, y}; config.searchBarPosition = new int[] {x, y};
@@ -248,6 +237,7 @@ public class ConfigManager {
} }
} }
// ajustes de módulos // ajustes de módulos
private static void applyBooleanSetting(BooleanSetting setting, Object value) { private static void applyBooleanSetting(BooleanSetting setting, Object value) {
@@ -306,8 +296,14 @@ public class ConfigManager {
Number b = (Number) map.get("b"); Number b = (Number) map.get("b");
Number a = (Number) map.get("a"); Number a = (Number) map.get("a");
if (r != null && g != null && b != null && a != null) if (r != null && g != null && b != null && a != null) {
setting.setRGB(r.intValue(), g.intValue(), b.intValue(), a.intValue()); setting.setRGB(
r.intValue(),
g.intValue(),
b.intValue(),
a.intValue()
);
}
applyOptionalProperty(map, "rb", Boolean.class, setting::setRainbow); applyOptionalProperty(map, "rb", Boolean.class, setting::setRainbow);
applyOptionalProperty(map, "rs", Number.class, val -> setting.setRainbowSpeed(val.intValue())); applyOptionalProperty(map, "rs", Number.class, val -> setting.setRainbowSpeed(val.intValue()));
@@ -321,7 +317,7 @@ public class ConfigManager {
} }
} }
private static <T> void applyOptionalProperty(Map<?, ?> map, String key, Class<T> type, java.util.function.Consumer<T> setter) { private static <T> void applyOptionalProperty(Map<?, ?> map, String key, Class<T> type, Consumer<T> setter) {
Object value = map.get(key); Object value = map.get(key);
if (type.isInstance(value)) { if (type.isInstance(value)) {
setter.accept(type.cast(value)); setter.accept(type.cast(value));
@@ -340,7 +336,7 @@ public class ConfigManager {
} }
private static String getSettingKey(Setting setting) { private static String getSettingKey(Setting setting) {
return setting.getModule().getName() + ":" + setting.getName(); return setting.getSg().getModule().getName() + ":" + setting.getName();
} }
public static boolean hasLoaded() { public static boolean hasLoaded() {
@@ -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;
}
}
@@ -9,13 +9,13 @@ import net.minecraft.client.util.math.MatrixStack;
/** /**
* @see me.retucio.sputnik.mixin.WorldRendererMixin#render * @see me.retucio.sputnik.mixin.WorldRendererMixin#render
*/ */
public class RenderWorldEvent extends Event { public class Render3DEvent extends Event {
private final MatrixStack matrices; private final MatrixStack matrices;
private final RenderTickCounter tc; private final RenderTickCounter tc;
private final Camera camera; private final Camera camera;
public RenderWorldEvent(MatrixStack matrices, RenderTickCounter tc, Camera camera) { public Render3DEvent(MatrixStack matrices, RenderTickCounter tc, Camera camera) {
this.matrices = matrices; this.matrices = matrices;
this.tc = tc; this.tc = tc;
this.camera = camera; this.camera = camera;
@@ -1,7 +1,7 @@
package me.retucio.sputnik.event.events.sputnik; package me.retucio.sputnik.event.events.sputnik;
import me.retucio.sputnik.event.Event; 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 // se genera cada que se cambia el valor de un ajuste
public class UpdateSettingEvent extends Event { public class UpdateSettingEvent extends Event {
@@ -1,6 +1,8 @@
package me.retucio.sputnik.mixin; package me.retucio.sputnik.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue; 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.ModuleManager;
import me.retucio.sputnik.module.modules.misc.ChatPlus; import me.retucio.sputnik.module.modules.misc.ChatPlus;
import me.retucio.sputnik.module.modules.camera.Freecam; import me.retucio.sputnik.module.modules.camera.Freecam;
@@ -28,6 +30,11 @@ public abstract class InGameHudMixin {
noRender = ModuleManager.INSTANCE.getModuleByClass(NoRender.class); 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 // norender
@@ -14,8 +14,7 @@ import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.world.ClientWorld; import net.minecraft.client.world.ClientWorld;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -3,7 +3,7 @@ package me.retucio.sputnik.mixin;
import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.buffers.GpuBufferSlice;
import me.retucio.sputnik.Sputnik; 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.ModuleManager;
import me.retucio.sputnik.module.modules.render.BlockOutline; import me.retucio.sputnik.module.modules.render.BlockOutline;
import me.retucio.sputnik.module.modules.camera.Freecam; 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)); matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(camera.getYaw() + 180f));
profiler.push(Sputnik.MOD_ID + "-3d"); profiler.push(Sputnik.MOD_ID + "-3d");
EVENT_BUS.post(new RenderWorldEvent(matrices, tickCounter, camera)); EVENT_BUS.post(new Render3DEvent(matrices, tickCounter, camera));
profiler.pop(); profiler.pop();
matrices.pop(); matrices.pop();
@@ -4,10 +4,11 @@ import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.config.ConfigManager; import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.sputnik.ToggleModuleEvent; import me.retucio.sputnik.event.events.sputnik.ToggleModuleEvent;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.KeySetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.settings.Setting; import me.retucio.sputnik.module.setting.settings.KeySetting;
import me.retucio.sputnik.module.setting.Setting;
import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.ChatUtil;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
@@ -15,6 +16,7 @@ import org.lwjgl.glfw.GLFW;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
// clase base para los módulos // clase base para los módulos
public class Module { 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 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); protected BooleanSetting notify = new BooleanSetting("notificar", "notificar en el chat al activar / desactivar", true);
private final List<Setting> settings = new ArrayList<>(); protected final List<SettingGroup> sgs = new ArrayList<>();
protected final SettingGroup sgGeneral = addSg(new SettingGroup("general", true));
protected MinecraftClient mc = MinecraftClient.getInstance(); protected MinecraftClient mc = MinecraftClient.getInstance();
public Module(String name, String description, Category category) { public Module(String name, String description, Category category) {
this.name = name; this.name = name;
this.description = description; this.description = description;
this.category = category; this.category = category;
addSettings(bind, keyMode, notify); sgGeneral.addAll(bind, keyMode, notify);
} }
public Module(String name, String description, Category category, int key) { public Module(String name, String description, Category category, int key) {
this.name = name; this.name = name;
this.description = description; this.description = description;
this.category = category; this.category = category;
addSettings(bind, keyMode, notify); sgGeneral.addAll(bind, keyMode, notify);
this.bind.setDefaultKey(key); this.bind.setDefaultKey(key);
// puto marcos // puto marcos
@@ -57,22 +61,34 @@ public class Module {
this.bind.setKey(key); this.bind.setKey(key);
} }
// ajustes // ajustes
public SettingGroup addSg(SettingGroup sg) {
sgs.add(sg);
sg.setModule(this);
return sg;
}
public List<SettingGroup> getSgs() {
return sgs;
}
public SettingGroup getSg(String name) {
for (SettingGroup sg : sgs) {
if (sg.getName().equals(name)) {
return sg;
}
}
return null;
}
public List<Setting> getSettings() { public List<Setting> getSettings() {
List<Setting> settings = new ArrayList<>();
sgs.forEach(sg -> sg.forEach(settings::add));
return settings; return settings;
} }
@SuppressWarnings("unchecked")
public <S extends Setting> 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 // encendido y apagado del módulo
public void toggle() { public void toggle() {
@@ -100,9 +116,8 @@ public class Module {
} }
// otros métodos // tick (ejecutado 20 veces por segundo)
public void onTick() {} public void onTick() {}
public void onKey(int key, int action) {}
// getters y setters // getters y setters
public String getName() { public String getName() {
@@ -2,8 +2,8 @@ package me.retucio.sputnik.module;
import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.SubscribeEvent; 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.client.HUD;
import me.retucio.sputnik.module.modules.camera.*;
import me.retucio.sputnik.module.modules.misc.*; import me.retucio.sputnik.module.modules.misc.*;
import me.retucio.sputnik.module.modules.network.*; import me.retucio.sputnik.module.modules.network.*;
import me.retucio.sputnik.module.modules.player.*; import me.retucio.sputnik.module.modules.player.*;
@@ -5,9 +5,10 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.*; import me.retucio.sputnik.event.events.*;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.KeySetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; 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.ChatUtil;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import me.retucio.sputnik.util.MiscUtil; import me.retucio.sputnik.util.MiscUtil;
@@ -41,21 +42,22 @@ import org.lwjgl.glfw.GLFW;
public class Freecam extends Module { public class Freecam extends Module {
// ajustes // 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 toggleOnDamage = sgGeneral.add(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 reloadChunks = sgGeneral.add(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 renderHands = sgGeneral.add(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 stayCrouching = sgGeneral.add(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 staticView = sgGeneral.add(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 cancelActionPackets = sgGeneral.add(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 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", "velocidad", "velocidad de movimiento de la cámara",
1, 0, 10, 0.2)); 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 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 = addSetting(new NumberSetting( public NumberSetting scrollSens = sgSpeed.add(new NumberSetting(
"sensibilidad del scroll", "sensibilidad de la rueda del ratón para modificar la velocidad, 0 para desactivar", "sensibilidad del scroll", "sensibilidad de la rueda del ratón para modificar la velocidad, 0 para desactivar",
1, 0, 2, 0.1)); 1, 0, 2, 0.1));
@@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.camera;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.option.Perspective; import net.minecraft.client.option.Perspective;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@@ -16,13 +16,13 @@ import org.lwjgl.glfw.GLFW;
public class Freelook extends Module { public class Freelook extends Module {
public EnumSetting<CameraMode> 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<CameraMode> 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)); 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)); 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)); 0.1, 0, 2, 0.05));
private float yaw; private float yaw;
@@ -3,8 +3,8 @@ package me.retucio.sputnik.module.modules.camera;
import me.retucio.sputnik.mixin.accessor.StatusEffectInstanceAccessor; import me.retucio.sputnik.mixin.accessor.StatusEffectInstanceAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
@@ -18,9 +18,9 @@ import java.awt.*;
public class Fullbright extends Module { public class Fullbright extends Module {
public EnumSetting<Modes> mode = addSetting(new EnumSetting<>("modo", "qué modo de iluminación emplear (usar poción con shaders)", Modes.class, Modes.GAMMA)); public EnumSetting<Modes> 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() { public Fullbright() {
super("brilli brilli", super("brilli brilli",
@@ -5,28 +5,35 @@ import me.retucio.sputnik.event.events.MouseScrollEvent;
import me.retucio.sputnik.event.events.PerspectiveChangeEvent; import me.retucio.sputnik.event.events.PerspectiveChangeEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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 me.retucio.sputnik.util.KeyUtil;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
// continúa en CameraMixin // continúa en CameraMixin
public class PerspectivePlus extends Module { public class PerspectivePlus extends Module {
private double distance;
// ajustes // 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)); "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", "distancia", "distancia a la que está la cámara del jugador por defecto",
4, 1, 20, 0.2)); 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)", "sensibilidad del scroll", "sensibilidad de la rueda del ratón (0 para desactivar)",
1, 0, 8, 0.1)); 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() { public PerspectivePlus() {
super("perspectiva plus", super("perspectiva plus",
@@ -4,17 +4,17 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.ChangeRotationEvent; import me.retucio.sputnik.event.events.ChangeRotationEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
public class Rotations extends Module { public class Rotations extends Module {
public NumberSetting yaw = addSetting(new NumberSetting("guiñada", "eje vertical - giro horizontal (yaw)", 0, -180, 180, 1)); public NumberSetting yaw = sgGeneral.add(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 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 smooth = sgGeneral.add(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 serverSide = sgGeneral.add(new BooleanSetting("serverside", "espamea paquetes de rotación al servidor", false));
public Rotations() { public Rotations() {
super("rotaciones", super("rotaciones",
@@ -5,30 +5,34 @@ import me.retucio.sputnik.event.events.GetFOVEvent;
import me.retucio.sputnik.event.events.MouseScrollEvent; import me.retucio.sputnik.event.events.MouseScrollEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.KeySetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.KeySetting;
import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
// continúa en GameRendererMixin // continúa en GameRendererMixin
public class Zoom extends Module { public class Zoom extends Module {
public BooleanSetting showHands = addSetting(new BooleanSetting("mostrar manos", "esconde o muestra las manos al hacer zoom", true)); SettingGroup sgVisual = addSg(new SettingGroup("visual", true));
public BooleanSetting showHUD = addSetting(new BooleanSetting("mostrar HUD", "esconde o muestra los indicadores en pantalla", 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)", public NumberSetting defaultZoom = sgGeneral.add(new NumberSetting("zoom", "cantidad de zoom",
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",
6, 1, 10, 0.1)); 6, 1, 10, 0.1));
public NumberSetting mouseSensMultiplier = addSetting(new NumberSetting("sensibilidad", "multiplicador de la sensibilidad del ratón", public BooleanSetting showHands = sgVisual.add(new BooleanSetting("mostrar manos", "esconde o muestra las manos al hacer zoom", true));
0.4, 0, 1, 0.05)); 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 boolean prevSmoothCam;
private double prevMouseSens; private double prevMouseSens;
@@ -9,10 +9,11 @@ import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.misc.ChatPlus; import me.retucio.sputnik.module.modules.misc.ChatPlus;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.settings.StringSetting; 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.ChatUtil;
import me.retucio.sputnik.util.Colors; import me.retucio.sputnik.util.Colors;
import org.lwjgl.glfw.GLFW; 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) // módulo no visible solo para los ajustes de la interfaz (y del cliente en general)
public class GUI extends Module { 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)); new Color(70, 20, 210, 230), false));
// números negativos para deslizamiento inverso, 0 para desactivar // 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)); 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 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 = addSetting(new BooleanSetting("distinguir mayúsculas", "la búsqueda es sensible a mayúsculas y minúsculas", false)); 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 // ^^^ 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 BooleanSetting blur = sgUi.add(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 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 commandPrefix = sgChat.add(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 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() { public GUI() {
super("interfaz", super("interfaz",
@@ -2,7 +2,8 @@ package me.retucio.sputnik.module.modules.client;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.HudElement;
import me.retucio.sputnik.ui.hud.HudRenderer; import me.retucio.sputnik.ui.hud.HudRenderer;
import me.retucio.sputnik.ui.hud.HudEditorScreen; import me.retucio.sputnik.ui.hud.HudEditorScreen;
@@ -19,21 +20,25 @@ import java.awt.*;
public class HUD extends Module { 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 // 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 // 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)); 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 shadow = sgDisplay.add(new BooleanSetting("sombra", "texto con sombra", true));
public BooleanSetting showOnChat = addSetting(new BooleanSetting("mostrar en chat", "renderizar HUD en la pantalla del chat", false)); 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 = sgElements.add(new NumberSetting("zona horaria", "zona horaria en UTC+n", 1, -6, 6, 1));
public NumberSetting timezone = addSetting(new NumberSetting("zona horaria", "zona horaria en UTC+n", 1, -6, 6, 1)); public EnumSetting<TimeFormat> timeFormat = sgElements.add(new EnumSetting<>("formato de la hora", "12h o 24h", TimeFormat.class, TimeFormat.TWENTY_FOUR_HOUR));
public EnumSetting<TimeFormat> timeFormat = addSetting(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 StringSetting customText = addSetting(new StringSetting("texto custom", "marca de agua (dejar vacío para quitar)", "adolf jitler inshtagram feishbuc twiter", 40)); public EnumSetting<CoordsMode> coordsMode = sgElements.add(new EnumSetting<>("modo de coordenadas", "qué coordenadas mostrar", CoordsMode.class, CoordsMode.OVERWORLD));
public EnumSetting<CoordsMode> coordsMode = addSetting(new EnumSetting<>("modo de coordenadas", "qué coordenadas mostrar", CoordsMode.class, CoordsMode.OVERWORLD)); public EnumSetting<Dynosaurs> dyno = sgElements.add(new EnumSetting<>("dinosaurio", "qué dinosaurio mostrar",
public EnumSetting<Dynosaurs> dyno = addSetting(new EnumSetting<>("dinosaurio", "qué dinosaurio mostrar",
Dynosaurs.class, Dynosaurs.SPINOSAURUS)); Dynosaurs.class, Dynosaurs.SPINOSAURUS));
public HUD() { public HUD() {
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.misc;
import me.retucio.sputnik.mixin.accessor.AnvilScreenAccessor; import me.retucio.sputnik.mixin.accessor.AnvilScreenAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.screen.ingame.AnvilScreen;
import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextFieldWidget;
@@ -17,7 +17,7 @@ import java.util.Map;
public class AnvilFont extends Module { public class AnvilFont extends Module {
public EnumSetting<FontMode> fontMode = addSetting(new EnumSetting<>("tipografía", "qué tipografía utilizar", public EnumSetting<FontMode> fontMode = sgGeneral.add(new EnumSetting<>("tipografía", "qué tipografía utilizar",
FontMode.class, FontMode.NORMAL)); FontMode.class, FontMode.NORMAL));
String text; String text;
@@ -4,8 +4,8 @@ import me.retucio.sputnik.event.events.RenderBossbarEvent;
import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import net.minecraft.client.gui.hud.ClientBossBar; import net.minecraft.client.gui.hud.ClientBossBar;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -15,9 +15,9 @@ import java.util.WeakHashMap;
public class BossbarStack extends Module { public class BossbarStack extends Module {
public BooleanSetting stackBars = addSetting(new BooleanSetting("apilar barras", "apilar las bossbars", true)); public BooleanSetting stackBars = sgGeneral.add(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 BooleanSetting hideNames = sgGeneral.add(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 NumberSetting spaceReduction = sgGeneral.add(new NumberSetting("reducción de espacio", "cuánto reducir el espacio entre bossbars",
0, 0, 10, 0.1)); 0, 0, 10, 0.1));
private final Map<ClientBossBar, Integer> bossBarMap = new WeakHashMap<>(); private final Map<ClientBossBar, Integer> bossBarMap = new WeakHashMap<>();
@@ -10,8 +10,9 @@ import me.retucio.sputnik.event.events.ReceiveMessageEvent;
import me.retucio.sputnik.event.events.SendMessageEvent; import me.retucio.sputnik.event.events.SendMessageEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.NumberSetting; 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.ChatUtil;
import me.retucio.sputnik.util.interfaces.IChatHudLine; import me.retucio.sputnik.util.interfaces.IChatHudLine;
import me.retucio.sputnik.util.interfaces.IChatHudLineVisible; import me.retucio.sputnik.util.interfaces.IChatHudLineVisible;
@@ -43,15 +44,17 @@ import java.util.regex.Pattern;
public class ChatPlus extends Module { public class ChatPlus extends Module {
// ajustes // ajustes
public BooleanSetting timestamps = addSetting(new BooleanSetting("sello de tiempo", "muestra a qué hora se ha enviado un mensaje", true)); SettingGroup sgChat = addSg(new SettingGroup("funcionamiento del chat", 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));
public BooleanSetting keepHistory = addSetting(new BooleanSetting("no borrar chat", "no borrar el chat tras desconectarse", true)); public BooleanSetting timestamps = sgGeneral.add(new BooleanSetting("sello de tiempo", "muestra a qué hora se ha enviado un mensaje", true));
public BooleanSetting logger = addSetting(new BooleanSetting("registro", "evita que se borre el chat de un server", true)); public BooleanSetting timestampSecs = sgGeneral.add(new BooleanSetting("mostrar segundos", "muestra segundos también en el sello de tiempo", false));
public BooleanSetting noCharLimit = addSetting(new BooleanSetting("quitar límite de caracteres", "te deja escribir mensajes tan largos como desees", false)); public BooleanSetting showHeads = sgGeneral.add(new BooleanSetting("cabezas", "muestra la cabeza del jugador junto a su mensaje", true));
public NumberSetting chatHistoryExtraLength = addSetting(new NumberSetting("expandir chat", "cuántas líneas añadir al historial del chat",
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)); 0, 0, 1000, 1));
public ChatPlus() { public ChatPlus() {
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.misc;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.client.network.OtherClientPlayerEntity;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@@ -12,7 +12,7 @@ import java.util.UUID;
public class FakePlayer extends Module { 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; private OtherClientPlayerEntity player = null;
@@ -4,8 +4,9 @@ import me.retucio.sputnik.command.CommandManager;
import me.retucio.sputnik.event.events.ClientClickEvent; import me.retucio.sputnik.event.events.ClientClickEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
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.ChatUtil; import me.retucio.sputnik.util.ChatUtil;
import net.minecraft.client.texture.NativeImage; import net.minecraft.client.texture.NativeImage;
import net.minecraft.text.ClickEvent; import net.minecraft.text.ClickEvent;
@@ -30,14 +31,16 @@ import java.io.IOException;
public class ScreenshotPlus extends Module { public class ScreenshotPlus extends Module {
public BooleanSetting saveButton = addSetting(new BooleanSetting("botón de guardar", "mostrar botón para guardar la captura localmente", true)); SettingGroup sgButtons = addSg(new SettingGroup("botones", 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));
public EnumSetting<ScreenshotActions> defaultAction = addSetting(new EnumSetting<>("por defecto", "qué acción tomar por defecto", public EnumSetting<ScreenshotActions> defaultAction = sgGeneral.add(new EnumSetting<>("por defecto", "qué acción tomar por defecto",
ScreenshotActions.class, ScreenshotActions.NONE)); 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 NativeImage screenshot;
private File screenshotFile; private File screenshotFile;
@@ -5,8 +5,8 @@ import me.retucio.sputnik.event.events.KeyEvent;
import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor; import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.KeySetting; import me.retucio.sputnik.module.setting.settings.KeySetting;
import me.retucio.sputnik.ui.screen.PreviewScreen; import me.retucio.sputnik.ui.screen.PreviewScreen;
import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.Colors; import me.retucio.sputnik.util.Colors;
@@ -29,8 +29,8 @@ import java.util.HashMap;
public class ShulkerPeek extends Module { 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 KeySetting previewKey = sgGeneral.add(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 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<Item, Color> SHULKER_COLORS = new HashMap<>(); public static final HashMap<Item, Color> SHULKER_COLORS = new HashMap<>();
@@ -2,12 +2,12 @@ package me.retucio.sputnik.module.modules.network;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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; import me.retucio.sputnik.util.ChatUtil;
public class BungeecordSpoofer extends Module { 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() { public BungeecordSpoofer() {
super("spoofer de bungeecord", super("spoofer de bungeecord",
@@ -2,14 +2,15 @@ package me.retucio.sputnik.module.modules.network;
import me.retucio.sputnik.event.SubscribeEvent; import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.AddEntityEvent; 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.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.misc.FakePlayer; import me.retucio.sputnik.module.modules.misc.FakePlayer;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; 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.MiscUtil;
import me.retucio.sputnik.util.render.RenderUtil; import me.retucio.sputnik.util.render.RenderUtil;
import net.minecraft.client.network.OtherClientPlayerEntity; 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 // lógica sutilmente robada de MeteorClient porque la mía era una mierda
public class LogoutSpots extends Module { public class LogoutSpots extends Module {
public BooleanSetting outlines = addSetting(new BooleanSetting("contorno", "renderizar contorno de la caja (lados)", true)); SettingGroup sgOutlines = addSg(new SettingGroup("contorno", true));
public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "Color de las líneas", new Color(255, 0, 0, 230), false)); SettingGroup sgFilling = addSg(new SettingGroup("relleno", true));
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 sgMisc = addSg(new SettingGroup("misc.", true));
public BooleanSetting filling = addSetting(new BooleanSetting("relleno", "renderizar relleno de la caja (caras)", true)); public BooleanSetting outlines = sgOutlines.add(new BooleanSetting("contorno", "renderizar contorno de la caja (lados)", true));
public ColorSetting fillingColor = addSetting(new ColorSetting("color del relleno", "Color de los lados", new Color(230, 0, 0, 55), false)); 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<LogoutEntry> players = new ArrayList<>(); private final List<LogoutEntry> players = new ArrayList<>();
private final List<PlayerListEntry> lastPlayerList = new ArrayList<>(); private final List<PlayerListEntry> lastPlayerList = new ArrayList<>();
@@ -165,7 +170,7 @@ public class LogoutSpots extends Module {
} }
@SubscribeEvent @SubscribeEvent
public void onWorldRender(RenderWorldEvent event) { public void onWorldRender(Render3DEvent event) {
if (mc.player == null || mc.world == null) return; if (mc.player == null || mc.world == null) return;
for (LogoutEntry entry : players) for (LogoutEntry entry : players)
@@ -5,8 +5,8 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.event.events.PacketEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.NetworkUtil; import me.retucio.sputnik.util.NetworkUtil;
@@ -22,10 +22,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
public class PacketDelay extends Module { 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 NumberSetting delay = sgGeneral.add(new NumberSetting("delay", "delay a añadir a los paquetes, en milisegundos", 1500, 0, 3000, 5));
public EnumSetting<Directions> directions = addSetting(new EnumSetting<>("dirección", "dirección de los paquetes a los que añadir delay", public EnumSetting<Directions> directions = sgGeneral.add(new EnumSetting<>("dirección", "dirección de los paquetes a los que añadir delay",
Directions.class, Directions.BOTH)); Directions.class, Directions.BOTH));
public EnumSetting<Packets> packets = addSetting(new EnumSetting<>("paquetes", "paquetes a los que aplicar el delay", public EnumSetting<Packets> packets = sgGeneral.add(new EnumSetting<>("paquetes", "paquetes a los que aplicar el delay",
Packets.class, Packets.ALL)); Packets.class, Packets.ALL));
private final List<DelayedPacket> delayedPackets = new CopyOnWriteArrayList<>(); private final List<DelayedPacket> delayedPackets = new CopyOnWriteArrayList<>();
@@ -4,14 +4,14 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.AttackEntityEvent; import me.retucio.sputnik.event.events.AttackEntityEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
public class AttributeSwapper extends Module { public class AttributeSwapper extends Module {
public NumberSetting slot = addSetting(new NumberSetting("slot", "slot al que cambiar", 1, 1, 9, 1)); public NumberSetting slot = sgGeneral.add(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 BooleanSetting swap = sgGeneral.add(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 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 delay = 0;
private int prevSlot = -1; private int prevSlot = -1;
@@ -4,11 +4,11 @@ import me.retucio.sputnik.cape.Cape;
import me.retucio.sputnik.cape.CapeManager; import me.retucio.sputnik.cape.CapeManager;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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 class Capes extends Module {
public OptionSetting<Cape> cape = addSetting(new OptionSetting<>("capa", "qué capa llevar puesta", public OptionSetting<Cape> cape = sgGeneral.add(new OptionSetting<>("capa", "qué capa llevar puesta",
CapeManager.INSTANCE.getCapes(), CapeManager.INSTANCE.getCape("hollow-knight"))); CapeManager.INSTANCE.getCapes(), CapeManager.INSTANCE.getCape("hollow-knight")));
public Capes() { public Capes() {
@@ -2,18 +2,18 @@ package me.retucio.sputnik.module.modules.player;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class FastUse extends Module { public class FastUse extends Module {
public BooleanSetting items = addSetting(new BooleanSetting("items", "usar items precozmente", true)); public BooleanSetting items = sgGeneral.add(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 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 BooleanSetting blocks = sgGeneral.add(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 NumberSetting blockCooldown = sgGeneral.add(new NumberSetting("cooldown de bloques", "cooldown para colocar bloques en ticks", 0, 0, 4, 1));
public FastUse() { public FastUse() {
super("precoz", super("precoz",
@@ -5,8 +5,9 @@ import me.retucio.sputnik.event.events.RenderHeldItemEvent;
import me.retucio.sputnik.event.events.RenderArmEvent; import me.retucio.sputnik.event.events.RenderArmEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
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.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.RotationAxis;
@@ -18,75 +19,80 @@ import org.joml.Vector3d;
public class HandView extends Module { 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 // ajustes de animaciones
public BooleanSetting oldAnimations = addSetting(new BooleanSetting("animaciones viejas", "como las de la 1.8, al pegar", false)); public BooleanSetting oldAnimations = sgAnimations.add(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 skipSwapping = sgAnimations.add(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 noFood = sgAnimations.add(new BooleanSetting("no comer", "no renderiza la animación de comer", false));
// ajustes de mano principal // 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 0, -180, 180, 1));
// ajustes de mano secundaria // 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 0, -180, 180, 1));
// brazo // 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 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)); 0, -180, 180, 1));
public HandView() { public HandView() {
@@ -2,11 +2,11 @@ package me.retucio.sputnik.module.modules.player;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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 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() { public Headhitters() {
super("headhitters", super("headhitters",
@@ -7,7 +7,7 @@ import me.retucio.sputnik.event.events.MouseClickEvent;
import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor; import me.retucio.sputnik.mixin.accessor.HandledScreenAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.InventoryUtil;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen;
@@ -16,9 +16,9 @@ import org.lwjgl.glfw.GLFW;
public class InventoryPlus extends Module { 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 row1key = sgGeneral.add(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 row2key = sgGeneral.add(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 row3key = sgGeneral.add(new KeySetting("fila 3", "tecla para mover items a la tercera fila", GLFW.GLFW_KEY_D));
public InventoryPlus() { public InventoryPlus() {
super("inventario plus", super("inventario plus",
@@ -2,9 +2,9 @@ package me.retucio.sputnik.module.modules.player;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.module.settings.OptionSetting; import me.retucio.sputnik.module.setting.settings.OptionSetting;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.Items; import net.minecraft.item.Items;
@@ -16,10 +16,10 @@ import net.minecraft.util.math.Direction;
public class Offhand extends Module { public class Offhand extends Module {
public OptionSetting<Item> item = addSetting(new OptionSetting<>("ítem", "ítem a equipar", public OptionSetting<Item> item = sgGeneral.add(new OptionSetting<>("ítem", "ítem a equipar",
Lists.itemList, Items.TOTEM_OF_UNDYING, Lists.itemNames)); 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 NumberSetting delaySetting = sgGeneral.add(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 BooleanSetting override = sgGeneral.add(new BooleanSetting("anular", "ignora que ya haya un ítem en la mano secundaria", true));
private int delay; private int delay;
@@ -4,7 +4,7 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.ClipAtLedgeEvent; import me.retucio.sputnik.event.events.ClipAtLedgeEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.BlockHitResult;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
@@ -13,7 +13,7 @@ import net.minecraft.world.RaycastContext;
public class SafeWalk extends Module { 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() { public SafeWalk() {
super("muletas", super("muletas",
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.player;
import me.retucio.sputnik.mixin.accessor.KeyBindingAccessor; import me.retucio.sputnik.mixin.accessor.KeyBindingAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.ui.screen.ClickGUI;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
@@ -19,7 +19,7 @@ import java.util.List;
public class UIMove extends Module { public class UIMove extends Module {
public ListSetting<ScreenHandlerType<?>> screens = addSetting(new ListSetting<>("interfaces", "interfaces en las que te podrás mover", public ListSetting<ScreenHandlerType<?>> screens = sgGeneral.add(new ListSetting<>("interfaces", "interfaces en las que te podrás mover",
Lists.screenList, Lists.allTrue(Lists.screenList), Lists.screenNames)); Lists.screenList, Lists.allTrue(Lists.screenList), Lists.screenNames));
private List<KeyBinding> movementKeys; private List<KeyBinding> movementKeys;
@@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.player;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.OptionSetting; 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.ChatUtil;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -21,16 +22,19 @@ import java.util.List;
public class WarnLowDurability extends Module { 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)); 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<SoundEvent> sound = sgSound.add(new OptionSetting<>("sonido", "qué sonido reproducir",
public OptionSetting<SoundEvent> sound = addSetting(new OptionSetting<>("sonido", "qué sonido reproducir",
Lists.soundList, SoundEvents.BLOCK_NOTE_BLOCK_BELL.value(), Lists.soundNames)); 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 volume = sgSound.add(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 pitch = sgSound.add(new NumberSetting("frecuencia", "altura del sonido", 70, 0, 125, 1));
private final List<ItemStack> warned = new ArrayList<>(); private final List<ItemStack> warned = new ArrayList<>();
private float prevPercentage = -1; private float prevPercentage = -1;
@@ -1,13 +1,14 @@
package me.retucio.sputnik.module.modules.render; package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.event.SubscribeEvent; 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.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ListSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.settings.NumberSetting; 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.Colors;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import me.retucio.sputnik.util.render.RenderUtil; import me.retucio.sputnik.util.render.RenderUtil;
@@ -23,17 +24,20 @@ import java.util.List;
public class BlockESP extends Module { public class BlockESP extends Module {
public ListSetting<Block> blocks = addSetting(new ListSetting<>("bloques", "bloques a resaltar", SettingGroup sgOulines = addSg(new SettingGroup("contorno", true));
SettingGroup sgFilling = addSg(new SettingGroup("relleno", true));
public ListSetting<Block> blocks = sgGeneral.add(new ListSetting<>("bloques", "bloques a resaltar",
Lists.blockList, Lists.allFalse(Lists.blockList), Lists.blockNames)); 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 BooleanSetting fillings = sgFilling.add(new BooleanSetting("relleno", "renderizar relleno de bloques", true));
public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "color del contorno", Colors.CELESTE, false)); public ColorSetting fillingColor = sgFilling.add(new ColorSetting("color del relleno", "color del relleno", new Color(57, 177, 215, 67), 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 BlockESP() { public BlockESP() {
@@ -50,7 +54,7 @@ public class BlockESP extends Module {
} }
@SubscribeEvent @SubscribeEvent
public void onRenderWorld(RenderWorldEvent event) { public void onRenderWorld(Render3DEvent event) {
if (mc.player == null || mc.world == null) return; if (mc.player == null || mc.world == null) return;
for (Block block : blocks.getOptions()) { for (Block block : blocks.getOptions()) {
@@ -2,7 +2,7 @@ package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import java.awt.*; import java.awt.*;
@@ -12,7 +12,7 @@ import java.awt.*;
public class BlockOutline extends Module { 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)); new Color(0, 0, 0, 102), true));
public BlockOutline() { public BlockOutline() {
@@ -1,13 +1,14 @@
package me.retucio.sputnik.module.modules.render; package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.event.SubscribeEvent; 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.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
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.render.RenderUtil; import me.retucio.sputnik.util.render.RenderUtil;
import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -18,18 +19,22 @@ import java.awt.*;
public class BreakingProgress extends Module { public class BreakingProgress extends Module {
public EnumSetting<BreakMode> 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> breakMode = sgGeneral.add(new EnumSetting<>("modo de minado", "elige si el cubo se encoge o se dilata",
BreakMode.class, BreakMode.INWARDS)); BreakMode.class, BreakMode.INWARDS));
public BooleanSetting outlines = addSetting(new BooleanSetting("contorno", "renderizar contorno", true)); public BooleanSetting outlines = sgOulines.add(new BooleanSetting("contorno", "renderizar contorno", true));
public ColorSetting outlineColor = addSetting(new ColorSetting("color del contorno", "color del contorno", public ColorSetting outlineColor = sgOulines.add(new ColorSetting("color del contorno", "color del contorno",
new Color(0, 255, 0, 200), false)); 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 BooleanSetting fillings = sgFilling.add(new BooleanSetting("relleno", "renderizar relleno", true));
public ColorSetting fillingColor = addSetting(new ColorSetting("color del relleno", "color del relleno", public ColorSetting fillingColor = sgFilling.add(new ColorSetting("color del relleno", "color del relleno",
new Color(0, 255, 0, 60), false)); new Color(0, 255, 0, 60), false));
public BreakingProgress() { public BreakingProgress() {
super("progreso de minado", super("progreso de minado",
"te muestra el progreso de minado de un bloque de manera más visible", "te muestra el progreso de minado de un bloque de manera más visible",
@@ -37,7 +42,7 @@ public class BreakingProgress extends Module {
} }
@SubscribeEvent @SubscribeEvent
public void onRenderWorld(RenderWorldEvent event) { public void onRenderWorld(Render3DEvent event) {
if (mc.interactionManager == null || mc.world == null) return; if (mc.interactionManager == null || mc.world == null) return;
if (!(mc.crosshairTarget instanceof BlockHitResult hitResult)) return; if (!(mc.crosshairTarget instanceof BlockHitResult hitResult)) return;
BlockPos pos = hitResult.getBlockPos(); BlockPos pos = hitResult.getBlockPos();
@@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.setting.settings.NumberSetting;
import java.awt.*; import java.awt.*;
@@ -15,14 +16,17 @@ import java.awt.*;
public class CritsPlus extends Module { 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 ColorSetting color = sgAppearance.add(new ColorSetting("color", "color de las partículas", new Color(0, 0, 255, 255), false));
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 scale = sgAppearance.add(new NumberSetting("escala", "tamaño", 1, 0, 2, 0.05));
public NumberSetting velocityMultipler = addSetting(new NumberSetting("dispersión", "multiplicador de la velocidad de dispersión", 1, 0, 10, 0.1)); 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 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 NumberSetting velocityMultipler = sgBehaviour.add(new NumberSetting("dispersión", "multiplicador de la velocidad de dispersión", 1, 0, 10, 0.1));
public BooleanSetting collide = addSetting(new BooleanSetting("colisionar", "colisionar con bloques", false)); 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() { public CritsPlus() {
super("críticos", super("críticos",
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.mixin.accessor.OverlayTextureAccessor; import me.retucio.sputnik.mixin.accessor.OverlayTextureAccessor;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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.NativeImage;
import net.minecraft.client.texture.NativeImageBackedTexture; import net.minecraft.client.texture.NativeImageBackedTexture;
@@ -16,7 +16,7 @@ import java.awt.*;
public class DamageOverlay extends Module { 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; private NativeImageBackedTexture texture = null;
@@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.util.render.GlintRenderLayer; import me.retucio.sputnik.util.render.GlintRenderLayer;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderLayers; import net.minecraft.client.render.RenderLayers;
@@ -17,9 +17,9 @@ import net.minecraft.util.DyeColor;
public class GlintPlus extends Module { public class GlintPlus extends Module {
public BooleanSetting items = addSetting(new BooleanSetting("items", "modificar el destello de encantamiento de los items", true)); public BooleanSetting items = sgGeneral.add(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 BooleanSetting armor = sgGeneral.add(new BooleanSetting("armadura", "modificar el destello de encantamiento de la armadura", true));
public EnumSetting<GlintColors> glintColor = addSetting(new EnumSetting<>("colores", "color del glint", GlintColors.class, GlintColors.PURPLE)); public EnumSetting<GlintColors> glintColor = sgGeneral.add(new EnumSetting<>("colores", "color del glint", GlintColors.class, GlintColors.PURPLE));
public GlintPlus() { public GlintPlus() {
super("destello de enchants.", super("destello de enchants.",
@@ -4,9 +4,10 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ListSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.setting.settings.ListSetting;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@@ -38,22 +39,25 @@ import java.util.concurrent.Executors;
public class Nametags extends Module { public class Nametags extends Module {
SettingGroup sgInfo = addSg(new SettingGroup("info. adicional", true));
Map<EntityType<?>, Boolean> defaultEntities = Lists.allFalse(Lists.entityList); Map<EntityType<?>, Boolean> defaultEntities = Lists.allFalse(Lists.entityList);
public ListSetting<EntityType<?>> entities = addSetting(new ListSetting<>("entidades", "entidades cuyo nametag será visible", public ListSetting<EntityType<?>> entities = sgGeneral.add(new ListSetting<>("entidades", "entidades cuyo nametag será visible",
Lists.entityList, defaultEntities, Lists.entityNames)); Lists.entityList, defaultEntities, Lists.entityNames));
public ListSetting<Item> items = sgGeneral.add(new ListSetting<>("items", "te permite elegir cuáles items tienen su nombre visible",
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> 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<Item> items = addSetting(new ListSetting<>("items", "te permite elegir cuáles items tienen su nombre visible",
Lists.itemList, Lists.allTrue(Lists.itemList), Lists.itemNames)); 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 health = sgGeneral.add(new BooleanSetting("mostrar vida", "muestra la vida de una entidad en su nametag", true));
public BooleanSetting distinguishBabies = addSetting(new BooleanSetting("distinguir bebés", "cambia el nametag cuando una entidad está en su fase bebé", false)); public EnumSetting<HealthMode> healthMode = sgGeneral.add(new EnumSetting<>("mostrar vida en", "de qué manera mostrar la vida", HealthMode.class, HealthMode.POINTS));
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 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<UUID, String> cache = new ConcurrentHashMap<>(); private final Map<UUID, String> cache = new ConcurrentHashMap<>();
private static final ExecutorService executor = Executors.newCachedThreadPool(); private static final ExecutorService executor = Executors.newCachedThreadPool();
@@ -2,9 +2,10 @@ package me.retucio.sputnik.module.modules.render;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ListSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.setting.settings.ListSetting;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import net.minecraft.particle.ParticleType; import net.minecraft.particle.ParticleType;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
@@ -24,35 +25,41 @@ import net.minecraft.util.Formatting;
public class NoRender extends Module { public class NoRender extends Module {
public BooleanSetting spyglassOverlay = addSetting(new BooleanSetting("catalejo", "renderizar overlay del catalejo", false)); SettingGroup sgOverlays = addSg(new SettingGroup("overlays", true));
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)); SettingGroup sgAmbient = addSg(new SettingGroup("ambiente", true));
public BooleanSetting pumpkinOverlay = addSetting(new BooleanSetting("calabaza", "renderiza el overlay de la calabaza tallada", false)); SettingGroup sgEffects = addSg(new SettingGroup("efectos", true));
public BooleanSetting fireOverlay = addSetting(new BooleanSetting("fuego", "renderizar llamas sobre la cámara", false)); SettingGroup sgUi = addSg(new SettingGroup("interfaz", true));
public BooleanSetting portalOverlay = addSetting(new BooleanSetting("portal", "renderizar el overlay del portal del nether", false)); 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 spyglassOverlay = sgOverlays.add(new BooleanSetting("catalejo", "renderizar overlay del catalejo", false));
public BooleanSetting snow = addSetting(new BooleanSetting("nieve", "n i e v e", true)); 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 endFlashes = addSetting(new BooleanSetting("flashes del end", "renderizar los recientemente añadidos flashes en el end", true)); 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<ParticleType<?>> 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<ParticleType<?>> particles = sgAmbient.add(new ListSetting<>("partículas", "lista de partículas que se renderizan",
Lists.particleList, Lists.allTrue(Lists.particleList), Lists.particleNames)); Lists.particleList, Lists.allTrue(Lists.particleList), Lists.particleNames));
public BooleanSetting nauseaEffect = addSetting(new BooleanSetting("náusea", "renderizar borrachera", false)); public BooleanSetting nauseaEffect = sgEffects.add(new BooleanSetting("náusea", "renderizar borrachera", false));
public BooleanSetting blindnessEffect = addSetting(new BooleanSetting("ceguera", "renderizar miopía", false)); public BooleanSetting blindnessEffect = sgEffects.add(new BooleanSetting("ceguera", "renderizar miopía", false));
public BooleanSetting darknessEffect = addSetting(new BooleanSetting("oscuridad", "renderizar miedo a la oscuridad", 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 scoreboard = sgUi.add(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 titles = sgUi.add(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 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 = sgText.add(new BooleanSetting("negrita", "letra pero §lgorda", true));
public BooleanSetting bold = addSetting(new BooleanSetting("negrita", "letra pero §lgorda", true));
// public BooleanSetting italics = addSetting(new BooleanSetting("cursiva", "letra pero §otorcida", 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 underlined = sgText.add(new BooleanSetting("subrayado", "letra pero §nen el suelo", true));
public BooleanSetting strikethrough = addSetting(new BooleanSetting("tachado", "letra pero §mdiscriminada", true)); public BooleanSetting strikethrough = sgText.add(new BooleanSetting("tachado", "letra pero §mdiscriminada", true));
public EnumSetting<Colors> color = addSetting(new EnumSetting<>("colores", "§co§4r§6g§eu§al§2l§9o §1g§5a§dy", Colors.class, Colors.DEFAULT)); public EnumSetting<Colors> color = sgText.add(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 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() { public NoRender() {
super("no render", super("no render",
@@ -4,12 +4,12 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.event.events.PacketEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; 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; import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
public class ColoredSigns extends Module { 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() { public ColoredSigns() {
super("carteles gays", super("carteles gays",
@@ -1,12 +1,13 @@
package me.retucio.sputnik.module.modules.world; package me.retucio.sputnik.module.modules.world;
import me.retucio.sputnik.event.SubscribeEvent; 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.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.util.render.RenderUtil; import me.retucio.sputnik.util.render.RenderUtil;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@@ -20,20 +21,25 @@ import java.util.List;
public class LightOverlay extends Module { 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)); 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)); 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)); 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)); 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)); new Color(255, 0, 0, 67), false));
public BooleanSetting onWater = addSetting(new BooleanSetting("en agua", "mostrar también bloques cubiertos en agua", true));
List<BlockPos> blocks = new ArrayList<>(); List<BlockPos> blocks = new ArrayList<>();
@@ -44,7 +50,7 @@ public class LightOverlay extends Module {
} }
@SubscribeEvent @SubscribeEvent
public void onRenderWorld(RenderWorldEvent event) { public void onRenderWorld(Render3DEvent event) {
if (mc.player == null || mc.world == null) return; if (mc.player == null || mc.world == null) return;
if (mc.player.age % interval.getIntValue() == 0) { if (mc.player.age % interval.getIntValue() == 0) {
blocks = findExposedBlocks( blocks = findExposedBlocks(
@@ -65,7 +71,8 @@ public class LightOverlay extends Module {
(lightColor.getB() / 15) * light, (lightColor.getB() / 15) * light,
lightColor.getA()); 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);
} }
} }
@@ -2,8 +2,8 @@ package me.retucio.sputnik.module.modules.world;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ListSetting; import me.retucio.sputnik.module.setting.settings.ListSetting;
import me.retucio.sputnik.util.Lists; import me.retucio.sputnik.util.Lists;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@@ -11,8 +11,8 @@ import net.minecraft.registry.tag.ItemTags;
public class NoMiningInterruptions extends Module { public class NoMiningInterruptions extends Module {
public BooleanSetting withPickaxeOnly = addSetting(new BooleanSetting("solo con pico", "ignorar entidades solamente cuando se sujeta un pico", false)); public BooleanSetting withPickaxeOnly = sgGeneral.add(new BooleanSetting("solo con pico", "ignorar entidades solamente cuando se sujeta un pico", false));
public ListSetting<EntityType<?>> entities = addSetting(new ListSetting<>("entidades", "entidades a ignorar", public ListSetting<EntityType<?>> entities = sgGeneral.add(new ListSetting<>("entidades", "entidades a ignorar",
Lists.entityList, Lists.allTrue(Lists.entityList), Lists.entityNames)); Lists.entityList, Lists.allTrue(Lists.entityList), Lists.entityNames));
public NoMiningInterruptions() { public NoMiningInterruptions() {
@@ -4,20 +4,24 @@ import me.retucio.sputnik.event.SubscribeEvent;
import me.retucio.sputnik.event.events.PacketEvent; import me.retucio.sputnik.event.events.PacketEvent;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.module.settings.EnumSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.EnumSetting;
import me.retucio.sputnik.module.setting.settings.NumberSetting;
import net.minecraft.network.packet.s2c.play.WorldTimeUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.WorldTimeUpdateS2CPacket;
// continúa en ClientWorldPropertiesMixin, DimensionTypeMixin, // continúa en ClientWorldPropertiesMixin, DimensionTypeMixin,
public class TimeChanger extends Module { public class TimeChanger extends Module {
public BooleanSetting renderSun = addSetting(new BooleanSetting("sol", "que haya sol o no", true)); SettingGroup sgCelestialBodies = addSg(new SettingGroup("cuerpos celeste", false));
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));
public EnumSetting<MoonPhases> moonPhase = addSetting(new EnumSetting<>("fase lunar", "fase lunar actual", MoonPhases.class, MoonPhases.DEFAULT)); public NumberSetting time = sgGeneral.add(new NumberSetting("hora", "hora del juego", 0, -20000, 20000, 1));
public NumberSetting time = addSetting(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<MoonPhases> moonPhase = sgCelestialBodies.add(new EnumSetting<>("fase lunar", "fase lunar actual", MoonPhases.class, MoonPhases.DEFAULT));
public TimeChanger() { public TimeChanger() {
super("cielo custom", super("cielo custom",
@@ -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.Sputnik;
import me.retucio.sputnik.event.events.sputnik.UpdateSettingEvent; import me.retucio.sputnik.event.events.sputnik.UpdateSettingEvent;
@@ -13,7 +13,7 @@ public abstract class Setting {
private boolean visible = true; private boolean visible = true;
private boolean searchMatch = true; private boolean searchMatch = true;
private Module module; private SettingGroup sg;
protected Setting(String name, String description) { protected Setting(String name, String description) {
this.name = name; this.name = name;
@@ -44,15 +44,21 @@ public abstract class Setting {
return description; return description;
} }
public Module getModule() { public SettingGroup getSg() {
return module; return sg;
} }
public void setModule(Module module) { public void setSg(SettingGroup sg) {
this.module = module; this.sg = sg;
} }
public void fireUpdateEvent() { public void fireUpdateEvent() {
Sputnik.EVENT_BUS.post(new UpdateSettingEvent(this, module.shouldSaveSettings())); Sputnik.EVENT_BUS.post(
new UpdateSettingEvent(
this,
sg.getModule()
.shouldSaveSettings()
)
);
} }
} }
@@ -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<Setting> {
private Module module;
private final String name;
private boolean extended;
final List<Setting> settings = new ArrayList<>(1);
public SettingGroup(String name, boolean extended) {
this.name = name;
this.extended = extended;
}
@Override
public @NotNull Iterator<Setting> iterator() {
return settings.iterator();
}
public <S extends Setting> S add(S setting) {
setting.setSg(this);
settings.add(setting);
return setting;
}
@SafeVarargs
public final <S extends Setting> 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;
}
}
@@ -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; import java.util.function.Consumer;
@@ -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 me.retucio.sputnik.util.Colors;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -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.Arrays;
import java.util.List; import java.util.List;
@@ -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.Module;
import me.retucio.sputnik.module.ModuleManager; 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.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.util.ChatUtil; import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.KeyUtil; import me.retucio.sputnik.util.KeyUtil;
@@ -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.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -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; import java.util.function.Consumer;
@@ -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.List;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
public class OptionSetting<T> extends Setting{ public class OptionSetting<T> extends Setting {
private final List<T> options; private final List<T> options;
private Map<T, String> displayNames; private Map<T, String> displayNames;
@@ -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; import java.util.function.Consumer;
@@ -7,8 +7,8 @@ import me.retucio.sputnik.event.events.MouseClickEvent;
import me.retucio.sputnik.event.events.MouseScrollEvent; import me.retucio.sputnik.event.events.MouseScrollEvent;
import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent; import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.Setting; import me.retucio.sputnik.module.setting.Setting;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.ui.widgets.buttons.settings.ListButton; import me.retucio.sputnik.ui.widgets.buttons.settings.ListButton;
import me.retucio.sputnik.ui.widgets.buttons.ModuleButton; import me.retucio.sputnik.ui.widgets.buttons.ModuleButton;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
@@ -233,15 +233,17 @@ public class ClickGUI extends Screen {
continue; continue;
} }
String name = setting.getName(); String name = MiscUtil.removeAccentMarks(setting.getName());
String description = setting.getDescription(); String description = MiscUtil.removeAccentMarks(setting.getDescription());
String sgName = MiscUtil.removeAccentMarks(setting.getSg().getName());
if (!guiSettings.matchCase.isEnabled()) { if (!guiSettings.matchCase.isEnabled()) {
name = name.toLowerCase(); name = name.toLowerCase();
description = description.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 // abrir un marco donde se encuentran los ajustes del módulo deseado
public void openSettingsFrame(Module module, int x, int y) { public void openSettingsFrame(Module module, int x, int y) {
for (SettingsFrame frame : settingsFrames) { for (SettingsFrame frame : settingsFrames) {
if (frame.module == module) { if (frame.getModule() == module) {
frame.setX(x); frame.setX(x);
frame.setY(y); frame.setY(y);
return; return;
@@ -275,7 +277,7 @@ public class ClickGUI extends Screen {
List<SettingsFrame> toRemove = new ArrayList<>(); List<SettingsFrame> toRemove = new ArrayList<>();
for (SettingsFrame sf : settingsFrames) { for (SettingsFrame sf : settingsFrames) {
if ((sf instanceof ColorPickerFrame cpf && cpf.dummyModule == module) // para los selectores de colores 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); toRemove.add(sf);
Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Close(sf)); Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Close(sf));
unselect(sf); unselect(sf);
@@ -288,7 +290,7 @@ public class ClickGUI extends Screen {
// verificar si un módulo tiene su marco de ajustes abierto // verificar si un módulo tiene su marco de ajustes abierto
public boolean isSettingsFrameOpen(Module module) { public boolean isSettingsFrameOpen(Module module) {
return settingsFrames.stream() return settingsFrames.stream()
.anyMatch(sf -> sf.module.getName().equals(module.getName())); .anyMatch(sf -> sf.getModule().getName().equals(module.getName()));
} }
public boolean isColorPickerFrameOpen(ColorSetting setting) { public boolean isColorPickerFrameOpen(ColorSetting setting) {
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons; 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.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.Button; import me.retucio.sputnik.ui.widgets.Button;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
@@ -24,6 +24,12 @@ public abstract class SettingButton<S extends Setting> extends Button {
ctx.drawTooltip(Text.of(setting.getDescription()), mouseX, mouseY + 20); 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() { public S getSetting() {
return setting; return setting;
} }
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame; import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
@@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.OptionSetting; import me.retucio.sputnik.module.setting.settings.OptionSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
@@ -99,7 +99,7 @@ public class ChooseButton<T> extends SettingButton<OptionSetting<T>> {
} }
}); });
dummy.addSetting(b); dummy.getSg("general").add(b);
optionButtons.put(option, b); optionButtons.put(option, b);
}); });
} }
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -28,6 +28,7 @@ public class ColorButton extends SettingButton<ColorSetting> {
Color bgColor = isHovered(mouseX, mouseY) Color bgColor = isHovered(mouseX, mouseY)
? Colors.buttonColor.brighter() ? Colors.buttonColor.brighter()
: Colors.buttonColor; : Colors.buttonColor;
ctx.fill(x, y, x + w, y + h, bgColor.getRGB()); ctx.fill(x, y, x + w, y + h, bgColor.getRGB());
// prev. del color // prev. del color
@@ -55,7 +56,7 @@ public class ColorButton extends SettingButton<ColorSetting> {
if (button == 0) { if (button == 0) {
// clic izq.: abrir selector de colores // clic izq.: abrir selector de colores
ClickGUI.INSTANCE.openColorPickerFrame( ClickGUI.INSTANCE.openColorPickerFrame(
setting.getModule(), setting, setting.getSg().getModule(), setting,
parent.getX() + parent.getW() + 120, parent.getX() + parent.getW() + 120,
parent.getRenderY() + offset); parent.getRenderY() + offset);
} else if (button == 1 && KeyUtil.isShiftDown()) { } else if (button == 1 && KeyUtil.isShiftDown()) {
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ListSetting; import me.retucio.sputnik.module.setting.settings.ListSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -90,7 +90,7 @@ public class ListButton<T> extends SettingButton<ListSetting<T>> {
.sorted(Comparator.comparing(setting::getDisplayName, String.CASE_INSENSITIVE_ORDER)) .sorted(Comparator.comparing(setting::getDisplayName, String.CASE_INSENSITIVE_ORDER))
.forEach(option -> { .forEach(option -> {
String displayName = setting.getDisplayName(option); String displayName = setting.getDisplayName(option);
BooleanSetting b = dummy.addSetting(new BooleanSetting( BooleanSetting b = dummy.getSg("general").add(new BooleanSetting(
displayName, displayName,
"incluir " + displayName, "incluir " + displayName,
setting.isEnabled(option) setting.isEnabled(option)
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets.buttons.settings; 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.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame; import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
@@ -3,7 +3,8 @@ package me.retucio.sputnik.ui.widgets.frames;
import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent; import me.retucio.sputnik.event.events.sputnik.SettingsFrameEvent;
import me.retucio.sputnik.module.Module; 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.widgets.buttons.settings.*;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.buttons.*; 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 // marco para los botones de los ajustes de cada módulo
public class SettingsFrame extends Frame<SettingButton<? extends Setting>> { public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
public Module module; private Module module;
protected List<SettingGroup> settingGroups;
private static final int PADDING = 4; // para ser consistente
public SettingsFrame(Module module, int x, int y, int w, int h) { public SettingsFrame(Module module, int x, int y, int w, int h) {
super("ajustes de " + module.getName(), x, y, w, h); super("ajustes de " + module.getName(), x, y, w, h);
this.module = module; this.module = module;
this.settingGroups = module.getSgs();
// asegurarse de que no se sale de la pantalla addButtonsByGroups();
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();
visibleButtons = buttons.stream() visibleButtons = buttons.stream()
.filter(sb -> sb.getSetting().isVisible()) .filter(sb -> sb.getSetting().isVisible())
@@ -46,7 +44,7 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
// cabezal // cabezal
int centerX = x + w / 2; int centerX = x + w / 2;
int centerY = renderY + h / 2; int centerY = renderY + h / 2;
int titleX = x + 8; int titleX = x + 2 * PADDING;
int titleY = centerY - mc.textRenderer.fontHeight / 2; int titleY = centerY - mc.textRenderer.fontHeight / 2;
int headerColor = module.isEnabled() int headerColor = module.isEnabled()
@@ -57,31 +55,96 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
? Color.RED.getRGB() ? Color.RED.getRGB()
: -1; : -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.fill(x, renderY, x + w, renderY + h, headerColor);
ctx.drawText(mc.textRenderer, title, titleX, titleY, -1, true); 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() visibleButtons = buttons.stream()
.filter(sb -> sb.getSetting().isVisible() && sb.getSetting().isSearchMatch()) .filter(sb -> sb.getSetting().isVisible() && sb.getSetting().isSearchMatch())
.toList(); .toList();
// descripción // descripción
List<String> descLines = wrapDescription(module.getDescription(), w - 8); List<String> descLines = wrapDescription(module.getDescription(), w - 2 * PADDING);
int lineSpacing = 2; int lineSpacing = 2;
int descHeight = descLines.size() * mc.textRenderer.fontHeight + (descLines.size() - 1) * lineSpacing; int descHeight = descLines.size() * mc.textRenderer.fontHeight + (descLines.size() - 1) * lineSpacing;
int descBoxTop = renderY + h + 5; int descBoxTop = renderY + h + PADDING;
int descBoxBottom = descBoxTop + descHeight + 8; 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()); // obtener valores de altura y tal
ctx.fill(x + 4, descBoxTop, x + w - 4, descBoxBottom, Colors.buttonColor.getRGB()); for (SettingGroup group : settingGroups) {
if (hasVisibleSettingsInGroup(group)) {
totalHeight += h + PADDING;
if (group.isExtended()) {
List<SettingButton<?>> 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<SettingButton<?>> 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; int firstLineY = descBoxTop + ((descBoxBottom - descBoxTop) - descHeight) / 2;
for (int i = 0; i < descLines.size(); i++) { for (int i = 0; i < descLines.size(); i++) {
String line = descLines.get(i); String line = descLines.get(i);
@@ -89,16 +152,6 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
int lineY = firstLineY + i * (mc.textRenderer.fontHeight + lineSpacing); int lineY = firstLineY + i * (mc.textRenderer.fontHeight + lineSpacing);
ctx.drawText(mc.textRenderer, line, lineX, lineY, -1, true); 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 @Override
@@ -113,7 +166,8 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
if (isCloseButtonHovered(mouseX, mouseY)) { if (isCloseButtonHovered(mouseX, mouseY)) {
ClickGUI.INSTANCE.closeSettingsFrame(this.module); ClickGUI.INSTANCE.closeSettingsFrame(this.module);
return; return;
} if (button == 0) { }
if (button == 0) {
dragging = true; dragging = true;
dragX = mouseX - x; dragX = mouseX - x;
dragY = mouseY - y; dragY = mouseY - y;
@@ -122,8 +176,19 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
} }
} }
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); sb.mouseClicked(mouseX, mouseY, button);
}
} }
@Override @Override
@@ -132,8 +197,9 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
if (button == 0) { if (button == 0) {
dragging = false; dragging = false;
if (isHovered(mouseX, mouseY)) if (isHovered(mouseX, mouseY)) {
Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Move(this)); Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Move(this));
}
} }
for (SettingButton<?> sb : visibleButtons) for (SettingButton<?> sb : visibleButtons)
@@ -166,6 +232,12 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
int textWidth = mc.textRenderer.getWidth(text); int textWidth = mc.textRenderer.getWidth(text);
maxWidth = Math.max(maxWidth, textWidth); 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; this.w = maxWidth + 30;
} }
@@ -176,6 +248,109 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
} }
} }
public int getGroupHeaderY(int groupIndex) {
int currentY = renderY + h + PADDING;
List<String> 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<SettingButton<?>> 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<SettingButton<?>> getButtonsForGroup(SettingGroup group) {
List<SettingButton<?>> 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<String> wrapDescription(String text, int maxWidth) { private List<String> wrapDescription(String text, int maxWidth) {
List<String> lines = new ArrayList<>(); List<String> lines = new ArrayList<>();
@@ -186,7 +361,7 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
for (String word : words) { for (String word : words) {
String testLine = line.isEmpty() ? word : line + " " + word; 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()); if (!line.isEmpty()) lines.add(line.toString());
line = new StringBuilder(word); line = new StringBuilder(word);
} else { } else {
@@ -197,56 +372,29 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting>> {
return lines; 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) { public void addButton(SettingButton<?> button) {
buttons.add(button); buttons.add(button);
updateWidth(); // actualizar anchura del frame tras cada iteración updateWidth(); // actualizar anchura del frame tras cada iteración
} }
protected boolean isCloseButtonHovered(double mouseX, double mouseY) { protected boolean isCloseButtonHovered(double mouseX, double mouseY) {
return mouseX > x + w - mc.textRenderer.getWidth("×") - 12 && mouseX < x + w - 4 return mouseX > x + w - mc.textRenderer.getWidth("×") - 3 * PADDING && mouseX < x + w - PADDING
&& mouseY > renderY + 4 && mouseY < renderY + h - 4; && mouseY > renderY + PADDING && mouseY < renderY + h - PADDING;
}
public Module getModule() {
return module;
}
public void setModule(Module module) {
this.module = module;
}
public List<SettingGroup> getSettingGroups() {
return settingGroups;
}
public void setSettingGroups(List<SettingGroup> settingGroups) {
this.settingGroups = settingGroups;
} }
} }
@@ -3,6 +3,7 @@ package me.retucio.sputnik.ui.widgets.frames.settings;
import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.events.sputnik.GUISettingsFrameEvent; import me.retucio.sputnik.event.events.sputnik.GUISettingsFrameEvent;
import me.retucio.sputnik.module.modules.client.GUI; 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.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGUI; import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton; import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
@@ -24,6 +25,13 @@ public class ClientSettingsFrame extends SettingsFrame {
@Override @Override
public void render(DrawContext ctx, int mouseX, int mouseY, float delta) { public void render(DrawContext ctx, int mouseX, int mouseY, float delta) {
updateWidth(); 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.fill(x, renderY, x + w, renderY + h, Colors.mainColor.getRGB());
ctx.drawText(mc.textRenderer, title, ctx.drawText(mc.textRenderer, title,
@@ -36,25 +44,6 @@ public class ClientSettingsFrame extends SettingsFrame {
renderY + (h / 2) - (mc.textRenderer.fontHeight / 2), renderY + (h / 2) - (mc.textRenderer.fontHeight / 2),
-1, true); -1, true);
List<SettingButton<?>> 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 @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 // solo dejar clicar en los ajustes si el marco está extendido
for (SettingButton<?> settingButton : buttons) if (!extended) return;
settingButton.mouseClicked(mouseX, mouseY, button);
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 @Override
@@ -2,10 +2,10 @@ package me.retucio.sputnik.ui.widgets.frames.settings;
import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.settings.Setting; import me.retucio.sputnik.module.setting.Setting;
import me.retucio.sputnik.module.settings.BooleanSetting; import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.settings.ColorSetting; import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.module.settings.NumberSetting; import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.ui.widgets.buttons.*; import me.retucio.sputnik.ui.widgets.buttons.*;
import me.retucio.sputnik.ui.widgets.buttons.settings.SliderButton; import me.retucio.sputnik.ui.widgets.buttons.settings.SliderButton;
import me.retucio.sputnik.ui.widgets.buttons.settings.ToggleButton; import me.retucio.sputnik.ui.widgets.buttons.settings.ToggleButton;
@@ -75,7 +75,7 @@ public class ColorPickerFrame extends SettingsFrame {
brightnessSetting.setDefaultValue(colorSetting.getDefaultBrightness()); brightnessSetting.setDefaultValue(colorSetting.getDefaultBrightness());
// añadir ajustes y tal // 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()) { for (Setting setting : dummyModule.getSettings()) {
if (setting instanceof NumberSetting n) n.onUpdate(v -> updateColorFromSettings()); if (setting instanceof NumberSetting n) n.onUpdate(v -> updateColorFromSettings());
if (setting instanceof BooleanSetting b) b.onUpdate(v -> updateColorFromSettings()); if (setting instanceof BooleanSetting b) b.onUpdate(v -> updateColorFromSettings());
@@ -92,8 +92,8 @@ public class ColorPickerFrame extends SettingsFrame {
buttons.clear(); buttons.clear();
Module originalModule = this.module; Module originalModule = this.getModule();
this.module = dummyModule; this.setModule(dummyModule);
// añadir botones // añadir botones
int offset = h; int offset = h;
@@ -111,7 +111,7 @@ public class ColorPickerFrame extends SettingsFrame {
} }
} }
this.module = originalModule; this.setModule(originalModule);
} }
+3
View File
@@ -1,5 +1,7 @@
accessWidener v2 named accessWidener v2 named
accessible class net/minecraft/client/MinecraftClient$LoadingContext
accessible field net/minecraft/client/texture/TextureManager textures Ljava/util/Map; accessible field net/minecraft/client/texture/TextureManager textures Ljava/util/Map;
accessible method net/minecraft/network/ClientConnection handleQueuedTasks ()V 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/network/ClientCommonNetworkHandler$ConfirmServerResourcePackScreen$Pack
accessible class net/minecraft/client/font/TextRenderer$Drawer 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/Entity setFlag (IZ)V
accessible method net/minecraft/entity/player/PlayerEntity canGlide ()Z accessible method net/minecraft/entity/player/PlayerEntity canGlide ()Z