mirror of
https://github.com/Shiewk/Widgets.git
synced 2026-04-28 11:34:17 +02:00
Backport 2.2.0 to mc-1.21.6
This commit is contained in:
@@ -21,6 +21,7 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc
|
||||
|
||||
public static final Identifier LAYER_ID = Identifier.of(WidgetsMod.MOD_ID, "widgets-hud-layer");
|
||||
private static MinecraftClient client;
|
||||
public static int guiScale = 1;
|
||||
|
||||
public WidgetRenderer(){
|
||||
HudElementRegistry.addLast(
|
||||
@@ -60,6 +61,7 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc
|
||||
WidgetRenderer.client = client;
|
||||
final Profiler profiler = Profilers.get();
|
||||
profiler.push("widgets");
|
||||
guiScale = client.getWindow().getScaleFactor();
|
||||
|
||||
final ObjectArrayList<ModWidget> enabled = WidgetManager.enabled;
|
||||
for (int i = 0, enabledSize = enabled.size(); i < enabledSize; i++) {
|
||||
|
||||
@@ -26,12 +26,16 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
super(id, List.of(
|
||||
new IntSliderWidgetSetting("padding", translatable("widgets.widgets.armorHud.padding"), 0, 2, 5),
|
||||
new ToggleWidgetSetting("show_durability", translatable("widgets.widgets.armorHud.showDurability"), true),
|
||||
new IntSliderWidgetSetting("width", translatable("widgets.widgets.basictext.width"), 16, 42, 128),
|
||||
new EnumWidgetSetting<>("alignment", translatable("widgets.widgets.basictext.alignment"), BasicTextWidget.TextAlignment.class, BasicTextWidget.TextAlignment.CENTER, BasicTextWidget.TextAlignment::displayText),
|
||||
new RGBAColorWidgetSetting("backgroundcolor", translatable("widgets.widgets.basictext.background"), 0, 0, 0, 80),
|
||||
new EnumWidgetSetting<>("durability_style", translatable("widgets.widgets.armorHud.durabilityStyle"), DurabilityStyle.class, DurabilityStyle.NUMBER, DurabilityStyle::getDisplayName),
|
||||
new ToggleWidgetSetting("rainbow", translatable("widgets.widgets.common.rainbow"), false),
|
||||
new IntSliderWidgetSetting("rainbow_speed", translatable("widgets.widgets.common.rainbow.speed"), 1, 3, 10),
|
||||
new RGBAColorWidgetSetting("textcolor", translatable("widgets.widgets.basictext.textcolor"), 255, 255, 255, 255)
|
||||
));
|
||||
getSettings().optionById("width").setShowCondition(() -> this.showDurability);
|
||||
getSettings().optionById("alignment").setShowCondition(() -> this.showDurability);
|
||||
getSettings().optionById("durability_style").setShowCondition(() -> this.showDurability);
|
||||
getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow);
|
||||
getSettings().optionById("textcolor").setShowCondition(() -> !this.rainbow);
|
||||
@@ -55,6 +59,8 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
protected ItemStack boots;
|
||||
protected boolean rainbow = false;
|
||||
protected int rainbowSpeed = 3;
|
||||
protected int preferredWidth = 42;
|
||||
protected BasicTextWidget.TextAlignment textAlignment = BasicTextWidget.TextAlignment.CENTER;
|
||||
protected int backgroundColor = 0x50_00_00_00, textColor = 0xff_ff_ff_ff;
|
||||
|
||||
@Override
|
||||
@@ -90,7 +96,19 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
case NUMBER -> String.valueOf(maxDamage - damage);
|
||||
case PERCENT -> ((maxDamage - damage) * 100 / maxDamage) + "%";
|
||||
};
|
||||
context.drawText(textRenderer, text, posX + 16 + padding, posY + 5, rainbow ? BasicTextWidget.rainbowColor(mt, rainbowSpeed) : textColor, true);
|
||||
switch (textAlignment){
|
||||
case RIGHT -> {
|
||||
int width = textRenderer.getWidth(text);
|
||||
context.drawText(textRenderer, text, posX + width() - width - padding * 2, posY + 5, rainbow ? BasicTextWidget.rainbowColor(mt, rainbowSpeed) : textColor, true);
|
||||
}
|
||||
case CENTER -> {
|
||||
int width = textRenderer.getWidth(text);
|
||||
context.drawText(textRenderer, text, posX + ((preferredWidth + padding*2) - width) / 2 + 8, posY + 5, rainbow ? BasicTextWidget.rainbowColor(mt, rainbowSpeed) : textColor, true);
|
||||
}
|
||||
case LEFT -> {
|
||||
context.drawText(textRenderer, text, posX + 16 + padding, posY + 5, rainbow ? BasicTextWidget.rainbowColor(mt, rainbowSpeed) : textColor, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,9 +139,9 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
@Override
|
||||
public int width() {
|
||||
if (showDurability){
|
||||
return 36 + padding * 3;
|
||||
return 3 * padding + this.preferredWidth;
|
||||
} else {
|
||||
return 16 + padding * 2;
|
||||
return 2 * padding + 16;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,5 +160,7 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue();
|
||||
this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor();
|
||||
this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor();
|
||||
this.preferredWidth = ((IntSliderWidgetSetting) settings.optionById("width")).getValue();
|
||||
this.textAlignment = (BasicTextWidget.TextAlignment) ((EnumWidgetSetting<?>) settings.optionById("alignment")).getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,6 +2,7 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettingOption;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.client.WidgetRenderer;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting;
|
||||
@@ -11,6 +12,7 @@ import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
@@ -60,8 +62,8 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
|
||||
protected Text renderText = empty();
|
||||
protected boolean shouldRender = true;
|
||||
private int textX = 0;
|
||||
private int textY = 0;
|
||||
private float textX = 0;
|
||||
private float textY = 0;
|
||||
private int padding = 0;
|
||||
private TextRenderer renderer = null;
|
||||
private boolean textShadow = true;
|
||||
@@ -114,7 +116,11 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
if (!shouldRender) return;
|
||||
renderer = textRenderer;
|
||||
context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor);
|
||||
context.drawText(textRenderer, renderText, posX + textX, posY + (textShadow ? textY : textY + 1), rainbow ? rainbowColor(n, rainbowSpeed) : this.textColor, textShadow);
|
||||
Matrix3x2fStack matrices = context.getMatrices()
|
||||
.pushMatrix();
|
||||
matrices.translate(posX + textX, posY + textY, matrices);
|
||||
context.drawText(textRenderer, renderText, 0, 0, rainbow ? rainbowColor(n, rainbowSpeed) : this.textColor, textShadow);
|
||||
matrices.popMatrix();
|
||||
}
|
||||
|
||||
public static int rainbowColor(long n, float speed) {
|
||||
@@ -128,11 +134,22 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
int textWidth = renderer.getWidth(renderText);
|
||||
switch (textAlignment){
|
||||
case LEFT -> textX = padding;
|
||||
case CENTER -> textX = width() / 2 - textWidth / 2;
|
||||
case CENTER -> {
|
||||
if (textShadow){
|
||||
textX = (width() - textWidth) / 2f;
|
||||
} else {
|
||||
textX = (width() - textWidth + 1) / 2f;
|
||||
}
|
||||
}
|
||||
case RIGHT -> textX = width() - padding - textWidth;
|
||||
}
|
||||
float textHeight = textShadow ? 8 : 7;
|
||||
if (WidgetRenderer.guiScale == 1 && size <= 1){
|
||||
textY = (int) ((height() - textHeight) / 2);
|
||||
} else {
|
||||
textY = (height() - textHeight) / 2f;
|
||||
}
|
||||
}
|
||||
textY = (height-9) / 2;
|
||||
}
|
||||
|
||||
protected void formatAndSetRenderText(Text renderText) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public abstract class ResizableWidget extends ModWidget {
|
||||
return settings;
|
||||
}
|
||||
|
||||
private float size = 1f;
|
||||
protected float size = 1f;
|
||||
|
||||
@Override
|
||||
public final void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user