aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/isxander/yacl/api')
-rw-r--r--src/main/java/dev/isxander/yacl/api/Controller.java1
-rw-r--r--src/main/java/dev/isxander/yacl/api/Option.java28
-rw-r--r--src/main/java/dev/isxander/yacl/api/OptionGroup.java2
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);