aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/api
diff options
context:
space:
mode:
authorxander <xander@isxander.dev>2022-09-04 18:29:32 +0100
committerxander <xander@isxander.dev>2022-09-04 18:29:38 +0100
commit89f4185969e347c8649dea58bf85a09aad9d9983 (patch)
treebe1aa640ce099558f3f1ca7f7943b98a54584af0 /src/main/java/dev/isxander/yacl/api
parent80a9a0e744ed2bf3c00c75b2d6edc25bd93801a2 (diff)
downloadYetAnotherConfigLib-89f4185969e347c8649dea58bf85a09aad9d9983.tar.gz
YetAnotherConfigLib-89f4185969e347c8649dea58bf85a09aad9d9983.tar.bz2
YetAnotherConfigLib-89f4185969e347c8649dea58bf85a09aad9d9983.zip
collapsible groups, string controller
Diffstat (limited to 'src/main/java/dev/isxander/yacl/api')
-rw-r--r--src/main/java/dev/isxander/yacl/api/Binding.java15
-rw-r--r--src/main/java/dev/isxander/yacl/api/ConfigCategory.java2
-rw-r--r--src/main/java/dev/isxander/yacl/api/Controller.java4
-rw-r--r--src/main/java/dev/isxander/yacl/api/Option.java4
-rw-r--r--src/main/java/dev/isxander/yacl/api/OptionGroup.java18
5 files changed, 37 insertions, 6 deletions
diff --git a/src/main/java/dev/isxander/yacl/api/Binding.java b/src/main/java/dev/isxander/yacl/api/Binding.java
index 37514ca..395beb2 100644
--- a/src/main/java/dev/isxander/yacl/api/Binding.java
+++ b/src/main/java/dev/isxander/yacl/api/Binding.java
@@ -46,4 +46,19 @@ public interface Binding<T> {
minecraftOption::setValue
);
}
+
+ /**
+ * Creates an immutable binding that has no default and cannot be modified.
+ *
+ * @param value the value for the binding
+ */
+ static <T> Binding<T> immutable(T value) {
+ Validate.notNull(value, "`value` must not be null");
+
+ return new GenericBindingImpl<>(
+ value,
+ () -> value,
+ changed -> {}
+ );
+ }
}
diff --git a/src/main/java/dev/isxander/yacl/api/ConfigCategory.java b/src/main/java/dev/isxander/yacl/api/ConfigCategory.java
index 9f2f954..1b2a2bc 100644
--- a/src/main/java/dev/isxander/yacl/api/ConfigCategory.java
+++ b/src/main/java/dev/isxander/yacl/api/ConfigCategory.java
@@ -138,7 +138,7 @@ public interface ConfigCategory {
Validate.notNull(name, "`name` must not be null to build `ConfigCategory`");
List<OptionGroup> combinedGroups = new ArrayList<>();
- combinedGroups.add(new OptionGroupImpl(Text.empty(), Text.empty(), ImmutableList.copyOf(rootOptions), true));
+ combinedGroups.add(new OptionGroupImpl(Text.empty(), Text.empty(), ImmutableList.copyOf(rootOptions), false, true));
combinedGroups.addAll(groups);
Validate.notEmpty(combinedGroups, "at least one option must be added to build `ConfigCategory`");
diff --git a/src/main/java/dev/isxander/yacl/api/Controller.java b/src/main/java/dev/isxander/yacl/api/Controller.java
index 198e5df..1a00920 100644
--- a/src/main/java/dev/isxander/yacl/api/Controller.java
+++ b/src/main/java/dev/isxander/yacl/api/Controller.java
@@ -1,8 +1,8 @@
package dev.isxander.yacl.api;
import dev.isxander.yacl.api.utils.Dimension;
+import dev.isxander.yacl.gui.AbstractWidget;
import dev.isxander.yacl.gui.YACLScreen;
-import dev.isxander.yacl.gui.controllers.ControllerWidget;
import net.minecraft.text.Text;
import org.jetbrains.annotations.ApiStatus;
@@ -26,5 +26,5 @@ public interface Controller<T> {
* @param screen parent screen
*/
@ApiStatus.Internal
- ControllerWidget<?> provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension);
+ 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 9d6ebe2..a353ae4 100644
--- a/src/main/java/dev/isxander/yacl/api/Option.java
+++ b/src/main/java/dev/isxander/yacl/api/Option.java
@@ -3,6 +3,7 @@ package dev.isxander.yacl.api;
import dev.isxander.yacl.impl.OptionImpl;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
import org.apache.commons.lang3.Validate;
import org.jetbrains.annotations.NotNull;
@@ -87,7 +88,7 @@ public interface Option<T> {
}
class Builder<T> {
- private Text name;
+ private Text name = Text.literal("Name not specified!").formatted(Formatting.RED);
private final List<Text> tooltipLines = new ArrayList<>();
@@ -172,7 +173,6 @@ public interface Option<T> {
}
public Option<T> build() {
- Validate.notNull(name, "`name` must not be null when building `Option`");
Validate.notNull(controlGetter, "`control` must not be null when building `Option`");
Validate.notNull(binding, "`binding` must not be null when building `Option`");
diff --git a/src/main/java/dev/isxander/yacl/api/OptionGroup.java b/src/main/java/dev/isxander/yacl/api/OptionGroup.java
index 9376b8e..f8c346b 100644
--- a/src/main/java/dev/isxander/yacl/api/OptionGroup.java
+++ b/src/main/java/dev/isxander/yacl/api/OptionGroup.java
@@ -34,6 +34,11 @@ public interface OptionGroup {
@NotNull ImmutableList<Option<?>> options();
/**
+ * Dictates if the group should be collapsed by default.
+ */
+ boolean collapsed();
+
+ /**
* Always false when using the {@link Builder}
* used to not render the separator if true
*/
@@ -50,6 +55,7 @@ public interface OptionGroup {
private Text name = Text.empty();
private final List<Text> tooltipLines = new ArrayList<>();
private final List<Option<?>> options = new ArrayList<>();
+ private boolean collapsed = false;
private Builder() {
@@ -107,6 +113,16 @@ public interface OptionGroup {
return this;
}
+ /**
+ * Dictates if the group should be collapsed by default
+ *
+ * @see OptionGroup#collapsed()
+ */
+ public Builder collapsed(boolean collapsible) {
+ this.collapsed = collapsible;
+ return this;
+ }
+
public OptionGroup build() {
Validate.notEmpty(options, "`options` must not be empty to build `OptionGroup`");
@@ -119,7 +135,7 @@ public interface OptionGroup {
concatenatedTooltip.append(line);
}
- return new OptionGroupImpl(name, concatenatedTooltip, ImmutableList.copyOf(options), false);
+ return new OptionGroupImpl(name, concatenatedTooltip, ImmutableList.copyOf(options), collapsed, false);
}
}
}