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:
@@ -13,6 +13,7 @@ import java.util.List;
|
|||||||
import java.util.function.LongFunction;
|
import java.util.function.LongFunction;
|
||||||
|
|
||||||
import static net.minecraft.text.Text.literal;
|
import static net.minecraft.text.Text.literal;
|
||||||
|
import static net.minecraft.text.Text.translatable;
|
||||||
|
|
||||||
public class BandwidthWidget extends BasicTextWidget {
|
public class BandwidthWidget extends BasicTextWidget {
|
||||||
|
|
||||||
@@ -48,7 +49,8 @@ public class BandwidthWidget extends BasicTextWidget {
|
|||||||
super(id, List.of(
|
super(id, List.of(
|
||||||
new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.bandwidth.dynamicColor"), true),
|
new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.bandwidth.dynamicColor"), true),
|
||||||
new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false),
|
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("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow);
|
||||||
getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor);
|
getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor);
|
||||||
@@ -59,6 +61,7 @@ public class BandwidthWidget extends BasicTextWidget {
|
|||||||
private boolean dynamicColor = false;
|
private boolean dynamicColor = false;
|
||||||
private boolean hideInSingleplayer = false;
|
private boolean hideInSingleplayer = false;
|
||||||
private Unit unit = Unit.KB;
|
private Unit unit = Unit.KB;
|
||||||
|
protected boolean fastUpdate = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tickWidget() {
|
public void tickWidget() {
|
||||||
@@ -66,7 +69,7 @@ public class BandwidthWidget extends BasicTextWidget {
|
|||||||
if (!shouldRender) return;
|
if (!shouldRender) return;
|
||||||
float tickRate = WidgetUtils.getClientTickRate();
|
float tickRate = WidgetUtils.getClientTickRate();
|
||||||
t++;
|
t++;
|
||||||
if (t >= tickRate){
|
if (t >= tickRate || fastUpdate){
|
||||||
t = 0;
|
t = 0;
|
||||||
long avgBytesPerSecond = getAvgBytesPerSecond(MinecraftClient.getInstance(), tickRate);
|
long avgBytesPerSecond = getAvgBytesPerSecond(MinecraftClient.getInstance(), tickRate);
|
||||||
formatAndSetRenderText(literal(unit.sizeFormatter.apply(avgBytesPerSecond)));
|
formatAndSetRenderText(literal(unit.sizeFormatter.apply(avgBytesPerSecond)));
|
||||||
@@ -100,6 +103,7 @@ public class BandwidthWidget extends BasicTextWidget {
|
|||||||
this.dynamicColor = ((ToggleWidgetSetting) settings.optionById("dynamic_color")).getValue();
|
this.dynamicColor = ((ToggleWidgetSetting) settings.optionById("dynamic_color")).getValue();
|
||||||
this.hideInSingleplayer = ((ToggleWidgetSetting) settings.optionById("hide_in_singleplayer")).getValue();
|
this.hideInSingleplayer = ((ToggleWidgetSetting) settings.optionById("hide_in_singleplayer")).getValue();
|
||||||
this.unit = (Unit) ((EnumWidgetSetting<?>) settings.optionById("unit")).getValue();
|
this.unit = (Unit) ((EnumWidgetSetting<?>) settings.optionById("unit")).getValue();
|
||||||
|
this.fastUpdate = ((ToggleWidgetSetting) settings.optionById("fastupdate")).getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,30 +1,64 @@
|
|||||||
package de.shiewk.widgets.widgets;
|
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.MinecraftClient;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static net.minecraft.text.Text.literal;
|
import static net.minecraft.text.Text.literal;
|
||||||
|
import static net.minecraft.text.Text.translatable;
|
||||||
|
|
||||||
public class FPSWidget extends BasicTextWidget {
|
public class FPSWidget extends BasicTextWidget {
|
||||||
|
|
||||||
|
protected boolean realtime = false;
|
||||||
|
protected LinkedList<Long> timedFrames = null;
|
||||||
|
|
||||||
public FPSWidget(Identifier id) {
|
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
|
@Override
|
||||||
public void tickWidget() {
|
public void tickWidget() {
|
||||||
formatAndSetRenderText(literal(MinecraftClient.getInstance().getCurrentFps() + " FPS"));
|
if (!realtime){
|
||||||
|
formatAndSetRenderText(literal(MinecraftClient.getInstance().getCurrentFps() + " FPS"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Text getName() {
|
public Text getName() {
|
||||||
return Text.translatable("widgets.widgets.fps");
|
return translatable("widgets.widgets.fps");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Text getDescription() {
|
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.WidgetSettings;
|
||||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
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.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
@@ -14,16 +16,28 @@ public class MemoryUsageWidget extends BasicTextWidget {
|
|||||||
|
|
||||||
private boolean showPercentage = true;
|
private boolean showPercentage = true;
|
||||||
private boolean showLabel = true;
|
private boolean showLabel = true;
|
||||||
|
protected boolean realtime = false;
|
||||||
|
|
||||||
public MemoryUsageWidget(Identifier id) {
|
public MemoryUsageWidget(Identifier id) {
|
||||||
super(id, List.of(
|
super(id, List.of(
|
||||||
new ToggleWidgetSetting("percentage", translatable("widgets.widgets.memory.showPercentage"), true),
|
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
|
@Override
|
||||||
public void tickWidget() {
|
public void tickWidget() {
|
||||||
|
if (!realtime) refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refresh() {
|
||||||
Runtime runtime = Runtime.getRuntime();
|
Runtime runtime = Runtime.getRuntime();
|
||||||
long memTotal = runtime.maxMemory();
|
long memTotal = runtime.maxMemory();
|
||||||
long memAllocated = runtime.totalMemory();
|
long memAllocated = runtime.totalMemory();
|
||||||
@@ -38,7 +52,6 @@ public class MemoryUsageWidget extends BasicTextWidget {
|
|||||||
} else {
|
} else {
|
||||||
formatAndSetRenderText(literal(memUsageString));
|
formatAndSetRenderText(literal(memUsageString));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private long mib(long bytes) {
|
private long mib(long bytes) {
|
||||||
@@ -58,7 +71,8 @@ public class MemoryUsageWidget extends BasicTextWidget {
|
|||||||
@Override
|
@Override
|
||||||
public void onSettingsChanged(WidgetSettings settings) {
|
public void onSettingsChanged(WidgetSettings settings) {
|
||||||
super.onSettingsChanged(settings);
|
super.onSettingsChanged(settings);
|
||||||
showPercentage = ((ToggleWidgetSetting) settings.optionById("percentage")).getValue();
|
this.showPercentage = ((ToggleWidgetSetting) settings.optionById("percentage")).getValue();
|
||||||
showLabel = ((ToggleWidgetSetting) settings.optionById("label")).getValue();
|
this.showLabel = ((ToggleWidgetSetting) settings.optionById("label")).getValue();
|
||||||
|
this.realtime = ((ToggleWidgetSetting) settings.optionById("realtime")).getValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"widgets.widgets.bandwidth": "Bandbreite",
|
"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.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.dynamicColor": "Farbe dynamisch anzeigen",
|
||||||
|
"widgets.widgets.bandwidth.fastupdate": "Schnelle Aktualisierung",
|
||||||
"widgets.widgets.bandwidth.unit": "Einheit",
|
"widgets.widgets.bandwidth.unit": "Einheit",
|
||||||
"widgets.widgets.basictext.alignment": "Text Ausrichtung",
|
"widgets.widgets.basictext.alignment": "Text Ausrichtung",
|
||||||
"widgets.widgets.basictext.alignment.center": "Mitte",
|
"widgets.widgets.basictext.alignment.center": "Mitte",
|
||||||
@@ -71,6 +72,7 @@
|
|||||||
"widgets.widgets.common.hideInSingleplayer": "In Einzelspielerwelten verbergen",
|
"widgets.widgets.common.hideInSingleplayer": "In Einzelspielerwelten verbergen",
|
||||||
"widgets.widgets.common.rainbow": "Regenbogen-Text",
|
"widgets.widgets.common.rainbow": "Regenbogen-Text",
|
||||||
"widgets.widgets.common.rainbow.speed": "Regenbogengeschwindigkeit",
|
"widgets.widgets.common.rainbow.speed": "Regenbogengeschwindigkeit",
|
||||||
|
"widgets.widgets.common.realtime": "Echtzeit-Update (braucht mehr Leistung)",
|
||||||
"widgets.widgets.common.showLabel": "Beschriftung anzeigen",
|
"widgets.widgets.common.showLabel": "Beschriftung anzeigen",
|
||||||
"widgets.widgets.common.sizePercent": "Widgetgröße (%)",
|
"widgets.widgets.common.sizePercent": "Widgetgröße (%)",
|
||||||
"widgets.widgets.coordinates": "Koordinaten",
|
"widgets.widgets.coordinates": "Koordinaten",
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"widgets.widgets.bandwidth": "Bandwidth",
|
"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.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.dynamicColor": "Dynamic Color",
|
||||||
|
"widgets.widgets.bandwidth.fastupdate": "Fast update",
|
||||||
"widgets.widgets.bandwidth.unit": "Unit",
|
"widgets.widgets.bandwidth.unit": "Unit",
|
||||||
"widgets.widgets.basictext.alignment": "Text alignment",
|
"widgets.widgets.basictext.alignment": "Text alignment",
|
||||||
"widgets.widgets.basictext.alignment.center": "Center",
|
"widgets.widgets.basictext.alignment.center": "Center",
|
||||||
@@ -71,6 +72,7 @@
|
|||||||
"widgets.widgets.common.hideInSingleplayer": "Hide in singleplayer worlds",
|
"widgets.widgets.common.hideInSingleplayer": "Hide in singleplayer worlds",
|
||||||
"widgets.widgets.common.rainbow": "Rainbow text",
|
"widgets.widgets.common.rainbow": "Rainbow text",
|
||||||
"widgets.widgets.common.rainbow.speed": "Rainbow speed",
|
"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.showLabel": "Show label",
|
||||||
"widgets.widgets.common.sizePercent": "Widget size (%)",
|
"widgets.widgets.common.sizePercent": "Widget size (%)",
|
||||||
"widgets.widgets.coordinates": "Coordinates",
|
"widgets.widgets.coordinates": "Coordinates",
|
||||||
|
|||||||
Reference in New Issue
Block a user