diff options
Diffstat (limited to 'src/main/java/dev/isxander/yacl/api')
-rw-r--r-- | src/main/java/dev/isxander/yacl/api/Controller.java | 1 | ||||
-rw-r--r-- | src/main/java/dev/isxander/yacl/api/Option.java | 28 | ||||
-rw-r--r-- | src/main/java/dev/isxander/yacl/api/OptionGroup.java | 2 |
3 files changed, 26 insertions, 5 deletions
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<T> { * * @param screen parent screen */ - @ApiStatus.Internal AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> 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<T> { private final Class<T> typeClass; + private final List<BiConsumer<Option<T>, T>> listeners = new ArrayList<>(); + private Builder(Class<T> typeClass) { this.typeClass = typeClass; } @@ -270,6 +272,26 @@ public interface Option<T> { } /** + * Adds a listener to the option. Invoked upon changing the pending value. + * + * @see Option#addListener(BiConsumer) + */ + public Builder<T> listener(@NotNull BiConsumer<Option<T>, 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<T> listeners(@NotNull Collection<BiConsumer<Option<T>, 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<T> { return concatenatedTooltip; }; - OptionImpl<T> 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<Option<?>> options) { + public Builder options(@NotNull Collection<? extends Option<?>> options) { Validate.notEmpty(options, "`options` must not be empty"); this.options.addAll(options); |