From 36891bb4f9e6aedacf8f79bc1b18b0402845f3a8 Mon Sep 17 00:00:00 2001 From: xander Date: Tue, 20 Sep 2022 21:50:48 +0100 Subject: 1.4.2 --- .../java/dev/isxander/yacl/api/Controller.java | 1 - src/main/java/dev/isxander/yacl/api/Option.java | 28 +++++++++++++++++++--- .../java/dev/isxander/yacl/api/OptionGroup.java | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) (limited to 'src/main/java/dev/isxander/yacl/api') diff --git a/src/main/java/dev/isxander/yacl/api/Controller.java b/src/main/java/dev/isxander/yacl/api/Controller.java index 1a00920..7fbc466 100644 --- a/src/main/java/dev/isxander/yacl/api/Controller.java +++ b/src/main/java/dev/isxander/yacl/api/Controller.java @@ -25,6 +25,5 @@ public interface Controller { * * @param screen parent screen */ - @ApiStatus.Internal AbstractWidget provideWidget(YACLScreen screen, Dimension widgetDimension); } diff --git a/src/main/java/dev/isxander/yacl/api/Option.java b/src/main/java/dev/isxander/yacl/api/Option.java index fe11778..8ec7338 100644 --- a/src/main/java/dev/isxander/yacl/api/Option.java +++ b/src/main/java/dev/isxander/yacl/api/Option.java @@ -136,6 +136,8 @@ public interface Option { private final Class typeClass; + private final List, T>> listeners = new ArrayList<>(); + private Builder(Class typeClass) { this.typeClass = typeClass; } @@ -269,6 +271,26 @@ public interface Option { return this; } + /** + * Adds a listener to the option. Invoked upon changing the pending value. + * + * @see Option#addListener(BiConsumer) + */ + public Builder listener(@NotNull BiConsumer, T> listener) { + this.listeners.add(listener); + return this; + } + + /** + * Adds multiple listeners to the option. Invoked upon changing the pending value. + * + * @see Option#addListener(BiConsumer) + */ + public Builder listeners(@NotNull Collection, T>> listeners) { + this.listeners.addAll(listeners); + return this; + } + /** * Dictates whether the option should require a restart. * {@link Option#requiresRestart()} @@ -299,11 +321,11 @@ public interface Option { return concatenatedTooltip; }; - OptionImpl option = new OptionImpl<>(name, concatenatedTooltipGetter, controlGetter, binding, available, ImmutableSet.copyOf(flags), typeClass); if (instant) { - option.addListener((opt, pendingValue) -> opt.applyValue()); + listeners.add((opt, pendingValue) -> opt.applyValue()); } - return option; + + return new OptionImpl<>(name, concatenatedTooltipGetter, controlGetter, binding, available, ImmutableSet.copyOf(flags), typeClass, listeners); } } } diff --git a/src/main/java/dev/isxander/yacl/api/OptionGroup.java b/src/main/java/dev/isxander/yacl/api/OptionGroup.java index f8c346b..3364bdf 100644 --- a/src/main/java/dev/isxander/yacl/api/OptionGroup.java +++ b/src/main/java/dev/isxander/yacl/api/OptionGroup.java @@ -106,7 +106,7 @@ public interface OptionGroup { * * @see OptionGroup#options() */ - public Builder options(@NotNull Collection> options) { + public Builder options(@NotNull Collection> options) { Validate.notEmpty(options, "`options` must not be empty"); this.options.addAll(options); -- cgit