From 4b9806e89a3256d2c2202a7c50845bead0ce2570 Mon Sep 17 00:00:00 2001 From: ninjaguardian <110734253+ninjaguardian@users.noreply.github.com> Date: Sat, 1 Aug 2026 00:19:34 -0500 Subject: [PATCH] Fix color lists --- .../yacl3/gui/controllers/ListEntryWidget.java | 17 ++++++++++++++--- .../dev/isxander/yacl3/test/ConfigTest.java | 2 ++ .../java/dev/isxander/yacl3/test/GuiTest.java | 10 ++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/isxander/yacl3/gui/controllers/ListEntryWidget.java b/src/main/java/dev/isxander/yacl3/gui/controllers/ListEntryWidget.java index 564e1ad8..b4692f24 100644 --- a/src/main/java/dev/isxander/yacl3/gui/controllers/ListEntryWidget.java +++ b/src/main/java/dev/isxander/yacl3/gui/controllers/ListEntryWidget.java @@ -29,7 +29,7 @@ public class ListEntryWidget extends AbstractWidget implements ContainerEventHan private final String optionNameString; - private GuiEventListener focused; + @Nullable private GuiEventListener focused; private boolean dragging; public ListEntryWidget(YACLScreen screen, ListOptionEntry listOptionEntry, AbstractWidget entryWidget) { @@ -91,7 +91,7 @@ protected void updateButtonStates() { @Override public void unfocus() { - entryWidget.unfocus(); + setFocused(null); } @Override @@ -127,9 +127,20 @@ public GuiEventListener getFocused() { @Override public void setFocused(@Nullable GuiEventListener focused) { - this.focused = focused; + if (this.focused != focused) { + if (this.focused != null) + this.focused.setFocused(false); + + if (focused != null) + focused.setFocused(true); + + this.focused = focused; + } } + @Override + public void setFocused(boolean focused) {} + @Override public boolean mouseClicked(MouseButtonEvent mouseButtonEvent, boolean doubleClick) { return ContainerEventHandler.super.mouseClicked(mouseButtonEvent, doubleClick); diff --git a/src/testmod/java/dev/isxander/yacl3/test/ConfigTest.java b/src/testmod/java/dev/isxander/yacl3/test/ConfigTest.java index 9c5f8d6e..852cad99 100644 --- a/src/testmod/java/dev/isxander/yacl3/test/ConfigTest.java +++ b/src/testmod/java/dev/isxander/yacl3/test/ConfigTest.java @@ -65,6 +65,8 @@ public class ConfigTest { @SerialEntry public ChatFormatting formattingOption = ChatFormatting.RED; + @SerialEntry + public List colorList = List.of(Color.red, Color.green, Color.blue); @SerialEntry public List stringList = List.of("This is quite cool.", "You can add multiple items!", "And it is integrated so well into Option groups!"); @SerialEntry diff --git a/src/testmod/java/dev/isxander/yacl3/test/GuiTest.java b/src/testmod/java/dev/isxander/yacl3/test/GuiTest.java index d56c54b9..a3fb50b9 100644 --- a/src/testmod/java/dev/isxander/yacl3/test/GuiTest.java +++ b/src/testmod/java/dev/isxander/yacl3/test/GuiTest.java @@ -323,6 +323,16 @@ private static Screen getFullTestSuite(Screen parent) { .build()) .category(ConfigCategory.createBuilder() .name(Component.literal("List Test")) + .group(ListOption.createBuilder() + .name(Component.literal("Color List")) + .binding( + defaults.colorList, + () -> config.colorList, + val -> config.colorList = val + ) + .controller(ColorControllerBuilder::create) + .initial(Color.white) + .build()) .group(ListOption.createBuilder() .name(Component.literal("String List")) .binding(