diff options
author | xander <xander@isxander.dev> | 2022-09-20 21:50:48 +0100 |
---|---|---|
committer | xander <xander@isxander.dev> | 2022-09-20 21:50:48 +0100 |
commit | 36891bb4f9e6aedacf8f79bc1b18b0402845f3a8 (patch) | |
tree | 2d1c71aa9cbadb693213531f3388877cc9a0f1fd /src/main/java/dev/isxander/yacl/api/Option.java | |
parent | 2ffdf3ecb7890adb796c81808655dbbd624b25bb (diff) | |
download | YetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.tar.gz YetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.tar.bz2 YetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.zip |
1.4.2
Diffstat (limited to 'src/main/java/dev/isxander/yacl/api/Option.java')
-rw-r--r-- | src/main/java/dev/isxander/yacl/api/Option.java | 28 |
1 files changed, 25 insertions, 3 deletions
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); } } } |