From 62c33d74c403235a9dc2418f4738db937009e193 Mon Sep 17 00:00:00 2001 From: XC0 <102973604+X-C-0@users.noreply.github.com> Date: Tue, 20 Jan 2026 22:58:04 +0100 Subject: [PATCH 1/3] Added invalidation to Settings --- .../meteorclient/gui/tabs/builtin/HudTab.java | 10 +++++++++- .../meteorclient/settings/Settings.java | 13 +++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java index 8691b1dbfb..98720971b4 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.gui.tabs.Tab; import meteordevelopment.meteorclient.gui.tabs.TabScreen; import meteordevelopment.meteorclient.gui.tabs.WindowTabScreen; +import meteordevelopment.meteorclient.gui.widgets.containers.WContainer; import meteordevelopment.meteorclient.gui.widgets.containers.WHorizontalList; import meteordevelopment.meteorclient.gui.widgets.pressable.WButton; import meteordevelopment.meteorclient.gui.widgets.pressable.WCheckbox; @@ -37,6 +38,7 @@ public boolean isScreen(Screen screen) { } public static class HudScreen extends WindowTabScreen { + private WContainer settingsContainer; private final Hud hud; public HudScreen(GuiTheme theme, Tab tab) { @@ -48,7 +50,8 @@ public HudScreen(GuiTheme theme, Tab tab) { @Override public void initWidgets() { - add(theme.settings(hud.settings)).expandX(); + settingsContainer = add(theme.verticalList()).expandX().widget(); + settingsContainer.add(theme.settings(hud.settings)).expandX().widget(); add(theme.horizontalSeparator()).expandX(); @@ -77,6 +80,11 @@ protected void onRenderBefore(DrawContext drawContext, float delta) { HudEditorScreen.renderElements(drawContext); } + @Override + public void tick() { + hud.settings.tick(settingsContainer, theme); + } + @Override public boolean toClipboard() { return NbtUtils.toClipboard(hud); diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java index 6e4ca7d2d7..5848fe5a5b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java @@ -22,6 +22,8 @@ public class Settings implements ISerializable, Iterable { private SettingGroup defaultGroup; + private boolean invalidated; + public final List groups = new ArrayList<>(1); public void onActivated() { @@ -61,6 +63,8 @@ public void reset() { setting.reset(); } } + + invalidated = true; } public SettingGroup getGroup(String name) { @@ -125,13 +129,18 @@ public void tick(WContainer settings, GuiTheme theme) { boolean visible = setting.isVisible(); if (visible != setting.lastWasVisible) { - settings.clear(); - settings.add(theme.settings(this)).expandX(); + invalidated = true; } setting.lastWasVisible = visible; } } + + if (invalidated) { + settings.clear(); + settings.add(theme.settings(this)).expandX(); + invalidated = false; + } } @Override From 34cb22f0e4c6e02a051e0877f5f524ac21abb017 Mon Sep 17 00:00:00 2001 From: XC0 <102973604+X-C-0@users.noreply.github.com> Date: Tue, 20 Jan 2026 23:17:06 +0100 Subject: [PATCH 2/3] Made HudTab and ProfilesTab call super.tick() just like ConfigTab --- .../meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java | 2 ++ .../meteorclient/gui/tabs/builtin/ProfilesTab.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java index 98720971b4..21236d2c1f 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/HudTab.java @@ -82,6 +82,8 @@ protected void onRenderBefore(DrawContext drawContext, float delta) { @Override public void tick() { + super.tick(); + hud.settings.tick(settingsContainer, theme); } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java index 680e21d48c..635a8b3142 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java @@ -236,6 +236,8 @@ public void initWidgets() { @Override public void tick() { + super.tick(); + profile.settings.tick(settingsContainer, theme); } From 7603c8274788682b345724751484afe59f6d1a25 Mon Sep 17 00:00:00 2001 From: XC0 <102973604+X-C-0@users.noreply.github.com> Date: Tue, 20 Jan 2026 23:54:50 +0100 Subject: [PATCH 3/3] Added the ability to invalidate the Settings for addons --- .../meteorclient/settings/Settings.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java index 5848fe5a5b..78bb596d93 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java @@ -22,7 +22,7 @@ public class Settings implements ISerializable, Iterable { private SettingGroup defaultGroup; - private boolean invalidated; + private boolean invalidate; public final List groups = new ArrayList<>(1); @@ -64,7 +64,11 @@ public void reset() { } } - invalidated = true; + invalidate(); + } + + public void invalidate() { + invalidate = true; } public SettingGroup getGroup(String name) { @@ -129,17 +133,17 @@ public void tick(WContainer settings, GuiTheme theme) { boolean visible = setting.isVisible(); if (visible != setting.lastWasVisible) { - invalidated = true; + invalidate(); } setting.lastWasVisible = visible; } } - if (invalidated) { + if (invalidate) { settings.clear(); settings.add(theme.settings(this)).expandX(); - invalidated = false; + invalidate = false; } }