aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/impl
diff options
context:
space:
mode:
authorisXander <isxander@users.noreply.github.com>2022-09-18 19:14:58 +0100
committerisXander <isxander@users.noreply.github.com>2022-09-18 19:15:09 +0100
commit33e98c7edc1404e099f9c9bcc586fd5c55cb8bdd (patch)
treea964082d62c3b13f5628c036fe49f9ea19d32315 /src/main/java/dev/isxander/yacl/impl
parent564a028eed25cfce0e0486f1a1a21affb499a311 (diff)
downloadYetAnotherConfigLib-33e98c7edc1404e099f9c9bcc586fd5c55cb8bdd.tar.gz
YetAnotherConfigLib-33e98c7edc1404e099f9c9bcc586fd5c55cb8bdd.tar.bz2
YetAnotherConfigLib-33e98c7edc1404e099f9c9bcc586fd5c55cb8bdd.zip
1.3.0
option tooltips now consume the pending value PlaceholderCategory: a category that when selected, just opens a screen
Diffstat (limited to 'src/main/java/dev/isxander/yacl/impl')
-rw-r--r--src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java11
-rw-r--r--src/main/java/dev/isxander/yacl/impl/OptionImpl.java23
-rw-r--r--src/main/java/dev/isxander/yacl/impl/PlaceholderCategoryImpl.java19
3 files changed, 45 insertions, 8 deletions
diff --git a/src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java b/src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java
index a600bc3..51c94b0 100644
--- a/src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java
+++ b/src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java
@@ -1,16 +1,14 @@
package dev.isxander.yacl.impl;
import com.google.common.collect.ImmutableSet;
-import dev.isxander.yacl.api.Binding;
-import dev.isxander.yacl.api.ButtonOption;
-import dev.isxander.yacl.api.Controller;
-import dev.isxander.yacl.api.OptionFlag;
+import dev.isxander.yacl.api.*;
import dev.isxander.yacl.gui.YACLScreen;
import net.minecraft.text.Text;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -113,6 +111,11 @@ public class ButtonOptionImpl implements ButtonOption {
}
+ @Override
+ public void addListener(BiConsumer<Option<Consumer<YACLScreen>>, Consumer<YACLScreen>> changedListener) {
+
+ }
+
private static class EmptyBinderImpl implements Binding<Consumer<YACLScreen>> {
@Override
public void setValue(Consumer<YACLScreen> value) {
diff --git a/src/main/java/dev/isxander/yacl/impl/OptionImpl.java b/src/main/java/dev/isxander/yacl/impl/OptionImpl.java
index 5a31a70..1cf2a79 100644
--- a/src/main/java/dev/isxander/yacl/impl/OptionImpl.java
+++ b/src/main/java/dev/isxander/yacl/impl/OptionImpl.java
@@ -10,12 +10,16 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.BiConsumer;
import java.util.function.Function;
@ApiStatus.Internal
public class OptionImpl<T> implements Option<T> {
private final Text name;
- private final Text tooltip;
+ private Text tooltip;
+ private final Function<T, Text> tooltipGetter;
private final Controller<T> controller;
private final Binding<T> binding;
private final boolean available;
@@ -26,9 +30,11 @@ public class OptionImpl<T> implements Option<T> {
private T pendingValue;
+ private final List<BiConsumer<Option<T>, T>> listeners;
+
public OptionImpl(
@NotNull Text name,
- @Nullable Text tooltip,
+ @Nullable Function<T, Text> tooltipGetter,
@NotNull Function<Option<T>, Controller<T>> controlGetter,
@NotNull Binding<T> binding,
boolean available,
@@ -36,13 +42,16 @@ public class OptionImpl<T> implements Option<T> {
@NotNull Class<T> typeClass
) {
this.name = name;
- this.tooltip = tooltip;
+ this.tooltipGetter = tooltipGetter;
this.controller = controlGetter.apply(this);
this.binding = binding;
this.available = available;
this.flags = flags;
this.typeClass = typeClass;
- this.pendingValue = binding().getValue();
+ this.listeners = new ArrayList<>();
+
+ addListener((opt, pending) -> tooltip = tooltipGetter.apply(pending));
+ requestSet(binding().getValue());
}
@Override
@@ -98,6 +107,7 @@ public class OptionImpl<T> implements Option<T> {
@Override
public void requestSet(T value) {
pendingValue = value;
+ listeners.forEach(listener -> listener.accept(this, pendingValue));
}
@Override
@@ -118,4 +128,9 @@ public class OptionImpl<T> implements Option<T> {
public void requestSetDefault() {
pendingValue = binding().defaultValue();
}
+
+ @Override
+ public void addListener(BiConsumer<Option<T>, T> changedListener) {
+ this.listeners.add(changedListener);
+ }
}
diff --git a/src/main/java/dev/isxander/yacl/impl/PlaceholderCategoryImpl.java b/src/main/java/dev/isxander/yacl/impl/PlaceholderCategoryImpl.java
new file mode 100644
index 0000000..a5180ad
--- /dev/null
+++ b/src/main/java/dev/isxander/yacl/impl/PlaceholderCategoryImpl.java
@@ -0,0 +1,19 @@
+package dev.isxander.yacl.impl;
+
+import com.google.common.collect.ImmutableList;
+import dev.isxander.yacl.api.OptionGroup;
+import dev.isxander.yacl.api.PlaceholderCategory;
+import dev.isxander.yacl.gui.YACLScreen;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.function.BiFunction;
+
+public record PlaceholderCategoryImpl(Text name, BiFunction<MinecraftClient, YACLScreen, Screen> screen, Text tooltip) implements PlaceholderCategory {
+ @Override
+ public @NotNull ImmutableList<OptionGroup> groups() {
+ return ImmutableList.of();
+ }
+}