mirror of
https://github.com/Shiewk/Widgets.git
synced 2026-04-28 11:34:17 +02:00
Add armor hud widget (#3)
This commit is contained in:
@@ -68,5 +68,6 @@ public class WidgetsModClient implements ClientModInitializer {
|
||||
WidgetManager.register(new TPSWidget(Identifier.of(WidgetsMod.MOD_ID, "tps")));
|
||||
WidgetManager.register(new BiomeWidget(Identifier.of(WidgetsMod.MOD_ID, "biome")));
|
||||
WidgetManager.register(new SpeedWidget(Identifier.of(WidgetsMod.MOD_ID, "speed")));
|
||||
WidgetManager.register(new ArmorHudWidget(Identifier.of(WidgetsMod.MOD_ID, "armor")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
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.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ArmorHudWidget extends ResizableWidget {
|
||||
|
||||
public ArmorHudWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new IntSliderWidgetSetting("padding", Text.translatable("widgets.widgets.armorHud.padding"), 0, 2, 5),
|
||||
new ToggleWidgetSetting("show_durability", Text.translatable("widgets.widgets.armorHud.showDurability"), true),
|
||||
new EnumWidgetSetting<>("durability_style", Text.translatable("widgets.widgets.armorHud.durabilityStyle"), DurabilityStyle.class, DurabilityStyle.NUMBER, DurabilityStyle::getDisplayName)
|
||||
));
|
||||
getSettings().optionById("durability_style").setShowCondition(() -> this.showDurability);
|
||||
}
|
||||
|
||||
public enum DurabilityStyle {
|
||||
NUMBER,
|
||||
PERCENT;
|
||||
|
||||
public Text getDisplayName() {
|
||||
return Text.translatable("widgets.widgets.armorHud.durabilityStyle." + name().toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
private int padding = 1;
|
||||
private boolean showDurability = true;
|
||||
private DurabilityStyle durabilityStyle;
|
||||
private ItemStack helmet;
|
||||
private ItemStack chestplate;
|
||||
private ItemStack leggings;
|
||||
private ItemStack boots;
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
if (helmet != null){
|
||||
renderItem(context, textRenderer, helmet, posX + padding, posY + padding);
|
||||
}
|
||||
if (chestplate != null){
|
||||
renderItem(context, textRenderer, chestplate, posX + padding, posY + 16 + padding);
|
||||
}
|
||||
if (leggings != null){
|
||||
renderItem(context, textRenderer, leggings, posX + padding, posY + 32 + padding);
|
||||
}
|
||||
if (boots != null){
|
||||
renderItem(context, textRenderer, boots, posX + padding, posY + 48 + padding);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderItem(DrawContext context, TextRenderer textRenderer, ItemStack stack, int posX, int posY){
|
||||
context.drawItemWithoutEntity(stack, posX, posY);
|
||||
context.drawStackOverlay(textRenderer, stack, posX, posY);
|
||||
if (showDurability){
|
||||
renderDurability(context, textRenderer, stack, posX, posY);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderDurability(DrawContext context, TextRenderer textRenderer, ItemStack stack, int posX, int posY) {
|
||||
Integer maxDamage = stack.get(DataComponentTypes.MAX_DAMAGE);
|
||||
if (maxDamage != null) {
|
||||
int damage = stack.getOrDefault(DataComponentTypes.DAMAGE, 0);
|
||||
String text = switch (durabilityStyle){
|
||||
case NUMBER -> String.valueOf(maxDamage - damage);
|
||||
case PERCENT -> ((maxDamage - damage) * 100 / maxDamage) + "%";
|
||||
};
|
||||
context.drawText(textRenderer, text, posX + 16 + padding, posY + 5, 0xffffffff, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
if (player != null) {
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
helmet = inventory.getStack(39);
|
||||
chestplate = inventory.getStack(38);
|
||||
leggings = inventory.getStack(37);
|
||||
boots = inventory.getStack(36);
|
||||
} else {
|
||||
helmet = chestplate = leggings = boots = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.armorHud");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.armorHud.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int width() {
|
||||
if (showDurability){
|
||||
return 36 + padding * 3;
|
||||
} else {
|
||||
return 16 + padding * 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int height() {
|
||||
return 64 + padding * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSettingsChanged(WidgetSettings settings) {
|
||||
super.onSettingsChanged(settings);
|
||||
this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue();
|
||||
this.showDurability = ((ToggleWidgetSetting) settings.optionById("show_durability")).getValue();
|
||||
this.durabilityStyle = (DurabilityStyle) ((EnumWidgetSetting<?>) settings.optionById("durability_style")).getValue();
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,13 @@
|
||||
"widgets.ui.preview": "Vorschau",
|
||||
"widgets.ui.search": "Suchen...",
|
||||
"widgets.ui.widgetSettings": "Bearbeite %s Einstellungen",
|
||||
"widgets.widgets.armorHud": "Rüstungsstatus",
|
||||
"widgets.widgets.armorHud.description": "Zeigt die Rüstung, die du gerade trägst, und ihre Haltbarkeit.",
|
||||
"widgets.widgets.armorHud.durabilityStyle": "Haltbarkeitsstil",
|
||||
"widgets.widgets.armorHud.durabilityStyle.number": "Anzahl",
|
||||
"widgets.widgets.armorHud.durabilityStyle.percent": "Prozent",
|
||||
"widgets.widgets.armorHud.padding": "Abstand",
|
||||
"widgets.widgets.armorHud.showDurability": "Haltbarkeitsbeschriftung anzeigen",
|
||||
"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",
|
||||
@@ -92,10 +99,6 @@
|
||||
"widgets.widgets.serverIP": "Server-IP",
|
||||
"widgets.widgets.serverIP.description": "Zeigt die Serveradresse an",
|
||||
"widgets.widgets.serverIP.dynamicWidth": "Widget-Breite dynamisch festlegen",
|
||||
"widgets.widgets.tps": "TPS",
|
||||
"widgets.widgets.tps.description": "Zeigt die TPS im Einzelspielermodus an oder schätzt die TPS im Mehrspielermodus",
|
||||
"widgets.widgets.tps.dynamicColor": "Farbe dynamisch anzeigen",
|
||||
"widgets.widgets.tps.tps": "%s TPS",
|
||||
"widgets.widgets.speed": "Geschwindigkeit",
|
||||
"widgets.widgets.speed.description": "Zeigt, wie schnell du dich bewegst.",
|
||||
"widgets.widgets.speed.digits": "Nachkommastellen",
|
||||
@@ -103,5 +106,9 @@
|
||||
"widgets.widgets.speed.windowSize": "Durchschnittsfenstergröße",
|
||||
"widgets.widgets.speed.withX": "Mit Geschwindigkeit auf der X-Achse",
|
||||
"widgets.widgets.speed.withY": "Mit Geschwindigkeit auf der Y-Achse",
|
||||
"widgets.widgets.speed.withZ": "Mit Geschwindigkeit auf der Z-Achse"
|
||||
"widgets.widgets.speed.withZ": "Mit Geschwindigkeit auf der Z-Achse",
|
||||
"widgets.widgets.tps": "TPS",
|
||||
"widgets.widgets.tps.description": "Zeigt die TPS im Einzelspielermodus an oder schätzt die TPS im Mehrspielermodus",
|
||||
"widgets.widgets.tps.dynamicColor": "Farbe dynamisch anzeigen",
|
||||
"widgets.widgets.tps.tps": "%s TPS"
|
||||
}
|
||||
@@ -10,6 +10,13 @@
|
||||
"widgets.ui.preview": "Preview",
|
||||
"widgets.ui.search": "Search...",
|
||||
"widgets.ui.widgetSettings": "Edit %s settings",
|
||||
"widgets.widgets.armorHud": "Armor Status",
|
||||
"widgets.widgets.armorHud.description": "Shows the armor you are currently wearing and its durability.",
|
||||
"widgets.widgets.armorHud.durabilityStyle": "Durability style",
|
||||
"widgets.widgets.armorHud.durabilityStyle.number": "Number",
|
||||
"widgets.widgets.armorHud.durabilityStyle.percent": "Percent",
|
||||
"widgets.widgets.armorHud.padding": "Padding",
|
||||
"widgets.widgets.armorHud.showDurability": "Show durability label",
|
||||
"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",
|
||||
|
||||
Reference in New Issue
Block a user