aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/api/Option.java
diff options
context:
space:
mode:
authorxander <xander@isxander.dev>2022-09-20 21:50:48 +0100
committerxander <xander@isxander.dev>2022-09-20 21:50:48 +0100
commit36891bb4f9e6aedacf8f79bc1b18b0402845f3a8 (patch)
tree2d1c71aa9cbadb693213531f3388877cc9a0f1fd /src/main/java/dev/isxander/yacl/api/Option.java
parent2ffdf3ecb7890adb796c81808655dbbd624b25bb (diff)
downloadYetAnotherConfigLib-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.java28
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);
}
}
}