1
mirror of https://github.com/Shiewk/Widgets.git synced 2026-04-28 11:34:17 +02:00

Add real-time stats for bandwidth, FPS, and memory usage (#4)

This commit is contained in:
Shy
2025-12-21 11:28:23 +01:00
parent a55c09b103
commit 9af71a7e67
5 changed files with 66 additions and 10 deletions
@@ -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
@@ -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<Long> 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;
}
}
@@ -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();
}
}