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

Playtime widget

This commit is contained in:
Shy
2024-10-13 11:36:32 +02:00
parent 3635d93e46
commit 6cc4569e68
4 changed files with 94 additions and 2 deletions
@@ -54,5 +54,6 @@ public class WidgetsModClient implements ClientModInitializer {
WidgetManager.register(new ServerIPWidget(Identifier.of(WidgetsMod.MOD_ID, "server_ip")));
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")));
}
}
@@ -0,0 +1,75 @@
package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import java.util.List;
public class PlayTimeWidget extends BasicTextWidget {
private static final long startTime = System.nanoTime();
private LabelStyle labelStyle = LabelStyle.NO_LABEL;
public enum LabelStyle {
NO_LABEL("none"),
PLAYTIME("playtime"),
PLAYED("played");
public final String key;
LabelStyle(String key) {
this.key = key;
}
}
public PlayTimeWidget(Identifier id) {
super(id, List.of(
new EnumWidgetSetting<>("labelstyle", Text.translatable("widgets.widgets.playtime.labelStyle"), LabelStyle.class, LabelStyle.NO_LABEL, labelStyle -> Text.translatable("widgets.widgets.playtime.labelStyle."+labelStyle.key))
));
}
@Override
public void tickWidget() {
long timePlayedMs = getPlayedMs();
switch (labelStyle){
case NO_LABEL -> renderText = Text.literal(msToTimeStr(timePlayedMs));
case PLAYTIME -> renderText = Text.literal(Text.translatable("widgets.widgets.playtime.playtime", msToTimeStr(timePlayedMs)).getString());
case PLAYED -> renderText = Text.literal(Text.translatable("widgets.widgets.playtime.played", msToTimeStr(timePlayedMs)).getString());
}
}
private static long getPlayedMs() {
return (System.nanoTime() - startTime) / 1000000;
}
private String msToTimeStr(long timePlayedMs) {
long seconds = timePlayedMs / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
return formatTimeNumber(hours) + ":" + formatTimeNumber(minutes % 60) + ":" + formatTimeNumber(seconds % 60);
}
private String formatTimeNumber(long l) {
return l < 10 ? "0" + l : String.valueOf(l);
}
@Override
public Text getName() {
return Text.translatable("widgets.widgets.playtime");
}
@Override
public Text getDescription() {
return Text.translatable("widgets.widgets.playtime.description");
}
@Override
public void onSettingsChanged(WidgetSettings settings) {
super.onSettingsChanged(settings);
this.labelStyle = (LabelStyle) ((EnumWidgetSetting<?>) settings.optionById("labelstyle")).getValue();
}
}