From 1386ff7be324cbc1a9fe191e666bc4f6d57e2527 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 20:09:25 -0700 Subject: [PATCH 01/10] add some settings, not working --- src/main/java/dsns/betterhud/mods/Biome.java | 6 ++ .../java/dsns/betterhud/mods/Coordinates.java | 6 ++ .../java/dsns/betterhud/util/BaseMod.java | 4 +- .../java/dsns/betterhud/util/ModSettings.java | 50 ++++++++++++++ .../java/dsns/betterhud/util/Setting.java | 69 +++++++++++++++++++ 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dsns/betterhud/util/ModSettings.java create mode 100644 src/main/java/dsns/betterhud/util/Setting.java diff --git a/src/main/java/dsns/betterhud/mods/Biome.java b/src/main/java/dsns/betterhud/mods/Biome.java index 52f0b3e..9f64636 100644 --- a/src/main/java/dsns/betterhud/mods/Biome.java +++ b/src/main/java/dsns/betterhud/mods/Biome.java @@ -10,12 +10,18 @@ import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; public class Biome implements BaseMod { @Override public String getModID() { return "Biome"; } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-right"); + } @Override public CustomText onStartTick(MinecraftClient client) { diff --git a/src/main/java/dsns/betterhud/mods/Coordinates.java b/src/main/java/dsns/betterhud/mods/Coordinates.java index 118ad0c..5b6bb25 100644 --- a/src/main/java/dsns/betterhud/mods/Coordinates.java +++ b/src/main/java/dsns/betterhud/mods/Coordinates.java @@ -4,12 +4,18 @@ import net.minecraft.entity.player.PlayerEntity; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; public class Coordinates implements BaseMod { @Override public String getModID() { return "Coordinates"; } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-right"); + } @Override public CustomText onStartTick(MinecraftClient client) { diff --git a/src/main/java/dsns/betterhud/util/BaseMod.java b/src/main/java/dsns/betterhud/util/BaseMod.java index 0bebb85..3722433 100644 --- a/src/main/java/dsns/betterhud/util/BaseMod.java +++ b/src/main/java/dsns/betterhud/util/BaseMod.java @@ -4,6 +4,8 @@ public interface BaseMod { public String getModID(); - + + public ModSettings getModSettings(); + public CustomText onStartTick(MinecraftClient client); } diff --git a/src/main/java/dsns/betterhud/util/ModSettings.java b/src/main/java/dsns/betterhud/util/ModSettings.java new file mode 100644 index 0000000..c34bd63 --- /dev/null +++ b/src/main/java/dsns/betterhud/util/ModSettings.java @@ -0,0 +1,50 @@ +package dsns.betterhud.util; + +import java.util.HashMap; + +public class ModSettings { + private HashMap settings = new HashMap(); + + public ModSettings() { + settings.put("enabled", Setting.createBooleanSetting(true)); + + settings.put( + "orientation", + Setting.createStringSetting( + "top-left", + new String[] { + "top-left", + "top-right", + "bottom-left", + "bottom-right", + } + ) + ); + + settings.put("customPosition", Setting.createBooleanSetting(false)); + settings.put("customX", Setting.createIntegerSetting(0, 0, 100)); + settings.put("customY", Setting.createIntegerSetting(0, 0, 100)); + settings.put("textColor", Setting.createColorSetting(0xffffffff)); + settings.put("backgroundColor", Setting.createColorSetting(0x00000000)); + } + + public ModSettings(String orientation) { + super(); + settings.replace( + "orientation", + Setting.createStringSetting( + orientation, + new String[] { + "top-left", + "top-right", + "bottom-left", + "bottom-right", + } + ) + ); + } + + public HashMap getSettings() { + return settings; + } +} diff --git a/src/main/java/dsns/betterhud/util/Setting.java b/src/main/java/dsns/betterhud/util/Setting.java new file mode 100644 index 0000000..ae3d93d --- /dev/null +++ b/src/main/java/dsns/betterhud/util/Setting.java @@ -0,0 +1,69 @@ +package dsns.betterhud.util; + +public class Setting { + + private String value; + private String type; + private String[] possibleValues; + + public Setting(String value, String type, String[] possibleValues) { + this.value = value; + this.type = type; + this.possibleValues = possibleValues; + } + + public static Setting createStringSetting( + String value, + String[] possibleValues + ) { + return new Setting(value, "string", possibleValues); + } + + public static Setting createBooleanSetting(boolean value) { + return new Setting( + String.valueOf(value), + "boolean", + new String[] { "true", "false" } + ); + } + + public static Setting createIntegerSetting(int value, int min, int max) { + return new Setting( + String.valueOf(value), + "integer", + new String[] { String.valueOf(min), String.valueOf(max) } + ); + } + + public static Setting createColorSetting(int value) { + return new Setting( + String.valueOf(value), + "color", + new String[] { String.valueOf(0x00000000), String.valueOf(0xffffffff) } + ); + } + + public static Setting createDoubleSetting( + double value, + double min, + double max + ) { + return new Setting( + String.valueOf(value), + "double", + new String[] { String.valueOf(min), String.valueOf(max) } + ); + } + + public String getType() { + return type; + } + + public String getValue() { + return value; + } + + public String[] getPossibleValues() { + return possibleValues; + } +} From bda0caa2616256d4063a08c42c5d7c67b92110a0 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 21:26:51 -0700 Subject: [PATCH 02/10] part 2 --- src/main/java/dsns/betterhud/BetterHUD.java | 45 ++- .../java/dsns/betterhud/BetterHUDGUI.java | 293 ++++++++++-------- src/main/java/dsns/betterhud/Config.java | 208 ++++--------- src/main/java/dsns/betterhud/ModMenu.java | 224 ++++++------- .../mixin/MinecraftClientAccessor.java | 10 +- src/main/java/dsns/betterhud/mods/Biome.java | 183 ++++++----- .../java/dsns/betterhud/mods/Coordinates.java | 64 ++-- src/main/java/dsns/betterhud/mods/FPS.java | 27 +- src/main/java/dsns/betterhud/mods/Facing.java | 67 ++-- .../java/dsns/betterhud/mods/Momentum.java | 45 ++- src/main/java/dsns/betterhud/mods/Ping.java | 45 ++- src/main/java/dsns/betterhud/mods/Time.java | 31 +- .../java/dsns/betterhud/util/BaseMod.java | 10 +- .../java/dsns/betterhud/util/CustomText.java | 46 +-- .../java/dsns/betterhud/util/ModSettings.java | 11 +- .../java/dsns/betterhud/util/Setting.java | 22 +- 16 files changed, 707 insertions(+), 624 deletions(-) diff --git a/src/main/java/dsns/betterhud/BetterHUD.java b/src/main/java/dsns/betterhud/BetterHUD.java index 348f931..4c20b6d 100644 --- a/src/main/java/dsns/betterhud/BetterHUD.java +++ b/src/main/java/dsns/betterhud/BetterHUD.java @@ -1,28 +1,47 @@ package dsns.betterhud; +import dsns.betterhud.mods.*; +import dsns.betterhud.util.BaseMod; +import java.util.ArrayList; +import java.util.Arrays; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; import net.minecraft.util.Identifier; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Environment(EnvType.CLIENT) public class BetterHUD implements ClientModInitializer { - // This logger is used to write text to the console and the log file. - // It is considered best practice to use your mod id as the logger's name. - // That way, it's clear which mod wrote info, warnings, and errors. - public static final Logger LOGGER = LoggerFactory.getLogger("betterhud"); - @Override - public void onInitializeClient() { - Config.configure(); + // This logger is used to write text to the console and the log file. + // It is considered best practice to use your mod id as the logger's name. + // That way, it's clear which mod wrote info, warnings, and errors. + public static final Logger LOGGER = LoggerFactory.getLogger("betterhud"); + + ArrayList mods = new ArrayList<>( + Arrays.asList( + new FPS(), + new Ping(), + new Momentum(), + new Coordinates(), + new Biome(), + new Facing(), + new Time() + ) + ); + + @Override + public void onInitializeClient() { + Config.configure(mods); - BetterHUDGUI betterHUDGUI = new BetterHUDGUI(); - HudElementRegistry.addLast(Identifier.of("betterhud", "hud"), betterHUDGUI::onHudRender); - ClientTickEvents.START_CLIENT_TICK.register(betterHUDGUI); - } -} \ No newline at end of file + BetterHUDGUI betterHUDGUI = new BetterHUDGUI(); + HudElementRegistry.addLast( + Identifier.of("betterhud", "hud"), + betterHUDGUI::onHudRender + ); + ClientTickEvents.START_CLIENT_TICK.register(betterHUDGUI); + } +} diff --git a/src/main/java/dsns/betterhud/BetterHUDGUI.java b/src/main/java/dsns/betterhud/BetterHUDGUI.java index a909e1a..2354dd6 100644 --- a/src/main/java/dsns/betterhud/BetterHUDGUI.java +++ b/src/main/java/dsns/betterhud/BetterHUDGUI.java @@ -1,136 +1,179 @@ package dsns.betterhud; +import dsns.betterhud.util.BaseMod; +import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import java.util.ArrayList; import java.util.List; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderTickCounter; -import dsns.betterhud.mods.*; -import dsns.betterhud.util.BaseMod; -import dsns.betterhud.util.CustomText; public class BetterHUDGUI implements ClientTickEvents.StartTick { - private final MinecraftClient client = MinecraftClient.getInstance(); - private final List topLeftText = new ObjectArrayList<>(); - private final List topRightText = new ObjectArrayList<>(); - private final List bottomLeftList = new ObjectArrayList<>(); - private final List bottomRightText = new ObjectArrayList<>(); - private final List customPositionText = new ObjectArrayList<>(); - - @Override - public void onStartTick(MinecraftClient client) { - this.topLeftText.clear(); - this.topRightText.clear(); - this.bottomLeftList.clear(); - this.bottomRightText.clear(); - this.customPositionText.clear(); - - ArrayList mods = new ArrayList<>(); - mods.add(new FPS()); - mods.add(new Ping()); - mods.add(new Momentum()); - mods.add(new Coordinates()); - mods.add(new Biome()); - mods.add(new Facing()); - mods.add(new Time()); - - for (BaseMod mod : mods) { - ModSettings modSettings = Config.settings.get(mod.getModID()); - if (!modSettings.enabled) - continue; - - CustomText modText = mod.onStartTick(client); - if (modText == null) - continue; - - if (modSettings.customPosition) { - modText.customPosition = true; - modText.customX = modSettings.customX; - modText.customY = modSettings.customY; - this.customPositionText.add(modText); - } else if (modSettings.orientation.equals("top-left")) { - this.topLeftText.add(modText); - } else if (modSettings.orientation.equals("top-right")) { - this.topRightText.add(modText); - } else if (modSettings.orientation.equals("bottom-left")) { - this.bottomLeftList.add(modText); - } else if (modSettings.orientation.equals("bottom-right")) { - this.bottomRightText.add(modText); - } - } - } - - public void onHudRender(DrawContext drawContext, RenderTickCounter tickCounter) { - if (client.getDebugHud().shouldShowDebugHud()) - return; - if (client.options.hudHidden) - return; - - int x = Config.horizontalMargin; - int y = Config.verticalMargin; - - for (CustomText text : topLeftText) { - drawString(drawContext, text, x, y); - - y += (client.textRenderer.fontHeight - 1) + (Config.verticalPadding * 2) + Config.lineHeight; - } - - y = client.getWindow().getScaledHeight() - Config.verticalMargin; - - for (CustomText text : bottomLeftList) { - y -= (client.textRenderer.fontHeight - 1) + (Config.verticalPadding * 2); - drawString(drawContext, text, x, y); - y -= Config.lineHeight; - } - - y = Config.verticalMargin; - for (CustomText text : topRightText) { - int offset = (client.textRenderer.getWidth(text.text) - 1) + (Config.horizontalPadding * 2) - + Config.horizontalMargin; - x = client.getWindow().getScaledWidth() - offset; - drawString(drawContext, text, x, y); - - y += (client.textRenderer.fontHeight - 1) + (Config.verticalPadding * 2) + Config.lineHeight; - } - - y = client.getWindow().getScaledHeight() - Config.verticalMargin; - for (CustomText text : bottomRightText) { - int offset = (client.textRenderer.getWidth(text.text) - 1) + (Config.horizontalPadding * 2) - + Config.horizontalMargin; - x = client.getWindow().getScaledWidth() - offset; - - y -= (client.textRenderer.fontHeight - 1) + (Config.verticalPadding * 2); - - drawString(drawContext, text, x, y); - - y -= Config.lineHeight; - } - - for (CustomText text : customPositionText) { - float xPercent = text.customX / 100.0f; - float yPercent = text.customY / 100.0f; - - int maxX = client.getWindow().getScaledWidth() - (Config.horizontalPadding * 2) - - (client.textRenderer.getWidth(text.text) - 1); - int maxY = client.getWindow().getScaledHeight() - (Config.verticalPadding * 2) - - (client.textRenderer.fontHeight - 1); - - int scaledX = (int) (xPercent * maxX); - int scaledY = (int) (yPercent * maxY); - - drawString(drawContext, text, scaledX, scaledY); - } - } - - private void drawString(DrawContext drawContext, CustomText text, int x, int y) { - drawContext.fill(x, y, - x + (client.textRenderer.getWidth(text.text) - 1) + (Config.horizontalPadding * 2), - y + (client.textRenderer.fontHeight - 1) + (Config.verticalPadding * 2), text.backgroundColor); - - drawContext.drawText(client.textRenderer, text.text, x + Config.horizontalPadding, y + Config.verticalPadding, - text.color, true); - } + + public static int verticalPadding = 4; + public static int horizontalPadding = 4; + + public static int verticalMargin = 1; + public static int horizontalMargin = 1; + + public static int lineHeight = 1; + + private final MinecraftClient client = MinecraftClient.getInstance(); + private final List topLeftText = new ObjectArrayList<>(); + private final List topRightText = new ObjectArrayList<>(); + private final List bottomLeftList = new ObjectArrayList<>(); + private final List bottomRightText = new ObjectArrayList<>(); + private final List customPositionText = new ObjectArrayList<>(); + + private ArrayList mods = new ArrayList<>(); + + public void instantiateMods(ArrayList mods) { + this.mods = mods; + } + + @Override + public void onStartTick(MinecraftClient client) { + this.topLeftText.clear(); + this.topRightText.clear(); + this.bottomLeftList.clear(); + this.bottomRightText.clear(); + this.customPositionText.clear(); + + for (BaseMod mod : mods) { + ModSettings modSettings = mod.getModSettings(); + if (!modSettings.getSetting("enabled").getBooleanValue()) continue; + + CustomText modText = mod.onStartTick(client); + if (modText == null) continue; + + String orientation = modSettings + .getSetting("orientation") + .getStringValue(); + + if (modSettings.getSetting("customPosition").getBooleanValue()) { + modText.customPosition = true; + modText.customX = modSettings + .getSetting("customX") + .getIntValue(); + modText.customY = modSettings + .getSetting("customY") + .getIntValue(); + this.customPositionText.add(modText); + } else if (orientation.equals("top-left")) { + this.topLeftText.add(modText); + } else if (orientation.equals("top-right")) { + this.topRightText.add(modText); + } else if (orientation.equals("bottom-left")) { + this.bottomLeftList.add(modText); + } else if (orientation.equals("bottom-right")) { + this.bottomRightText.add(modText); + } + } + } + + public void onHudRender( + DrawContext drawContext, + RenderTickCounter tickCounter + ) { + if (client.getDebugHud().shouldShowDebugHud()) return; + if (client.options.hudHidden) return; + + int x = horizontalMargin; + int y = verticalMargin; + + for (CustomText text : topLeftText) { + drawString(drawContext, text, x, y); + + y += + (client.textRenderer.fontHeight - 1) + + (verticalPadding * 2) + + lineHeight; + } + + y = client.getWindow().getScaledHeight() - verticalMargin; + + for (CustomText text : bottomLeftList) { + y -= (client.textRenderer.fontHeight - 1) + (verticalPadding * 2); + drawString(drawContext, text, x, y); + y -= lineHeight; + } + + y = verticalMargin; + for (CustomText text : topRightText) { + int offset = + (client.textRenderer.getWidth(text.text) - 1) + + (horizontalPadding * 2) + + horizontalMargin; + x = client.getWindow().getScaledWidth() - offset; + drawString(drawContext, text, x, y); + + y += + (client.textRenderer.fontHeight - 1) + + (verticalPadding * 2) + + lineHeight; + } + + y = client.getWindow().getScaledHeight() - verticalMargin; + for (CustomText text : bottomRightText) { + int offset = + (client.textRenderer.getWidth(text.text) - 1) + + (horizontalPadding * 2) + + horizontalMargin; + x = client.getWindow().getScaledWidth() - offset; + + y -= (client.textRenderer.fontHeight - 1) + (verticalPadding * 2); + + drawString(drawContext, text, x, y); + + y -= lineHeight; + } + + for (CustomText text : customPositionText) { + float xPercent = text.customX / 100.0f; + float yPercent = text.customY / 100.0f; + + int maxX = + client.getWindow().getScaledWidth() - + (horizontalPadding * 2) - + (client.textRenderer.getWidth(text.text) - 1); + int maxY = + client.getWindow().getScaledHeight() - + (verticalPadding * 2) - + (client.textRenderer.fontHeight - 1); + + int scaledX = (int) (xPercent * maxX); + int scaledY = (int) (yPercent * maxY); + + drawString(drawContext, text, scaledX, scaledY); + } + } + + private void drawString( + DrawContext drawContext, + CustomText text, + int x, + int y + ) { + drawContext.fill( + x, + y, + x + + (client.textRenderer.getWidth(text.text) - 1) + + (horizontalPadding * 2), + y + (client.textRenderer.fontHeight - 1) + (verticalPadding * 2), + text.backgroundColor + ); + + drawContext.drawText( + client.textRenderer, + text.text, + x + horizontalPadding, + y + verticalPadding, + text.color, + true + ); + } } diff --git a/src/main/java/dsns/betterhud/Config.java b/src/main/java/dsns/betterhud/Config.java index b606a08..57e0425 100644 --- a/src/main/java/dsns/betterhud/Config.java +++ b/src/main/java/dsns/betterhud/Config.java @@ -1,158 +1,72 @@ package dsns.betterhud; +import dsns.betterhud.util.BaseMod; +import dsns.betterhud.util.ModSettings; +import dsns.betterhud.util.Setting; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; import java.util.Properties; - import net.fabricmc.loader.api.FabricLoader; -class ModSettings { - public String orientation; - public boolean enabled; - public boolean customPosition; - public int customX; - public int customY; - - public ModSettings(String orientation, boolean enabled, boolean customPosition, int customX, int customY) { - this.orientation = orientation; - this.enabled = enabled; - this.customPosition = customPosition; - this.customX = customX; - this.customY = customY; - } - - public ModSettings(String orientation) { - this(orientation, true, false, 0, 0); - } - - public ModSettings() { - this("top-left", true, false, 0, 0); - } -} - public class Config { - public static int verticalPadding = 4; - public static int horizontalPadding = 4; - - public static int verticalMargin = 1; - public static int horizontalMargin = 1; - - public static int lineHeight = 1; - - public static int textColor = 0xffffffff; - public static int backgroundColor = 0x88000000; - - public static HashMap settings = new HashMap(); - - private static final Path configPath = FabricLoader.getInstance().getConfigDir() - .resolve("betterhud.properties"); - - public static HashMap getDefaults() { - HashMap defaults = new HashMap(); - - defaults.put("FPS", new ModSettings("top-left")); - defaults.put("Ping", new ModSettings("top-left")); - defaults.put("Momentum", new ModSettings("top-left")); - defaults.put("Coordinates", new ModSettings("top-right")); - defaults.put("Biome", new ModSettings("top-right")); - defaults.put("Facing", new ModSettings("top-right")); - defaults.put("Time", new ModSettings("bottom-right")); - - return defaults; - } - - public static void configure() { - if (settings.size() == 0) { - settings = getDefaults(); - } - - if (Files.exists(configPath)) { - deserialize(); - } else { - serialize(); - } - } - - public static void serialize() { - Properties prop = new Properties(); - for (String modID : settings.keySet()) { - ModSettings modSettings = settings.get(modID); - prop.setProperty(modID + ".enabled", String.valueOf(modSettings.enabled)); - prop.setProperty(modID + ".orientation", modSettings.orientation); - prop.setProperty(modID + ".customPosition", String.valueOf(modSettings.customPosition)); - prop.setProperty(modID + ".customX", String.valueOf(modSettings.customX)); - prop.setProperty(modID + ".customY", String.valueOf(modSettings.customY)); - } - - prop.setProperty("verticalPadding", String.valueOf(Config.verticalPadding)); - prop.setProperty("horizontalPadding" + "", String.valueOf(Config.horizontalPadding)); - prop.setProperty("verticalMargin", String.valueOf(Config.verticalMargin)); - prop.setProperty("horizontalMargin" + "", String.valueOf(Config.horizontalMargin)); - prop.setProperty("lineHeight", String.valueOf(Config.lineHeight)); - prop.setProperty("textColor", String.valueOf(Config.textColor)); - prop.setProperty("backgroundColor", String.valueOf(Config.backgroundColor)); - - try { - prop.store(Files.newOutputStream(configPath), null); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void deserialize() { - Properties prop = new Properties(); - try { - prop.load(Files.newInputStream(configPath)); - } catch (Exception e) { - e.printStackTrace(); - } - - for (String modID : settings.keySet()) { - ModSettings modSettings = settings.get(modID); - modSettings.enabled = getBooleanProperty(prop, modID + ".enabled", modSettings.enabled); - modSettings.orientation = getStringProperty(prop, modID + ".orientation", modSettings.orientation); - modSettings.customPosition = getBooleanProperty(prop, modID + ".customPosition", - modSettings.customPosition); - modSettings.customX = getIntProperty(prop, modID + ".customX", modSettings.customX); - modSettings.customY = getIntProperty(prop, modID + ".customY", modSettings.customY); - } - - Config.verticalPadding = getIntProperty(prop, "verticalPadding", Config.verticalPadding); - Config.horizontalPadding = getIntProperty(prop, "horizontalPadding", Config.horizontalPadding); - Config.verticalMargin = getIntProperty(prop, "verticalMargin", Config.verticalMargin); - Config.horizontalMargin = getIntProperty(prop, "horizontalMargin", Config.horizontalMargin); - Config.lineHeight = getIntProperty(prop, "lineHeight", Config.lineHeight); - Config.textColor = getIntProperty(prop, "textColor", Config.textColor); - Config.backgroundColor = getIntProperty(prop, "backgroundColor", Config.backgroundColor); - - serialize(); - } - - private static String getStringProperty(Properties prop, String key, String defaultValue) { - try { - String value = prop.getProperty(key); - return (value != null) ? value : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - - private static int getIntProperty(Properties prop, String key, int defaultValue) { - try { - String value = prop.getProperty(key); - return (value != null) ? Integer.parseInt(value) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } - private static boolean getBooleanProperty(Properties prop, String key, boolean defaultValue) { - try { - String value = prop.getProperty(key); - return (value != null) ? Boolean.parseBoolean(value) : defaultValue; - } catch (Exception e) { - return defaultValue; - } - } + private static final Path configPath = FabricLoader.getInstance() + .getConfigDir() + .resolve("betterhud.properties"); + + private static HashMap settings = new HashMap<>(); + + public static void configure(ArrayList mods) { + if (settings.size() == 0) { + for (BaseMod mod : mods) { + settings.put(mod.getModID(), mod.getModSettings()); + } + } + + if (Files.exists(configPath)) { + deserialize(mods); + } else { + serialize(); + } + } + + public static void serialize() { + Properties prop = new Properties(); + prop.putAll(settings); + + try { + prop.store(Files.newOutputStream(configPath), null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void deserialize(ArrayList mods) { + Properties prop = new Properties(); + try { + prop.load(Files.newInputStream(configPath)); + } catch (Exception e) { + e.printStackTrace(); + } + + Map map = new HashMap(); + + for (final String name : prop.stringPropertyNames()) { + map.put(name, prop.getProperty(name)); + } + + // set each setting + for (ModSettings modSetting : settings.values()) { + for (Map.Entry entry : modSetting + .getSettings() + .entrySet()) { + entry.getValue().setValue(map.get(entry.getKey())); + } + } + + serialize(); + } } diff --git a/src/main/java/dsns/betterhud/ModMenu.java b/src/main/java/dsns/betterhud/ModMenu.java index fc55ca4..ee4c3be 100644 --- a/src/main/java/dsns/betterhud/ModMenu.java +++ b/src/main/java/dsns/betterhud/ModMenu.java @@ -1,112 +1,112 @@ -package dsns.betterhud; - -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.text.Text; - -import java.util.Arrays; - -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.clothconfig2.api.ConfigBuilder; -import me.shedaniel.clothconfig2.api.ConfigCategory; -import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; - -public class ModMenu implements ModMenuApi { - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) { - return parent -> null; - } - return parent -> { - ConfigBuilder builder = ConfigBuilder.create() - .setParentScreen(parent) - .setTitle(Text.literal("BetterHUD Settings")); - - // same as builder.setSavingRunnable(() -> Config.serialize()); - builder.setSavingRunnable(Config::serialize); - - ConfigEntryBuilder entryBuilder = builder.entryBuilder(); - - ConfigCategory general = builder.getOrCreateCategory(Text.literal("General")); - general.addEntry(entryBuilder - .startIntSlider(Text.literal("Vertical Padding"), Config.verticalPadding, 0, 40) - .setDefaultValue(4) - .setSaveConsumer(newValue -> Config.verticalPadding = newValue) - .build()); - - general.addEntry(entryBuilder - .startIntSlider(Text.literal("Horizontal Padding"), Config.horizontalPadding, 0, 40) - .setDefaultValue(4) - .setSaveConsumer(newValue -> Config.horizontalPadding = newValue) - .build()); - - general.addEntry(entryBuilder - .startIntSlider(Text.literal("Vertical Margin"), Config.verticalMargin, 0, 40) - .setDefaultValue(1) - .setSaveConsumer(newValue -> Config.verticalMargin = newValue) - .build()); - - general.addEntry(entryBuilder - .startIntSlider(Text.literal("Horizontal Margin"), Config.horizontalMargin, 0, 40) - .setDefaultValue(1) - .setSaveConsumer(newValue -> Config.horizontalMargin = newValue) - .build()); - - general.addEntry(entryBuilder - .startIntSlider(Text.literal("Line Height"), Config.lineHeight, 0, 40) - .setDefaultValue(1) - .setSaveConsumer(newValue -> Config.lineHeight = newValue) - .build()); - - general.addEntry(entryBuilder - .startAlphaColorField(Text.literal("Text Color"), Config.textColor) - .setDefaultValue(0xffffffff) - .setSaveConsumer(newValue -> Config.textColor = newValue) - .build()); - - general.addEntry(entryBuilder - .startAlphaColorField(Text.literal("Background Color"), Config.backgroundColor) - .setDefaultValue(0x88000000) - .setSaveConsumer(newValue -> Config.backgroundColor = newValue) - .build()); - - for (String modID : Config.getDefaults().keySet()) { - ConfigCategory category = builder.getOrCreateCategory(Text.literal(modID)); - - category.addEntry(entryBuilder - .startBooleanToggle(Text.literal("Enabled"), Config.settings.get(modID).enabled) - .setDefaultValue(Config.getDefaults().get(modID).enabled) - .setSaveConsumer(newValue -> Config.settings.get(modID).enabled = newValue) - .build()); - - category.addEntry(entryBuilder - .startStringDropdownMenu(Text.literal("Orientation"), Config.settings.get(modID).orientation) - .setDefaultValue(Config.getDefaults().get(modID).orientation) - .setSelections(Arrays.asList("top-left", "top-right", "bottom-left", "bottom-right")) - .setSuggestionMode(false) - .setSaveConsumer(newValue -> Config.settings.get(modID).orientation = newValue) - .build()); - - category.addEntry(entryBuilder - .startBooleanToggle(Text.literal("Custom Position"), Config.settings.get(modID).customPosition) - .setDefaultValue(Config.getDefaults().get(modID).customPosition) - .setSaveConsumer(newValue -> Config.settings.get(modID).customPosition = newValue) - .build()); - - category.addEntry(entryBuilder - .startIntSlider(Text.literal("Custom X"), Config.settings.get(modID).customX, 0, 100) - .setDefaultValue(Config.getDefaults().get(modID).customX) - .setSaveConsumer(newValue -> Config.settings.get(modID).customX = newValue) - .build()); - - category.addEntry(entryBuilder - .startIntSlider(Text.literal("Custom Y"), Config.settings.get(modID).customY, 0, 100) - .setDefaultValue(Config.getDefaults().get(modID).customY) - .setSaveConsumer(newValue -> Config.settings.get(modID).customY = newValue) - .build()); - } - - return builder.build(); - }; - } -} \ No newline at end of file +// package dsns.betterhud; + +// import net.fabricmc.loader.api.FabricLoader; +// import net.minecraft.text.Text; + +// import java.util.Arrays; + +// import com.terraformersmc.modmenu.api.ConfigScreenFactory; +// import com.terraformersmc.modmenu.api.ModMenuApi; +// import me.shedaniel.clothconfig2.api.ConfigBuilder; +// import me.shedaniel.clothconfig2.api.ConfigCategory; +// import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; + +// public class ModMenu implements ModMenuApi { +// @Override +// public ConfigScreenFactory getModConfigScreenFactory() { +// if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) { +// return parent -> null; +// } +// return parent -> { +// ConfigBuilder builder = ConfigBuilder.create() +// .setParentScreen(parent) +// .setTitle(Text.literal("BetterHUD Settings")); + +// // same as builder.setSavingRunnable(() -> Config.serialize()); +// builder.setSavingRunnable(Config::serialize); + +// ConfigEntryBuilder entryBuilder = builder.entryBuilder(); + +// ConfigCategory general = builder.getOrCreateCategory(Text.literal("General")); +// general.addEntry(entryBuilder +// .startIntSlider(Text.literal("Vertical Padding"), Config.verticalPadding, 0, 40) +// .setDefaultValue(4) +// .setSaveConsumer(newValue -> Config.verticalPadding = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startIntSlider(Text.literal("Horizontal Padding"), Config.horizontalPadding, 0, 40) +// .setDefaultValue(4) +// .setSaveConsumer(newValue -> Config.horizontalPadding = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startIntSlider(Text.literal("Vertical Margin"), Config.verticalMargin, 0, 40) +// .setDefaultValue(1) +// .setSaveConsumer(newValue -> Config.verticalMargin = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startIntSlider(Text.literal("Horizontal Margin"), Config.horizontalMargin, 0, 40) +// .setDefaultValue(1) +// .setSaveConsumer(newValue -> Config.horizontalMargin = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startIntSlider(Text.literal("Line Height"), Config.lineHeight, 0, 40) +// .setDefaultValue(1) +// .setSaveConsumer(newValue -> Config.lineHeight = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startAlphaColorField(Text.literal("Text Color"), Config.textColor) +// .setDefaultValue(0xffffffff) +// .setSaveConsumer(newValue -> Config.textColor = newValue) +// .build()); + +// general.addEntry(entryBuilder +// .startAlphaColorField(Text.literal("Background Color"), Config.backgroundColor) +// .setDefaultValue(0x88000000) +// .setSaveConsumer(newValue -> Config.backgroundColor = newValue) +// .build()); + +// for (String modID : Config.getDefaults().keySet()) { +// ConfigCategory category = builder.getOrCreateCategory(Text.literal(modID)); + +// category.addEntry(entryBuilder +// .startBooleanToggle(Text.literal("Enabled"), Config.settings.get(modID).enabled) +// .setDefaultValue(Config.getDefaults().get(modID).enabled) +// .setSaveConsumer(newValue -> Config.settings.get(modID).enabled = newValue) +// .build()); + +// category.addEntry(entryBuilder +// .startStringDropdownMenu(Text.literal("Orientation"), Config.settings.get(modID).orientation) +// .setDefaultValue(Config.getDefaults().get(modID).orientation) +// .setSelections(Arrays.asList("top-left", "top-right", "bottom-left", "bottom-right")) +// .setSuggestionMode(false) +// .setSaveConsumer(newValue -> Config.settings.get(modID).orientation = newValue) +// .build()); + +// category.addEntry(entryBuilder +// .startBooleanToggle(Text.literal("Custom Position"), Config.settings.get(modID).customPosition) +// .setDefaultValue(Config.getDefaults().get(modID).customPosition) +// .setSaveConsumer(newValue -> Config.settings.get(modID).customPosition = newValue) +// .build()); + +// category.addEntry(entryBuilder +// .startIntSlider(Text.literal("Custom X"), Config.settings.get(modID).customX, 0, 100) +// .setDefaultValue(Config.getDefaults().get(modID).customX) +// .setSaveConsumer(newValue -> Config.settings.get(modID).customX = newValue) +// .build()); + +// category.addEntry(entryBuilder +// .startIntSlider(Text.literal("Custom Y"), Config.settings.get(modID).customY, 0, 100) +// .setDefaultValue(Config.getDefaults().get(modID).customY) +// .setSaveConsumer(newValue -> Config.settings.get(modID).customY = newValue) +// .build()); +// } + +// return builder.build(); +// }; +// } +// } \ No newline at end of file diff --git a/src/main/java/dsns/betterhud/mixin/MinecraftClientAccessor.java b/src/main/java/dsns/betterhud/mixin/MinecraftClientAccessor.java index d106fd6..4620f79 100644 --- a/src/main/java/dsns/betterhud/mixin/MinecraftClientAccessor.java +++ b/src/main/java/dsns/betterhud/mixin/MinecraftClientAccessor.java @@ -6,8 +6,8 @@ @Mixin(MinecraftClient.class) public interface MinecraftClientAccessor { - @Accessor("currentFps") - static int getCurrentFPS() { - return 0; - } -} \ No newline at end of file + @Accessor("currentFps") + static int getCurrentFPS() { + return 0; + } +} diff --git a/src/main/java/dsns/betterhud/mods/Biome.java b/src/main/java/dsns/betterhud/mods/Biome.java index 9f64636..c7cfd02 100644 --- a/src/main/java/dsns/betterhud/mods/Biome.java +++ b/src/main/java/dsns/betterhud/mods/Biome.java @@ -1,100 +1,99 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.registry.RegistryKey; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; - import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.registry.RegistryKey; public class Biome implements BaseMod { - @Override - public String getModID() { - return "Biome"; - } - - @Override - public ModSettings getModSettings() { - return new ModSettings("top-right"); - } - - @Override - public CustomText onStartTick(MinecraftClient client) { - PlayerEntity player = client.player; - - if (player == null) - return null; - - // have to specify this because name of class is Biome - Optional> biome = client.world.getBiome(player.getBlockPos()) - .getKey(); - - if (!biome.isPresent()) - return null; - - String biomeString = formatSnakeCase(biome.get().getValue().getPath()); - - // used to maintain order when iterating - LinkedHashMap biomeColors = new LinkedHashMap<>(); - biomeColors.put("Bamboo", 0xff32cd32); - biomeColors.put("Snowy", 0xffffffff); - biomeColors.put("Frozen", 0xff87ceeb); - biomeColors.put("Void", 0xff000000); - biomeColors.put("Flower", 0xffff1493); - biomeColors.put("Ice", 0xff00ffff); - biomeColors.put("Soul Sand", 0xff8b4513); - biomeColors.put("Crimson", 0xffff0000); - biomeColors.put("Warped", 0xff00ff7f); - biomeColors.put("Nether", 0xffff4500); - biomeColors.put("End", 0xff8a2be2); - biomeColors.put("Mushroom", 0xffff00ff); - biomeColors.put("Savanna", 0xffff4500); - biomeColors.put("Badlands", 0xffcd853f); - biomeColors.put("Swamp", 0xff8b4513); - biomeColors.put("Shore", 0xff808080); - biomeColors.put("Taiga", 0xff556b2f); - biomeColors.put("Mountains", 0xffa9a9a9); - biomeColors.put("Jungle", 0xff00ff00); - biomeColors.put("Birch", 0xff7fff00); - biomeColors.put("Dark Forest", 0xff006400); - biomeColors.put("Forest", 0xff228b22); - biomeColors.put("River", 0xff4169e1); - biomeColors.put("Warm Ocean", 0xff26d9ed); - biomeColors.put("Cold Ocean", 0xff377de6); - biomeColors.put("Deep Ocean", 0xff377de6); - biomeColors.put("Ocean", 0xff34b1eb); - biomeColors.put("Plains", 0xff00ff00); - biomeColors.put("Desert", 0xffffff00); - biomeColors.put("Beach", 0xffffd700); - biomeColors.put("Hills", 0xff2e8b57); - - int color = 0xffffffff; // default color - - for (Map.Entry entry : biomeColors.entrySet()) { - if (biomeString.contains(entry.getKey())) { - color = entry.getValue(); - break; - } - } - - return new CustomText(biomeString, color); - } - - public String formatSnakeCase(String biomeName) { - // Split the string by underscores - String[] words = biomeName.split("_"); - - // Capitalize each word - for (int i = 0; i < words.length; i++) { - words[i] = words[i].substring(0, 1).toUpperCase() + words[i].substring(1).toLowerCase(); - } - - // Join the words with spaces - return String.join(" ", words); - } + + @Override + public String getModID() { + return "Biome"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-right"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + PlayerEntity player = client.player; + + if (player == null) return null; + + // have to specify this because name of class is Biome + Optional> biome = + client.world.getBiome(player.getBlockPos()).getKey(); + + if (!biome.isPresent()) return null; + + String biomeString = formatSnakeCase(biome.get().getValue().getPath()); + + // used to maintain order when iterating + LinkedHashMap biomeColors = new LinkedHashMap<>(); + biomeColors.put("Bamboo", 0xff32cd32); + biomeColors.put("Snowy", 0xffffffff); + biomeColors.put("Frozen", 0xff87ceeb); + biomeColors.put("Void", 0xff000000); + biomeColors.put("Flower", 0xffff1493); + biomeColors.put("Ice", 0xff00ffff); + biomeColors.put("Soul Sand", 0xff8b4513); + biomeColors.put("Crimson", 0xffff0000); + biomeColors.put("Warped", 0xff00ff7f); + biomeColors.put("Nether", 0xffff4500); + biomeColors.put("End", 0xff8a2be2); + biomeColors.put("Mushroom", 0xffff00ff); + biomeColors.put("Savanna", 0xffff4500); + biomeColors.put("Badlands", 0xffcd853f); + biomeColors.put("Swamp", 0xff8b4513); + biomeColors.put("Shore", 0xff808080); + biomeColors.put("Taiga", 0xff556b2f); + biomeColors.put("Mountains", 0xffa9a9a9); + biomeColors.put("Jungle", 0xff00ff00); + biomeColors.put("Birch", 0xff7fff00); + biomeColors.put("Dark Forest", 0xff006400); + biomeColors.put("Forest", 0xff228b22); + biomeColors.put("River", 0xff4169e1); + biomeColors.put("Warm Ocean", 0xff26d9ed); + biomeColors.put("Cold Ocean", 0xff377de6); + biomeColors.put("Deep Ocean", 0xff377de6); + biomeColors.put("Ocean", 0xff34b1eb); + biomeColors.put("Plains", 0xff00ff00); + biomeColors.put("Desert", 0xffffff00); + biomeColors.put("Beach", 0xffffd700); + biomeColors.put("Hills", 0xff2e8b57); + + int color = 0xffffffff; // default color + + for (Map.Entry entry : biomeColors.entrySet()) { + if (biomeString.contains(entry.getKey())) { + color = entry.getValue(); + break; + } + } + + return new CustomText(biomeString, color, getModSettings()); + } + + public String formatSnakeCase(String biomeName) { + // Split the string by underscores + String[] words = biomeName.split("_"); + + // Capitalize each word + for (int i = 0; i < words.length; i++) { + words[i] = + words[i].substring(0, 1).toUpperCase() + + words[i].substring(1).toLowerCase(); + } + + // Join the words with spaces + return String.join(" ", words); + } } diff --git a/src/main/java/dsns/betterhud/mods/Coordinates.java b/src/main/java/dsns/betterhud/mods/Coordinates.java index 5b6bb25..9c5ea66 100644 --- a/src/main/java/dsns/betterhud/mods/Coordinates.java +++ b/src/main/java/dsns/betterhud/mods/Coordinates.java @@ -1,33 +1,47 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.player.PlayerEntity; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; +import dsns.betterhud.util.Setting; +import java.util.HashMap; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; + +class CoordinatesSettings extends ModSettings { + + public CoordinatesSettings(String position) { + super(position); + HashMap settings = super.getSettings(); + settings.put("decimal", Setting.createBooleanSetting(false)); + } +} public class Coordinates implements BaseMod { - @Override - public String getModID() { - return "Coordinates"; - } - - @Override - public ModSettings getModSettings() { - return new ModSettings("top-right"); - } - - @Override - public CustomText onStartTick(MinecraftClient client) { - PlayerEntity player = client.player; - - if (player == null) - return null; - - String roundX = String.format("%.2f", player.getX()); - String roundY = String.format("%.2f", player.getY()); - String roundZ = String.format("%.2f", player.getZ()); - - return new CustomText(roundX + ", " + roundY + ", " + roundZ); - } + + @Override + public String getModID() { + return "Coordinates"; + } + + @Override + public ModSettings getModSettings() { + return new CoordinatesSettings("top-right"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + PlayerEntity player = client.player; + + if (player == null) return null; + + String roundX = String.format("%.2f", player.getX()); + String roundY = String.format("%.2f", player.getY()); + String roundZ = String.format("%.2f", player.getZ()); + + return new CustomText( + roundX + ", " + roundY + ", " + roundZ, + getModSettings() + ); + } } diff --git a/src/main/java/dsns/betterhud/mods/FPS.java b/src/main/java/dsns/betterhud/mods/FPS.java index 5291d1f..9751ad4 100644 --- a/src/main/java/dsns/betterhud/mods/FPS.java +++ b/src/main/java/dsns/betterhud/mods/FPS.java @@ -1,20 +1,27 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; import dsns.betterhud.mixin.MinecraftClientAccessor; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; +import net.minecraft.client.MinecraftClient; public class FPS implements BaseMod { - @Override - public String getModID() { - return "FPS"; - } - @Override - public CustomText onStartTick(MinecraftClient client) { - int currentFPS = MinecraftClientAccessor.getCurrentFPS(); + @Override + public String getModID() { + return "FPS"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-left"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + int currentFPS = MinecraftClientAccessor.getCurrentFPS(); - return new CustomText(currentFPS + " FPS"); - } + return new CustomText(currentFPS + " FPS", getModSettings()); + } } diff --git a/src/main/java/dsns/betterhud/mods/Facing.java b/src/main/java/dsns/betterhud/mods/Facing.java index 158b5c2..faf6f69 100644 --- a/src/main/java/dsns/betterhud/mods/Facing.java +++ b/src/main/java/dsns/betterhud/mods/Facing.java @@ -1,36 +1,47 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.player.PlayerEntity; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; public class Facing implements BaseMod { - @Override - public String getModID() { - return "Facing"; - } - - @Override - public CustomText onStartTick(MinecraftClient client) { - PlayerEntity player = client.player; - - if (player == null || player.getHorizontalFacing() == null) - return null; - - return new CustomText(formatSnakeCase(player.getHorizontalFacing().name())); - } - - public String formatSnakeCase(String biomeName) { - // Split the string by underscores - String[] words = biomeName.split("_"); - - // Capitalize each word - for (int i = 0; i < words.length; i++) { - words[i] = words[i].substring(0, 1).toUpperCase() + words[i].substring(1).toLowerCase(); - } - // Join the words with spaces - return String.join(" ", words); - } + @Override + public String getModID() { + return "Facing"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-right"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + PlayerEntity player = client.player; + + if (player == null || player.getHorizontalFacing() == null) return null; + + return new CustomText( + formatSnakeCase(player.getHorizontalFacing().name()), + getModSettings() + ); + } + + public String formatSnakeCase(String biomeName) { + // Split the string by underscores + String[] words = biomeName.split("_"); + + // Capitalize each word + for (int i = 0; i < words.length; i++) { + words[i] = + words[i].substring(0, 1).toUpperCase() + + words[i].substring(1).toLowerCase(); + } + + // Join the words with spaces + return String.join(" ", words); + } } diff --git a/src/main/java/dsns/betterhud/mods/Momentum.java b/src/main/java/dsns/betterhud/mods/Momentum.java index 337ccd5..da86cdf 100644 --- a/src/main/java/dsns/betterhud/mods/Momentum.java +++ b/src/main/java/dsns/betterhud/mods/Momentum.java @@ -1,28 +1,41 @@ package dsns.betterhud.mods; +import dsns.betterhud.util.BaseMod; +import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.MathHelper; -import dsns.betterhud.util.BaseMod; -import dsns.betterhud.util.CustomText; public class Momentum implements BaseMod { - @Override - public String getModID() { - return "Momentum"; - } - @Override - public CustomText onStartTick(MinecraftClient client) { - PlayerEntity player = client.player; + @Override + public String getModID() { + return "Momentum"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-right"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + PlayerEntity player = client.player; - if (player == null) - return null; + if (player == null) return null; - double travelledX = player.getX() - player.lastRenderX; - double travelledZ = player.getZ() - player.lastRenderZ; - double currentSpeed = MathHelper.sqrt((float) (travelledX * travelledX + travelledZ * travelledZ)) / 0.05F; + double travelledX = player.getX() - player.lastRenderX; + double travelledZ = player.getZ() - player.lastRenderZ; + double currentSpeed = + MathHelper.sqrt( + (float) (travelledX * travelledX + travelledZ * travelledZ) + ) / + 0.05F; - return new CustomText(String.format("%.2f m/s", currentSpeed)); - } + return new CustomText( + String.format("%.2f m/s", currentSpeed), + getModSettings() + ); + } } diff --git a/src/main/java/dsns/betterhud/mods/Ping.java b/src/main/java/dsns/betterhud/mods/Ping.java index cb04527..f2a4b5d 100644 --- a/src/main/java/dsns/betterhud/mods/Ping.java +++ b/src/main/java/dsns/betterhud/mods/Ping.java @@ -1,23 +1,42 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.player.PlayerEntity; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; public class Ping implements BaseMod { - @Override - public String getModID() { - return "Ping"; - } - @Override - public CustomText onStartTick(MinecraftClient client) { - PlayerEntity player = client.player; + @Override + public String getModID() { + return "Ping"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("top-left"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + PlayerEntity player = client.player; - if (player == null || player.getUuid() == null || client.getNetworkHandler() == null || client.getNetworkHandler().getPlayerListEntry(player.getUuid()) == null) - return null; + if ( + player == null || + player.getUuid() == null || + client.getNetworkHandler() == null || + client.getNetworkHandler().getPlayerListEntry(player.getUuid()) == + null + ) return null; - return new CustomText(client.getNetworkHandler().getPlayerListEntry(player.getUuid()).getLatency() + " ms"); - } + return new CustomText( + client + .getNetworkHandler() + .getPlayerListEntry(player.getUuid()) + .getLatency() + + " ms", + getModSettings() + ); + } } diff --git a/src/main/java/dsns/betterhud/mods/Time.java b/src/main/java/dsns/betterhud/mods/Time.java index ada0bc5..451551c 100644 --- a/src/main/java/dsns/betterhud/mods/Time.java +++ b/src/main/java/dsns/betterhud/mods/Time.java @@ -1,23 +1,30 @@ package dsns.betterhud.mods; -import net.minecraft.client.MinecraftClient; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; +import dsns.betterhud.util.ModSettings; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import net.minecraft.client.MinecraftClient; public class Time implements BaseMod { - @Override - public String getModID() { - return "Time"; - } - @Override - public CustomText onStartTick(MinecraftClient client) { - LocalTime currentTime = LocalTime.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm a"); - String formattedTime = currentTime.format(formatter); + @Override + public String getModID() { + return "Time"; + } + + @Override + public ModSettings getModSettings() { + return new ModSettings("bottom-right"); + } + + @Override + public CustomText onStartTick(MinecraftClient client) { + LocalTime currentTime = LocalTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm a"); + String formattedTime = currentTime.format(formatter); - return new CustomText(formattedTime); - } + return new CustomText(formattedTime, getModSettings()); + } } diff --git a/src/main/java/dsns/betterhud/util/BaseMod.java b/src/main/java/dsns/betterhud/util/BaseMod.java index 3722433..80f8e17 100644 --- a/src/main/java/dsns/betterhud/util/BaseMod.java +++ b/src/main/java/dsns/betterhud/util/BaseMod.java @@ -3,9 +3,9 @@ import net.minecraft.client.MinecraftClient; public interface BaseMod { - public String getModID(); - - public ModSettings getModSettings(); - - public CustomText onStartTick(MinecraftClient client); + public String getModID(); + + public ModSettings getModSettings(); + + public CustomText onStartTick(MinecraftClient client); } diff --git a/src/main/java/dsns/betterhud/util/CustomText.java b/src/main/java/dsns/betterhud/util/CustomText.java index 79884b0..8bdbb09 100644 --- a/src/main/java/dsns/betterhud/util/CustomText.java +++ b/src/main/java/dsns/betterhud/util/CustomText.java @@ -1,25 +1,33 @@ package dsns.betterhud.util; -import dsns.betterhud.Config; public class CustomText { - public String text; - public int color; // colors are in ARGB format - public int backgroundColor; // colors are in ARGB format - public boolean customPosition = false; - public int customX = 0; - public int customY = 0; - public CustomText(String text, int color, int backgroundColor) { - this.text = text; - this.color = color; - this.backgroundColor = backgroundColor; - } + public String text; + public int color; // colors are in ARGB format + public int backgroundColor; // colors are in ARGB format + public boolean customPosition = false; + public int customX = 0; + public int customY = 0; - public CustomText(String text) { - this(text, Config.textColor, Config.backgroundColor); - } + public CustomText(String text, int color, int backgroundColor) { + this.text = text; + this.color = color; + this.backgroundColor = backgroundColor; + } - public CustomText(String text, int color) { - this(text, color, Config.backgroundColor); - } -} \ No newline at end of file + public CustomText(String text, ModSettings settings) { + this( + text, + settings.getSetting("textColor").getColorValue(), + settings.getSetting("backgroundColor").getColorValue() + ); + } + + public CustomText(String text, int color, ModSettings settings) { + this( + text, + color, + settings.getSetting("backgroundColor").getColorValue() + ); + } +} diff --git a/src/main/java/dsns/betterhud/util/ModSettings.java b/src/main/java/dsns/betterhud/util/ModSettings.java index c34bd63..644c6d8 100644 --- a/src/main/java/dsns/betterhud/util/ModSettings.java +++ b/src/main/java/dsns/betterhud/util/ModSettings.java @@ -3,6 +3,7 @@ import java.util.HashMap; public class ModSettings { + private HashMap settings = new HashMap(); public ModSettings() { @@ -43,8 +44,16 @@ public ModSettings(String orientation) { ) ); } - + public HashMap getSettings() { return settings; } + + public Setting getSetting(String key) { + return settings.get(key); + } + + public void setSettings(HashMap settings) { + this.settings = settings; + } } diff --git a/src/main/java/dsns/betterhud/util/Setting.java b/src/main/java/dsns/betterhud/util/Setting.java index ae3d93d..9471602 100644 --- a/src/main/java/dsns/betterhud/util/Setting.java +++ b/src/main/java/dsns/betterhud/util/Setting.java @@ -59,11 +59,31 @@ public String getType() { return type; } - public String getValue() { + public String getStringValue() { return value; } + public int getIntValue() { + return Integer.parseInt(value); + } + + public double getDoubleValue() { + return Double.parseDouble(value); + } + + public int getColorValue() { + return Integer.parseInt(value); + } + + public boolean getBooleanValue() { + return Boolean.parseBoolean(value); + } + public String[] getPossibleValues() { return possibleValues; } + + public void setValue(String value) { + this.value = value; + } } From 8d0c3774f2bd49a66c5d636a10d946895e35da87 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 23:25:12 -0700 Subject: [PATCH 03/10] almost working --- src/main/java/dsns/betterhud/BetterHUD.java | 6 +- .../java/dsns/betterhud/BetterHUDGUI.java | 20 +- src/main/java/dsns/betterhud/Config.java | 116 +++++++-- src/main/java/dsns/betterhud/ModMenu.java | 244 ++++++++++-------- .../java/dsns/betterhud/util/CustomText.java | 6 +- .../java/dsns/betterhud/util/ModSettings.java | 24 +- .../java/dsns/betterhud/util/Setting.java | 6 + 7 files changed, 266 insertions(+), 156 deletions(-) diff --git a/src/main/java/dsns/betterhud/BetterHUD.java b/src/main/java/dsns/betterhud/BetterHUD.java index 4c20b6d..92f1294 100644 --- a/src/main/java/dsns/betterhud/BetterHUD.java +++ b/src/main/java/dsns/betterhud/BetterHUD.java @@ -1,5 +1,6 @@ package dsns.betterhud; +import dsns.betterhud.ModMenu; import dsns.betterhud.mods.*; import dsns.betterhud.util.BaseMod; import java.util.ArrayList; @@ -21,7 +22,7 @@ public class BetterHUD implements ClientModInitializer { // That way, it's clear which mod wrote info, warnings, and errors. public static final Logger LOGGER = LoggerFactory.getLogger("betterhud"); - ArrayList mods = new ArrayList<>( + public static ArrayList mods = new ArrayList<>( Arrays.asList( new FPS(), new Ping(), @@ -35,9 +36,10 @@ public class BetterHUD implements ClientModInitializer { @Override public void onInitializeClient() { - Config.configure(mods); + Config.configure(); BetterHUDGUI betterHUDGUI = new BetterHUDGUI(); + HudElementRegistry.addLast( Identifier.of("betterhud", "hud"), betterHUDGUI::onHudRender diff --git a/src/main/java/dsns/betterhud/BetterHUDGUI.java b/src/main/java/dsns/betterhud/BetterHUDGUI.java index 2354dd6..48f6eda 100644 --- a/src/main/java/dsns/betterhud/BetterHUDGUI.java +++ b/src/main/java/dsns/betterhud/BetterHUDGUI.java @@ -28,12 +28,6 @@ public class BetterHUDGUI implements ClientTickEvents.StartTick { private final List bottomRightText = new ObjectArrayList<>(); private final List customPositionText = new ObjectArrayList<>(); - private ArrayList mods = new ArrayList<>(); - - public void instantiateMods(ArrayList mods) { - this.mods = mods; - } - @Override public void onStartTick(MinecraftClient client) { this.topLeftText.clear(); @@ -42,24 +36,26 @@ public void onStartTick(MinecraftClient client) { this.bottomRightText.clear(); this.customPositionText.clear(); - for (BaseMod mod : mods) { + for (BaseMod mod : BetterHUD.mods) { ModSettings modSettings = mod.getModSettings(); - if (!modSettings.getSetting("enabled").getBooleanValue()) continue; + if (!modSettings.getSetting("Enabled").getBooleanValue()) continue; + System.out.println(modSettings.getSetting("Enabled").getBooleanValue()); CustomText modText = mod.onStartTick(client); + System.out.println(modText); if (modText == null) continue; String orientation = modSettings - .getSetting("orientation") + .getSetting("Orientation") .getStringValue(); - if (modSettings.getSetting("customPosition").getBooleanValue()) { + if (modSettings.getSetting("Custom Position").getBooleanValue()) { modText.customPosition = true; modText.customX = modSettings - .getSetting("customX") + .getSetting("Custom X") .getIntValue(); modText.customY = modSettings - .getSetting("customY") + .getSetting("Custom Y") .getIntValue(); this.customPositionText.add(modText); } else if (orientation.equals("top-left")) { diff --git a/src/main/java/dsns/betterhud/Config.java b/src/main/java/dsns/betterhud/Config.java index 57e0425..842b2a0 100644 --- a/src/main/java/dsns/betterhud/Config.java +++ b/src/main/java/dsns/betterhud/Config.java @@ -19,23 +19,47 @@ public class Config { private static HashMap settings = new HashMap<>(); - public static void configure(ArrayList mods) { - if (settings.size() == 0) { - for (BaseMod mod : mods) { - settings.put(mod.getModID(), mod.getModSettings()); - } - } - + public static void configure() { if (Files.exists(configPath)) { - deserialize(mods); + deserialize(); } else { serialize(); } } public static void serialize() { + HashMap settings = new HashMap<>(); + + if (settings.size() == 0) { + for (BaseMod mod : BetterHUD.mods) { + settings.put(mod.getModID(), mod.getModSettings()); + } + } + Properties prop = new Properties(); - prop.putAll(settings); + + HashMap serialized = new HashMap(); + + for (Map.Entry entry : settings.entrySet()) { + ModSettings modSettings = entry.getValue(); + + for (Map.Entry settingEntry : modSettings + .getSettings() + .entrySet()) { + System.out.println(settingEntry); + System.out.println(settingEntry.getValue()); + System.out.println(settingEntry.getValue().getStringValue()); + + serialized.put( + entry.getKey() + "." + settingEntry.getKey(), + settingEntry.getValue().getStringValue() + ); + } + } + + System.out.println("Serialized settings: " + serialized); + + prop.putAll(serialized); try { prop.store(Files.newOutputStream(configPath), null); @@ -44,29 +68,91 @@ public static void serialize() { } } - public static void deserialize(ArrayList mods) { + public static void deserialize() { Properties prop = new Properties(); try { prop.load(Files.newInputStream(configPath)); + System.out.println( + "Loaded config with " + prop.size() + " properties." + ); } catch (Exception e) { + System.err.println("Failed to load config: " + e.getMessage()); e.printStackTrace(); + return; } Map map = new HashMap(); - for (final String name : prop.stringPropertyNames()) { map.put(name, prop.getProperty(name)); } - // set each setting - for (ModSettings modSetting : settings.values()) { + // Load per-mod prefixed settings + int updatedCount = 0; + for (Map.Entry modEntry : settings.entrySet()) { + String modID = modEntry.getKey(); + ModSettings modSetting = modEntry.getValue(); + for (Map.Entry entry : modSetting .getSettings() .entrySet()) { - entry.getValue().setValue(map.get(entry.getKey())); + String fullKey = modID + "." + entry.getKey(); + String val = map.get(fullKey); + if (val != null) { + entry.getValue().setValue(val); + updatedCount++; + System.out.println( + "Deserialized: " + fullKey + " = " + val + ); // Debug (remove after) + } else { + System.out.println( + "No value found for " + fullKey + "; keeping default." + ); // Debug (remove after) + } } } - serialize(); + // Backwards compatibility: Migrate old global settings to all mods (one-time) + String globalBg = map.get("backgroundColor"); + if (globalBg != null) { + for (Map.Entry< + String, + ModSettings + > modEntry : settings.entrySet()) { + Setting bgSetting = modEntry + .getValue() + .getSetting("Background Color"); + if (bgSetting != null) { + bgSetting.setValue(globalBg); + updatedCount++; + } + } + System.out.println( + "Migrated global backgroundColor to all mods: " + globalBg + ); + } + + String globalText = map.get("textColor"); + if (globalText != null) { + for (Map.Entry< + String, + ModSettings + > modEntry : settings.entrySet()) { + Setting textSetting = modEntry + .getValue() + .getSetting("Text Color"); + if (textSetting != null) { + textSetting.setValue(globalText); + updatedCount++; + } + } + System.out.println( + "Migrated global textColor to all mods: " + globalText + ); + } + + // Ignore other old globals (e.g., horizontalMargin) unless you map them to specific settings + + System.out.println("Deserialized " + updatedCount + " settings."); + serialize(); // Re-save with migrated values } } diff --git a/src/main/java/dsns/betterhud/ModMenu.java b/src/main/java/dsns/betterhud/ModMenu.java index ee4c3be..6af1abe 100644 --- a/src/main/java/dsns/betterhud/ModMenu.java +++ b/src/main/java/dsns/betterhud/ModMenu.java @@ -1,112 +1,132 @@ -// package dsns.betterhud; - -// import net.fabricmc.loader.api.FabricLoader; -// import net.minecraft.text.Text; - -// import java.util.Arrays; - -// import com.terraformersmc.modmenu.api.ConfigScreenFactory; -// import com.terraformersmc.modmenu.api.ModMenuApi; -// import me.shedaniel.clothconfig2.api.ConfigBuilder; -// import me.shedaniel.clothconfig2.api.ConfigCategory; -// import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; - -// public class ModMenu implements ModMenuApi { -// @Override -// public ConfigScreenFactory getModConfigScreenFactory() { -// if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) { -// return parent -> null; -// } -// return parent -> { -// ConfigBuilder builder = ConfigBuilder.create() -// .setParentScreen(parent) -// .setTitle(Text.literal("BetterHUD Settings")); - -// // same as builder.setSavingRunnable(() -> Config.serialize()); -// builder.setSavingRunnable(Config::serialize); - -// ConfigEntryBuilder entryBuilder = builder.entryBuilder(); - -// ConfigCategory general = builder.getOrCreateCategory(Text.literal("General")); -// general.addEntry(entryBuilder -// .startIntSlider(Text.literal("Vertical Padding"), Config.verticalPadding, 0, 40) -// .setDefaultValue(4) -// .setSaveConsumer(newValue -> Config.verticalPadding = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startIntSlider(Text.literal("Horizontal Padding"), Config.horizontalPadding, 0, 40) -// .setDefaultValue(4) -// .setSaveConsumer(newValue -> Config.horizontalPadding = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startIntSlider(Text.literal("Vertical Margin"), Config.verticalMargin, 0, 40) -// .setDefaultValue(1) -// .setSaveConsumer(newValue -> Config.verticalMargin = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startIntSlider(Text.literal("Horizontal Margin"), Config.horizontalMargin, 0, 40) -// .setDefaultValue(1) -// .setSaveConsumer(newValue -> Config.horizontalMargin = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startIntSlider(Text.literal("Line Height"), Config.lineHeight, 0, 40) -// .setDefaultValue(1) -// .setSaveConsumer(newValue -> Config.lineHeight = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startAlphaColorField(Text.literal("Text Color"), Config.textColor) -// .setDefaultValue(0xffffffff) -// .setSaveConsumer(newValue -> Config.textColor = newValue) -// .build()); - -// general.addEntry(entryBuilder -// .startAlphaColorField(Text.literal("Background Color"), Config.backgroundColor) -// .setDefaultValue(0x88000000) -// .setSaveConsumer(newValue -> Config.backgroundColor = newValue) -// .build()); - -// for (String modID : Config.getDefaults().keySet()) { -// ConfigCategory category = builder.getOrCreateCategory(Text.literal(modID)); - -// category.addEntry(entryBuilder -// .startBooleanToggle(Text.literal("Enabled"), Config.settings.get(modID).enabled) -// .setDefaultValue(Config.getDefaults().get(modID).enabled) -// .setSaveConsumer(newValue -> Config.settings.get(modID).enabled = newValue) -// .build()); - -// category.addEntry(entryBuilder -// .startStringDropdownMenu(Text.literal("Orientation"), Config.settings.get(modID).orientation) -// .setDefaultValue(Config.getDefaults().get(modID).orientation) -// .setSelections(Arrays.asList("top-left", "top-right", "bottom-left", "bottom-right")) -// .setSuggestionMode(false) -// .setSaveConsumer(newValue -> Config.settings.get(modID).orientation = newValue) -// .build()); - -// category.addEntry(entryBuilder -// .startBooleanToggle(Text.literal("Custom Position"), Config.settings.get(modID).customPosition) -// .setDefaultValue(Config.getDefaults().get(modID).customPosition) -// .setSaveConsumer(newValue -> Config.settings.get(modID).customPosition = newValue) -// .build()); - -// category.addEntry(entryBuilder -// .startIntSlider(Text.literal("Custom X"), Config.settings.get(modID).customX, 0, 100) -// .setDefaultValue(Config.getDefaults().get(modID).customX) -// .setSaveConsumer(newValue -> Config.settings.get(modID).customX = newValue) -// .build()); - -// category.addEntry(entryBuilder -// .startIntSlider(Text.literal("Custom Y"), Config.settings.get(modID).customY, 0, 100) -// .setDefaultValue(Config.getDefaults().get(modID).customY) -// .setSaveConsumer(newValue -> Config.settings.get(modID).customY = newValue) -// .build()); -// } - -// return builder.build(); -// }; -// } -// } \ No newline at end of file +package dsns.betterhud; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import dsns.betterhud.BetterHUD; +import dsns.betterhud.util.BaseMod; +import dsns.betterhud.util.Setting; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import me.shedaniel.math.Color; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.text.Text; + +public class ModMenu implements ModMenuApi { + + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) { + return parent -> null; + } + return parent -> { + ConfigBuilder builder = ConfigBuilder.create() + .setParentScreen(parent) + .setTitle(Text.literal("BetterHUD Settings")); + + // same as builder.setSavingRunnable(() -> Config.serialize()); + builder.setSavingRunnable(Config::serialize); + + ConfigEntryBuilder entryBuilder = builder.entryBuilder(); + + for (BaseMod mod : BetterHUD.mods) { + ConfigCategory category = builder.getOrCreateCategory( + Text.literal(mod.getModID()) + ); + + for (Map.Entry entry : mod + .getModSettings() + .getSettings() + .entrySet()) { + String key = entry.getKey(); + Setting setting = entry.getValue(); + + if (setting.getType().equals("boolean")) { + category.addEntry( + entryBuilder + .startBooleanToggle( + Text.literal(key), + setting.getBooleanValue() + ) + .setDefaultValue( + Boolean.valueOf(setting.getDefaultValue()) + ) + .setSaveConsumer(value -> + setting.setValue(String.valueOf(value)) + ) + .build() + ); + } else if (setting.getType().equals("string")) { + category.addEntry( + entryBuilder + .startStringDropdownMenu( + Text.literal(key), + setting.getStringValue() + ) + .setSelections( + Arrays.asList(setting.getPossibleValues()) + ) + .setDefaultValue(setting.getDefaultValue()) + .setSaveConsumer(value -> + setting.setValue(value) + ) + .build() + ); + } else if (setting.getType().equals("integer")) { + category.addEntry( + entryBuilder + .startIntField( + Text.literal(key), + setting.getIntValue() + ) + .setDefaultValue( + Integer.parseInt(setting.getDefaultValue()) + ) + .setSaveConsumer(value -> + setting.setValue(String.valueOf(value)) + ) + .build() + ); + } else if (setting.getType().equals("double")) { + category.addEntry( + entryBuilder + .startDoubleField( + Text.literal(key), + setting.getDoubleValue() + ) + .setDefaultValue( + Double.parseDouble( + setting.getDefaultValue() + ) + ) + .setSaveConsumer(value -> + setting.setValue(String.valueOf(value)) + ) + .build() + ); + } else if (setting.getType().equals("color")) { + category.addEntry( + entryBuilder + .startAlphaColorField( + Text.literal(key), + setting.getColorValue() + ) + .setDefaultValue( + Integer.parseInt(setting.getDefaultValue()) + ) + .setSaveConsumer(value -> + setting.setValue(String.valueOf(value)) + ) + .build() + ); + } + } + } + + return builder.build(); + }; + } +} diff --git a/src/main/java/dsns/betterhud/util/CustomText.java b/src/main/java/dsns/betterhud/util/CustomText.java index 8bdbb09..c6427f2 100644 --- a/src/main/java/dsns/betterhud/util/CustomText.java +++ b/src/main/java/dsns/betterhud/util/CustomText.java @@ -18,8 +18,8 @@ public CustomText(String text, int color, int backgroundColor) { public CustomText(String text, ModSettings settings) { this( text, - settings.getSetting("textColor").getColorValue(), - settings.getSetting("backgroundColor").getColorValue() + settings.getSetting("Text Color").getColorValue(), + settings.getSetting("Background Color").getColorValue() ); } @@ -27,7 +27,7 @@ public CustomText(String text, int color, ModSettings settings) { this( text, color, - settings.getSetting("backgroundColor").getColorValue() + settings.getSetting("Background Color").getColorValue() ); } } diff --git a/src/main/java/dsns/betterhud/util/ModSettings.java b/src/main/java/dsns/betterhud/util/ModSettings.java index 644c6d8..8e2c866 100644 --- a/src/main/java/dsns/betterhud/util/ModSettings.java +++ b/src/main/java/dsns/betterhud/util/ModSettings.java @@ -1,16 +1,16 @@ package dsns.betterhud.util; -import java.util.HashMap; +import java.util.LinkedHashMap; public class ModSettings { - private HashMap settings = new HashMap(); + private LinkedHashMap settings = new LinkedHashMap(); public ModSettings() { settings.put("enabled", Setting.createBooleanSetting(true)); settings.put( - "orientation", + "Orientation", Setting.createStringSetting( "top-left", new String[] { @@ -22,17 +22,17 @@ public ModSettings() { ) ); - settings.put("customPosition", Setting.createBooleanSetting(false)); - settings.put("customX", Setting.createIntegerSetting(0, 0, 100)); - settings.put("customY", Setting.createIntegerSetting(0, 0, 100)); - settings.put("textColor", Setting.createColorSetting(0xffffffff)); - settings.put("backgroundColor", Setting.createColorSetting(0x00000000)); + settings.put("Custom Position", Setting.createBooleanSetting(false)); + settings.put("Custom X", Setting.createIntegerSetting(0, 0, 100)); + settings.put("Custom Y", Setting.createIntegerSetting(0, 0, 100)); + settings.put("Text Color", Setting.createColorSetting(0xffffffff)); + settings.put("Background Color", Setting.createColorSetting(0x88000000)); } public ModSettings(String orientation) { - super(); + this(); settings.replace( - "orientation", + "Orientation", Setting.createStringSetting( orientation, new String[] { @@ -45,7 +45,7 @@ public ModSettings(String orientation) { ); } - public HashMap getSettings() { + public LinkedHashMap getSettings() { return settings; } @@ -53,7 +53,7 @@ public Setting getSetting(String key) { return settings.get(key); } - public void setSettings(HashMap settings) { + public void setSettings(LinkedHashMap settings) { this.settings = settings; } } diff --git a/src/main/java/dsns/betterhud/util/Setting.java b/src/main/java/dsns/betterhud/util/Setting.java index 9471602..a6a6b68 100644 --- a/src/main/java/dsns/betterhud/util/Setting.java +++ b/src/main/java/dsns/betterhud/util/Setting.java @@ -4,11 +4,13 @@ public class Setting { private String value; private String type; + private final String defaultValue; private String[] possibleValues; public Setting(String value, String type, String[] possibleValues) { this.value = value; this.type = type; + this.defaultValue = value; this.possibleValues = possibleValues; } @@ -83,6 +85,10 @@ public String[] getPossibleValues() { return possibleValues; } + public String getDefaultValue() { + return defaultValue; + } + public void setValue(String value) { this.value = value; } From b5f93709b2926103c1c2da68ce11bb668a22d87f Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 23:32:44 -0700 Subject: [PATCH 04/10] working --- src/main/java/dsns/betterhud/Config.java | 38 +++++-------------- src/main/java/dsns/betterhud/mods/Biome.java | 4 +- .../java/dsns/betterhud/mods/Coordinates.java | 6 ++- src/main/java/dsns/betterhud/mods/FPS.java | 4 +- src/main/java/dsns/betterhud/mods/Facing.java | 6 ++- .../java/dsns/betterhud/mods/Momentum.java | 4 +- src/main/java/dsns/betterhud/mods/Ping.java | 4 +- src/main/java/dsns/betterhud/mods/Time.java | 4 +- .../java/dsns/betterhud/util/ModSettings.java | 12 ++++-- 9 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/main/java/dsns/betterhud/Config.java b/src/main/java/dsns/betterhud/Config.java index 842b2a0..046136a 100644 --- a/src/main/java/dsns/betterhud/Config.java +++ b/src/main/java/dsns/betterhud/Config.java @@ -5,7 +5,6 @@ import dsns.betterhud.util.Setting; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -20,6 +19,12 @@ public class Config { private static HashMap settings = new HashMap<>(); public static void configure() { + if (settings.isEmpty()) { + for (BaseMod mod : BetterHUD.mods) { + settings.put(mod.getModID(), mod.getModSettings()); + } + } + if (Files.exists(configPath)) { deserialize(); } else { @@ -28,16 +33,7 @@ public static void configure() { } public static void serialize() { - HashMap settings = new HashMap<>(); - - if (settings.size() == 0) { - for (BaseMod mod : BetterHUD.mods) { - settings.put(mod.getModID(), mod.getModSettings()); - } - } - Properties prop = new Properties(); - HashMap serialized = new HashMap(); for (Map.Entry entry : settings.entrySet()) { @@ -46,10 +42,6 @@ public static void serialize() { for (Map.Entry settingEntry : modSettings .getSettings() .entrySet()) { - System.out.println(settingEntry); - System.out.println(settingEntry.getValue()); - System.out.println(settingEntry.getValue().getStringValue()); - serialized.put( entry.getKey() + "." + settingEntry.getKey(), settingEntry.getValue().getStringValue() @@ -57,8 +49,6 @@ public static void serialize() { } } - System.out.println("Serialized settings: " + serialized); - prop.putAll(serialized); try { @@ -72,9 +62,6 @@ public static void deserialize() { Properties prop = new Properties(); try { prop.load(Files.newInputStream(configPath)); - System.out.println( - "Loaded config with " + prop.size() + " properties." - ); } catch (Exception e) { System.err.println("Failed to load config: " + e.getMessage()); e.printStackTrace(); @@ -86,7 +73,6 @@ public static void deserialize() { map.put(name, prop.getProperty(name)); } - // Load per-mod prefixed settings int updatedCount = 0; for (Map.Entry modEntry : settings.entrySet()) { String modID = modEntry.getKey(); @@ -100,18 +86,10 @@ public static void deserialize() { if (val != null) { entry.getValue().setValue(val); updatedCount++; - System.out.println( - "Deserialized: " + fullKey + " = " + val - ); // Debug (remove after) - } else { - System.out.println( - "No value found for " + fullKey + "; keeping default." - ); // Debug (remove after) } } } - // Backwards compatibility: Migrate old global settings to all mods (one-time) String globalBg = map.get("backgroundColor"); if (globalBg != null) { for (Map.Entry< @@ -127,6 +105,7 @@ public static void deserialize() { } } System.out.println( + // Remove this debug line in release "Migrated global backgroundColor to all mods: " + globalBg ); } @@ -146,13 +125,14 @@ public static void deserialize() { } } System.out.println( + // Remove this debug line in release "Migrated global textColor to all mods: " + globalText ); } // Ignore other old globals (e.g., horizontalMargin) unless you map them to specific settings - System.out.println("Deserialized " + updatedCount + " settings."); + System.out.println("Deserialized " + updatedCount + " settings."); // Remove this debug line in release serialize(); // Re-save with migrated values } } diff --git a/src/main/java/dsns/betterhud/mods/Biome.java b/src/main/java/dsns/betterhud/mods/Biome.java index c7cfd02..a5125c1 100644 --- a/src/main/java/dsns/betterhud/mods/Biome.java +++ b/src/main/java/dsns/betterhud/mods/Biome.java @@ -12,6 +12,8 @@ public class Biome implements BaseMod { + private static final ModSettings SETTINGS = new ModSettings("top-right"); + @Override public String getModID() { return "Biome"; @@ -19,7 +21,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("top-right"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/Coordinates.java b/src/main/java/dsns/betterhud/mods/Coordinates.java index 9c5ea66..2afde28 100644 --- a/src/main/java/dsns/betterhud/mods/Coordinates.java +++ b/src/main/java/dsns/betterhud/mods/Coordinates.java @@ -19,6 +19,10 @@ public CoordinatesSettings(String position) { public class Coordinates implements BaseMod { + private static final CoordinatesSettings SETTINGS = new CoordinatesSettings( + "top-right" + ); + @Override public String getModID() { return "Coordinates"; @@ -26,7 +30,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new CoordinatesSettings("top-right"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/FPS.java b/src/main/java/dsns/betterhud/mods/FPS.java index 9751ad4..4e37acb 100644 --- a/src/main/java/dsns/betterhud/mods/FPS.java +++ b/src/main/java/dsns/betterhud/mods/FPS.java @@ -8,6 +8,8 @@ public class FPS implements BaseMod { + private static final ModSettings SETTINGS = new ModSettings("top-left"); + @Override public String getModID() { return "FPS"; @@ -15,7 +17,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("top-left"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/Facing.java b/src/main/java/dsns/betterhud/mods/Facing.java index faf6f69..30d3c40 100644 --- a/src/main/java/dsns/betterhud/mods/Facing.java +++ b/src/main/java/dsns/betterhud/mods/Facing.java @@ -8,6 +8,10 @@ public class Facing implements BaseMod { + private static final CoordinatesSettings SETTINGS = new CoordinatesSettings( + "top-right" + ); + @Override public String getModID() { return "Facing"; @@ -15,7 +19,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("top-right"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/Momentum.java b/src/main/java/dsns/betterhud/mods/Momentum.java index da86cdf..9a332ce 100644 --- a/src/main/java/dsns/betterhud/mods/Momentum.java +++ b/src/main/java/dsns/betterhud/mods/Momentum.java @@ -9,6 +9,8 @@ public class Momentum implements BaseMod { + private static final ModSettings SETTINGS = new ModSettings("top-left"); + @Override public String getModID() { return "Momentum"; @@ -16,7 +18,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("top-right"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/Ping.java b/src/main/java/dsns/betterhud/mods/Ping.java index f2a4b5d..003057a 100644 --- a/src/main/java/dsns/betterhud/mods/Ping.java +++ b/src/main/java/dsns/betterhud/mods/Ping.java @@ -8,6 +8,8 @@ public class Ping implements BaseMod { + private static final ModSettings SETTINGS = new ModSettings("top-left"); + @Override public String getModID() { return "Ping"; @@ -15,7 +17,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("top-left"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/mods/Time.java b/src/main/java/dsns/betterhud/mods/Time.java index 451551c..073b523 100644 --- a/src/main/java/dsns/betterhud/mods/Time.java +++ b/src/main/java/dsns/betterhud/mods/Time.java @@ -9,6 +9,8 @@ public class Time implements BaseMod { + private static final ModSettings SETTINGS = new ModSettings("bottom-right"); + @Override public String getModID() { return "Time"; @@ -16,7 +18,7 @@ public String getModID() { @Override public ModSettings getModSettings() { - return new ModSettings("bottom-right"); + return SETTINGS; } @Override diff --git a/src/main/java/dsns/betterhud/util/ModSettings.java b/src/main/java/dsns/betterhud/util/ModSettings.java index 8e2c866..22a75a2 100644 --- a/src/main/java/dsns/betterhud/util/ModSettings.java +++ b/src/main/java/dsns/betterhud/util/ModSettings.java @@ -4,10 +4,13 @@ public class ModSettings { - private LinkedHashMap settings = new LinkedHashMap(); + private LinkedHashMap settings = new LinkedHashMap< + String, + Setting + >(); public ModSettings() { - settings.put("enabled", Setting.createBooleanSetting(true)); + settings.put("Enabled", Setting.createBooleanSetting(true)); settings.put( "Orientation", @@ -26,7 +29,10 @@ public ModSettings() { settings.put("Custom X", Setting.createIntegerSetting(0, 0, 100)); settings.put("Custom Y", Setting.createIntegerSetting(0, 0, 100)); settings.put("Text Color", Setting.createColorSetting(0xffffffff)); - settings.put("Background Color", Setting.createColorSetting(0x88000000)); + settings.put( + "Background Color", + Setting.createColorSetting(0x88000000) + ); } public ModSettings(String orientation) { From e8f34970e606966b57d53e44b4ac1e8221f740ba Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 23:34:06 -0700 Subject: [PATCH 05/10] add decimal setting --- src/main/java/dsns/betterhud/BetterHUD.java | 1 - .../java/dsns/betterhud/BetterHUDGUI.java | 1 - src/main/java/dsns/betterhud/ModMenu.java | 3 -- .../java/dsns/betterhud/mods/Coordinates.java | 31 ++++++++++++++----- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/dsns/betterhud/BetterHUD.java b/src/main/java/dsns/betterhud/BetterHUD.java index 92f1294..81b401c 100644 --- a/src/main/java/dsns/betterhud/BetterHUD.java +++ b/src/main/java/dsns/betterhud/BetterHUD.java @@ -1,6 +1,5 @@ package dsns.betterhud; -import dsns.betterhud.ModMenu; import dsns.betterhud.mods.*; import dsns.betterhud.util.BaseMod; import java.util.ArrayList; diff --git a/src/main/java/dsns/betterhud/BetterHUDGUI.java b/src/main/java/dsns/betterhud/BetterHUDGUI.java index 48f6eda..bd0ca98 100644 --- a/src/main/java/dsns/betterhud/BetterHUDGUI.java +++ b/src/main/java/dsns/betterhud/BetterHUDGUI.java @@ -4,7 +4,6 @@ import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import java.util.ArrayList; import java.util.List; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/dsns/betterhud/ModMenu.java b/src/main/java/dsns/betterhud/ModMenu.java index 6af1abe..c38d39c 100644 --- a/src/main/java/dsns/betterhud/ModMenu.java +++ b/src/main/java/dsns/betterhud/ModMenu.java @@ -2,16 +2,13 @@ import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; -import dsns.betterhud.BetterHUD; import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.Setting; -import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import me.shedaniel.clothconfig2.api.ConfigBuilder; import me.shedaniel.clothconfig2.api.ConfigCategory; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; -import me.shedaniel.math.Color; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.text.Text; diff --git a/src/main/java/dsns/betterhud/mods/Coordinates.java b/src/main/java/dsns/betterhud/mods/Coordinates.java index 2afde28..84be245 100644 --- a/src/main/java/dsns/betterhud/mods/Coordinates.java +++ b/src/main/java/dsns/betterhud/mods/Coordinates.java @@ -39,13 +39,28 @@ public CustomText onStartTick(MinecraftClient client) { if (player == null) return null; - String roundX = String.format("%.2f", player.getX()); - String roundY = String.format("%.2f", player.getY()); - String roundZ = String.format("%.2f", player.getZ()); - - return new CustomText( - roundX + ", " + roundY + ", " + roundZ, - getModSettings() - ); + + + if (SETTINGS.getSetting("decimal").getBooleanValue()) { + String roundX = String.format("%.2f", player.getX()); + String roundY = String.format("%.2f", player.getY()); + String roundZ = String.format("%.2f", player.getZ()); + + return new CustomText( + roundX + ", " + roundY + ", " + roundZ, + getModSettings() + ); + } else { + String roundX = String.format("%d", player.getX()); + String roundY = String.format("%d", player.getY()); + String roundZ = String.format("%d", player.getZ()); + + return new CustomText( + roundX + ", " + roundY + ", " + roundZ, + getModSettings() + ); + } + + } } From 08558abddfc163c6389c6b95f987b5ef87ef4c55 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Sun, 19 Oct 2025 23:48:57 -0700 Subject: [PATCH 06/10] v2.0.0 --- gradle.properties | 2 +- .../java/dsns/betterhud/BetterHUDGUI.java | 4 +- .../java/dsns/betterhud/mods/Coordinates.java | 48 ++++++++++++------- .../java/dsns/betterhud/util/Setting.java | 25 +++++----- 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/gradle.properties b/gradle.properties index d92565e..7e55711 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ loader_version=0.17.3 loom_version=1.11-SNAPSHOT # Mod Properties -mod_version=1.1.1 +mod_version=2.0.0 maven_group=dsns.betterhud archives_base_name=betterhud diff --git a/src/main/java/dsns/betterhud/BetterHUDGUI.java b/src/main/java/dsns/betterhud/BetterHUDGUI.java index bd0ca98..af00671 100644 --- a/src/main/java/dsns/betterhud/BetterHUDGUI.java +++ b/src/main/java/dsns/betterhud/BetterHUDGUI.java @@ -38,7 +38,9 @@ public void onStartTick(MinecraftClient client) { for (BaseMod mod : BetterHUD.mods) { ModSettings modSettings = mod.getModSettings(); if (!modSettings.getSetting("Enabled").getBooleanValue()) continue; - System.out.println(modSettings.getSetting("Enabled").getBooleanValue()); + System.out.println( + modSettings.getSetting("Enabled").getBooleanValue() + ); CustomText modText = mod.onStartTick(client); System.out.println(modText); diff --git a/src/main/java/dsns/betterhud/mods/Coordinates.java b/src/main/java/dsns/betterhud/mods/Coordinates.java index 84be245..dfc410b 100644 --- a/src/main/java/dsns/betterhud/mods/Coordinates.java +++ b/src/main/java/dsns/betterhud/mods/Coordinates.java @@ -4,7 +4,10 @@ import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; import dsns.betterhud.util.Setting; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.player.PlayerEntity; @@ -12,8 +15,26 @@ class CoordinatesSettings extends ModSettings { public CoordinatesSettings(String position) { super(position); - HashMap settings = super.getSettings(); - settings.put("decimal", Setting.createBooleanSetting(false)); + LinkedHashMap settings = super.getSettings(); + + List> entries = new ArrayList<>( + settings.entrySet() + ); + settings.clear(); + + int insertIndex = 2; + + for (int i = 0; i < Math.min(insertIndex, entries.size()); i++) { + Map.Entry entry = entries.get(i); + settings.put(entry.getKey(), entry.getValue()); + } + + settings.put("Decimal", Setting.createBooleanSetting(false)); + + for (int i = insertIndex; i < entries.size(); i++) { + Map.Entry entry = entries.get(i); + settings.put(entry.getKey(), entry.getValue()); + } } } @@ -39,28 +60,21 @@ public CustomText onStartTick(MinecraftClient client) { if (player == null) return null; - - - if (SETTINGS.getSetting("decimal").getBooleanValue()) { + if (SETTINGS.getSetting("Decimal").getBooleanValue()) { String roundX = String.format("%.2f", player.getX()); String roundY = String.format("%.2f", player.getY()); String roundZ = String.format("%.2f", player.getZ()); - + return new CustomText( roundX + ", " + roundY + ", " + roundZ, getModSettings() ); } else { - String roundX = String.format("%d", player.getX()); - String roundY = String.format("%d", player.getY()); - String roundZ = String.format("%d", player.getZ()); - - return new CustomText( - roundX + ", " + roundY + ", " + roundZ, - getModSettings() - ); - } + int x = (int) player.getX(); + int y = (int) player.getY(); + int z = (int) player.getZ(); - + return new CustomText(x + ", " + y + ", " + z, getModSettings()); + } } } diff --git a/src/main/java/dsns/betterhud/util/Setting.java b/src/main/java/dsns/betterhud/util/Setting.java index a6a6b68..a644d9e 100644 --- a/src/main/java/dsns/betterhud/util/Setting.java +++ b/src/main/java/dsns/betterhud/util/Setting.java @@ -36,12 +36,15 @@ public static Setting createIntegerSetting(int value, int min, int max) { new String[] { String.valueOf(min), String.valueOf(max) } ); } - + public static Setting createColorSetting(int value) { return new Setting( String.valueOf(value), "color", - new String[] { String.valueOf(0x00000000), String.valueOf(0xffffffff) } + new String[] { + String.valueOf(0x00000000), + String.valueOf(0xffffffff), + } ); } @@ -56,39 +59,39 @@ public static Setting createDoubleSetting( new String[] { String.valueOf(min), String.valueOf(max) } ); } - + public String getType() { return type; } - + public String getStringValue() { return value; } - + public int getIntValue() { return Integer.parseInt(value); } - + public double getDoubleValue() { return Double.parseDouble(value); } - + public int getColorValue() { return Integer.parseInt(value); } - + public boolean getBooleanValue() { return Boolean.parseBoolean(value); } - + public String[] getPossibleValues() { return possibleValues; } - + public String getDefaultValue() { return defaultValue; } - + public void setValue(String value) { this.value = value; } From 846d366447e5837ec971be7ad10eb4c0d80e7c39 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:28:59 -0700 Subject: [PATCH 07/10] fix wrong setting name --- src/main/java/dsns/betterhud/mods/Facing.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dsns/betterhud/mods/Facing.java b/src/main/java/dsns/betterhud/mods/Facing.java index 30d3c40..198adab 100644 --- a/src/main/java/dsns/betterhud/mods/Facing.java +++ b/src/main/java/dsns/betterhud/mods/Facing.java @@ -8,7 +8,7 @@ public class Facing implements BaseMod { - private static final CoordinatesSettings SETTINGS = new CoordinatesSettings( + private static final ModSettings SETTINGS = new ModSettings( "top-right" ); From 48298a013e325334fa62b23c8117e1de6201d4cc Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:38:06 -0700 Subject: [PATCH 08/10] add decimla to momentum as well --- .../java/dsns/betterhud/mods/Momentum.java | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/dsns/betterhud/mods/Momentum.java b/src/main/java/dsns/betterhud/mods/Momentum.java index 9a332ce..8fa6442 100644 --- a/src/main/java/dsns/betterhud/mods/Momentum.java +++ b/src/main/java/dsns/betterhud/mods/Momentum.java @@ -3,10 +3,42 @@ import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; +import dsns.betterhud.util.Setting; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.MathHelper; +class MomentumSettings extends ModSettings { + + public MomentumSettings(String position) { + super(position); + LinkedHashMap settings = super.getSettings(); + + List> entries = new ArrayList<>( + settings.entrySet() + ); + settings.clear(); + + int insertIndex = 2; + + for (int i = 0; i < Math.min(insertIndex, entries.size()); i++) { + Map.Entry entry = entries.get(i); + settings.put(entry.getKey(), entry.getValue()); + } + + settings.put("Decimal", Setting.createBooleanSetting(false)); + + for (int i = insertIndex; i < entries.size(); i++) { + Map.Entry entry = entries.get(i); + settings.put(entry.getKey(), entry.getValue()); + } + } +} + public class Momentum implements BaseMod { private static final ModSettings SETTINGS = new ModSettings("top-left"); @@ -35,9 +67,18 @@ public CustomText onStartTick(MinecraftClient client) { ) / 0.05F; - return new CustomText( - String.format("%.2f m/s", currentSpeed), - getModSettings() - ); + if (SETTINGS.getSetting("Decimal").getBooleanValue()) { + return new CustomText( + String.format("%.2f m/s", currentSpeed), + getModSettings() + ); + } else { + int roundedSpeed = (int) currentSpeed; + + return new CustomText( + String.format(roundedSpeed + " m/s"), + getModSettings() + ); + } } } From cf58538bc6e8fffd6f580af37d9fd89c5f65f708 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:10:39 -0700 Subject: [PATCH 09/10] final v2.0.0 --- .../java/dsns/betterhud/BetterHUDGUI.java | 4 -- src/main/java/dsns/betterhud/Config.java | 48 ++++++++++++------ .../java/dsns/betterhud/mods/Momentum.java | 49 ++----------------- 3 files changed, 36 insertions(+), 65 deletions(-) diff --git a/src/main/java/dsns/betterhud/BetterHUDGUI.java b/src/main/java/dsns/betterhud/BetterHUDGUI.java index af00671..0cc3313 100644 --- a/src/main/java/dsns/betterhud/BetterHUDGUI.java +++ b/src/main/java/dsns/betterhud/BetterHUDGUI.java @@ -38,12 +38,8 @@ public void onStartTick(MinecraftClient client) { for (BaseMod mod : BetterHUD.mods) { ModSettings modSettings = mod.getModSettings(); if (!modSettings.getSetting("Enabled").getBooleanValue()) continue; - System.out.println( - modSettings.getSetting("Enabled").getBooleanValue() - ); CustomText modText = mod.onStartTick(client); - System.out.println(modText); if (modText == null) continue; String orientation = modSettings diff --git a/src/main/java/dsns/betterhud/Config.java b/src/main/java/dsns/betterhud/Config.java index 046136a..deff5a1 100644 --- a/src/main/java/dsns/betterhud/Config.java +++ b/src/main/java/dsns/betterhud/Config.java @@ -32,6 +32,31 @@ public static void configure() { } } + private static String titleCaseToCamelCase(String title) { + if (title == null || title.trim().isEmpty()) { + return title; + } + + String[] words = title.trim().split("\\s+"); + if (words.length == 0) { + return ""; + } + + StringBuilder result = new StringBuilder(words[0].toLowerCase()); + + for (int i = 1; i < words.length; i++) { + String word = words[i]; + if (!word.isEmpty()) { + String camelWord = + word.substring(0, 1).toUpperCase() + + word.substring(1).toLowerCase(); + result.append(camelWord); + } + } + + return result.toString(); + } + public static void serialize() { Properties prop = new Properties(); HashMap serialized = new HashMap(); @@ -73,7 +98,6 @@ public static void deserialize() { map.put(name, prop.getProperty(name)); } - int updatedCount = 0; for (Map.Entry modEntry : settings.entrySet()) { String modID = modEntry.getKey(); ModSettings modSetting = modEntry.getValue(); @@ -82,10 +106,15 @@ public static void deserialize() { .getSettings() .entrySet()) { String fullKey = modID + "." + entry.getKey(); + String oldConfigKey = + modID + "." + titleCaseToCamelCase(entry.getKey()); + String val = map.get(fullKey); + String oldVal = map.get(oldConfigKey); if (val != null) { entry.getValue().setValue(val); - updatedCount++; + } else if (oldVal != null) { + entry.getValue().setValue(oldVal); } } } @@ -101,13 +130,8 @@ public static void deserialize() { .getSetting("Background Color"); if (bgSetting != null) { bgSetting.setValue(globalBg); - updatedCount++; } } - System.out.println( - // Remove this debug line in release - "Migrated global backgroundColor to all mods: " + globalBg - ); } String globalText = map.get("textColor"); @@ -121,18 +145,10 @@ public static void deserialize() { .getSetting("Text Color"); if (textSetting != null) { textSetting.setValue(globalText); - updatedCount++; } } - System.out.println( - // Remove this debug line in release - "Migrated global textColor to all mods: " + globalText - ); } - // Ignore other old globals (e.g., horizontalMargin) unless you map them to specific settings - - System.out.println("Deserialized " + updatedCount + " settings."); // Remove this debug line in release - serialize(); // Re-save with migrated values + serialize(); } } diff --git a/src/main/java/dsns/betterhud/mods/Momentum.java b/src/main/java/dsns/betterhud/mods/Momentum.java index 8fa6442..9a332ce 100644 --- a/src/main/java/dsns/betterhud/mods/Momentum.java +++ b/src/main/java/dsns/betterhud/mods/Momentum.java @@ -3,42 +3,10 @@ import dsns.betterhud.util.BaseMod; import dsns.betterhud.util.CustomText; import dsns.betterhud.util.ModSettings; -import dsns.betterhud.util.Setting; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.MathHelper; -class MomentumSettings extends ModSettings { - - public MomentumSettings(String position) { - super(position); - LinkedHashMap settings = super.getSettings(); - - List> entries = new ArrayList<>( - settings.entrySet() - ); - settings.clear(); - - int insertIndex = 2; - - for (int i = 0; i < Math.min(insertIndex, entries.size()); i++) { - Map.Entry entry = entries.get(i); - settings.put(entry.getKey(), entry.getValue()); - } - - settings.put("Decimal", Setting.createBooleanSetting(false)); - - for (int i = insertIndex; i < entries.size(); i++) { - Map.Entry entry = entries.get(i); - settings.put(entry.getKey(), entry.getValue()); - } - } -} - public class Momentum implements BaseMod { private static final ModSettings SETTINGS = new ModSettings("top-left"); @@ -67,18 +35,9 @@ public CustomText onStartTick(MinecraftClient client) { ) / 0.05F; - if (SETTINGS.getSetting("Decimal").getBooleanValue()) { - return new CustomText( - String.format("%.2f m/s", currentSpeed), - getModSettings() - ); - } else { - int roundedSpeed = (int) currentSpeed; - - return new CustomText( - String.format(roundedSpeed + " m/s"), - getModSettings() - ); - } + return new CustomText( + String.format("%.2f m/s", currentSpeed), + getModSettings() + ); } } From 2fef573619886022868368a1e542f38ab7139079 Mon Sep 17 00:00:00 2001 From: dsnsgithub <48170013+dsnsgithub@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:15:24 -0700 Subject: [PATCH 10/10] update gradle github action --- .github/workflows/build.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b01da52..8fc3827 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,29 +8,22 @@ on: [pull_request, push] jobs: build: - strategy: - matrix: - # Use these Java versions - java: [ - 21, # Current Java LTS - ] - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: checkout repository uses: actions/checkout@v4 - name: validate gradle wrapper - uses: gradle/wrapper-validation-action@v2 - - name: setup jdk ${{ matrix.java }} + uses: gradle/actions/wrapper-validation@v4 + - name: setup jdk uses: actions/setup-java@v4 with: - java-version: ${{ matrix.java }} + java-version: '21' distribution: 'microsoft' - name: make gradle wrapper executable run: chmod +x ./gradlew - name: build run: ./gradlew build - name: capture build artifacts - if: ${{ matrix.java == '21' }} # Only upload artifacts built from latest java uses: actions/upload-artifact@v4 with: name: Artifacts