diff --git a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java index e4cbcf8..f396020 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetsModClient.java @@ -55,5 +55,6 @@ public class WidgetsModClient implements ClientModInitializer { WidgetManager.register(new PlayerCountWidget(Identifier.of(WidgetsMod.MOD_ID, "player_count"))); WidgetManager.register(new CPSWidget(Identifier.of(WidgetsMod.MOD_ID, "cps"))); WidgetManager.register(new PlayTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "playtime"))); + WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory"))); } } diff --git a/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java b/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java new file mode 100644 index 0000000..398515c --- /dev/null +++ b/src/main/java/de/shiewk/widgets/widgets/MemoryUsageWidget.java @@ -0,0 +1,61 @@ +package de.shiewk.widgets.widgets; + +import de.shiewk.widgets.WidgetSettings; +import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +import java.util.List; + +public class MemoryUsageWidget extends BasicTextWidget { + + private boolean showPercentage = true; + private boolean showLabel = true; + + public MemoryUsageWidget(Identifier id) { + super(id, List.of( + new ToggleWidgetSetting("percentage", Text.translatable("widgets.widgets.memory.showPercentage"), true), + new ToggleWidgetSetting("label", Text.translatable("widgets.widgets.memory.showLabel"), true) + )); + } + + @Override + public void tickWidget() { + Runtime runtime = Runtime.getRuntime(); + long memTotal = runtime.maxMemory(); + long memAllocated = runtime.totalMemory(); + long memFree = runtime.freeMemory(); + long memUsed = memAllocated - memFree; + short memUsagePercent = (short) (((float) memUsed / memTotal) * 100); + String memUsageString = showPercentage ? + mib(memUsed) + "MiB / " + mib(memTotal) + "MiB (" + memUsagePercent + "%)" : + mib(memUsed) + "MiB / " + mib(memTotal) + "MiB"; + if (showLabel){ + renderText = Text.literal(Text.translatable("widgets.widgets.memory.withLabel", memUsageString).getString()); + } else { + renderText = Text.literal(memUsageString); + } + + } + + private long mib(long bytes) { + return bytes / 0x100000; + } + + @Override + public Text getName() { + return Text.translatable("widgets.widgets.memory"); + } + + @Override + public Text getDescription() { + return Text.translatable("widgets.widgets.memory.description"); + } + + @Override + public void onSettingsChanged(WidgetSettings settings) { + super.onSettingsChanged(settings); + showPercentage = ((ToggleWidgetSetting) settings.optionById("percentage")).getValue(); + showLabel = ((ToggleWidgetSetting) settings.optionById("label")).getValue(); + } +} diff --git a/src/main/resources/assets/widgets/lang/de_de.json b/src/main/resources/assets/widgets/lang/de_de.json index a7a44ba..f945aba 100644 --- a/src/main/resources/assets/widgets/lang/de_de.json +++ b/src/main/resources/assets/widgets/lang/de_de.json @@ -65,5 +65,10 @@ "widgets.widgets.playtime.labelStyle": "Beschriftungsstil", "widgets.widgets.playtime.labelStyle.none": "Keine Beschriftung", "widgets.widgets.playtime.labelStyle.playtime": "Spielzeit: Zeit", - "widgets.widgets.playtime.labelStyle.played": "Zeit gespielt" + "widgets.widgets.playtime.labelStyle.played": "Zeit gespielt", + "widgets.widgets.memory": "Arbeitsspeicher", + "widgets.widgets.memory.description": "Zeigt die momentane Arbeitsspeicherauslastung des Spiels an.", + "widgets.widgets.memory.withLabel": "Arbeitsspeicher: %s", + "widgets.widgets.memory.showPercentage": "Prozentsatz anzeigen", + "widgets.widgets.memory.showLabel": "Beschriftung anzeigen" } diff --git a/src/main/resources/assets/widgets/lang/en_us.json b/src/main/resources/assets/widgets/lang/en_us.json index 25a89c9..3de7662 100644 --- a/src/main/resources/assets/widgets/lang/en_us.json +++ b/src/main/resources/assets/widgets/lang/en_us.json @@ -65,5 +65,10 @@ "widgets.widgets.playtime.labelStyle": "Label Style", "widgets.widgets.playtime.labelStyle.none": "No label", "widgets.widgets.playtime.labelStyle.playtime": "Playtime: Time", - "widgets.widgets.playtime.labelStyle.played": "Time played" + "widgets.widgets.playtime.labelStyle.played": "Time played", + "widgets.widgets.memory": "Memory usage", + "widgets.widgets.memory.description": "Shows the current memory usage of the game.", + "widgets.widgets.memory.withLabel": "Memory: %s", + "widgets.widgets.memory.showPercentage": "Show percentage", + "widgets.widgets.memory.showLabel": "Show label" } \ No newline at end of file