From b8981020364e4f197d2a121188e5f87018208033 Mon Sep 17 00:00:00 2001 From: Shiewk Date: Thu, 21 Aug 2025 10:52:42 +0200 Subject: [PATCH] Add rainbow text setting (#3) --- .../java/de/shiewk/widgets/ModWidget.java | 1 + .../shiewk/widgets/WidgetSettingOption.java | 1 + .../de/shiewk/widgets/WidgetSettings.java | 2 +- .../shiewk/widgets/client/WidgetRenderer.java | 2 +- .../widgets/client/screen/AnimatedScreen.java | 2 +- .../screen/EditWidgetPositionsScreen.java | 4 +-- .../client/screen/WidgetConfigScreen.java | 2 +- .../screen/components/WidgetWidget.java | 2 +- .../widgets/{ => utils}/WidgetUtils.java | 2 +- .../widgets/widgets/ArmorHudWidget.java | 35 ++++++++++++------- .../widgets/widgets/BandwidthWidget.java | 6 ++-- .../widgets/widgets/BasicTextWidget.java | 14 +++++++- .../widgets/widgets/CoordinatesWidget.java | 30 +++++++++++----- .../widgets/widgets/KeyStrokesWidget.java | 27 ++++++++++---- .../de/shiewk/widgets/widgets/PingWidget.java | 6 ++-- .../widgets/widgets/PlayerCountWidget.java | 2 +- .../widgets/widgets/ServerIPWidget.java | 2 +- .../shiewk/widgets/widgets/SpeedWidget.java | 2 +- .../de/shiewk/widgets/widgets/TPSWidget.java | 4 ++- .../widgets/settings/ToggleWidgetSetting.java | 2 +- .../resources/assets/widgets/lang/de_de.json | 10 +++--- .../resources/assets/widgets/lang/en_us.json | 2 ++ 22 files changed, 109 insertions(+), 51 deletions(-) rename src/main/java/de/shiewk/widgets/{ => utils}/WidgetUtils.java (97%) diff --git a/src/main/java/de/shiewk/widgets/ModWidget.java b/src/main/java/de/shiewk/widgets/ModWidget.java index b383ed7..8831829 100644 --- a/src/main/java/de/shiewk/widgets/ModWidget.java +++ b/src/main/java/de/shiewk/widgets/ModWidget.java @@ -1,5 +1,6 @@ package de.shiewk.widgets; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; diff --git a/src/main/java/de/shiewk/widgets/WidgetSettingOption.java b/src/main/java/de/shiewk/widgets/WidgetSettingOption.java index 5b65724..305ff1b 100644 --- a/src/main/java/de/shiewk/widgets/WidgetSettingOption.java +++ b/src/main/java/de/shiewk/widgets/WidgetSettingOption.java @@ -1,6 +1,7 @@ package de.shiewk.widgets; import com.google.gson.JsonElement; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.Widget; diff --git a/src/main/java/de/shiewk/widgets/WidgetSettings.java b/src/main/java/de/shiewk/widgets/WidgetSettings.java index 79ca9ef..221c2bd 100644 --- a/src/main/java/de/shiewk/widgets/WidgetSettings.java +++ b/src/main/java/de/shiewk/widgets/WidgetSettings.java @@ -9,8 +9,8 @@ import net.minecraft.util.math.MathHelper; import java.util.List; -import static de.shiewk.widgets.WidgetUtils.translateToWidgetSettingsValue; import static de.shiewk.widgets.WidgetsMod.LOGGER; +import static de.shiewk.widgets.utils.WidgetUtils.translateToWidgetSettingsValue; public class WidgetSettings { public double posX = 0; // posx * 100 = screen width diff --git a/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java b/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java index cf3be7a..d19543d 100644 --- a/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java +++ b/src/main/java/de/shiewk/widgets/client/WidgetRenderer.java @@ -18,7 +18,7 @@ import net.minecraft.util.Util; import net.minecraft.util.profiler.Profiler; import net.minecraft.util.profiler.Profilers; -import static de.shiewk.widgets.WidgetUtils.translateToScreen; +import static de.shiewk.widgets.utils.WidgetUtils.translateToScreen; public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted { diff --git a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java index ef8f7b6..53c77e5 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/AnimatedScreen.java @@ -1,6 +1,6 @@ package de.shiewk.widgets.client.screen; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; diff --git a/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java b/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java index a324f73..d1a6c9f 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/EditWidgetPositionsScreen.java @@ -16,8 +16,8 @@ import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.function.Consumer; -import static de.shiewk.widgets.WidgetUtils.translateToScreen; -import static de.shiewk.widgets.WidgetUtils.translateToWidgetSettingsValue; +import static de.shiewk.widgets.utils.WidgetUtils.translateToScreen; +import static de.shiewk.widgets.utils.WidgetUtils.translateToWidgetSettingsValue; public class EditWidgetPositionsScreen extends AnimatedScreen { diff --git a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java index 29aaee6..bef3aa6 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java +++ b/src/main/java/de/shiewk/widgets/client/screen/WidgetConfigScreen.java @@ -1,9 +1,9 @@ package de.shiewk.widgets.client.screen; import de.shiewk.widgets.ModWidget; -import de.shiewk.widgets.WidgetUtils; import de.shiewk.widgets.client.WidgetManager; import de.shiewk.widgets.client.screen.components.WidgetListWidget; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.AxisGridWidget; diff --git a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetWidget.java b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetWidget.java index 8be8913..99612f0 100644 --- a/src/main/java/de/shiewk/widgets/client/screen/components/WidgetWidget.java +++ b/src/main/java/de/shiewk/widgets/client/screen/components/WidgetWidget.java @@ -1,8 +1,8 @@ package de.shiewk.widgets.client.screen.components; import de.shiewk.widgets.ModWidget; -import de.shiewk.widgets.WidgetUtils; import de.shiewk.widgets.client.screen.WidgetSettingsScreen; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; diff --git a/src/main/java/de/shiewk/widgets/WidgetUtils.java b/src/main/java/de/shiewk/widgets/utils/WidgetUtils.java similarity index 97% rename from src/main/java/de/shiewk/widgets/WidgetUtils.java rename to src/main/java/de/shiewk/widgets/utils/WidgetUtils.java index 6da10eb..53de0d5 100644 --- a/src/main/java/de/shiewk/widgets/WidgetUtils.java +++ b/src/main/java/de/shiewk/widgets/utils/WidgetUtils.java @@ -1,4 +1,4 @@ -package de.shiewk.widgets; +package de.shiewk.widgets.utils; import net.minecraft.client.MinecraftClient; import net.minecraft.world.tick.TickManager; diff --git a/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java b/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java index bb0b3e0..8c9c169 100644 --- a/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/ArmorHudWidget.java @@ -16,15 +16,20 @@ import net.minecraft.util.Identifier; import java.util.List; +import static net.minecraft.text.Text.translatable; + 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) + new EnumWidgetSetting<>("durability_style", Text.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) )); getSettings().optionById("durability_style").setShowCondition(() -> this.showDurability); + getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow); } public enum DurabilityStyle { @@ -39,36 +44,38 @@ public class ArmorHudWidget extends ResizableWidget { private int padding = 1; private boolean showDurability = true; private DurabilityStyle durabilityStyle; - private ItemStack helmet; - private ItemStack chestplate; - private ItemStack leggings; - private ItemStack boots; + protected ItemStack helmet; + protected ItemStack chestplate; + protected ItemStack leggings; + protected ItemStack boots; + protected boolean rainbow = false; + protected int rainbowSpeed = 3; @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); + renderItem(context, measuringTimeNano, textRenderer, helmet, posX + padding, posY + padding); } if (chestplate != null){ - renderItem(context, textRenderer, chestplate, posX + padding, posY + 16 + padding); + renderItem(context, measuringTimeNano, textRenderer, chestplate, posX + padding, posY + 16 + padding); } if (leggings != null){ - renderItem(context, textRenderer, leggings, posX + padding, posY + 32 + padding); + renderItem(context, measuringTimeNano, textRenderer, leggings, posX + padding, posY + 32 + padding); } if (boots != null){ - renderItem(context, textRenderer, boots, posX + padding, posY + 48 + padding); + renderItem(context, measuringTimeNano, textRenderer, boots, posX + padding, posY + 48 + padding); } } - private void renderItem(DrawContext context, TextRenderer textRenderer, ItemStack stack, int posX, int posY){ + private void renderItem(DrawContext context, long mt, 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); + renderDurability(context, mt, textRenderer, stack, posX, posY); } } - private void renderDurability(DrawContext context, TextRenderer textRenderer, ItemStack stack, int posX, int posY) { + private void renderDurability(DrawContext context, long mt, 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); @@ -76,7 +83,7 @@ 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, 0xffffffff, true); + context.drawText(textRenderer, text, posX + 16 + padding, posY + 5, rainbow ? BasicTextWidget.rainbowColor(mt, rainbowSpeed) : 0xffffffff, true); } } @@ -124,5 +131,7 @@ public class ArmorHudWidget extends ResizableWidget { this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue(); this.showDurability = ((ToggleWidgetSetting) settings.optionById("show_durability")).getValue(); this.durabilityStyle = (DurabilityStyle) ((EnumWidgetSetting) settings.optionById("durability_style")).getValue(); + this.rainbow = ((ToggleWidgetSetting) settings.optionById("rainbow")).getValue(); + this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue(); } } diff --git a/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java b/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java index 38086ba..df6999c 100644 --- a/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/BandwidthWidget.java @@ -1,7 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import de.shiewk.widgets.widgets.settings.EnumWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; @@ -50,7 +50,9 @@ public class BandwidthWidget extends BasicTextWidget { 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)) )); - getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow); + getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("rainbow_speed").setShowCondition(() -> !this.dynamicColor && this.rainbow); } private int t = 0; diff --git a/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java b/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java index ce037f0..4290215 100644 --- a/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java @@ -65,11 +65,15 @@ public abstract class BasicTextWidget extends ResizableWidget { private int padding = 0; private TextRenderer renderer = null; private boolean textShadow = true; + protected boolean rainbow = false; + private int rainbowSpeed = 3; private static ObjectArrayList getCustomSettings(List otherCustomOptions) { final ObjectArrayList list = new ObjectArrayList<>(otherCustomOptions); list.add(new RGBAColorWidgetSetting("backgroundcolor", translatable("widgets.widgets.basictext.background"), 0, 0, 0, 80)); + list.add(new ToggleWidgetSetting("rainbow", translatable("widgets.widgets.common.rainbow"), false)); list.add(new RGBAColorWidgetSetting("textcolor", translatable("widgets.widgets.basictext.textcolor"), 255, 255, 255, 255)); + list.add(new IntSliderWidgetSetting("rainbow_speed", translatable("widgets.widgets.common.rainbow.speed"), 1, 3, 10)); list.add(new IntSliderWidgetSetting("width", translatable("widgets.widgets.basictext.width"), 10, DEFAULT_WIDTH, 80*3)); list.add(new IntSliderWidgetSetting("height", translatable("widgets.widgets.basictext.height"), 9, DEFAULT_HEIGHT, 80)); list.add(new ToggleWidgetSetting("shadow", translatable("widgets.widgets.basictext.textshadow"), true)); @@ -81,6 +85,8 @@ public abstract class BasicTextWidget extends ResizableWidget { protected BasicTextWidget(Identifier id, List otherCustomOptions) { super(id, getCustomSettings(otherCustomOptions)); getSettings().optionById("padding").setShowCondition(() -> this.textAlignment != TextAlignment.CENTER); + getSettings().optionById("textcolor").setShowCondition(() -> !this.rainbow); + getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow); } protected static final int @@ -108,7 +114,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 /* offset 1 without text shadow so that it looks more aligned */), this.textColor, textShadow); + context.drawText(textRenderer, renderText, posX + textX, posY + (textShadow ? textY : textY + 1), rainbow ? rainbowColor(n, rainbowSpeed) : this.textColor, textShadow); + } + + public static int rainbowColor(long n, float speed) { + return Color.HSBtoRGB(n / 10_000_000_000f * speed, 1, 1); } @Override @@ -146,5 +156,7 @@ public abstract class BasicTextWidget extends ResizableWidget { this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue(); this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); this.textStyle = (TextStyle) ((EnumWidgetSetting) settings.optionById("text_style")).getValue(); + this.rainbow = ((ToggleWidgetSetting) settings.optionById("rainbow")).getValue(); + this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue(); } } diff --git a/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java b/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java index f59dc10..b99ba3b 100644 --- a/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java @@ -14,6 +14,8 @@ import net.minecraft.util.Identifier; import java.awt.*; import java.util.List; +import static net.minecraft.text.Text.translatable; + public class CoordinatesWidget extends ResizableWidget { public CoordinatesWidget(Identifier id) { super(id, List.of( @@ -21,41 +23,49 @@ public class CoordinatesWidget extends ResizableWidget { new ToggleWidgetSetting("y", Text.translatable("widgets.widgets.coordinates.showY"), true), new ToggleWidgetSetting("z", Text.translatable("widgets.widgets.coordinates.showZ"), true), new RGBAColorWidgetSetting("backgroundcolor", Text.translatable("widgets.widgets.basictext.background"), 0, 0, 0, 80), + new ToggleWidgetSetting("rainbow", translatable("widgets.widgets.common.rainbow"), false), new RGBAColorWidgetSetting("textcolor", Text.translatable("widgets.widgets.basictext.textcolor"), 255, 255, 255, 255), + new IntSliderWidgetSetting("rainbow_speed", translatable("widgets.widgets.common.rainbow.speed"), 1, 3, 10), new IntSliderWidgetSetting("width", Text.translatable("widgets.widgets.basictext.width"), 10, WIDTH, 80*3), new IntSliderWidgetSetting("paddingX", Text.translatable("widgets.widgets.basictext.paddingX"), 0, 5, 20), new IntSliderWidgetSetting("paddingY", Text.translatable("widgets.widgets.basictext.paddingY"), 0, 5, 20), new ToggleWidgetSetting("shadow", Text.translatable("widgets.widgets.basictext.textshadow"), true) )); + getSettings().optionById("textcolor").setShowCondition(() -> !this.rainbow); + getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow); } private String textX = "X", textY = "Y", textZ = "Z"; - private int txc = 0, tyc = 0, tzc = 0; - private boolean shadow = true; + private int txc = 0, tyc = 0, tzc = 0, rainbowSpeed = 3; + private boolean shadow = true, rainbow = false; @Override - public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { + public void renderScaled(DrawContext context, long mt, TextRenderer textRenderer, int posX, int posY) { context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); int y = this.paddingY; if (showX){ y++; - context.drawText(textRenderer, "X: ", posX + paddingX, posY + y, textColor, shadow); - context.drawText(textRenderer, textX, posX + txc, posY + y, textColor, shadow); + context.drawText(textRenderer, "X: ", posX + paddingX, posY + y, textColor(mt), shadow); + context.drawText(textRenderer, textX, posX + txc, posY + y, textColor(mt), shadow); y += textRenderer.fontHeight + 1; } if (showY){ y++; - context.drawText(textRenderer, "Y: ", posX + paddingX, posY + y, textColor, shadow); - context.drawText(textRenderer, textY, posX + tyc, posY + y, textColor, shadow); + context.drawText(textRenderer, "Y: ", posX + paddingX, posY + y, textColor(mt), shadow); + context.drawText(textRenderer, textY, posX + tyc, posY + y, textColor(mt), shadow); y += textRenderer.fontHeight + 1; } if (showZ){ y++; - context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor, shadow); - context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor, shadow); + context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor(mt), shadow); + context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor(mt), shadow); } } + private int textColor(long n) { + return rainbow ? BasicTextWidget.rainbowColor(n, rainbowSpeed) : textColor; + } + @Override public void tick() { final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; @@ -106,6 +116,8 @@ public class CoordinatesWidget extends ResizableWidget { this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); + this.rainbow = ((ToggleWidgetSetting) settings.optionById("rainbow")).getValue(); + this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue(); } @Override diff --git a/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java b/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java index c0123a3..dd46f11 100644 --- a/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java @@ -1,6 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; +import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; @@ -16,25 +17,34 @@ import java.awt.*; import java.util.List; import java.util.Objects; +import static net.minecraft.text.Text.translatable; + public class KeyStrokesWidget extends ResizableWidget { public KeyStrokesWidget(Identifier id) { super(id, List.of( new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true), new RGBAColorWidgetSetting("bgpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundPressed"), 255, 255, 255, 80), new RGBAColorWidgetSetting("bgunpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0, 0, 0, 80), + new ToggleWidgetSetting("rainbow", translatable("widgets.widgets.common.rainbow"), false), + new IntSliderWidgetSetting("rainbow_speed", translatable("widgets.widgets.common.rainbow.speed"), 1, 3, 10), new RGBAColorWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255), new RGBAColorWidgetSetting("keyunpressed", Text.translatable("widgets.widgets.keystrokes.colorKeyUnpressed"), 255, 255, 255, 255) )); + getSettings().optionById("keypressed").setShowCondition(() -> !this.rainbow); + getSettings().optionById("keyunpressed").setShowCondition(() -> !this.rainbow); + getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow); } @Override public void onSettingsChanged(WidgetSettings settings) { super.onSettingsChanged(settings); - showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue(); - colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor(); - colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor(); - colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor(); - colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor(); + this.showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue(); + this.colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor(); + this.colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor(); + this.colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor(); + this.colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor(); + this.rainbow = ((ToggleWidgetSetting) settings.optionById("rainbow")).getValue(); + this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue(); } private boolean showJumpKey = true; @@ -44,6 +54,9 @@ public class KeyStrokesWidget extends ResizableWidget { colorKeyUnpressed = 0xffffffff, colorKeyPressed = 0xffffffff; + protected boolean rainbow = false; + protected int rainbowSpeed = 3; + protected static class Key { protected final KeyBinding binding; protected boolean isPressed; @@ -92,7 +105,7 @@ public class KeyStrokesWidget extends ResizableWidget { } else { context.fill(posX, posY, posX + 64, posY + 10, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed); } - context.fill(posX + 5, posY + 4, posX + 59, posY + 5, key.isPressed ? colorKeyPressed : colorKeyUnpressed); + context.fill(posX + 5, posY + 4, posX + 59, posY + 5, rainbow ? BasicTextWidget.rainbowColor(measuringTimeNano, rainbowSpeed) : (key.isPressed ? colorKeyPressed : colorKeyUnpressed)); } protected void renderKeyStroke(final DrawContext context, @@ -111,7 +124,7 @@ public class KeyStrokesWidget extends ResizableWidget { } else { context.fill(posX, posY, posX+20, posY+20, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed); } - context.drawText(textRenderer, key.boundToKey, posX+10-(key.boundToLength/2), posY + 6, key.isPressed ? colorKeyPressed : colorKeyUnpressed, true); + context.drawText(textRenderer, key.boundToKey, posX+10-(key.boundToLength/2), posY + 6, rainbow ? BasicTextWidget.rainbowColor(measuringTimeNano, rainbowSpeed) : (key.isPressed ? colorKeyPressed : colorKeyUnpressed), true); } private int fadeColor(int color1, int color2, double delta) { diff --git a/src/main/java/de/shiewk/widgets/widgets/PingWidget.java b/src/main/java/de/shiewk/widgets/widgets/PingWidget.java index 4fccf32..664081d 100644 --- a/src/main/java/de/shiewk/widgets/widgets/PingWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/PingWidget.java @@ -1,7 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; @@ -21,7 +21,9 @@ public class PingWidget extends BasicTextWidget { new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.ping.dynamicColor"), true), new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false) )); - getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow); + getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("rainbow_speed").setShowCondition(() -> !this.dynamicColor && this.rainbow); } private boolean dynamicColor = false; diff --git a/src/main/java/de/shiewk/widgets/widgets/PlayerCountWidget.java b/src/main/java/de/shiewk/widgets/widgets/PlayerCountWidget.java index 8aff20f..2b9964e 100644 --- a/src/main/java/de/shiewk/widgets/widgets/PlayerCountWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/PlayerCountWidget.java @@ -1,7 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; diff --git a/src/main/java/de/shiewk/widgets/widgets/ServerIPWidget.java b/src/main/java/de/shiewk/widgets/widgets/ServerIPWidget.java index 87b2f2b..d4c27f9 100644 --- a/src/main/java/de/shiewk/widgets/widgets/ServerIPWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/ServerIPWidget.java @@ -1,7 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ServerInfo; diff --git a/src/main/java/de/shiewk/widgets/widgets/SpeedWidget.java b/src/main/java/de/shiewk/widgets/widgets/SpeedWidget.java index 387adf0..2d618a0 100644 --- a/src/main/java/de/shiewk/widgets/widgets/SpeedWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/SpeedWidget.java @@ -1,7 +1,7 @@ package de.shiewk.widgets.widgets; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import de.shiewk.widgets.widgets.settings.EnumWidgetSetting; import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; diff --git a/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java b/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java index 4ce2334..955b316 100644 --- a/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/TPSWidget.java @@ -19,7 +19,9 @@ public class TPSWidget extends BasicTextWidget { new ToggleWidgetSetting("show_label", translatable("widgets.widgets.common.showLabel"), true), new ToggleWidgetSetting("dynamic_color", translatable("widgets.widgets.tps.dynamicColor"), true) )); - getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor && !this.rainbow); + getSettings().optionById("rainbow").setShowCondition(() -> !this.dynamicColor); + getSettings().optionById("rainbow_speed").setShowCondition(() -> !this.dynamicColor && this.rainbow); INSTANCE = this; } diff --git a/src/main/java/de/shiewk/widgets/widgets/settings/ToggleWidgetSetting.java b/src/main/java/de/shiewk/widgets/widgets/settings/ToggleWidgetSetting.java index bf4ca64..c4c7add 100644 --- a/src/main/java/de/shiewk/widgets/widgets/settings/ToggleWidgetSetting.java +++ b/src/main/java/de/shiewk/widgets/widgets/settings/ToggleWidgetSetting.java @@ -3,7 +3,7 @@ package de.shiewk.widgets.widgets.settings; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import de.shiewk.widgets.WidgetSettingOption; -import de.shiewk.widgets.WidgetUtils; +import de.shiewk.widgets.utils.WidgetUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Util; diff --git a/src/main/resources/assets/widgets/lang/de_de.json b/src/main/resources/assets/widgets/lang/de_de.json index a107ee3..7d9e8b3 100644 --- a/src/main/resources/assets/widgets/lang/de_de.json +++ b/src/main/resources/assets/widgets/lang/de_de.json @@ -30,6 +30,9 @@ "widgets.widgets.basictext.padding": "Textabstand", "widgets.widgets.basictext.paddingX": "Textabstand X", "widgets.widgets.basictext.paddingY": "Textabstand Y", + "widgets.widgets.basictext.style.parentheses": "Mit runden Klammern", + "widgets.widgets.basictext.style.plain": "Normal", + "widgets.widgets.basictext.style.squareBrackets": "Mit eckigen Klammern", "widgets.widgets.basictext.textcolor": "Textfarbe", "widgets.widgets.basictext.textshadow": "Textschatten", "widgets.widgets.basictext.textstyle": "Textstil", @@ -49,6 +52,8 @@ "widgets.widgets.clock.weekFormat": "Wochentagformat", "widgets.widgets.clock.weekFormat.none": "Nicht anzeigen", "widgets.widgets.common.hideInSingleplayer": "In Einzelspielerwelten verbergen", + "widgets.widgets.common.rainbow": "Regenbogen-Text", + "widgets.widgets.common.rainbow.speed": "Regenbogengeschwindigkeit", "widgets.widgets.common.showLabel": "Beschriftung anzeigen", "widgets.widgets.common.sizePercent": "Widgetgröße (%)", "widgets.widgets.coordinates": "Koordinaten", @@ -111,8 +116,5 @@ "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.basictext.style.parentheses": "Mit runden Klammern", - "widgets.widgets.basictext.style.plain": "Normal", - "widgets.widgets.basictext.style.squareBrackets": "Mit eckigen Klammern" + "widgets.widgets.tps.tps": "%s TPS" } \ No newline at end of file diff --git a/src/main/resources/assets/widgets/lang/en_us.json b/src/main/resources/assets/widgets/lang/en_us.json index a4bbf3f..1941c0f 100644 --- a/src/main/resources/assets/widgets/lang/en_us.json +++ b/src/main/resources/assets/widgets/lang/en_us.json @@ -52,6 +52,8 @@ "widgets.widgets.clock.weekFormat": "Day of week format", "widgets.widgets.clock.weekFormat.none": "Don't show", "widgets.widgets.common.hideInSingleplayer": "Hide in singleplayer worlds", + "widgets.widgets.common.rainbow": "Rainbow text", + "widgets.widgets.common.rainbow.speed": "Rainbow speed", "widgets.widgets.common.showLabel": "Show label", "widgets.widgets.common.sizePercent": "Widget size (%)", "widgets.widgets.coordinates": "Coordinates",