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

Add rainbow text setting (#3)

This commit is contained in:
Shy
2025-08-21 10:52:42 +02:00
parent 8192f13e51
commit b898102036
22 changed files with 109 additions and 51 deletions
@@ -1,5 +1,6 @@
package de.shiewk.widgets; package de.shiewk.widgets;
import de.shiewk.widgets.utils.WidgetUtils;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -1,6 +1,7 @@
package de.shiewk.widgets; package de.shiewk.widgets;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import de.shiewk.widgets.utils.WidgetUtils;
import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Drawable;
import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.Widget; import net.minecraft.client.gui.widget.Widget;
@@ -9,8 +9,8 @@ import net.minecraft.util.math.MathHelper;
import java.util.List; import java.util.List;
import static de.shiewk.widgets.WidgetUtils.translateToWidgetSettingsValue;
import static de.shiewk.widgets.WidgetsMod.LOGGER; import static de.shiewk.widgets.WidgetsMod.LOGGER;
import static de.shiewk.widgets.utils.WidgetUtils.translateToWidgetSettingsValue;
public class WidgetSettings { public class WidgetSettings {
public double posX = 0; // posx * 100 = screen width public double posX = 0; // posx * 100 = screen width
@@ -18,7 +18,7 @@ import net.minecraft.util.Util;
import net.minecraft.util.profiler.Profiler; import net.minecraft.util.profiler.Profiler;
import net.minecraft.util.profiler.Profilers; 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 { public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted {
@@ -1,6 +1,6 @@
package de.shiewk.widgets.client.screen; 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.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -16,8 +16,8 @@ import org.jetbrains.annotations.Nullable;
import java.awt.*; import java.awt.*;
import java.util.function.Consumer; import java.util.function.Consumer;
import static de.shiewk.widgets.WidgetUtils.translateToScreen; import static de.shiewk.widgets.utils.WidgetUtils.translateToScreen;
import static de.shiewk.widgets.WidgetUtils.translateToWidgetSettingsValue; import static de.shiewk.widgets.utils.WidgetUtils.translateToWidgetSettingsValue;
public class EditWidgetPositionsScreen extends AnimatedScreen { public class EditWidgetPositionsScreen extends AnimatedScreen {
@@ -1,9 +1,9 @@
package de.shiewk.widgets.client.screen; package de.shiewk.widgets.client.screen;
import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetUtils;
import de.shiewk.widgets.client.WidgetManager; import de.shiewk.widgets.client.WidgetManager;
import de.shiewk.widgets.client.screen.components.WidgetListWidget; 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.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.AxisGridWidget; import net.minecraft.client.gui.widget.AxisGridWidget;
@@ -1,8 +1,8 @@
package de.shiewk.widgets.client.screen.components; package de.shiewk.widgets.client.screen.components;
import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetUtils;
import de.shiewk.widgets.client.screen.WidgetSettingsScreen; import de.shiewk.widgets.client.screen.WidgetSettingsScreen;
import de.shiewk.widgets.utils.WidgetUtils;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
@@ -1,4 +1,4 @@
package de.shiewk.widgets; package de.shiewk.widgets.utils;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.world.tick.TickManager; import net.minecraft.world.tick.TickManager;
@@ -16,15 +16,20 @@ import net.minecraft.util.Identifier;
import java.util.List; import java.util.List;
import static net.minecraft.text.Text.translatable;
public class ArmorHudWidget extends ResizableWidget { public class ArmorHudWidget extends ResizableWidget {
public ArmorHudWidget(Identifier id) { public ArmorHudWidget(Identifier id) {
super(id, List.of( super(id, List.of(
new IntSliderWidgetSetting("padding", Text.translatable("widgets.widgets.armorHud.padding"), 0, 2, 5), new IntSliderWidgetSetting("padding", Text.translatable("widgets.widgets.armorHud.padding"), 0, 2, 5),
new ToggleWidgetSetting("show_durability", Text.translatable("widgets.widgets.armorHud.showDurability"), true), 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("durability_style").setShowCondition(() -> this.showDurability);
getSettings().optionById("rainbow_speed").setShowCondition(() -> this.rainbow);
} }
public enum DurabilityStyle { public enum DurabilityStyle {
@@ -39,36 +44,38 @@ public class ArmorHudWidget extends ResizableWidget {
private int padding = 1; private int padding = 1;
private boolean showDurability = true; private boolean showDurability = true;
private DurabilityStyle durabilityStyle; private DurabilityStyle durabilityStyle;
private ItemStack helmet; protected ItemStack helmet;
private ItemStack chestplate; protected ItemStack chestplate;
private ItemStack leggings; protected ItemStack leggings;
private ItemStack boots; protected ItemStack boots;
protected boolean rainbow = false;
protected int rainbowSpeed = 3;
@Override @Override
public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
if (helmet != null){ if (helmet != null){
renderItem(context, textRenderer, helmet, posX + padding, posY + padding); renderItem(context, measuringTimeNano, textRenderer, helmet, posX + padding, posY + padding);
} }
if (chestplate != null){ 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){ 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){ 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.drawItemWithoutEntity(stack, posX, posY);
context.drawStackOverlay(textRenderer, stack, posX, posY); context.drawStackOverlay(textRenderer, stack, posX, posY);
if (showDurability){ 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); Integer maxDamage = stack.get(DataComponentTypes.MAX_DAMAGE);
if (maxDamage != null) { if (maxDamage != null) {
int damage = stack.getOrDefault(DataComponentTypes.DAMAGE, 0); int damage = stack.getOrDefault(DataComponentTypes.DAMAGE, 0);
@@ -76,7 +83,7 @@ public class ArmorHudWidget extends ResizableWidget {
case NUMBER -> String.valueOf(maxDamage - damage); case NUMBER -> String.valueOf(maxDamage - damage);
case PERCENT -> ((maxDamage - damage) * 100 / maxDamage) + "%"; 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.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue();
this.showDurability = ((ToggleWidgetSetting) settings.optionById("show_durability")).getValue(); this.showDurability = ((ToggleWidgetSetting) settings.optionById("show_durability")).getValue();
this.durabilityStyle = (DurabilityStyle) ((EnumWidgetSetting<?>) settings.optionById("durability_style")).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();
} }
} }
@@ -1,7 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; 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.EnumWidgetSetting;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; 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 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))
)); ));
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; private int t = 0;
@@ -65,11 +65,15 @@ public abstract class BasicTextWidget extends ResizableWidget {
private int padding = 0; private int padding = 0;
private TextRenderer renderer = null; private TextRenderer renderer = null;
private boolean textShadow = true; private boolean textShadow = true;
protected boolean rainbow = false;
private int rainbowSpeed = 3;
private static ObjectArrayList<WidgetSettingOption> getCustomSettings(List<WidgetSettingOption> otherCustomOptions) { private static ObjectArrayList<WidgetSettingOption> getCustomSettings(List<WidgetSettingOption> otherCustomOptions) {
final ObjectArrayList<WidgetSettingOption> list = new ObjectArrayList<>(otherCustomOptions); final ObjectArrayList<WidgetSettingOption> list = new ObjectArrayList<>(otherCustomOptions);
list.add(new RGBAColorWidgetSetting("backgroundcolor", translatable("widgets.widgets.basictext.background"), 0, 0, 0, 80)); 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 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("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 IntSliderWidgetSetting("height", translatable("widgets.widgets.basictext.height"), 9, DEFAULT_HEIGHT, 80));
list.add(new ToggleWidgetSetting("shadow", translatable("widgets.widgets.basictext.textshadow"), true)); 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<WidgetSettingOption> otherCustomOptions) { protected BasicTextWidget(Identifier id, List<WidgetSettingOption> otherCustomOptions) {
super(id, getCustomSettings(otherCustomOptions)); super(id, getCustomSettings(otherCustomOptions));
getSettings().optionById("padding").setShowCondition(() -> this.textAlignment != TextAlignment.CENTER); 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 protected static final int
@@ -108,7 +114,11 @@ public abstract class BasicTextWidget extends ResizableWidget {
if (!shouldRender) return; if (!shouldRender) return;
renderer = textRenderer; renderer = textRenderer;
context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); 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 @Override
@@ -146,5 +156,7 @@ public abstract class BasicTextWidget extends ResizableWidget {
this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue(); this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue();
this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue();
this.textStyle = (TextStyle) ((EnumWidgetSetting<?>) settings.optionById("text_style")).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();
} }
} }
@@ -14,6 +14,8 @@ import net.minecraft.util.Identifier;
import java.awt.*; import java.awt.*;
import java.util.List; import java.util.List;
import static net.minecraft.text.Text.translatable;
public class CoordinatesWidget extends ResizableWidget { public class CoordinatesWidget extends ResizableWidget {
public CoordinatesWidget(Identifier id) { public CoordinatesWidget(Identifier id) {
super(id, List.of( 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("y", Text.translatable("widgets.widgets.coordinates.showY"), true),
new ToggleWidgetSetting("z", Text.translatable("widgets.widgets.coordinates.showZ"), 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 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 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("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("paddingX", Text.translatable("widgets.widgets.basictext.paddingX"), 0, 5, 20),
new IntSliderWidgetSetting("paddingY", Text.translatable("widgets.widgets.basictext.paddingY"), 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) 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 String textX = "X", textY = "Y", textZ = "Z";
private int txc = 0, tyc = 0, tzc = 0; private int txc = 0, tyc = 0, tzc = 0, rainbowSpeed = 3;
private boolean shadow = true; private boolean shadow = true, rainbow = false;
@Override @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); context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor);
int y = this.paddingY; int y = this.paddingY;
if (showX){ if (showX){
y++; y++;
context.drawText(textRenderer, "X: ", posX + paddingX, posY + y, textColor, shadow); context.drawText(textRenderer, "X: ", posX + paddingX, posY + y, textColor(mt), shadow);
context.drawText(textRenderer, textX, posX + txc, posY + y, textColor, shadow); context.drawText(textRenderer, textX, posX + txc, posY + y, textColor(mt), shadow);
y += textRenderer.fontHeight + 1; y += textRenderer.fontHeight + 1;
} }
if (showY){ if (showY){
y++; y++;
context.drawText(textRenderer, "Y: ", posX + paddingX, posY + y, textColor, shadow); context.drawText(textRenderer, "Y: ", posX + paddingX, posY + y, textColor(mt), shadow);
context.drawText(textRenderer, textY, posX + tyc, posY + y, textColor, shadow); context.drawText(textRenderer, textY, posX + tyc, posY + y, textColor(mt), shadow);
y += textRenderer.fontHeight + 1; y += textRenderer.fontHeight + 1;
} }
if (showZ){ if (showZ){
y++; y++;
context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor, shadow); context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor(mt), shadow);
context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor, 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 @Override
public void tick() { public void tick() {
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
@@ -106,6 +116,8 @@ public class CoordinatesWidget extends ResizableWidget {
this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue(); this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue();
this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue();
this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue();
this.rainbow = ((ToggleWidgetSetting) settings.optionById("rainbow")).getValue();
this.rainbowSpeed = ((IntSliderWidgetSetting) settings.optionById("rainbow_speed")).getValue();
} }
@Override @Override
@@ -1,6 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; 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.RGBAColorWidgetSetting;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -16,25 +17,34 @@ import java.awt.*;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static net.minecraft.text.Text.translatable;
public class KeyStrokesWidget extends ResizableWidget { public class KeyStrokesWidget extends ResizableWidget {
public KeyStrokesWidget(Identifier id) { public KeyStrokesWidget(Identifier id) {
super(id, List.of( super(id, List.of(
new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true), 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("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 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("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255),
new RGBAColorWidgetSetting("keyunpressed", Text.translatable("widgets.widgets.keystrokes.colorKeyUnpressed"), 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 @Override
public void onSettingsChanged(WidgetSettings settings) { public void onSettingsChanged(WidgetSettings settings) {
super.onSettingsChanged(settings); super.onSettingsChanged(settings);
showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue(); this.showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue();
colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor(); this.colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor();
colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor(); this.colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor();
colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor(); this.colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor();
colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).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; private boolean showJumpKey = true;
@@ -44,6 +54,9 @@ public class KeyStrokesWidget extends ResizableWidget {
colorKeyUnpressed = 0xffffffff, colorKeyUnpressed = 0xffffffff,
colorKeyPressed = 0xffffffff; colorKeyPressed = 0xffffffff;
protected boolean rainbow = false;
protected int rainbowSpeed = 3;
protected static class Key { protected static class Key {
protected final KeyBinding binding; protected final KeyBinding binding;
protected boolean isPressed; protected boolean isPressed;
@@ -92,7 +105,7 @@ public class KeyStrokesWidget extends ResizableWidget {
} else { } else {
context.fill(posX, posY, posX + 64, posY + 10, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed); 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, protected void renderKeyStroke(final DrawContext context,
@@ -111,7 +124,7 @@ public class KeyStrokesWidget extends ResizableWidget {
} else { } else {
context.fill(posX, posY, posX+20, posY+20, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed); 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) { private int fadeColor(int color1, int color2, double delta) {
@@ -1,7 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.WidgetUtils; import de.shiewk.widgets.utils.WidgetUtils;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler; 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("dynamic_color", Text.translatable("widgets.widgets.ping.dynamicColor"), true),
new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false) 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; private boolean dynamicColor = false;
@@ -1,7 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.WidgetUtils; import de.shiewk.widgets.utils.WidgetUtils;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayNetworkHandler;
@@ -1,7 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.WidgetUtils; import de.shiewk.widgets.utils.WidgetUtils;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ServerInfo; import net.minecraft.client.network.ServerInfo;
@@ -1,7 +1,7 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.WidgetSettings; 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.EnumWidgetSetting;
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
@@ -19,7 +19,9 @@ public class TPSWidget extends BasicTextWidget {
new ToggleWidgetSetting("show_label", translatable("widgets.widgets.common.showLabel"), true), new ToggleWidgetSetting("show_label", translatable("widgets.widgets.common.showLabel"), true),
new ToggleWidgetSetting("dynamic_color", translatable("widgets.widgets.tps.dynamicColor"), 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; INSTANCE = this;
} }
@@ -3,7 +3,7 @@ package de.shiewk.widgets.widgets.settings;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
import de.shiewk.widgets.WidgetSettingOption; 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.client.gui.DrawContext;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Util; import net.minecraft.util.Util;
@@ -30,6 +30,9 @@
"widgets.widgets.basictext.padding": "Textabstand", "widgets.widgets.basictext.padding": "Textabstand",
"widgets.widgets.basictext.paddingX": "Textabstand X", "widgets.widgets.basictext.paddingX": "Textabstand X",
"widgets.widgets.basictext.paddingY": "Textabstand Y", "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.textcolor": "Textfarbe",
"widgets.widgets.basictext.textshadow": "Textschatten", "widgets.widgets.basictext.textshadow": "Textschatten",
"widgets.widgets.basictext.textstyle": "Textstil", "widgets.widgets.basictext.textstyle": "Textstil",
@@ -49,6 +52,8 @@
"widgets.widgets.clock.weekFormat": "Wochentagformat", "widgets.widgets.clock.weekFormat": "Wochentagformat",
"widgets.widgets.clock.weekFormat.none": "Nicht anzeigen", "widgets.widgets.clock.weekFormat.none": "Nicht anzeigen",
"widgets.widgets.common.hideInSingleplayer": "In Einzelspielerwelten verbergen", "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.showLabel": "Beschriftung anzeigen",
"widgets.widgets.common.sizePercent": "Widgetgröße (%)", "widgets.widgets.common.sizePercent": "Widgetgröße (%)",
"widgets.widgets.coordinates": "Koordinaten", "widgets.widgets.coordinates": "Koordinaten",
@@ -111,8 +116,5 @@
"widgets.widgets.tps": "TPS", "widgets.widgets.tps": "TPS",
"widgets.widgets.tps.description": "Zeigt die TPS im Einzelspielermodus an oder schätzt die TPS im Mehrspielermodus", "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.dynamicColor": "Farbe dynamisch anzeigen",
"widgets.widgets.tps.tps": "%s TPS", "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"
} }
@@ -52,6 +52,8 @@
"widgets.widgets.clock.weekFormat": "Day of week format", "widgets.widgets.clock.weekFormat": "Day of week format",
"widgets.widgets.clock.weekFormat.none": "Don't show", "widgets.widgets.clock.weekFormat.none": "Don't show",
"widgets.widgets.common.hideInSingleplayer": "Hide in singleplayer worlds", "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.showLabel": "Show label",
"widgets.widgets.common.sizePercent": "Widget size (%)", "widgets.widgets.common.sizePercent": "Widget size (%)",
"widgets.widgets.coordinates": "Coordinates", "widgets.widgets.coordinates": "Coordinates",