From 895779050db9739f3904f16c985d22067a827461 Mon Sep 17 00:00:00 2001 From: Shiewk Date: Tue, 2 Dec 2025 16:49:26 +0100 Subject: [PATCH] Allow changing the averaging window size on TPSWidget --- .../widgets/client/WidgetsModClient.java | 2 +- .../de/shiewk/widgets/widgets/TPSWidget.java | 20 ++++++++++++------- .../resources/assets/widgets/lang/de_de.json | 3 ++- .../resources/assets/widgets/lang/en_us.json | 3 ++- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java index 9ed6f0a..4bda071 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java @@ -65,11 +65,11 @@ public class WidgetsModClient implements ClientModInitializer { WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory"))); WidgetManager.register(new KeyStrokesWidget(Identifier.of(WidgetsMod.MOD_ID, "keystrokes"))); WidgetManager.register(new PlainTextWidget(Identifier.of(WidgetsMod.MOD_ID, "plaintext"))); - WidgetManager.register(new TPSWidget(Identifier.of(WidgetsMod.MOD_ID, "tps"))); WidgetManager.register(new BiomeWidget(Identifier.of(WidgetsMod.MOD_ID, "biome"))); WidgetManager.register(new SpeedWidget(Identifier.of(WidgetsMod.MOD_ID, "speed"))); WidgetManager.register(new ArmorHudWidget(Identifier.of(WidgetsMod.MOD_ID, "armor"))); WidgetManager.register(new InventoryWidget(Identifier.of(WidgetsMod.MOD_ID, "inventory"))); + WidgetManager.register(TPSWidget.INSTANCE); ComboWidget comboWidget = new ComboWidget(Identifier.of(WidgetsMod.MOD_ID, "combo")); WidgetManager.register(comboWidget); diff --git a/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java b/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java index a8e684f..21ad950 100644 --- a/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java @@ -1,6 +1,8 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; +import de.shiewk.widgets.WidgetsMod; +import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; import net.minecraft.server.ServerTickManager; @@ -14,21 +16,20 @@ import static net.minecraft.text.Text.literal; import static net.minecraft.text.Text.translatable; public class TPSWidget extends BasicTextWidget { - public TPSWidget(Identifier id) { + private TPSWidget(Identifier id) { super(id, List.of( new ToggleWidgetSetting("show_label", translatable("widgets.widgets.common.showLabel"), true), - new ToggleWidgetSetting("dynamic_color", translatable("widgets.widgets.tps.dynamicColor"), true) + new ToggleWidgetSetting("dynamic_color", translatable("widgets.widgets.tps.dynamicColor"), true), + new IntSliderWidgetSetting("window_size", translatable("widgets.widgets.tps.windowSize"), 2, 5, 20) )); getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow); getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor); getSettings().optionById("rainbow_speed").setShowCondition(() -> !this.dynamicColor && this.rainbow); - if (INSTANCE != null) throw new IllegalStateException("Instance already initialized"); - INSTANCE = this; } - private static TPSWidget INSTANCE; + public static final TPSWidget INSTANCE = new TPSWidget(Identifier.of(WidgetsMod.MOD_ID, "tps")); - private static final long[] lastUpdates = new long[5]; + private static long[] lastUpdates = new long[5]; private static int updatePointer = 0; private static int updatesSinceWorldChange = 0; @@ -69,7 +70,7 @@ public class TPSWidget extends BasicTextWidget { float mspt = avgDifference / 20000000f; float ticksPerSecond = 1000f / mspt; - boolean loadingFinished = updatesSinceWorldChange > 5; + boolean loadingFinished = updatesSinceWorldChange > lastUpdates.length; if (client.world != null) { INSTANCE.updateTPS(ticksPerSecond, client.world.getTickManager().getTickRate(), loadingFinished); } else { @@ -125,5 +126,10 @@ public class TPSWidget extends BasicTextWidget { super.onSettingsChanged(settings); this.dynamicColor = ((ToggleWidgetSetting) settings.optionById("dynamic_color")).getValue(); this.showLabel = ((ToggleWidgetSetting) settings.optionById("show_label")).getValue(); + + int windowSize = ((IntSliderWidgetSetting) settings.optionById("window_size")).getValue(); + updatePointer = 0; + updatesSinceWorldChange = 0; + lastUpdates = new long[windowSize]; } } diff --git a/src/main/resources/assets/widgets/lang/de_de.json b/src/main/resources/assets/widgets/lang/de_de.json index 2790cd7..ec6d221 100644 --- a/src/main/resources/assets/widgets/lang/de_de.json +++ b/src/main/resources/assets/widgets/lang/de_de.json @@ -146,5 +146,6 @@ "widgets.widgets.tps": "TPS", "widgets.widgets.tps.description": "Zeigt die TPS im Einzelspielermodus an oder schätzt die TPS im Mehrspielermodus", "widgets.widgets.tps.dynamicColor": "Farbe dynamisch anzeigen", - "widgets.widgets.tps.tps": "%s TPS" + "widgets.widgets.tps.tps": "%s TPS", + "widgets.widgets.tps.windowSize": "Durchschnittsfenstergröße (Sekunden)" } \ No newline at end of file diff --git a/src/main/resources/assets/widgets/lang/en_us.json b/src/main/resources/assets/widgets/lang/en_us.json index 2c5113f..65358ba 100644 --- a/src/main/resources/assets/widgets/lang/en_us.json +++ b/src/main/resources/assets/widgets/lang/en_us.json @@ -146,5 +146,6 @@ "widgets.widgets.tps": "TPS", "widgets.widgets.tps.description": "Shows the current TPS when in singleplayer and estimates server TPS when in multiplayer.", "widgets.widgets.tps.dynamicColor": "Dynamic Color", - "widgets.widgets.tps.tps": "%s TPS" + "widgets.widgets.tps.tps": "%s TPS", + "widgets.widgets.tps.windowSize": "Averaging window size (seconds)" } \ No newline at end of file