diff --git a/gradle.properties b/gradle.properties index 64fc435..684d416 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.21.6 yarn_mappings=1.21.6+build.1 loader_version=0.17.2 # Mod Properties -mod_version=2.0.0 +mod_version=2.1.0 maven_group=de.shiewk archives_base_name=Widgets # Dependencies diff --git a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java index 52432f1..1d0c5b1 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/client/screen/EditWidgetPositionsScreen.java b/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java index 64c8c4a..7490009 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java @@ -18,6 +18,7 @@ import org.joml.Vector2i; import java.awt.*; import java.util.List; +import java.util.Locale; import java.util.function.Consumer; public class EditWidgetPositionsScreen extends AnimatedScreen { @@ -273,7 +274,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen { List options = new ObjectArrayList<>(Anchor.values().length); for (Anchor anchor : Anchor.values()) { options.add(new ContextMenuScreen.Option( - Text.translatable("widgets.ui.anchor." + anchor.name().toLowerCase()), + Text.translatable("widgets.ui.anchor." + anchor.name().toLowerCase(Locale.ROOT)), hovered.getSettings().anchor == anchor, () -> { hovered.setPos( diff --git a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java index 3af9a6e..0ff2e8a 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java @@ -64,6 +64,7 @@ public class WidgetConfigScreen extends Screen { this.addDrawableChild(widgetList); this.addDrawableChild(searchField); + setInitialFocus(searchField); // Left side GridWidget gw = new GridWidget(0, 0); diff --git a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java index 7c022f4..6026760 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java +++ b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetListWidget.java @@ -17,7 +17,9 @@ import net.minecraft.text.Text; import org.joml.Matrix3x2fStack; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.Locale; import java.util.function.Consumer; public class WidgetListWidget extends ScrollableWidget { @@ -30,6 +32,7 @@ public class WidgetListWidget extends ScrollableWidget { private final Consumer onEdit; public static boolean searchQueryMatches(String search, ModWidget widget) { + if (search == null) return true; return widget.getName().getString().contains(search) || widget.getDescription().getString().contains(search) || widget.getId().toString().contains(search); } @@ -43,11 +46,11 @@ public class WidgetListWidget extends ScrollableWidget { } private List loadWidgets(String search) { - if (search == null) { - return WidgetManager.getAllWidgets(); - } else { - return WidgetManager.getAllWidgets().stream().filter(w -> searchQueryMatches(search, w)).toList(); - } + return WidgetManager.getAllWidgets() + .stream() + .filter(w -> searchQueryMatches(search, w)) + .sorted(Comparator.comparing(w -> w.getName().getString().toLowerCase(Locale.ROOT))) + .toList(); } private void init(){ diff --git a/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java b/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java index 41842a1..3901b6a 100644 --- a/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java @@ -16,6 +16,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import java.util.List; +import java.util.Locale; import static net.minecraft.text.Text.translatable; @@ -41,7 +42,7 @@ public class ArmorHudWidget extends ResizableWidget { PERCENT; public Text getDisplayName() { - return translatable("widgets.widgets.armorHud.durabilityStyle." + name().toLowerCase()); + return translatable("widgets.widgets.armorHud.durabilityStyle." + name().toLowerCase(Locale.ROOT)); } } diff --git a/src/main/java/de/shiewk/widgets/widgets/CPSWidget.java b/src/main/java/de/shiewk/widgets/widgets/CPSWidget.java index 95f35f0..935ec88 100644 --- a/src/main/java/de/shiewk/widgets/widgets/CPSWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/CPSWidget.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; import static net.minecraft.text.Text.literal; +import static net.minecraft.text.Text.translatable; public class CPSWidget extends BasicTextWidget { @@ -44,6 +45,7 @@ public class CPSWidget extends BasicTextWidget { } private Appearance appearance = Appearance.UNIFIED; + private boolean showLabel = true; public enum Appearance { SPLIT_PIPE("pipe"), @@ -59,10 +61,11 @@ public class CPSWidget extends BasicTextWidget { public CPSWidget(Identifier id) { super(id, List.of( - new EnumWidgetSetting<>("appearance", Text.translatable("widgets.widgets.cps.appearance"), Appearance.class, Appearance.UNIFIED, appearance -> Text.translatable("widgets.widgets.cps.appearance."+appearance.key)), - new ToggleWidgetSetting("left", Text.translatable("widgets.widgets.cps.left"), true), - new ToggleWidgetSetting("middle", Text.translatable("widgets.widgets.cps.middle"), false), - new ToggleWidgetSetting("right", Text.translatable("widgets.widgets.cps.right"), true) + new ToggleWidgetSetting("show_label", translatable("widgets.widgets.common.showLabel"), true), + new EnumWidgetSetting<>("appearance", translatable("widgets.widgets.cps.appearance"), Appearance.class, Appearance.UNIFIED, appearance -> translatable("widgets.widgets.cps.appearance."+appearance.key)), + new ToggleWidgetSetting("left", translatable("widgets.widgets.cps.left"), true), + new ToggleWidgetSetting("middle", translatable("widgets.widgets.cps.middle"), false), + new ToggleWidgetSetting("right", translatable("widgets.widgets.cps.right"), true) )); } @@ -102,10 +105,17 @@ public class CPSWidget extends BasicTextWidget { middleClicks.removeIf(click -> click.expiresAt <= mtime); middle = middleClicks.size(); } - formatAndSetRenderText(switch (appearance){ - case UNIFIED -> literal((left + right + middle) + " CPS"); - case SPLIT_PIPE, SPLIT_SLASH -> literal(getClickText(left, middle, right) + " CPS"); - }); + if (showLabel){ + formatAndSetRenderText(switch (appearance){ + case UNIFIED -> literal((left + right + middle) + " CPS"); + case SPLIT_PIPE, SPLIT_SLASH -> literal(getClickText(left, middle, right) + " CPS"); + }); + } else { + formatAndSetRenderText(switch (appearance){ + case UNIFIED -> literal(""+(left + right + middle)); + case SPLIT_PIPE, SPLIT_SLASH -> literal(getClickText(left, middle, right).toString()); + }); + } } private @NotNull StringBuilder getClickText(int left, int middle, int right) { @@ -135,15 +145,16 @@ public class CPSWidget extends BasicTextWidget { countMiddleClicks = ((ToggleWidgetSetting) settings.optionById("middle")).getValue(); countRightClicks = ((ToggleWidgetSetting) settings.optionById("right")).getValue(); appearance = (Appearance) ((EnumWidgetSetting) settings.optionById("appearance")).getValue(); + showLabel = ((ToggleWidgetSetting) settings.optionById("show_label")).getValue(); } @Override public Text getName() { - return Text.translatable("widgets.widgets.cps"); -} + return translatable("widgets.widgets.cps"); + } @Override public Text getDescription() { - return Text.translatable("widgets.widgets.cps.description"); + return translatable("widgets.widgets.cps.description"); } -} +} \ No newline at end of file diff --git a/src/main/java/de/shiewk/widgets/widgets/InventoryWidget.java b/src/main/java/de/shiewk/widgets/widgets/InventoryWidget.java index 6e3f216..7a3568f 100644 --- a/src/main/java/de/shiewk/widgets/widgets/InventoryWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/InventoryWidget.java @@ -16,6 +16,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import java.util.List; +import java.util.Locale; import static net.minecraft.text.Text.translatable; @@ -42,7 +43,7 @@ public class InventoryWidget extends ResizableWidget { } public Text display() { - return translatable("widgets.widgets.inventory.mode." + name().toLowerCase()); + return translatable("widgets.widgets.inventory.mode." + name().toLowerCase(Locale.ROOT)); } } 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