diff --git a/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java b/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java index df6999c..697c380 100644 --- a/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.function.LongFunction; import static net.minecraft.text.Text.literal; +import static net.minecraft.text.Text.translatable; public class BandwidthWidget extends BasicTextWidget { @@ -48,7 +49,8 @@ public class BandwidthWidget extends BasicTextWidget { super(id, List.of( new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.bandwidth.dynamicColor"), true), new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false), - new EnumWidgetSetting<>("unit", Text.translatable("widgets.widgets.bandwidth.unit"), Unit.class, Unit.KB, unit -> literal(unit.name)) + new EnumWidgetSetting<>("unit", Text.translatable("widgets.widgets.bandwidth.unit"), Unit.class, Unit.KB, unit -> literal(unit.name)), + new ToggleWidgetSetting("fastupdate", translatable("widgets.widgets.bandwidth.fastupdate"), false) )); getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow); getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor); @@ -59,6 +61,7 @@ public class BandwidthWidget extends BasicTextWidget { private boolean dynamicColor = false; private boolean hideInSingleplayer = false; private Unit unit = Unit.KB; + protected boolean fastUpdate = false; @Override public void tickWidget() { @@ -66,7 +69,7 @@ public class BandwidthWidget extends BasicTextWidget { if (!shouldRender) return; float tickRate = WidgetUtils.getClientTickRate(); t++; - if (t >= tickRate){ + if (t >= tickRate || fastUpdate){ t = 0; long avgBytesPerSecond = getAvgBytesPerSecond(MinecraftClient.getInstance(), tickRate); formatAndSetRenderText(literal(unit.sizeFormatter.apply(avgBytesPerSecond))); @@ -100,6 +103,7 @@ public class BandwidthWidget extends BasicTextWidget { this.dynamicColor = ((ToggleWidgetSetting) settings.optionById("dynamic_color")).getValue(); this.hideInSingleplayer = ((ToggleWidgetSetting) settings.optionById("hide_in_singleplayer")).getValue(); this.unit = (Unit) ((EnumWidgetSetting) settings.optionById("unit")).getValue(); + this.fastUpdate = ((ToggleWidgetSetting) settings.optionById("fastupdate")).getValue(); } @Override diff --git a/src/main/java/de/shiewk/widgets/widgets/FPSWidget.java b/src/main/java/de/shiewk/widgets/widgets/FPSWidget.java index 962f9bd..000b794 100644 --- a/src/main/java/de/shiewk/widgets/widgets/FPSWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/FPSWidget.java @@ -1,30 +1,64 @@ package de.shiewk.widgets.widgets; +import de.shiewk.widgets.WidgetSettings; +import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import java.util.LinkedList; import java.util.List; import static net.minecraft.text.Text.literal; +import static net.minecraft.text.Text.translatable; public class FPSWidget extends BasicTextWidget { + + protected boolean realtime = false; + protected LinkedList timedFrames = null; + public FPSWidget(Identifier id) { - super(id, List.of()); + super(id, List.of( + new ToggleWidgetSetting("realtime", translatable("widgets.widgets.common.realtime"), false) + )); + } + + @Override + public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) { + if (realtime){ + timedFrames.add(n); + while (timedFrames.getFirst() < n - 500_000_100L){ + timedFrames.removeFirst(); + } + formatAndSetRenderText(literal(timedFrames.size() * 2 + " FPS")); + } + super.renderScaled(context, n, textRenderer, posX, posY); } @Override public void tickWidget() { - formatAndSetRenderText(literal(MinecraftClient.getInstance().getCurrentFps() + " FPS")); + if (!realtime){ + formatAndSetRenderText(literal(MinecraftClient.getInstance().getCurrentFps() + " FPS")); + } } @Override public Text getName() { - return Text.translatable("widgets.widgets.fps"); + return translatable("widgets.widgets.fps"); } @Override public Text getDescription() { - return Text.translatable("widgets.widgets.fps.description"); + return translatable("widgets.widgets.fps.description"); + } + + @Override + public void onSettingsChanged(WidgetSettings settings) { + super.onSettingsChanged(settings); + this.realtime = ((ToggleWidgetSetting) settings.optionById("realtime")).getValue(); + + timedFrames = this.realtime ? new LinkedList<>() : null; } } diff --git a/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java b/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java index 05d8a14..2f5b1c9 100644 --- a/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java @@ -2,6 +2,8 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -14,16 +16,28 @@ public class MemoryUsageWidget extends BasicTextWidget { private boolean showPercentage = true; private boolean showLabel = true; + protected boolean realtime = false; public MemoryUsageWidget(Identifier id) { super(id, List.of( new ToggleWidgetSetting("percentage", translatable("widgets.widgets.memory.showPercentage"), true), - new ToggleWidgetSetting("label", translatable("widgets.widgets.common.showLabel"), true) + new ToggleWidgetSetting("label", translatable("widgets.widgets.common.showLabel"), true), + new ToggleWidgetSetting("realtime", translatable("widgets.widgets.common.realtime"), false) )); } + @Override + public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) { + if (realtime) refresh(); + super.renderScaled(context, n, textRenderer, posX, posY); + } + @Override public void tickWidget() { + if (!realtime) refresh(); + } + + private void refresh() { Runtime runtime = Runtime.getRuntime(); long memTotal = runtime.maxMemory(); long memAllocated = runtime.totalMemory(); @@ -38,7 +52,6 @@ public class MemoryUsageWidget extends BasicTextWidget { } else { formatAndSetRenderText(literal(memUsageString)); } - } private long mib(long bytes) { @@ -58,7 +71,8 @@ public class MemoryUsageWidget extends BasicTextWidget { @Override public void onSettingsChanged(WidgetSettings settings) { super.onSettingsChanged(settings); - showPercentage = ((ToggleWidgetSetting) settings.optionById("percentage")).getValue(); - showLabel = ((ToggleWidgetSetting) settings.optionById("label")).getValue(); + this.showPercentage = ((ToggleWidgetSetting) settings.optionById("percentage")).getValue(); + this.showLabel = ((ToggleWidgetSetting) settings.optionById("label")).getValue(); + this.realtime = ((ToggleWidgetSetting) settings.optionById("realtime")).getValue(); } } diff --git a/src/main/resources/assets/widgets/lang/de_de.json b/src/main/resources/assets/widgets/lang/de_de.json index ec6d221..b76c3d0 100644 --- a/src/main/resources/assets/widgets/lang/de_de.json +++ b/src/main/resources/assets/widgets/lang/de_de.json @@ -33,6 +33,7 @@ "widgets.widgets.bandwidth": "Bandbreite", "widgets.widgets.bandwidth.description": "Zeigt, wie viele Daten an den aktuell Server gesendet werden/vom Server an den Klient gesendet werden.", "widgets.widgets.bandwidth.dynamicColor": "Farbe dynamisch anzeigen", + "widgets.widgets.bandwidth.fastupdate": "Schnelle Aktualisierung", "widgets.widgets.bandwidth.unit": "Einheit", "widgets.widgets.basictext.alignment": "Text Ausrichtung", "widgets.widgets.basictext.alignment.center": "Mitte", @@ -71,6 +72,7 @@ "widgets.widgets.common.hideInSingleplayer": "In Einzelspielerwelten verbergen", "widgets.widgets.common.rainbow": "Regenbogen-Text", "widgets.widgets.common.rainbow.speed": "Regenbogengeschwindigkeit", + "widgets.widgets.common.realtime": "Echtzeit-Update (braucht mehr Leistung)", "widgets.widgets.common.showLabel": "Beschriftung anzeigen", "widgets.widgets.common.sizePercent": "Widgetgröße (%)", "widgets.widgets.coordinates": "Koordinaten", diff --git a/src/main/resources/assets/widgets/lang/en_us.json b/src/main/resources/assets/widgets/lang/en_us.json index 65358ba..9b4b852 100644 --- a/src/main/resources/assets/widgets/lang/en_us.json +++ b/src/main/resources/assets/widgets/lang/en_us.json @@ -33,6 +33,7 @@ "widgets.widgets.bandwidth": "Bandwidth", "widgets.widgets.bandwidth.description": "Shows how much data is being read/sent from the server you're connected to.", "widgets.widgets.bandwidth.dynamicColor": "Dynamic Color", + "widgets.widgets.bandwidth.fastupdate": "Fast update", "widgets.widgets.bandwidth.unit": "Unit", "widgets.widgets.basictext.alignment": "Text alignment", "widgets.widgets.basictext.alignment.center": "Center", @@ -71,6 +72,7 @@ "widgets.widgets.common.hideInSingleplayer": "Hide in singleplayer worlds", "widgets.widgets.common.rainbow": "Rainbow text", "widgets.widgets.common.rainbow.speed": "Rainbow speed", + "widgets.widgets.common.realtime": "Real-time updating (may use more performance)", "widgets.widgets.common.showLabel": "Show label", "widgets.widgets.common.sizePercent": "Widget size (%)", "widgets.widgets.coordinates": "Coordinates",