diff options
author | isXander <isxander@users.noreply.github.com> | 2022-09-18 19:14:58 +0100 |
---|---|---|
committer | isXander <isxander@users.noreply.github.com> | 2022-09-18 19:15:09 +0100 |
commit | 33e98c7edc1404e099f9c9bcc586fd5c55cb8bdd (patch) | |
tree | a964082d62c3b13f5628c036fe49f9ea19d32315 /src/main/java/dev/isxander/yacl/impl | |
parent | 564a028eed25cfce0e0486f1a1a21affb499a311 (diff) | |
download | YetAnotherConfigLib-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')
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(); + } +} |