This commit is contained in:
retuci0 committed 2026-05-04 19:12:16 +02:00
1 parent 65afbf6ae6
commit c7b8e96d68
65 files changed
+502 -480

No files matched your search

+2 -2
View File
@@ -1,6 +1,6 @@
# jenny's mod 2 100% real
mod para Minecraft Fabric 26.1 que añade algunas cosas QOL, mayormente relacionadas a la cámara.
mod para Minecraft Fabric 26.1.2 que añade algunas cosas QOL, mayormente relacionadas a la cámara.
## instalación
@@ -23,7 +23,7 @@ es posible que haya problemas al usarlo junto a otros mods, especialmente junto
`shift derecho` por defecto para abrir la interfaz
`pág. arriba` por defecto para abrir el editor del hud
`insertar` por defecto para abrir el editor del hud
`$` como prefijo por defecto para comandos (se autocompletan)
+5 -5
View File
@@ -1,4 +1,4 @@
# v4.5
# v4.6
## novedades
@@ -8,14 +8,14 @@
### arreglos / mejoras
- zoom ahora ya sí que ya funciona
- arreglado el movimiento laggy de cámara libre
- las cabezas de chatplus ya se renderizan correctamente
- el editor del hud por defecto ahora se abre con `insertar` (no confundir con `enter`)
- renombrado todos los `frame`s a `panel`s
- `colocar en aire` ya funciona correctamente
- `delay de paquetes` no _debería_ de crashear el juego ya
## problemas reconocidos
- lo de siempre, además de:
- `colocar en aire` no funciona si el bloque está muy cerca, aunque no colisione con el jugador
- `delay de paquetes` puede crashear el juego
- `inventario plus` no funciona en creativo
- `RPC de Discord` no funciona e incluso puede provocar crashes
+1 -1
View File
@@ -10,6 +10,6 @@ discord_rpc_version=1.0.3
neutrino_version=1.1.0
jdk_version=25
mod_version=4.5
mod_version=4.6
maven_group=me.retucio
archives_base_name=sputnik
+19 -19
View File
@@ -11,23 +11,23 @@ import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.event.ShutdownEvent;
import me.retucio.sputnik.event.interact.OpenScreenEvent;
import me.retucio.sputnik.event.sputnik.LoadCapeManagerEvent;
import me.retucio.sputnik.event.sputnik.LoadClickGUIEvent;
import me.retucio.sputnik.event.sputnik.LoadClickGuiEvent;
import me.retucio.sputnik.event.sputnik.LoadCommandManagerEvent;
import me.retucio.sputnik.event.sputnik.LoadModuleManagerEvent;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.HudRenderer;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.hud.HudEditorScreen;
import me.retucio.sputnik.ui.screen.UpdateScreen;
import me.retucio.sputnik.ui.widgets.buttons.settings.BindButton;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.buttons.settings.TextButton;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.widgets.Button;
import me.retucio.sputnik.util.*;
@@ -113,9 +113,9 @@ public class Sputnik implements ClientModInitializer {
mc.execute(() -> {
Textures.init();
ClickGUI.INSTANCE = new ClickGUI();
ClickGui.INSTANCE = new ClickGui();
HudEditorScreen.INSTANCE = new HudEditorScreen();
EVENT_BUS.post(new LoadClickGUIEvent());
EVENT_BUS.post(new LoadClickGuiEvent());
HudRenderer.init();
});
@@ -134,7 +134,7 @@ public class Sputnik implements ClientModInitializer {
}
ModuleManager.INSTANCE.getEnabledModules().forEach(Module::onTick);
mc.getWindow().setTitle(ClientSettingsFrame.guiSettings.windowTitle.getValue());
mc.getWindow().setTitle(ClientSettingsPanel.clientSettings.windowTitle.getValue());
}
@@ -143,8 +143,8 @@ public class Sputnik implements ClientModInitializer {
// prevenir interrumpir combos de F3
if (key == GLFW.GLFW_KEY_F3) return;
boolean anyFocused = isAnySettingButtonFocused() || ClickGUI.INSTANCE.getSearchBar().isFocused();
ClickGUI.INSTANCE.setAnyFocused(anyFocused);
boolean anyFocused = isAnySettingButtonFocused() || ClickGui.INSTANCE.getSearchBar().isFocused();
ClickGui.INSTANCE.setAnyFocused(anyFocused);
if (action != GLFW.GLFW_RELEASE) {
if (BindCommand.onKeyPress(key)) return;
@@ -164,7 +164,7 @@ public class Sputnik implements ClientModInitializer {
// verifica si algún botón de ajustes está escuchando
private boolean isAnySettingButtonFocused() {
for (SettingsFrame sf : ClickGUI.INSTANCE.getSettingsFrames())
for (SettingsPanel sf : ClickGui.INSTANCE.getSettingsPanels())
for (Button sb : sf.getButtons())
if ((sb instanceof BindButton b && b.isFocused()) || (sb instanceof TextButton t && t.isFocused()))
return true;
@@ -173,7 +173,7 @@ public class Sputnik implements ClientModInitializer {
// se ocupa de la lógica de encendido y apagado de los módulos
private void handleModuleToggle(int key, boolean anyFocused) {
if (mc.screen != null && mc.screen != ClickGUI.INSTANCE) return;
if (mc.screen != null && mc.screen != ClickGui.INSTANCE) return;
for (Module module : ModuleManager.INSTANCE.getModules()) {
if (key != module.getKey() || anyFocused || KeyUtil.isKeyDown(GLFW.GLFW_KEY_F3)) continue; // evitar interrumpir combinaciones de teclas del F3
@@ -187,7 +187,7 @@ public class Sputnik implements ClientModInitializer {
// se ocupa de hacer los botones de ajustes que lo necesiten escuchar teclas
private void handleSettingButtonsKey(int key, int action) {
for (SettingsFrame sf : ClickGUI.INSTANCE.getSettingsFrames()) {
for (SettingsPanel sf : ClickGui.INSTANCE.getSettingsPanels()) {
for (SettingButton<?> sb : sf.getButtons()) {
if (sb instanceof BindButton bb) bb.onKey(key, action);
if (sb instanceof TextButton tb) tb.onKey(key, action);
@@ -197,21 +197,21 @@ public class Sputnik implements ClientModInitializer {
// maneja la lógica de apertura de la interfaz
private void handleClickGUIKey(int key, boolean anyFocused) {
if (key != ClientSettingsFrame.guiSettings.getKey() || anyFocused || isOnTypingScreen())
if (key != ClientSettingsPanel.clientSettings.getKey() || anyFocused || isOnTypingScreen())
return;
if (mc.screen != ClickGUI.INSTANCE) {
if (mc.screen != ClickGui.INSTANCE) {
prevScreen = mc.screen;
mc.setScreen(ClickGUI.INSTANCE);
mc.setScreen(ClickGui.INSTANCE);
} else {
ClickGUI.INSTANCE.onClose();
ClickGui.INSTANCE.onClose();
mc.setScreen(prevScreen);
}
}
// manejar la lógica de apertura del editor de elementos del hud, con la misma lógica que handleClickGUIKey()
private void handleHudEditorKey(int key, boolean anyFocused) {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
if (key != hud.editorKey.getValue() || anyFocused || isOnTypingScreen()) return;
if (mc.screen != HudEditorScreen.INSTANCE) {
@@ -229,7 +229,7 @@ public class Sputnik implements ClientModInitializer {
// se ocupa de apagar los módulos que tengan configurado hacerlo tras soltar su tecla
private void handleModuleRelease(int key) {
if (mc.screen != null && mc.screen != ClickGUI.INSTANCE) return;
if (mc.screen != null && mc.screen != ClickGui.INSTANCE) return;
for (Module module : ModuleManager.INSTANCE.getEnabledModules())
if (module.shouldToggleOnBindRelease() && key == module.getKey())
@@ -5,7 +5,7 @@ import me.retucio.sputnik.command.Command;
import me.retucio.sputnik.command.args.ModuleArgumentType;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.settings.KeySetting;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.ChatFormatting;
@@ -51,13 +51,13 @@ public class BindCommand extends Command {
if (listeningModule == null) return false;
KeySetting bind = listeningModule.getBind();
if (ClientSettingsFrame.guiSettings.multipleKeybinds.getValue()) {
if (ClientSettingsPanel.clientSettings.multipleKeybinds.getValue()) {
List<KeyMapping> keys = new ArrayList<>(List.of(mc.options.keyMappings));
keys.removeAll(List.of(mc.options.debugKeys));
for (KeyMapping kb : keys) {
boolean keyAlreadyBound = kb.matches(new KeyEvent(key, 0, 0));
boolean allowMultiple = ClientSettingsFrame.guiSettings.multipleKeybinds.getValue();
boolean allowMultiple = ClientSettingsPanel.clientSettings.multipleKeybinds.getValue();
if (keyAlreadyBound && !allowMultiple) {
ChatUtil.warn("esa tecla ya está cogida por "
@@ -5,8 +5,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import me.retucio.sputnik.command.Command;
import me.retucio.sputnik.command.args.ModuleArgumentType;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import net.minecraft.commands.SharedSuggestionProvider;
import me.retucio.sputnik.module.Module;
@@ -40,27 +40,27 @@ public class ConfigCommand extends Command {
private void openSf(CommandContext<SharedSuggestionProvider> ctx) {
Module module = ctx.getArgument("módulo", Module.class);
mc.setScreen(ClickGUI.INSTANCE);
mc.setScreen(ClickGui.INSTANCE);
if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) return;
if (ClickGui.INSTANCE.isSettingsPanelOpen(module)) return;
SettingsFrame sf = ClickGUI.INSTANCE.getSfOfModule(module);
SettingsPanel sf = ClickGui.INSTANCE.getSettingsPanelOfModule(module);
int x = mc.getWindow().getGuiScaledWidth() / 2 - sf.getW() / 2;
int y = 67;
ClickGUI.INSTANCE.openSettingsFrame(module, x, y);
ClickGui.INSTANCE.openSettingsPanel(module, x, y);
}
private void openSfWithPos(CommandContext<SharedSuggestionProvider> ctx, int x, int y) {
Module module = ctx.getArgument("módulo", Module.class);
mc.setScreen(ClickGUI.INSTANCE);
mc.setScreen(ClickGui.INSTANCE);
if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) {
SettingsFrame sf = ClickGUI.INSTANCE.getSfOfModule(module);
if (ClickGui.INSTANCE.isSettingsPanelOpen(module)) {
SettingsPanel sf = ClickGui.INSTANCE.getSettingsPanelOfModule(module);
sf.setX(x);
sf.setY(y);
}
ClickGUI.INSTANCE.openSettingsFrame(module, x, y);
ClickGui.INSTANCE.openSettingsPanel(module, x, y);
}
}
@@ -3,7 +3,7 @@ package me.retucio.sputnik.command.commands;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import me.retucio.sputnik.command.Command;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.util.ChatUtil;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.SharedSuggestionProvider;
@@ -21,7 +21,7 @@ public class PrefixCommand extends Command {
builder
.then(argument("prefijo", StringArgumentType.word()).executes(ctx -> {
String prefix = ctx.getArgument("prefijo", String.class);
ClientSettingsFrame.guiSettings.commandPrefix.setValue(prefix);
ClientSettingsPanel.clientSettings.commandPrefix.setValue(prefix);
ChatUtil.info(Component.literal("prefijo cambiado a " + ChatFormatting.AQUA + prefix));
return SUCCESS;
}));
@@ -3,10 +3,7 @@ package me.retucio.sputnik.command.commands;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import me.retucio.sputnik.command.Command;
import me.retucio.sputnik.command.CommandManager;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.util.ChatUtil;
import net.minecraft.commands.SharedSuggestionProvider;
@@ -31,8 +31,8 @@ public class BinarySerializer {
// mapas
writeStringBooleanMap(out, config.moduleStates);
writeSettingsMap(out, config.settings);
writeStringIntArrayMap(out, config.settingsFrames);
writeExtendableFrames(out, config.extendableFrames);
writeStringIntArrayMap(out, config.settingsPanels);
writeExtendableFrames(out, config.extendablePanels);
writeStringIntArrayMap(out, config.hudPositions);
writeStringBooleanMap(out, config.hudVisibilities);
writeStringStringMap(out, config.hudImagePaths);
@@ -77,8 +77,8 @@ public class BinarySerializer {
// leer mapas
config.moduleStates = readStringBooleanMap(in);
config.settings = readSettingsMap(in);
config.settingsFrames = readStringIntArrayMap(in);
config.extendableFrames = readExtendableFrames(in);
config.settingsPanels = readStringIntArrayMap(in);
config.extendablePanels = readExtendablePanels(in);
config.hudPositions = readStringIntArrayMap(in);
config.hudVisibilities = readStringBooleanMap(in);
config.hudImagePaths = readStringStringMap(in);
@@ -281,32 +281,32 @@ public class BinarySerializer {
return map;
}
private static void writeExtendableFrames(DataOutputStream out, Map<String, ClientConfig.FrameData> map)
private static void writeExtendableFrames(DataOutputStream out, Map<String, ClientConfig.PanelData> map)
throws IOException {
if (map == null) {
out.writeInt(0);
return;
}
out.writeInt(map.size());
for (Map.Entry<String, ClientConfig.FrameData> entry : map.entrySet()) {
for (Map.Entry<String, ClientConfig.PanelData> entry : map.entrySet()) {
writeString(out, entry.getKey());
ClientConfig.FrameData data = entry.getValue();
ClientConfig.PanelData data = entry.getValue();
out.writeInt(data.x());
out.writeInt(data.y());
out.writeBoolean(data.extended());
}
}
private static Map<String, ClientConfig.FrameData> readExtendableFrames(DataInputStream in)
private static Map<String, ClientConfig.PanelData> readExtendablePanels(DataInputStream in)
throws IOException {
int size = in.readInt();
Map<String, ClientConfig.FrameData> map = new HashMap<>(size);
Map<String, ClientConfig.PanelData> map = new HashMap<>(size);
for (int i = 0; i < size; i++) {
String key = readString(in);
int x = in.readInt();
int y = in.readInt();
boolean extended = in.readBoolean();
map.put(key, new ClientConfig.FrameData(x, y, extended));
map.put(key, new ClientConfig.PanelData(x, y, extended));
}
return map;
}
@@ -3,7 +3,7 @@ package me.retucio.sputnik.config;
import com.github.retucio.neutrino.EventListener;
import me.retucio.sputnik.event.sputnik.*;
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.Serializable;
@@ -23,10 +23,10 @@ public class ClientConfig {
public Map<String, Object> settings = new HashMap<>();
// nombre del módulo -> posición (x, y)
public Map<String, int[]> settingsFrames = new HashMap<>();
public Map<String, int[]> settingsPanels = new HashMap<>();
// nombre del frame -> FrameData (que contiene extended, x & y)
public Map<String, FrameData> extendableFrames = new HashMap<>();
public Map<String, PanelData> extendablePanels = new HashMap<>();
// id del elemento del hud -> posición (x, y)
public Map<String, int[]> hudPositions = new HashMap<>();
@@ -34,7 +34,7 @@ public class ClientConfig {
// id del elemento del hud -> true: visible / false: no visible
public Map<String, Boolean> hudVisibilities = new HashMap<>();
// id del elemento del hud -> ruta de la imagen (NEW)
// id del elemento del hud -> ruta de la imagen
public Map<String, String> hudImagePaths = new HashMap<>();
// posición de la barra de búsqueda (x, y)
@@ -72,55 +72,55 @@ public class ClientConfig {
}
@EventListener
public void onOpenSettingsFrame(SettingsFrameEvent.Open event) {
ConfigManager.setFramePosition(event.getFrame());
public void onOpenSettingsPanel(SettingsPanelEvent.Open event) {
ConfigManager.setPanelPosition(event.getPanel());
}
@EventListener
public void onCloseSettingsFrame(SettingsFrameEvent.Close event) {
settingsFrames.remove(event.getFrame().getModule().getName());
public void onCloseSettingsPanel(SettingsPanelEvent.Close event) {
settingsPanels.remove(event.getPanel().getModule().getName());
ConfigManager.save();
}
@EventListener
public void onMoveSettingsFrame(SettingsFrameEvent.Move event) {
settingsFrames.replace(event.getFrame().getModule().getName(), new int[]{event.getFrame().getX(), event.getFrame().getY()});
public void onMoveSettingsPanel(SettingsPanelEvent.Move event) {
settingsPanels.replace(event.getPanel().getModule().getName(), new int[]{event.getPanel().getX(), event.getPanel().getY()});
ConfigManager.save();
}
@EventListener
public void onExtendModuleFrame(ModuleFrameEvent.Extend event) {
extendableFrames.put("M", new FrameData(
ClickGUI.INSTANCE.getModulesFrame().getX(),
ClickGUI.INSTANCE.getModulesFrame().getY(),
ClickGUI.INSTANCE.getModulesFrame().extended));
public void onExtendModulePanel(ModulePanelEvent.Extend event) {
extendablePanels.put("M", new PanelData(
ClickGui.INSTANCE.getModulesPanel().getX(),
ClickGui.INSTANCE.getModulesPanel().getY(),
ClickGui.INSTANCE.getModulesPanel().extended));
}
@EventListener
public void onMoveModuleFrame(ModuleFrameEvent.Move event) {
extendableFrames.replace("M", new FrameData(
ClickGUI.INSTANCE.getModulesFrame().getX(),
ClickGUI.INSTANCE.getModulesFrame().getY(),
ClickGUI.INSTANCE.getModulesFrame().extended));
public void onMoveModulePanel(ModulePanelEvent.Move event) {
extendablePanels.replace("M", new PanelData(
ClickGui.INSTANCE.getModulesPanel().getX(),
ClickGui.INSTANCE.getModulesPanel().getY(),
ClickGui.INSTANCE.getModulesPanel().extended));
}
@EventListener
public void onExtendGUISettingsFrame(GUISettingsFrameEvent.Extend event) {
extendableFrames.put("S", new FrameData(
ClickGUI.INSTANCE.getGuiSettingsFrame().getX(),
ClickGUI.INSTANCE.getGuiSettingsFrame().getY(),
ClickGUI.INSTANCE.getGuiSettingsFrame().extended));
public void onExtendClientSettingsPanel(ClientSettingsPanelEvent.Extend event) {
extendablePanels.put("S", new PanelData(
ClickGui.INSTANCE.getClientSettingsPanel().getX(),
ClickGui.INSTANCE.getClientSettingsPanel().getY(),
ClickGui.INSTANCE.getClientSettingsPanel().extended));
}
@EventListener
public void onMoveGUISettingsFrame(GUISettingsFrameEvent.Move event) {
extendableFrames.replace("S", new FrameData(
ClickGUI.INSTANCE.getGuiSettingsFrame().getX(),
ClickGUI.INSTANCE.getGuiSettingsFrame().getY(),
ClickGUI.INSTANCE.getGuiSettingsFrame().extended));
public void onMoveClientSettingsPanel(ClientSettingsPanelEvent.Move event) {
extendablePanels.replace("S", new PanelData(
ClickGui.INSTANCE.getClientSettingsPanel().getX(),
ClickGui.INSTANCE.getClientSettingsPanel().getY(),
ClickGui.INSTANCE.getClientSettingsPanel().extended));
}
public record FrameData(int x, int y, boolean extended) implements Serializable {
public record PanelData(int x, int y, boolean extended) implements Serializable {
@Serial private static final long serialVersionUID = 1L;
}
}
@@ -7,11 +7,11 @@ import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.setting.*;
import me.retucio.sputnik.module.setting.settings.*;
import me.retucio.sputnik.ui.widgets.Frame;
import me.retucio.sputnik.ui.widgets.frames.ModuleFrame;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.Panel;
import me.retucio.sputnik.ui.widgets.panels.ModulePanel;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import java.io.File;
import java.io.FileReader;
@@ -83,10 +83,10 @@ public class ConfigManager {
applyModuleStates();
applyModuleSettings();
applySettingsFrames();
applySettingsPanels();
applySearchBarPosition();
applyGuiSettings();
applyExtendableFrames();
applyClientSettings();
applyExtendablePanels();
loaded = true;
Sputnik.LOGGER.info("ajustes aplicados");
@@ -113,18 +113,18 @@ public class ConfigManager {
save();
}
public static void setFramePosition(SettingsFrame frame) {
public static void setPanelPosition(SettingsPanel frame) {
ensureConfig();
if (!config.settingsFrames.containsKey(frame.getModule().getName()))
config.settingsFrames.put(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()});
if (!config.settingsPanels.containsKey(frame.getModule().getName()))
config.settingsPanels.put(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()});
else
config.settingsFrames.replace(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()});
config.settingsPanels.replace(frame.getModule().getName(), new int[] {frame.getX(), frame.getY()});
save();
}
public static void setExtendableFrame(String key, ClientConfig.FrameData data) {
public static void setExtendablePanel(String key, ClientConfig.PanelData data) {
ensureConfig();
config.extendableFrames.put(key, data);
config.extendablePanels.put(key, data);
save();
}
@@ -186,8 +186,8 @@ public class ConfigManager {
Sputnik.LOGGER.info("ajustes de módulos aplicados");
}
private static void applySettingsFrames() {
config.settingsFrames.forEach((moduleName, position) -> {
private static void applySettingsPanels() {
config.settingsPanels.forEach((moduleName, position) -> {
Module module = ModuleManager.INSTANCE.getModuleByName(moduleName);
if (module == null) {
@@ -195,7 +195,7 @@ public class ConfigManager {
return;
}
ClickGUI.INSTANCE.openSettingsFrame(module, position[0], position[1]);
ClickGui.INSTANCE.openSettingsPanel(module, position[0], position[1]);
});
Sputnik.LOGGER.info("estados de marcos de ajustes aplicados");
@@ -203,44 +203,44 @@ public class ConfigManager {
private static void applySearchBarPosition() {
if (config.searchBarPosition != null && config.searchBarPosition.length == 2) {
ClickGUI.INSTANCE.getSearchBar().setX(config.searchBarPosition[0]);
ClickGUI.INSTANCE.getSearchBar().setY(config.searchBarPosition[1]);
ClickGui.INSTANCE.getSearchBar().setX(config.searchBarPosition[0]);
ClickGui.INSTANCE.getSearchBar().setY(config.searchBarPosition[1]);
}
Sputnik.LOGGER.info("posición de la barra de búsqueda aplicada");
}
private static void applyGuiSettings() {
ClientSettingsFrame.guiSettings.setEnabled(true);
ClientSettingsFrame.guiSettings.getSettings().forEach(setting -> {
applySetting(ClientSettingsFrame.guiSettings, setting);
private static void applyClientSettings() {
ClientSettingsPanel.clientSettings.setEnabled(true);
ClientSettingsPanel.clientSettings.getSettings().forEach(setting -> {
applySetting(ClientSettingsPanel.clientSettings, setting);
});
Sputnik.LOGGER.info("ajustes del cliente aplicados");
}
private static void applyExtendableFrames() {
applyExtendableFrame(ClickGUI.INSTANCE.getModulesFrame());
applyExtendableFrame(ClickGUI.INSTANCE.getGuiSettingsFrame());
private static void applyExtendablePanels() {
applyExtendablePanel(ClickGui.INSTANCE.getModulesPanel());
applyExtendablePanel(ClickGui.INSTANCE.getClientSettingsPanel());
Sputnik.LOGGER.info("posiciones de marcos extendibles aplicadas");
ClickGUI.INSTANCE.refreshListButtons();
ClickGui.INSTANCE.refreshListButtons();
}
private static void applyExtendableFrame(Frame<?> frame) {
ClientConfig.FrameData frameData = null;
if (frame instanceof ModuleFrame)
frameData = config.extendableFrames.get("M");
private static void applyExtendablePanel(Panel<?> panel) {
ClientConfig.PanelData panelData = null;
if (panel instanceof ModulePanel)
panelData = config.extendablePanels.get("M");
if (frame instanceof ClientSettingsFrame)
frameData = config.extendableFrames.get("S");
if (panel instanceof ClientSettingsPanel)
panelData = config.extendablePanels.get("S");
if (frameData != null) {
frame.setX(frameData.x());
frame.setY(frameData.y());
if (panelData != null) {
panel.setX(panelData.x());
panel.setY(panelData.y());
if (frame instanceof ModuleFrame mFrame)
mFrame.extended = frameData.extended();
if (frame instanceof ClientSettingsFrame sFrame)
sFrame.extended = frameData.extended();
if (panel instanceof ModulePanel mFrame)
mFrame.extended = panelData.extended();
if (panel instanceof ClientSettingsPanel sFrame)
sFrame.extended = panelData.extended();
}
}
@@ -3,7 +3,7 @@ package me.retucio.sputnik.event.sputnik;
import com.github.retucio.neutrino.Event;
// se genera cada que se interactúa con el marco de ajustes de la interfaz
public class GUISettingsFrameEvent {
public class ClientSettingsPanelEvent {
public static class Extend extends Event {} // al extenderlo / contraerlo
public static class Move extends Event {} // al cambiarlo de posición
@@ -3,4 +3,4 @@ package me.retucio.sputnik.event.sputnik;
import com.github.retucio.neutrino.Event;
// se genera cuando carga la interfaz del mod
public class LoadClickGUIEvent extends Event {}
public class LoadClickGuiEvent extends Event {}
@@ -3,7 +3,7 @@ package me.retucio.sputnik.event.sputnik;
import com.github.retucio.neutrino.Event;
// se genera cada que se interactúa con el marco de módulos
public class ModuleFrameEvent {
public class ModulePanelEvent {
public static class Extend extends Event {} // al extenderlo / contraerlo
public static class Move extends Event {} // al cambiarlo de posición
@@ -1,27 +0,0 @@
package me.retucio.sputnik.event.sputnik;
import com.github.retucio.neutrino.Event;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
// se genera cada que se interactúa con un marco de ajustes de un módulo
public class SettingsFrameEvent {
public static class Open extends Event { // al abrirlo
private final SettingsFrame frame;
public Open(SettingsFrame frame) { this.frame = frame; }
public SettingsFrame getFrame() { return frame; }
}
public static class Close extends Event { // al cerrarlo
private final SettingsFrame frame;
public Close(SettingsFrame frame) { this.frame = frame; }
public SettingsFrame getFrame() { return frame; }
}
public static class Move extends Event { // al cambiarlo de posición
private final SettingsFrame frame;
public Move(SettingsFrame frame) { this.frame = frame; }
public SettingsFrame getFrame() { return frame; }
}
}
@@ -0,0 +1,27 @@
package me.retucio.sputnik.event.sputnik;
import com.github.retucio.neutrino.Event;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
// se genera cada que se interactúa con un marco de ajustes de un módulo
public class SettingsPanelEvent {
public static class Open extends Event { // al abrirlo
private final SettingsPanel panel;
public Open(SettingsPanel panel) { this.panel = panel; }
public SettingsPanel getPanel() { return panel; }
}
public static class Close extends Event { // al cerrarlo
private final SettingsPanel panel;
public Close(SettingsPanel panel) { this.panel = panel; }
public SettingsPanel getPanel() { return panel; }
}
public static class Move extends Event { // al cambiarlo de posición
private final SettingsPanel panel;
public Move(SettingsPanel panel) { this.panel = panel; }
public SettingsPanel getPanel() { return panel; }
}
}
@@ -4,7 +4,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
import me.retucio.sputnik.command.CommandManager;
import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.event.input.ClientClickEvent;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.gui.screens.Screen;
@@ -29,11 +29,11 @@ public class ScreenMixin {
@Inject(method = "extractRenderState", at = @At("HEAD"))
private void renderWatermark(GuiGraphicsExtractor gui, int mouseX, int mouseY, float a, CallbackInfo ci) {
if (!ConfigManager.hasLoaded()) return; // para evitar dibujar la marca de agua por defecto
String watermark = ClientSettingsFrame.guiSettings.watermark.getValue();
String watermark = ClientSettingsPanel.clientSettings.watermark.getValue();
if (watermark == null || watermark.isEmpty()) return;
gui.text(mc.font, watermark,
mc.getWindow().getGuiScaledWidth() - mc.font.width(watermark) - 2, 2,
ClientSettingsFrame.guiSettings.color.getRGB(), false
ClientSettingsPanel.clientSettings.color.getRGB(), false
);
}
}
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module;
import com.github.retucio.neutrino.EventListener;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.module.modules.client.DiscordRPC;
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.combat.*;
import me.retucio.sputnik.module.modules.inventory.*;
@@ -78,7 +78,7 @@ public class ModuleManager {
private void addClient() {
add(new DiscordRPC());
add(new HUD());
add(new Hud());
}
private void addCombat() {
@@ -4,7 +4,7 @@ import com.github.retucio.neutrino.EventListener;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.command.CommandManager;
import me.retucio.sputnik.event.TickEvent;
import me.retucio.sputnik.event.sputnik.LoadClickGUIEvent;
import me.retucio.sputnik.event.sputnik.LoadClickGuiEvent;
import me.retucio.sputnik.event.sputnik.LoadCommandManagerEvent;
import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module;
@@ -22,11 +22,12 @@ import org.lwjgl.glfw.GLFW;
import java.awt.*;
/** módulo no visible solo para los ajustes del mod
/**
* módulo solo para los ajustes del mod
* @author retucio
*/
public class GUI extends Module {
public class ClientSettingsModule extends Module {
private final SettingGroup sgWidgets = addSg(new SettingGroup("widgets", true));
private final SettingGroup sgUi = addSg(new SettingGroup("interfaz", true));
@@ -109,7 +110,7 @@ public class GUI extends Module {
50
));
public GUI() {
public ClientSettingsModule() {
super("interfaz",
"ajustes de la interfaz, y otros misceláneos",
Category.CLIENT,
@@ -133,7 +134,7 @@ public class GUI extends Module {
}
@EventListener
public void onLoadClickGUI(LoadClickGUIEvent event) {
public void onLoadClickGui(LoadClickGuiEvent event) {
color.onUpdate(v -> {
Colors.red = color.getR();
Colors.green = color.getG();
@@ -21,7 +21,7 @@ import java.awt.*;
* @author retucio
*/
public class HUD extends Module {
public class Hud extends Module {
private final SettingGroup sgEditor = addSg(new SettingGroup("editor", true));
private final SettingGroup sgDisplay = addSg(new SettingGroup("visualización", true));
@@ -31,7 +31,7 @@ public class HUD extends Module {
public KeySetting editorKey = sgEditor.add(new KeySetting(
"tecla del editor",
"tecla asignada al editor de elementos del hud",
GLFW.GLFW_KEY_PAGE_UP
GLFW.GLFW_KEY_INSERT
));
public BooleanSetting axialMovement = sgEditor.add(new BooleanSetting(
@@ -126,7 +126,7 @@ public class HUD extends Module {
Dynosaurs.class, Dynosaurs.SPINOSAURUS
));
public HUD() {
public Hud() {
super("HUD",
"superposición de la pantalla con info. adicional",
Category.CLIENT,
@@ -3,7 +3,7 @@ package me.retucio.sputnik.module.modules.inventory;
import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module;
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.Lists;
@@ -63,7 +63,7 @@ public class UIMove extends Module {
if (mc.player == null || mc.screen == null) return;
MenuType<?> handler = null;
if (mc.screen == ClickGUI.INSTANCE)
if (mc.screen == ClickGui.INSTANCE)
handler = clickGuiHandlerType;
if (mc.screen instanceof AbstractContainerScreen<?> screen) {
@@ -12,6 +12,7 @@ import me.retucio.sputnik.util.NetworkUtil;
import net.minecraft.network.Connection;
import net.minecraft.network.PacketListener;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.common.ClientboundKeepAlivePacket;
import net.minecraft.network.protocol.common.ServerboundKeepAlivePacket;
import java.util.*;
@@ -35,6 +36,16 @@ public class PacketDelay extends Module {
Category.NETWORK);
}
@Override
public void onEnable() {
if (mc.isSingleplayer()) {
ChatUtil.error("delay de paquetes no funciona en un solo jugador");
toggle();
return;
}
super.onEnable();
}
@Override
public void onDisable() {
for (DelayedPacket delayedPacket : delayedPackets)
@@ -87,8 +98,9 @@ public class PacketDelay extends Module {
private void onPacketReceive(PacketEvent.Receive event) {
if (mc.player == null || mc.level == null
|| mc.getConnection() == null
|| event.getPacket() instanceof ServerboundKeepAlivePacket
&& !packets.is(Packets.OTHERS)) {
|| directions.is(Directions.C2S)
|| (event.getPacket() instanceof ClientboundKeepAlivePacket
&& !packets.is(Packets.OTHERS))) {
return;
}
@@ -30,16 +30,25 @@ public class AirPlace extends Module {
// general
private final NumberSetting range = sgGeneral.add(new NumberSetting(
"rango",
"distancia a la que colocar el bloque",
4,
1,
4,
4,
8,
1
));
private final BooleanSetting placeNormallyIfInRange = sgGeneral.add(new BooleanSetting(
"colocar con normalidad",
"colocar con normalidad si ya se está mirando a un bloque en rango",
true
));
// scroll
private final KeySetting scrollKey = sgScroll.add(new KeySetting(
"tecla del scroll",
"tecla a mantener para que el scroll funcione",
@@ -55,7 +64,9 @@ public class AirPlace extends Module {
0.1
));
// extractRenderState
// renderizado
private final BooleanSetting outlines = sgRender.add(new BooleanSetting(
"contorno",
"renderizar contorno de la caja de prev.",
@@ -108,6 +119,8 @@ public class AirPlace extends Module {
@EventListener
private void onUseItem(UseItemEvent event) {
if (!(result instanceof BlockHitResult bhr) || !(event.getStack().getItem() instanceof BlockItem)) return;
if (mc.hitResult != null && mc.hitResult.getType() != HitResult.Type.MISS && placeNormallyIfInRange.getValue()) return;
Vec3 hitPos = Vec3.atCenterOf(bhr.getBlockPos());
BlockHitResult result = new BlockHitResult(
@@ -138,9 +151,11 @@ public class AirPlace extends Module {
|| !mc.level.getBlockState(bhr.getBlockPos()).canBeReplaced())
return;
if (outlines.getValue())
RenderUtil.drawBlockOutline(event.getMatrices(), bhr.getBlockPos(), outlineColor.getValue(), lineWidth.getFloatValue(), false);
if (filling.getValue())
if (outlines.getValue()) {
RenderUtil.drawBlockOutline(event.getMatrices(), bhr.getBlockPos(), outlineColor.getValue(), lineWidth.getFloatValue(), false);
}
if (filling.getValue()) {
RenderUtil.drawBlockFilled(event.getMatrices(), bhr.getBlockPos(), fillingColor.getValue(), false);
}
}
}
@@ -3,14 +3,10 @@ package me.retucio.sputnik.module.setting.settings;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.setting.Setting;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.KeyUtil;
import org.lwjgl.glfw.GLFW;
import java.util.Objects;
import java.util.function.Consumer;
public class KeySetting extends Setting<Integer> {
public KeySetting(String name, String description, int defaultKey) {
@@ -4,8 +4,8 @@ import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.event.input.KeyEvent;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.Minecraft;
@@ -25,7 +25,7 @@ public class HudEditorScreen extends Screen {
public static HudEditorScreen INSTANCE;
private final Minecraft mc = Minecraft.getInstance();
private final HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
private final Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
private final List<HudElement> elements = new ArrayList<>();
@Nullable private HudElement selected = null;
@@ -199,7 +199,7 @@ public class HudEditorScreen extends Screen {
@Override
protected void extractBlurredBackground(@NonNull GuiGraphicsExtractor gui) {
if (ClientSettingsFrame.guiSettings.blur.getValue()) {
if (ClientSettingsPanel.clientSettings.blur.getValue()) {
super.extractBlurredBackground(gui);
}
}
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.widgets.Widget;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;
@@ -22,8 +22,8 @@ public abstract class HudElement extends Widget {
this.visible = true;
}
public abstract void renderInGame(GuiGraphicsExtractor gui, float delta, HUD hud);
public abstract void renderInEditor(GuiGraphicsExtractor gui, HUD hud);
public abstract void renderInGame(GuiGraphicsExtractor gui, float delta, Hud hud);
public abstract void renderInEditor(GuiGraphicsExtractor gui, Hud hud);
public abstract List<Component> getTooltip();
public String getId() { return id; }
@@ -2,7 +2,7 @@ package me.retucio.sputnik.ui.hud;
import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.elements.*;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
@@ -75,7 +75,7 @@ public class HudRenderer {
}
public static Color getColor(HUD hud) {
public static Color getColor(Hud hud) {
return hud.color.getValue();
}
@@ -94,7 +94,7 @@ public class HudRenderer {
}
public static void render(GuiGraphicsExtractor gui, DeltaTracker dt) {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
for (HudElement element : elements) {
if (element.isVisible() && !shouldSkipRendering()) {
@@ -104,7 +104,7 @@ public class HudRenderer {
}
private static boolean shouldSkipRendering() {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
return ModuleManager.INSTANCE == null
|| mc.player == null
|| mc.getCameraEntity() == null
@@ -2,7 +2,7 @@ package me.retucio.sputnik.ui.hud;
import com.mojang.blaze3d.platform.NativeImage;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.renderer.RenderPipelines;
@@ -68,7 +68,7 @@ public abstract class ImageHudElement extends HudElement {
}
@Override
public void renderInGame(GuiGraphicsExtractor gui, float delta, HUD hud) {
public void renderInGame(GuiGraphicsExtractor gui, float delta, Hud hud) {
if (!textureLoaded || !isVisible()) return;
gui.blit(
@@ -82,7 +82,7 @@ public abstract class ImageHudElement extends HudElement {
}
@Override
public void renderInEditor(GuiGraphicsExtractor gui, HUD hud) {
public void renderInEditor(GuiGraphicsExtractor gui, Hud hud) {
w = imageWidth;
h = imageHeight;
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -11,11 +11,11 @@ public abstract class TextHudElement extends HudElement {
super(id, defaultX, defaultY);
}
public abstract String getText(float delta, HUD hud);
public abstract String getText(float delta, Hud hud);
public abstract String getPreviewText();
@Override
public void renderInGame(GuiGraphicsExtractor gui, float delta, HUD hud) {
public void renderInGame(GuiGraphicsExtractor gui, float delta, Hud hud) {
String text = getText(delta, hud);
int color = hud != null ? hud.color.getValue().getRGB() : -1;
boolean shadow = hud != null && hud.shadow.getValue();
@@ -23,7 +23,7 @@ public abstract class TextHudElement extends HudElement {
}
@Override
public void renderInEditor(GuiGraphicsExtractor gui, HUD hud) {
public void renderInEditor(GuiGraphicsExtractor gui, Hud hud) {
String previewText = getPreviewText();
w = mc.font.width(previewText);
h = mc.font.lineHeight;
@@ -2,7 +2,7 @@ package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.camera.Freecam;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.network.chat.Component;
import net.minecraft.world.phys.Vec3;
@@ -17,7 +17,7 @@ public class CoordsElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
Freecam freecam = ModuleManager.INSTANCE.getModuleByClass(Freecam.class);
Vec3 pos = freecam != null && freecam.isEnabled()
? new Vec3(freecam.getX(delta), freecam.getY(delta), freecam.getZ(delta))
@@ -28,9 +28,9 @@ public class CoordsElement extends TextHudElement {
String overworldCoords = (int) pos.x + " " + (int) pos.y + " " + (int) pos.z;
String netherCoords = (int) pos.x / 8 + " " + (int) pos.y / 8 + " " + (int) pos.z / 8;
if (hud.coordsMode.is(HUD.CoordsMode.OVERWORLD)) {
if (hud.coordsMode.is(Hud.CoordsMode.OVERWORLD)) {
return overworldCoords;
} else if (hud.coordsMode.is(HUD.CoordsMode.NETHER)) {
} else if (hud.coordsMode.is(Hud.CoordsMode.NETHER)) {
return netherCoords;
} else {
return overworldCoords + " (" + netherCoords + ")";
@@ -41,7 +41,7 @@ public class CoordsElement extends TextHudElement {
public String getPreviewText() {
return getText(
mc.getDeltaTracker().getGameTimeDeltaTicks(),
ModuleManager.INSTANCE.getModuleByClass(HUD.class));
ModuleManager.INSTANCE.getModuleByClass(Hud.class));
}
@Override
@@ -3,7 +3,7 @@ package me.retucio.sputnik.ui.hud.elements;
import com.github.retucio.neutrino.EventListener;
import me.retucio.sputnik.event.sputnik.UpdateSettingEvent;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.network.chat.Component;
@@ -16,13 +16,13 @@ public class CustomTextElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
return hud != null && hud.customText != null ? hud.customText.getValue() : "";
}
@Override
public String getPreviewText() {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
if (hud != null && hud.customText != null && !hud.customText.getValue().isEmpty())
return hud.customText.getValue();
@@ -40,7 +40,7 @@ public class CustomTextElement extends TextHudElement {
@EventListener
public void onUpdateSetting(UpdateSettingEvent event) {
if (ModuleManager.INSTANCE == null) return;
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
if (hud != null && event.getSetting() == hud.customText) {
int newX = mc.getWindow().getGuiScaledWidth() / 2 - mc.font.width(hud.customText.getValue()) / 2;
setPosition(newX, y);
@@ -1,7 +1,7 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.ImageHudElement;
import net.minecraft.network.chat.Component;
@@ -10,7 +10,7 @@ import java.util.List;
public class DynoElement extends ImageHudElement {
private HUD.Dynosaurs dyno;
private Hud.Dynosaurs dyno;
public DynoElement() {
super("dyno",
@@ -21,14 +21,14 @@ public class DynoElement extends ImageHudElement {
@Override
protected String getImagePath() {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
if (hud == null) return "textures/dynos/spinosaurus.png";
dyno = hud.dyno.getValue();
return "textures/dynos/" + getDynoFileName(dyno) + ".png";
}
private String getDynoFileName(HUD.Dynosaurs dyno) {
private String getDynoFileName(Hud.Dynosaurs dyno) {
return dyno.toRealString().toLowerCase();
}
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.ImageHudElement;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.InventoryUtil;
@@ -27,7 +27,7 @@ public class EchestElement extends ImageHudElement {
}
@Override
public void renderInGame(GuiGraphicsExtractor gui, float delta, HUD hud) {
public void renderInGame(GuiGraphicsExtractor gui, float delta, Hud hud) {
if (!textureLoaded || !isVisible()) return;
gui.blit(
@@ -54,7 +54,7 @@ public class EchestElement extends ImageHudElement {
}
@Override
public void renderInEditor(GuiGraphicsExtractor gui, HUD hud) {
public void renderInEditor(GuiGraphicsExtractor gui, Hud hud) {
if (!textureLoaded) return;
drawEditorBackground(gui);
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.network.chat.Component;
@@ -14,7 +14,7 @@ public class FpsElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
return "FPS: " + mc.getFps();
}
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.client.multiplayer.PlayerInfo;
import net.minecraft.network.chat.Component;
@@ -15,7 +15,7 @@ public class PingElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
if (mc.getConnection() == null || mc.player == null) return "? ms";
if (mc.isSingleplayer()) return "-1 ms";
@@ -1,7 +1,7 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.network.chat.Component;
@@ -18,7 +18,7 @@ public class RotationElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
if (mc.player == null) return getPreviewText();
return String.format("%.2f", mc.player.getYRot() % 360) + "° " + String.format("%.2f", mc.player.getXRot()) + "° (" + getDirection() + ")";
}
@@ -27,7 +27,7 @@ public class RotationElement extends TextHudElement {
public String getPreviewText() {
if (mc.player == null)
return "69° 69° (W)";
return getText(mc.getDeltaTracker().getGameTimeDeltaTicks(), ModuleManager.INSTANCE.getModuleByClass(HUD.class));
return getText(mc.getDeltaTracker().getGameTimeDeltaTicks(), ModuleManager.INSTANCE.getModuleByClass(Hud.class));
}
@Override
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import me.retucio.sputnik.util.MiscUtil;
import net.minecraft.network.chat.Component;
@@ -15,7 +15,7 @@ public class TimeElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
return MiscUtil.getCurrentFormattedTime();
}
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.ImageHudElement;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;
@@ -25,7 +25,7 @@ public class TotemsElement extends ImageHudElement {
}
@Override
public void renderInGame(GuiGraphicsExtractor gui, float delta, HUD hud) {
public void renderInGame(GuiGraphicsExtractor gui, float delta, Hud hud) {
if (!isVisible()) return;
int count = 0;
@@ -42,7 +42,7 @@ public class TotemsElement extends ImageHudElement {
}
@Override
public void renderInEditor(GuiGraphicsExtractor gui, HUD hud) {
public void renderInEditor(GuiGraphicsExtractor gui, Hud hud) {
int count = 0;
if (mc.player != null) {
for (ItemStack stack : mc.player.getInventory()) {
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import me.retucio.sputnik.util.NetworkUtil;
import net.minecraft.network.chat.Component;
@@ -15,7 +15,7 @@ public class TpsElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
return "TPS: " + NetworkUtil.getTPS();
}
@@ -2,7 +2,7 @@ package me.retucio.sputnik.ui.hud.elements;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import me.retucio.sputnik.ui.hud.TextHudElement;
import net.minecraft.network.chat.Component;
@@ -16,7 +16,7 @@ public class UptimeElement extends TextHudElement {
}
@Override
public String getText(float delta, HUD hud) {
public String getText(float delta, Hud hud) {
long seconds = (System.currentTimeMillis() - Sputnik.LAUNCH_TIME) / 1000;
int minutes = (int) seconds / 60;
int hours = minutes / 60;
@@ -28,7 +28,7 @@ public class UptimeElement extends TextHudElement {
@Override
public String getPreviewText() {
return getText(mc.getDeltaTracker().getGameTimeDeltaTicks(), ModuleManager.INSTANCE.getModuleByClass(HUD.class));
return getText(mc.getDeltaTracker().getGameTimeDeltaTicks(), ModuleManager.INSTANCE.getModuleByClass(Hud.class));
}
@Override
@@ -5,7 +5,7 @@ import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.input.KeyEvent;
import me.retucio.sputnik.event.input.MouseClickEvent;
import me.retucio.sputnik.event.input.MouseScrollEvent;
import me.retucio.sputnik.event.sputnik.SettingsFrameEvent;
import me.retucio.sputnik.event.sputnik.SettingsPanelEvent;
import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.Setting;
@@ -13,12 +13,12 @@ import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.ui.widgets.buttons.settings.ListButton;
import me.retucio.sputnik.ui.widgets.buttons.ModuleButton;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.settings.ColorPickerFrame;
import me.retucio.sputnik.ui.widgets.frames.ModuleFrame;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.settings.ColorPickerPanel;
import me.retucio.sputnik.ui.widgets.panels.ModulePanel;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.widgets.Button;
import me.retucio.sputnik.ui.widgets.Frame;
import me.retucio.sputnik.ui.widgets.Panel;
import me.retucio.sputnik.ui.widgets.Widget;
import me.retucio.sputnik.ui.widgets.misc.ScrollBarWidget;
import me.retucio.sputnik.ui.widgets.misc.SearchBarWidget;
@@ -40,31 +40,31 @@ import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame.guiSettings;
import static me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel.clientSettings;
// interfaz gráfica, se abre con el shift derecho por defecto. aquí se encuentran los módulos y sus ajustes
public class ClickGUI extends Screen {
public class ClickGui extends Screen {
private final Minecraft mc = Minecraft.getInstance();
public static ClickGUI INSTANCE;
public static ClickGui INSTANCE;
private boolean anyFocused;
private @Nullable Widget selected = null;
private Category categoryFilter = Category.ALL;
private final ModuleFrame modulesFrame = new ModuleFrame(20, 30, 100, 20);
private final List<SettingsFrame> settingsFrames = new ArrayList<>();
private final ClientSettingsFrame guiSettingsFrame = new ClientSettingsFrame(200, 30, 100, 20);
private final ModulePanel modulesPanel = new ModulePanel(20, 30, 100, 20);
private final List<SettingsPanel> settingsPanels = new ArrayList<>();
private final ClientSettingsPanel clientSettingsPanel = new ClientSettingsPanel(200, 30, 100, 20);
private final ScrollBarWidget scrollBar = new ScrollBarWidget();
private final SearchBarWidget searchBar = new SearchBarWidget(340, 16, 320, 20);
private final List<Widget> miscWidgets = Arrays.asList(scrollBar, searchBar);
public ClickGUI() {
public ClickGui() {
super(Component.nullToEmpty("interfaz"));
settingsFrames.add(guiSettingsFrame);
settingsPanels.add(clientSettingsPanel);
Sputnik.EVENT_BUS.subscribe(this);
}
@@ -81,22 +81,22 @@ public class ClickGUI extends Screen {
searchBar.updatePosition(mouseX, mouseY);
// actualizar la posición de renderizado vertical de los marcos cada tick
modulesFrame.updateRenderY(scrollOffset);
for (SettingsFrame sf : settingsFrames)
sf.updateRenderY(scrollOffset);
modulesPanel.updateRenderY(scrollOffset);
for (SettingsPanel sp : settingsPanels)
sp.updateRenderY(scrollOffset);
// renderizar el marco de los ajustes de cada módulo que lo tenga abierto. se abre haciendo clic derecho sobre el módulo
for (SettingsFrame sf : settingsFrames.reversed()) {
sf.render(gui, mouseX, mouseY, delta);
sf.updatePosition(mouseX, mouseY);
for (SettingsPanel sp : settingsPanels.reversed()) {
sp.render(gui, mouseX, mouseY, delta);
sp.updatePosition(mouseX, mouseY);
}
// renderizar el marco de los módulos
modulesFrame.render(gui, mouseX, mouseY, delta);
modulesFrame.updatePosition(mouseX, mouseY);
modulesPanel.render(gui, mouseX, mouseY, delta);
modulesPanel.updatePosition(mouseX, mouseY);
for (SettingsFrame sf : settingsFrames)
sf.drawTooltips(gui, mouseX, mouseY);
for (SettingsPanel sp : settingsPanels)
sp.drawTooltips(gui, mouseX, mouseY);
filterSearchResults();
@@ -124,9 +124,9 @@ public class ClickGUI extends Screen {
}
private int calculateContentHeight() {
int bottom = modulesFrame.getY() + modulesFrame.getH() + modulesFrame.getTotalHeight();
for (SettingsFrame frame : settingsFrames)
bottom = Math.max(bottom, frame.getY() + frame.getH() + frame.getTotalHeight());
int bottom = modulesPanel.getY() + modulesPanel.getH() + modulesPanel.getTotalHeight();
for (SettingsPanel panel : settingsPanels)
bottom = Math.max(bottom, panel.getY() + panel.getH() + panel.getTotalHeight());
return bottom + 20; // padding
}
@@ -140,9 +140,9 @@ public class ClickGUI extends Screen {
));
// detectar clics sobre los marcos
modulesFrame.mouseClicked((int) click.x(), (int) click.y(), click.button());
for (SettingsFrame sf : new ArrayList<>(settingsFrames))
sf.mouseClicked((int) click.x(), (int) click.y(), click.button());
modulesPanel.mouseClicked((int) click.x(), (int) click.y(), click.button());
for (SettingsPanel sp : new ArrayList<>(settingsPanels))
sp.mouseClicked((int) click.x(), (int) click.y(), click.button());
return super.mouseClicked(click, doubled);
}
@@ -155,9 +155,9 @@ public class ClickGUI extends Screen {
click.button()));
// registrar cuándo se suelta el clic, en cada marco respectivamente
modulesFrame.mouseReleased((int) click.x(), (int) click.y(), click.button());
for (SettingsFrame sf : new ArrayList<>(settingsFrames))
sf.mouseReleased((int) click.x(), (int) click.y(), click.button());
modulesPanel.mouseReleased((int) click.x(), (int) click.y(), click.button());
for (SettingsPanel sp : new ArrayList<>(settingsPanels))
sp.mouseReleased((int) click.x(), (int) click.y(), click.button());
return super.mouseReleased(click);
}
@@ -168,8 +168,8 @@ public class ClickGUI extends Screen {
(int) click.x(),
(int) click.y()));
for (SettingsFrame sf : new ArrayList<>(settingsFrames))
sf.mouseDragged((int) click.x(), (int) click.y());
for (SettingsPanel sp : new ArrayList<>(settingsPanels))
sp.mouseDragged((int) click.x(), (int) click.y());
return super.mouseDragged(click, deltaX, deltaY);
}
@@ -182,7 +182,7 @@ public class ClickGUI extends Screen {
@EventListener
public void onMouseScroll(MouseScrollEvent event) {
miscWidgets.forEach(w -> w.mouseScrolled(
event.getVertical() * guiSettings.scrollSens.getValue()));
event.getVertical() * clientSettings.scrollSens.getValue()));
}
@EventListener
@@ -191,22 +191,22 @@ public class ClickGUI extends Screen {
if (Sputnik.mc.screen != this || event.getButton() != 2 || !KeyUtil.isKeyDown(GLFW.GLFW_KEY_LEFT_SHIFT)) return;
int h = Sputnik.mc.getWindow().getGuiScaledHeight();
int minY = Math.min(modulesFrame.getY(), settingsFrames.stream().mapToInt(Frame::getY).min().orElse(modulesFrame.getY()));
int maxY = Math.max(modulesFrame.getY() + modulesFrame.getH(), settingsFrames.stream().mapToInt(sf -> sf.getY() + sf.getH()).max().orElse(modulesFrame.getY() + modulesFrame.getH()));
int minY = Math.min(modulesPanel.getY(), settingsPanels.stream().mapToInt(Panel::getY).min().orElse(modulesPanel.getY()));
int maxY = Math.max(modulesPanel.getY() + modulesPanel.getH(), settingsPanels.stream().mapToInt(sp -> sp.getY() + sp.getH()).max().orElse(modulesPanel.getY() + modulesPanel.getH()));
int correction = minY < 0 ? -minY + 4 : (maxY > h ? h - maxY - 4 : 0);
if (correction != 0) {
modulesFrame.setY(modulesFrame.getY() + correction);
settingsFrames.forEach(sf -> sf.setY(sf.getY() + correction));
modulesPanel.setY(modulesPanel.getY() + correction);
settingsPanels.forEach(sp -> sp.setY(sp.getY() + correction));
}
}
public void filterSearchResults() {
if (!guiSettings.searchBar.getValue()) return;
if (!clientSettings.searchBar.getValue()) return;
String searchInput = searchBar.getSearchInput().trim();
if (!guiSettings.matchCase.getValue()) searchInput = searchInput.toLowerCase();
if (!clientSettings.matchCase.getValue()) searchInput = searchInput.toLowerCase();
for (Button b : modulesFrame.getButtons()) {
for (Button b : modulesPanel.getButtons()) {
if (!(b instanceof ModuleButton mb)) return;
Module module = mb.getModule();
@@ -224,7 +224,7 @@ public class ClickGUI extends Screen {
String description = MiscUtil.removeAccentMarks(module.getDescription());
String category = MiscUtil.removeAccentMarks(module.getCategory().toString());
if (!guiSettings.matchCase.getValue()) {
if (!clientSettings.matchCase.getValue()) {
name = name.toLowerCase();
description = description.toLowerCase();
category = category.toLowerCase();
@@ -236,8 +236,8 @@ public class ClickGUI extends Screen {
|| category.contains(searchInput));
}
for (SettingsFrame sf : settingsFrames) {
for (Button b : sf.getButtons()) {
for (SettingsPanel sp : settingsPanels) {
for (Button b : sp.getButtons()) {
if (!(b instanceof SettingButton<?> sb)) return;
Setting<?> setting = sb.getSetting();
@@ -250,7 +250,7 @@ public class ClickGUI extends Screen {
String description = MiscUtil.removeAccentMarks(setting.getDescription());
String sgName = MiscUtil.removeAccentMarks(setting.getSg().getName());
if (!guiSettings.matchCase.getValue()) {
if (!clientSettings.matchCase.getValue()) {
name = name.toLowerCase();
description = description.toLowerCase();
sgName = sgName.toLowerCase();
@@ -261,85 +261,85 @@ public class ClickGUI extends Screen {
}
}
public SettingsFrame getSfOfModule(Module module) {
Optional<SettingsFrame> frame = settingsFrames.stream()
.filter(sf -> sf.getModule().equals(module))
public SettingsPanel getSettingsPanelOfModule(Module module) {
Optional<SettingsPanel> panel = settingsPanels.stream()
.filter(sp -> sp.getModule().equals(module))
.findFirst();
return frame.orElseGet(() ->
new SettingsFrame(module, 0, 0, 100, 20)
return panel.orElseGet(() ->
new SettingsPanel(module, 0, 0, 100, 20)
);
}
// abrir un marco donde se encuentran los ajustes del módulo deseado
public void openSettingsFrame(Module module, int x, int y) {
public void openSettingsPanel(Module module, int x, int y) {
// asegurarse de que no se sale de la pantalla
x = Math.clamp(x, 0, mc.getWindow().getGuiScaledWidth() - 80);
SettingsFrame frame = new SettingsFrame(module, x, y, 100, 20);
settingsFrames.add(frame);
SettingsPanel panel = new SettingsPanel(module, x, y, 100, 20);
settingsPanels.add(panel);
Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Open(frame));
Sputnik.EVENT_BUS.post(new SettingsPanelEvent.Open(panel));
}
// abrir un marco de ajustes específicamente para ajustes de selección múltiple
public void openListSettingsFrame(Module dummy, int x, int y) {
if (isSettingsFrameOpen(dummy)) return;
SettingsFrame frame = new SettingsFrame(dummy, x, y, 120, 18);
settingsFrames.add(frame);
public void openListSettingsPanel(Module dummy, int x, int y) {
if (isSettingsPanelOpen(dummy)) return;
SettingsPanel panel = new SettingsPanel(dummy, x, y, 120, 18);
settingsPanels.add(panel);
}
// cerrar el marco de ajustes
public void closeSettingsFrame(Module module) {
public void closeSettingsPanel(Module module) {
// porque java.util.ConcurrentModificationException o algo no sé es lo único que se me ha ocurrido hacer
List<SettingsFrame> toRemove = new ArrayList<>();
for (SettingsFrame sf : settingsFrames) {
if ((sf instanceof ColorPickerFrame cpf && cpf.dummyModule == module) // para los selectores de colores
|| (!(sf instanceof ColorPickerFrame) && sf.getModule() == module)) { // lógica muy mierdas, lo sé, pero paso de hacerlo bien
toRemove.add(sf);
Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Close(sf));
unselect(sf);
List<SettingsPanel> toRemove = new ArrayList<>();
for (SettingsPanel sp : settingsPanels) {
if ((sp instanceof ColorPickerPanel cpp && cpp.dummyModule == module) // para los selectores de colores
|| (!(sp instanceof ColorPickerPanel) && sp.getModule() == module)) { // lógica muy mierdas, lo sé, pero paso de hacerlo bien
toRemove.add(sp);
Sputnik.EVENT_BUS.post(new SettingsPanelEvent.Close(sp));
unselect(sp);
}
}
settingsFrames.removeAll(toRemove);
settingsPanels.removeAll(toRemove);
}
// verificar si un módulo tiene su marco de ajustes abierto
public boolean isSettingsFrameOpen(Module module) {
return settingsFrames.stream().anyMatch(
sf -> sf.getModule().equals(module));
public boolean isSettingsPanelOpen(Module module) {
return settingsPanels.stream().anyMatch(
sp -> sp.getModule().equals(module));
}
public boolean isColorPickerFrameOpen(ColorSetting setting) {
for (SettingsFrame sf : getSettingsFrames()) {
if (sf instanceof ColorPickerFrame cpf)
if (cpf.getColorSetting().equals(setting)) return true;
public boolean isColorPickerPanelOpen(ColorSetting setting) {
for (SettingsPanel sp : getSettingsPanels()) {
if (sp instanceof ColorPickerPanel cpp)
if (cpp.getColorSetting().equals(setting)) return true;
}
return false;
}
public void openColorPickerFrame(Module module, ColorSetting colorSetting, int x, int y) {
ColorPickerFrame frame = new ColorPickerFrame(module, colorSetting, x + 80, y + 5, 153, 20);
if (isColorPickerFrameOpen(frame.getColorSetting())) {
closeColorPickerFrame(frame.getColorSetting());
public void openColorPickerPanel(Module module, ColorSetting colorSetting, int x, int y) {
ColorPickerPanel panel = new ColorPickerPanel(module, colorSetting, x + 80, y + 5, 153, 20);
if (isColorPickerPanelOpen(panel.getColorSetting())) {
closeColorPickerPanel(panel.getColorSetting());
return;
}
settingsFrames.add(frame);
settingsPanels.add(panel);
}
public void closeColorPickerFrame(ColorSetting setting) {
for (SettingsFrame sf : getSettingsFrames()) {
if (sf instanceof ColorPickerFrame cpf && cpf.getColorSetting().equals(setting)) {
settingsFrames.remove(cpf);
public void closeColorPickerPanel(ColorSetting setting) {
for (SettingsPanel sp : getSettingsPanels()) {
if (sp instanceof ColorPickerPanel cpp && cpp.getColorSetting().equals(setting)) {
settingsPanels.remove(cpp);
break;
}
}
}
public void refreshListButtons() {
for (SettingsFrame frame : settingsFrames)
for (Button button : frame.getButtons())
for (SettingsPanel panel : settingsPanels)
for (Button button : panel.getButtons())
if (button instanceof ListButton<?> lb)
lb.refreshDummy();
}
@@ -356,8 +356,8 @@ public class ClickGUI extends Screen {
@Override
public void onClose() { // evitar que al reabrir la interfaz sin previamente haber soltado el clic, se sigan arrastrando objetos
modulesFrame.mouseReleased(0, 0, 0);
settingsFrames.forEach(sf -> sf.mouseReleased(0, 0, 0));
modulesPanel.mouseReleased(0, 0, 0);
settingsPanels.forEach(sp -> sp.mouseReleased(0, 0, 0));
scrollBar.mouseReleased(0, 0, 0);
searchBar.mouseReleased(0, 0, 0);
@@ -378,24 +378,24 @@ public class ClickGUI extends Screen {
@Override
protected void extractBlurredBackground(@NonNull GuiGraphicsExtractor gui) {
if (guiSettings.blur.getValue()) super.extractBlurredBackground(gui);
if (clientSettings.blur.getValue()) super.extractBlurredBackground(gui);
}
// getters y setters de widgets
public ModuleFrame getModulesFrame() {
return modulesFrame;
public ModulePanel getModulesPanel() {
return modulesPanel;
}
public ClientSettingsFrame getGuiSettingsFrame() {
return guiSettingsFrame;
public ClientSettingsPanel getClientSettingsPanel() {
return clientSettingsPanel;
}
public List<Widget> getMiscWidgets() { return miscWidgets; }
public List<SettingsFrame> getSettingsFrames() {
return settingsFrames;
public List<SettingsPanel> getSettingsPanels() {
return settingsPanels;
}
public SearchBarWidget getSearchBar() {
@@ -2,7 +2,7 @@ package me.retucio.sputnik.ui.screen;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.module.modules.inventory.ShulkerPeek;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.gui.screens.Screen;
@@ -124,7 +124,7 @@ public class PreviewScreen extends Screen {
@Override
public void extractBlurredBackground(@NonNull GuiGraphicsExtractor gui) {
if (ClientSettingsFrame.guiSettings.blur.getValue()) super.extractBlurredBackground(gui);
if (ClientSettingsPanel.clientSettings.blur.getValue()) super.extractBlurredBackground(gui);
}
@Override
@@ -4,10 +4,10 @@ import net.minecraft.client.gui.GuiGraphicsExtractor;
public abstract class Button extends Widget {
protected Frame<?> parent;
protected Panel<?> parent;
protected int offset;
public Button(Frame<?> parent, int offset) {
public Button(Panel<?> parent, int offset) {
super(parent.getX(), parent.getRenderY(), parent.getW(), parent.getH());
this.parent = parent;
this.offset = offset;
@@ -24,7 +24,7 @@ public abstract class Button extends Widget {
this.offset = offset;
}
public Frame<?> getParent() {
public Panel<?> getParent() {
return parent;
}
}
@@ -6,7 +6,7 @@ import java.util.ArrayList;
import java.util.List;
public abstract class Frame<B extends Button> extends Widget {
public abstract class Panel<B extends Button> extends Widget {
protected String title;
@@ -19,7 +19,7 @@ public abstract class Frame<B extends Button> extends Widget {
protected int dragX, dragY;
protected boolean dragging;
public Frame(String title, int x, int y, int w, int h) {
public Panel(String title, int x, int y, int w, int h) {
super(x, y, w, h);
this.title = title;
}
@@ -1,6 +1,6 @@
package me.retucio.sputnik.ui.widgets;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.screen.ClickGui;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -28,7 +28,7 @@ public abstract class Widget {
public void mouseClicked(int mouseX, int mouseY, int button) {}
public void mouseReleased(int mouseX, int mouseY, int button) {
ClickGUI.INSTANCE.unselect(this);
ClickGui.INSTANCE.unselect(this);
}
public void mouseDragged(int mouseX, int mouseY) {}
@@ -36,7 +36,7 @@ public abstract class Widget {
public void mouseScrolled(double amount) {}
public boolean isHovered(int mouseX, int mouseY) {
if (!ClickGUI.INSTANCE.canSelect(this)) return false;
if (!ClickGui.INSTANCE.canSelect(this)) return false;
return mouseX > x && mouseX < x + w &&
mouseY > y && mouseY < y + h;
}
@@ -1,8 +1,8 @@
package me.retucio.sputnik.ui.widgets.buttons;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.ModuleFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.ModulePanel;
import me.retucio.sputnik.ui.widgets.Button;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -15,7 +15,7 @@ public class ModuleButton extends Button {
private final Module module;
public final int height = 18;
public ModuleButton(Module module, ModuleFrame parent, int offset) {
public ModuleButton(Module module, ModulePanel parent, int offset) {
super(parent, offset);
this.module = module;
}
@@ -45,14 +45,14 @@ public class ModuleButton extends Button {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) { // clic izquierdo para activar / desactivar el módulo
module.toggle();
} else if (button == 1) { // clic derecho para el marco de ajustes (también lo cierra si está abierto)
if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) {
ClickGUI.INSTANCE.closeSettingsFrame(module);
if (ClickGui.INSTANCE.isSettingsPanelOpen(module)) {
ClickGui.INSTANCE.closeSettingsPanel(module);
} else {
ClickGUI.INSTANCE.openSettingsFrame(
ClickGui.INSTANCE.openSettingsPanel(
module,
parent.getX() + parent.getW() + 120,
parent.getY() + offset
@@ -65,7 +65,7 @@ public class ModuleButton extends Button {
// verifica si el puntero del ratón se encuentra sobre el botón del módulo
@Override
public boolean isHovered(int mouseX, int mouseY) {
return ClickGUI.INSTANCE.canSelect(this)
return ClickGui.INSTANCE.canSelect(this)
&& mouseX > parent.getX()
&& mouseX < parent.getX() + parent.getW()
&& mouseY > parent.getRenderY() + offset
@@ -1,7 +1,7 @@
package me.retucio.sputnik.ui.widgets.buttons;
import me.retucio.sputnik.module.setting.Setting;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.widgets.Button;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;
@@ -11,7 +11,7 @@ public abstract class SettingButton<S extends Setting<?>> extends Button {
protected S setting;
public SettingButton(S setting, SettingsFrame parent, int offset) {
public SettingButton(S setting, SettingsPanel parent, int offset) {
super(parent, offset);
this.setting = setting;
}
@@ -2,9 +2,9 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.setting.settings.KeySetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.ChatUtil;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
@@ -24,7 +24,7 @@ public class BindButton extends SettingButton<KeySetting> {
private boolean listening = false;
public BindButton(KeySetting setting, SettingsFrame parent, int offset) {
public BindButton(KeySetting setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
}
@@ -46,11 +46,11 @@ public class BindButton extends SettingButton<KeySetting> {
public void mouseClicked(int mouseX, int mouseY, int button) {
boolean hovered = isHovered(mouseX, mouseY);
if (hovered && ClickGUI.INSTANCE.trySelect(this)) {
if (hovered && ClickGui.INSTANCE.trySelect(this)) {
if (listening) {
List<KeyMapping> keys = new ArrayList<>(List.of(mc.options.keyMappings));
keys.removeAll(List.of(mc.options.debugKeys));
boolean allowMultiple = ClientSettingsFrame.guiSettings.multipleKeybinds.getValue();
boolean allowMultiple = ClientSettingsPanel.clientSettings.multipleKeybinds.getValue();
for (KeyMapping bind : keys) {
if (bind.matches(new KeyEvent(button, 0, 0))) {
@@ -90,7 +90,7 @@ public class BindButton extends SettingButton<KeySetting> {
for (KeyMapping bind : keys) {
// no permitir usar la misma tecla para varias acciones, si el ajuste para esto está activado
boolean keyAlreadyBound = bind.matches(new KeyEvent(key, 0, 0));
boolean allowMultiple = ClientSettingsFrame.guiSettings.multipleKeybinds.getValue();
boolean allowMultiple = ClientSettingsPanel.clientSettings.multipleKeybinds.getValue();
if (keyAlreadyBound && !allowMultiple) {
ChatUtil.warn("esa tecla ya está cogida por "
@@ -5,8 +5,8 @@ import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.setting.settings.OptionSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -22,7 +22,7 @@ public class ChooseButton<T> extends SettingButton<OptionSetting<T>> {
private final Module dummy;
private final Map<T, BooleanSetting> optionButtons = new HashMap<>();
public ChooseButton(OptionSetting<T> setting, SettingsFrame parent, int offset) {
public ChooseButton(OptionSetting<T> setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
@@ -54,10 +54,10 @@ public class ChooseButton<T> extends SettingButton<OptionSetting<T>> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
// click izquierdo / derecho: abrir marco
if (button <= 1 && !KeyUtil.isShiftDown()) {
openFrame();
openPanel();
// shift + clic derecho: restablecer valores
} else if (button == 1 && KeyUtil.isShiftDown()) {
setting.reset();
@@ -109,15 +109,15 @@ public class ChooseButton<T> extends SettingButton<OptionSetting<T>> {
}
}
public void openFrame() {
if (ClickGUI.INSTANCE.isSettingsFrameOpen(dummy)) {
ClickGUI.INSTANCE.closeSettingsFrame(dummy);
public void openPanel() {
if (ClickGui.INSTANCE.isSettingsPanelOpen(dummy)) {
ClickGui.INSTANCE.closeSettingsPanel(dummy);
return;
}
rebuildDummy();
ClickGUI.INSTANCE.openListSettingsFrame(
ClickGui.INSTANCE.openListSettingsPanel(
dummy,
parent.getX() + 40,
parent.getY() + 40
@@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.setting.settings.ColorSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import me.retucio.sputnik.util.render.DrawUtil;
@@ -17,7 +17,7 @@ import java.util.List;
public class ColorButton extends SettingButton<ColorSetting> {
public ColorButton(ColorSetting setting, SettingsFrame parent, int offset) {
public ColorButton(ColorSetting setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
}
@@ -56,10 +56,10 @@ public class ColorButton extends SettingButton<ColorSetting> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) {
// clic izq.: abrir selector de colores
ClickGUI.INSTANCE.openColorPickerFrame(
ClickGui.INSTANCE.openColorPickerPanel(
setting.getSg().getModule(), setting,
parent.getX() + parent.getW() + 120,
parent.getRenderY() + offset);
@@ -1,9 +1,9 @@
package me.retucio.sputnik.ui.widgets.buttons.settings;
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.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.ChatFormatting;
@@ -18,7 +18,7 @@ import java.util.List;
// botón para los ajustes tipo EnumSetting (de modo)
public class CycleButton<E extends Enum<E>> extends SettingButton<EnumSetting<E>> {
public CycleButton(EnumSetting<E> setting, SettingsFrame parent, int offset) {
public CycleButton(EnumSetting<E> setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
}
@@ -40,7 +40,7 @@ public class CycleButton<E extends Enum<E>> extends SettingButton<EnumSetting<E>
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) {
setting.cycle(); // clic izquierdo -> ciclar
} else if (button == 1) {
@@ -5,8 +5,8 @@ import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.module.setting.settings.ListSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -22,7 +22,7 @@ public class ListButton<T> extends SettingButton<ListSetting<T>> {
private final Map<T, BooleanSetting> optionButtons = new HashMap<>();
public ListButton(ListSetting<T> setting, SettingsFrame parent, int offset) {
public ListButton(ListSetting<T> setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
@@ -64,16 +64,16 @@ public class ListButton<T> extends SettingButton<ListSetting<T>> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
// clic izquierdo / derecho: abrir marco
if (button <= 1 && !KeyUtil.isShiftDown()) {
if (ClickGUI.INSTANCE.isSettingsFrameOpen(dummy)) {
ClickGUI.INSTANCE.closeSettingsFrame(dummy);
if (ClickGui.INSTANCE.isSettingsPanelOpen(dummy)) {
ClickGui.INSTANCE.closeSettingsPanel(dummy);
return;
}
rebuildDummy();
ClickGUI.INSTANCE.openListSettingsFrame(dummy, parent.getX() + 40, parent.getY() + 40);
ClickGui.INSTANCE.openListSettingsPanel(dummy, parent.getX() + 40, parent.getY() + 40);
// shift + clic derecho: restablecer valores
} else if (button == 1 && KeyUtil.isShiftDown()) {
setting.reset();
@@ -1,10 +1,10 @@
package me.retucio.sputnik.ui.widgets.buttons.settings;
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.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -20,7 +20,7 @@ public class SliderButton extends SettingButton<NumberSetting> {
private boolean dragging = false;
public final DecimalFormat df; // usar formato decimal para el valor del ajuste
public SliderButton(NumberSetting setting, SettingsFrame parent, int offset) {
public SliderButton(NumberSetting setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
this.df = new DecimalFormat("#.##"); // solo mostrar dos décimales
@@ -61,13 +61,13 @@ public class SliderButton extends SettingButton<NumberSetting> {
// de no ser de esto, si se cierra la interfaz sin haber soltado el ratón mientras se arrastraba el valor,
// al reabrir la interfaz se seguía arrastrando, aun habiendo soltado ya el clic
if (key == GLFW.GLFW_KEY_ESCAPE
|| key == ClientSettingsFrame.guiSettings.getKey())
|| key == ClientSettingsPanel.clientSettings.getKey())
dragging = false;
}
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) dragging = true; // arrastrar con el clic izquierdo
else if (button == 1 && KeyUtil.isShiftDown())
// restablecer al valor por defecto con shift + clic derecho
@@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.setting.settings.StringSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import me.retucio.sputnik.util.MiscUtil;
@@ -19,7 +19,7 @@ public class TextButton extends SettingButton<StringSetting> {
private final StringSetting setting;
private final StringBuilder buffer = new StringBuilder();
public TextButton(StringSetting setting, SettingsFrame parent, int offset) {
public TextButton(StringSetting setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
}
@@ -39,7 +39,7 @@ public class TextButton extends SettingButton<StringSetting> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) {
typing = true;
buffer.setLength(0);
@@ -2,8 +2,8 @@ package me.retucio.sputnik.ui.widgets.buttons.settings;
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -16,7 +16,7 @@ public class ToggleButton extends SettingButton<BooleanSetting> {
private final BooleanSetting setting;
public ToggleButton(BooleanSetting setting, SettingsFrame parent, int offset) {
public ToggleButton(BooleanSetting setting, SettingsPanel parent, int offset) {
super(setting, parent, offset);
this.setting = setting;
}
@@ -39,7 +39,7 @@ public class ToggleButton extends SettingButton<BooleanSetting> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) setting.toggle(); // clic izquierdo para alternar
else if (button == 1 && KeyUtil.isShiftDown())
// shift + clic derecho para restablecer al valor por defecto
@@ -1,7 +1,7 @@
package me.retucio.sputnik.ui.widgets.misc;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.Widget;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -24,7 +24,7 @@ public class ScrollBarWidget extends Widget {
@Override
public void render(GuiGraphicsExtractor gui, int mouseX, int mouseY, float delta) {
if (contentHeight <= windowHeight || !ClientSettingsFrame.guiSettings.scrollBar.getValue()) return;
if (contentHeight <= windowHeight || !ClientSettingsPanel.clientSettings.scrollBar.getValue()) return;
int trackX1 = mc.getWindow().getGuiScaledWidth() - 10;
int trackX2 = trackX1 + 10;
@@ -45,8 +45,8 @@ public class ScrollBarWidget extends Widget {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (button != 0 || !ClientSettingsFrame.guiSettings.scrollBar.getValue()) return;
if (isThumbHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (button != 0 || !ClientSettingsPanel.clientSettings.scrollBar.getValue()) return;
if (isThumbHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
dragging = true;
dragY = mouseY;
scrollStart = scrollOffset;
@@ -55,13 +55,13 @@ public class ScrollBarWidget extends Widget {
@Override
public void mouseReleased(int mouseX, int mouseY, int button) {
ClickGUI.INSTANCE.unselect(this);
ClickGui.INSTANCE.unselect(this);
dragging = false;
}
@Override
public void mouseDragged(int mouseX, int mouseY) {
if (!dragging || !ClientSettingsFrame.guiSettings.scrollBar.getValue()) return;
if (!dragging || !ClientSettingsPanel.clientSettings.scrollBar.getValue()) return;
int thumbHeight = getThumbHeight();
int trackHeight = windowHeight - thumbHeight;
@@ -80,7 +80,7 @@ public class ScrollBarWidget extends Widget {
}
private boolean isThumbHovered(double mouseX, double mouseY) {
if (!ClickGUI.INSTANCE.canSelect(this)) return false;
if (!ClickGui.INSTANCE.canSelect(this)) return false;
int trackX1 = mc.getWindow().getGuiScaledWidth() - 10;
int trackX2 = trackX1 + 10;
int thumbY = getThumbY();
@@ -4,10 +4,10 @@ import me.retucio.sputnik.config.ConfigManager;
import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.settings.OptionSetting;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.buttons.settings.ChooseButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import me.retucio.sputnik.ui.widgets.Widget;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.KeyUtil;
@@ -43,7 +43,7 @@ public class SearchBarWidget extends Widget {
)
);
private final ChooseButton<Category> dummyButton = new ChooseButton<>(
categories, new SettingsFrame(dummy, 0, 0, 50, 50), 0
categories, new SettingsPanel(dummy, 0, 0, 50, 50), 0
);
@@ -51,13 +51,13 @@ public class SearchBarWidget extends Widget {
super(x, y, w, h);
categories.onUpdate(v -> {
if (ClickGUI.INSTANCE != null) ClickGUI.INSTANCE.setCategoryFilter(v);
if (ClickGui.INSTANCE != null) ClickGui.INSTANCE.setCategoryFilter(v);
});
}
@Override
public void render(GuiGraphicsExtractor gui, int mouseX, int mouseY, float delta) {
if (!ClientSettingsFrame.guiSettings.searchBar.getValue()) return;
if (!ClientSettingsPanel.clientSettings.searchBar.getValue()) return;
Color textFieldColor = isTextFieldHovered(mouseX, mouseY)
? Colors.buttonColor.brighter()
@@ -103,23 +103,23 @@ public class SearchBarWidget extends Widget {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (button != 0 || !ClientSettingsFrame.guiSettings.searchBar.getValue()) return;
if (isHandleHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (button != 0 || !ClientSettingsPanel.clientSettings.searchBar.getValue()) return;
if (isHandleHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
dragging = true;
dragX = mouseX - x;
dragY = mouseY - y;
} else if (isClearButtonHovered(mouseX, mouseY)) {
buffer.setLength(0);
} else if (isFilterButtonHovered(mouseX, mouseY)) {
openFilterFrame(mouseX, mouseY);
openFilterPanel(mouseX, mouseY);
}
focused = isTextFieldHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this);
focused = isTextFieldHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this);
}
@Override
public void mouseReleased(int mouseX, int mouseY, int button) {
if (!ClientSettingsFrame.guiSettings.searchBar.getValue()) return;
ClickGUI.INSTANCE.unselect(this);
if (!ClientSettingsPanel.clientSettings.searchBar.getValue()) return;
ClickGui.INSTANCE.unselect(this);
if (button == 0 && dragging) {
dragging = false;
savePosition();
@@ -128,7 +128,7 @@ public class SearchBarWidget extends Widget {
@Override
public void onKey(int key, int action) {
if (!ClientSettingsFrame.guiSettings.searchBar.getValue()) return;
if (!ClientSettingsPanel.clientSettings.searchBar.getValue()) return;
if (!focused || action == GLFW.GLFW_RELEASE) return;
if (key == GLFW.GLFW_KEY_V && KeyUtil.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL)) {
@@ -175,32 +175,32 @@ public class SearchBarWidget extends Widget {
}
public boolean isHandleHovered(int mouseX, int mouseY) {
return ClickGUI.INSTANCE.canSelect(this)
return ClickGui.INSTANCE.canSelect(this)
&& mouseX > x && mouseX < x + 18
&& mouseY > renderY && mouseY < renderY + h;
}
public boolean isTextFieldHovered(int mouseX, int mouseY) {
return ClickGUI.INSTANCE.canSelect(this)
return ClickGui.INSTANCE.canSelect(this)
&& mouseX > x + 20 && mouseX < x + w - 20
&& mouseY > renderY + 2 && mouseY < renderY + h - 2
&& !isFilterButtonHovered(mouseX, mouseY);
}
public boolean isClearButtonHovered(int mouseX, int mouseY) {
return ClickGUI.INSTANCE.canSelect(this)
return ClickGui.INSTANCE.canSelect(this)
&& mouseX > x + w - 15 && mouseX < x + w - 3
&& mouseY > renderY + 3 && mouseY < renderY + h - 5;
}
public boolean isFilterButtonHovered(int mouseX, int mouseY) {
return ClickGUI.INSTANCE.canSelect(this)
return ClickGui.INSTANCE.canSelect(this)
&& mouseX > x + w - 37 && mouseX < x + w - 21
&& mouseY > renderY + h / 2 - 8 && mouseY < renderY + h / 2 + 8;
}
public boolean isFocused() {
return focused && ClientSettingsFrame.guiSettings.searchBar.getValue();
return focused && ClientSettingsPanel.clientSettings.searchBar.getValue();
}
public void updateRenderY(int scrollOffset) {
@@ -220,9 +220,9 @@ public class SearchBarWidget extends Widget {
}
}
private void openFilterFrame(int mouseX, int mouseY) {
private void openFilterPanel(int mouseX, int mouseY) {
dummyButton.getParent().setX(mouseX);
dummyButton.getParent().setY(mouseY);
dummyButton.openFrame();
dummyButton.openPanel();
}
}
@@ -1,12 +1,12 @@
package me.retucio.sputnik.ui.widgets.frames;
package me.retucio.sputnik.ui.widgets.panels;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.sputnik.ModuleFrameEvent;
import me.retucio.sputnik.event.sputnik.ModulePanelEvent;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.buttons.ModuleButton;
import me.retucio.sputnik.ui.widgets.Frame;
import me.retucio.sputnik.ui.widgets.Panel;
import me.retucio.sputnik.util.Colors;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
@@ -17,13 +17,13 @@ import java.util.List;
// marco para los módulos
public class ModuleFrame extends Frame<ModuleButton> {
public class ModulePanel extends Panel<ModuleButton> {
public boolean extended;
public Minecraft mc = Minecraft.getInstance();
public ModuleFrame(int x, int y, int w, int h) {
public ModulePanel(int x, int y, int w, int h) {
super("módulos", x, y, w, h);
dragging = false;
extended = true;
@@ -75,7 +75,7 @@ public class ModuleFrame extends Frame<ModuleButton> {
gui.fill( // fondo para los botones
x, renderY + h + 1,
x + w, renderY + h + totalHeight,
Colors.frameBGColor.getRGB());
Colors.panelBgColor.getRGB());
// dibujar los botones para cada módulo
int buttonY = renderY + h + 1;
@@ -92,14 +92,14 @@ public class ModuleFrame extends Frame<ModuleButton> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
// registrar clics
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) { // clic izquierdo para arrastrarlo
dragging = true;
dragX = mouseX - x;
dragY = mouseY - y;
} else if (button == 1) { // clic derecho para extenderlo
extended = !extended;
Sputnik.EVENT_BUS.post(new ModuleFrameEvent.Extend());
Sputnik.EVENT_BUS.post(new ModulePanelEvent.Extend());
}
}
@@ -116,7 +116,7 @@ public class ModuleFrame extends Frame<ModuleButton> {
// detectar cuándo se suelta el clic
@Override
public void mouseReleased(int mouseX, int mouseY, int button) {
ClickGUI.INSTANCE.unselect(this);
ClickGui.INSTANCE.unselect(this);
if (button == 0 && dragging)
dragging = false;
@@ -130,7 +130,7 @@ public class ModuleFrame extends Frame<ModuleButton> {
}
if (isHovered(mouseX, mouseY))
Sputnik.EVENT_BUS.post(new ModuleFrameEvent.Move());
Sputnik.EVENT_BUS.post(new ModulePanelEvent.Move());
}
// actualizar la posición al arrastrar el marco
@@ -1,14 +1,14 @@
package me.retucio.sputnik.ui.widgets.frames;
package me.retucio.sputnik.ui.widgets.panels;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.sputnik.SettingsFrameEvent;
import me.retucio.sputnik.event.sputnik.SettingsPanelEvent;
import me.retucio.sputnik.module.Module;
import me.retucio.sputnik.module.setting.*;
import me.retucio.sputnik.module.setting.settings.*;
import me.retucio.sputnik.ui.widgets.buttons.settings.*;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.buttons.*;
import me.retucio.sputnik.ui.widgets.Frame;
import me.retucio.sputnik.ui.widgets.Panel;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -19,13 +19,13 @@ import java.util.List;
// marco para los botones de los ajustes de cada módulo
public class SettingsFrame extends Frame<SettingButton<? extends Setting<?>>> {
public class SettingsPanel extends Panel<SettingButton<? extends Setting<?>>> {
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 SettingsPanel(Module module, int x, int y, int w, int h) {
super("ajustes de " + module.getName(), x, y, w, h);
this.module = module;
this.settingGroups = module.getSgs();
@@ -98,7 +98,7 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting<?>>> {
}
// fondo del marco
gui.fill(x, descBoxTop - PADDING + 1, x + w, descBoxTop + totalHeight, Colors.frameBGColor.getRGB());
gui.fill(x, descBoxTop - PADDING + 1, x + w, descBoxTop + totalHeight, Colors.panelBgColor.getRGB());
// fondo de la descripción
gui.fill(x + PADDING, descBoxTop, x + w - PADDING, descBoxBottom, Colors.buttonColor.getRGB());
@@ -162,9 +162,9 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting<?>>> {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (isCloseButtonHovered(mouseX, mouseY)) {
ClickGUI.INSTANCE.closeSettingsFrame(this.module);
ClickGui.INSTANCE.closeSettingsPanel(this.module);
return;
}
if (button == 0) {
@@ -172,7 +172,7 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting<?>>> {
dragX = mouseX - x;
dragY = mouseY - y;
} else if (button == 1) {
ClickGUI.INSTANCE.closeSettingsFrame(module);
ClickGui.INSTANCE.closeSettingsPanel(module);
}
}
@@ -198,7 +198,7 @@ public class SettingsFrame extends Frame<SettingButton<? extends Setting<?>>> {
dragging = false;
if (isHovered(mouseX, mouseY)) {
Sputnik.EVENT_BUS.post(new SettingsFrameEvent.Move(this));
Sputnik.EVENT_BUS.post(new SettingsPanelEvent.Move(this));
}
}
@@ -1,22 +1,22 @@
package me.retucio.sputnik.ui.widgets.frames.settings;
package me.retucio.sputnik.ui.widgets.panels.settings;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.event.sputnik.GUISettingsFrameEvent;
import me.retucio.sputnik.module.modules.client.GUI;
import me.retucio.sputnik.event.sputnik.ClientSettingsPanelEvent;
import me.retucio.sputnik.module.modules.client.ClientSettingsModule;
import me.retucio.sputnik.module.setting.SettingGroup;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.ui.widgets.buttons.SettingButton;
import me.retucio.sputnik.util.Colors;
import net.minecraft.client.gui.GuiGraphicsExtractor;
public class ClientSettingsFrame extends SettingsFrame {
public class ClientSettingsPanel extends SettingsPanel {
public static final GUI guiSettings = new GUI();
public static final ClientSettingsModule clientSettings = new ClientSettingsModule();
public boolean extended = false;
public ClientSettingsFrame(int x, int y, int w, int h) {
super(guiSettings, x, y, w, h);
public ClientSettingsPanel(int x, int y, int w, int h) {
super(clientSettings, x, y, w, h);
title = "ajustes del mod";
}
@@ -46,14 +46,14 @@ public class ClientSettingsFrame extends SettingsFrame {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (button == 0) {
dragging = true;
dragX = mouseX - x;
dragY = mouseY - y;
} else if (button == 1) {
extended = !extended;
Sputnik.EVENT_BUS.post(new GUISettingsFrameEvent.Extend());
Sputnik.EVENT_BUS.post(new ClientSettingsPanelEvent.Extend());
}
}
@@ -76,9 +76,9 @@ public class ClientSettingsFrame extends SettingsFrame {
@Override
public void mouseReleased(int mouseX, int mouseY, int button) {
ClickGUI.INSTANCE.unselect(this);
ClickGui.INSTANCE.unselect(this);
if (button == 0 && dragging)
Sputnik.EVENT_BUS.post(new GUISettingsFrameEvent.Move());
Sputnik.EVENT_BUS.post(new ClientSettingsPanelEvent.Move());
super.mouseReleased(mouseX, mouseY, button);
}
@@ -1,4 +1,4 @@
package me.retucio.sputnik.ui.widgets.frames.settings;
package me.retucio.sputnik.ui.widgets.panels.settings;
import me.retucio.sputnik.module.Category;
import me.retucio.sputnik.module.Module;
@@ -9,8 +9,8 @@ import me.retucio.sputnik.module.setting.settings.NumberSetting;
import me.retucio.sputnik.ui.widgets.buttons.*;
import me.retucio.sputnik.ui.widgets.buttons.settings.SliderButton;
import me.retucio.sputnik.ui.widgets.buttons.settings.ToggleButton;
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
import me.retucio.sputnik.ui.screen.ClickGUI;
import me.retucio.sputnik.ui.widgets.panels.SettingsPanel;
import me.retucio.sputnik.ui.screen.ClickGui;
import me.retucio.sputnik.util.Colors;
import me.retucio.sputnik.util.render.DrawUtil;
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -18,7 +18,7 @@ import net.minecraft.client.gui.GuiGraphicsExtractor;
import java.awt.*;
public class ColorPickerFrame extends SettingsFrame {
public class ColorPickerPanel extends SettingsPanel {
private final ColorSetting colorSetting;
private Color currentColor;
@@ -39,7 +39,7 @@ public class ColorPickerFrame extends SettingsFrame {
public final Module dummyModule;
public ColorPickerFrame(Module module, ColorSetting colorSetting, int x, int y, int w, int h) {
public ColorPickerPanel(Module module, ColorSetting colorSetting, int x, int y, int w, int h) {
super(module, x, y, w, h);
this.colorSetting = colorSetting;
@@ -175,7 +175,7 @@ public class ColorPickerFrame extends SettingsFrame {
int bgY2 = bgY1 + previewHeight + saturationBrightnessPickerHeight + alphaPickerHeight
+ buttonAreaHeight + (padding * 6) - 11;
gui.fill(bgX1, bgY1, bgX2, bgY2, Colors.frameBGColor.getRGB());
gui.fill(bgX1, bgY1, bgX2, bgY2, Colors.panelBgColor.getRGB());
DrawUtil.drawBorder(gui, previewX, previewY, previewWidth, previewHeight, -1);
@@ -314,9 +314,9 @@ public class ColorPickerFrame extends SettingsFrame {
@Override
public void mouseClicked(int mouseX, int mouseY, int button) {
if (isHovered(mouseX, mouseY) && ClickGUI.INSTANCE.trySelect(this)) {
if (isHovered(mouseX, mouseY) && ClickGui.INSTANCE.trySelect(this)) {
if (isCloseButtonHovered(mouseX, mouseY)) {
ClickGUI.INSTANCE.closeSettingsFrame(this.dummyModule);
ClickGui.INSTANCE.closeSettingsPanel(this.dummyModule);
return;
}
if (button == 0) {
@@ -324,7 +324,7 @@ public class ColorPickerFrame extends SettingsFrame {
dragX = (int) (mouseX - x);
dragY = (int) (mouseY - y);
} else if (button == 1) {
ClickGUI.INSTANCE.closeSettingsFrame(dummyModule);
ClickGui.INSTANCE.closeSettingsPanel(dummyModule);
}
}
@@ -4,7 +4,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
import me.retucio.sputnik.Sputnik;
import me.retucio.sputnik.command.CommandManager;
import me.retucio.sputnik.event.sputnik.LoadModuleManagerEvent;
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
import me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
@@ -16,7 +16,7 @@ public class ChatUtil {
private static String prefix = getDefaultPrefix();
public static void onLoadModuleManager(LoadModuleManagerEvent event) {
prefix = Colors.getFormatting(Colors.mainColor) + "[" + ClientSettingsFrame.guiSettings.chatName.getValue() + "] ";
prefix = Colors.getFormatting(Colors.mainColor) + "[" + ClientSettingsPanel.clientSettings.chatName.getValue() + "] ";
}
public static void simulateChatMessage(String message) {
@@ -80,7 +80,7 @@ public class ChatUtil {
}
public static String getJustPrefix() {
return ClientSettingsFrame.guiSettings.chatName.getValue();
return ClientSettingsPanel.clientSettings.chatName.getValue();
}
public static String getPrefixNoFormatting() {
@@ -4,20 +4,20 @@ import net.minecraft.ChatFormatting;
import java.awt.Color;
import static me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame.guiSettings;
import static me.retucio.sputnik.ui.widgets.panels.settings.ClientSettingsPanel.clientSettings;
// clase para los colores
// si se ve especificado como color en algún lado "-1", significa blanco
public class Colors {
public static int red = guiSettings.color.getR();
public static int green = guiSettings.color.getG();
public static int blue = guiSettings.color.getB();
public static int alpha = guiSettings.color.getA();
public static int red = clientSettings.color.getR();
public static int green = clientSettings.color.getG();
public static int blue = clientSettings.color.getB();
public static int alpha = clientSettings.color.getA();
public static Color mainColor;
public static Color frameBGColor = new Color(40, 40, 40, 75);
public static Color panelBgColor = new Color(40, 40, 40, 75);
public static Color buttonColor = new Color(75, 75, 75, 100);
public static Color hudEditorScreenBackgroundColor = new Color(0, 0, 0, 120);
public static Color instructionsTextColor = new Color(190, 190, 190, 255);
@@ -83,6 +83,7 @@ public class KeyUtil {
case GLFW.GLFW_KEY_PAGE_UP -> "pág. arriba";
case GLFW.GLFW_KEY_PAGE_DOWN -> "pág. abajo";
case GLFW.GLFW_KEY_CAPS_LOCK -> "bloq. mayús.";
case GLFW.GLFW_KEY_INSERT -> "insertar";
default -> {
if (key >= GLFW.GLFW_KEY_F1 && key <= GLFW.GLFW_KEY_F25)
yield "F" + (key - GLFW.GLFW_KEY_F1 + 1); // F1–F25
@@ -3,7 +3,7 @@ package me.retucio.sputnik.util;
import com.github.retucio.neutrino.EventListener;
import me.retucio.sputnik.event.TickEvent;
import me.retucio.sputnik.module.ModuleManager;
import me.retucio.sputnik.module.modules.client.HUD;
import me.retucio.sputnik.module.modules.client.Hud;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.Vec3i;
import net.minecraft.world.phys.Vec3;
@@ -57,12 +57,12 @@ public class MiscUtil {
public static String getFormattedTime(long timeMillis) {
try {
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
Hud hud = ModuleManager.INSTANCE.getModuleByClass(Hud.class);
Instant instant = Instant.ofEpochMilli(timeMillis);
ZoneOffset offset = ZoneOffset.ofHours(hud.timezone.getIntValue());
LocalTime time = LocalTime.from(instant.atOffset(offset));
boolean is24 = hud.timeFormat.is(HUD.TimeFormat.TWENTY_FOUR_HOUR);
boolean is24 = hud.timeFormat.is(Hud.TimeFormat.TWENTY_FOUR_HOUR);
DateTimeFormatter format = DateTimeFormatter.ofPattern(is24 ? "HH:mm" : "hh:mm a");
return time.format(format);
} catch (Exception e) {