aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt')
-rw-r--r--src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt b/src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt
new file mode 100644
index 0000000..4f12d27
--- /dev/null
+++ b/src/main/kotlin/com/dulkirfabric/config/ConfigHelper.kt
@@ -0,0 +1,58 @@
+package com.dulkirfabric.config
+
+import me.shedaniel.clothconfig2.api.AbstractConfigListEntry
+import me.shedaniel.clothconfig2.api.ConfigEntryBuilder
+import me.shedaniel.clothconfig2.gui.entries.MultiElementListEntry
+import me.shedaniel.clothconfig2.gui.entries.NestedListListEntry
+import net.minecraft.client.util.InputUtil
+import net.minecraft.text.Text
+import java.util.*
+import kotlin.reflect.KMutableProperty0
+
+object ConfigHelper {
+ fun <T> mkConfigList(
+ name: Text,
+ property: KMutableProperty0<List<T>>,
+ newT: () -> T,
+ elementName: Text,
+ render: (T) -> List<AbstractConfigListEntry<*>>,
+ canDelete: Boolean = true,
+ ): NestedListListEntry<T, MultiElementListEntry<T>> {
+ return NestedListListEntry<T, MultiElementListEntry<T>>(
+ name, // field name
+ property.get(), // value
+ false, // defaultExpanded
+ { Optional.empty() }, // tooltipSupplier
+ { property.set(it) }, // saveConsumer
+ { mutableListOf() }, // defaultValue
+ Text.literal("Reset"), // resetButtonKey
+ canDelete,
+ false,
+ { value, entry -> // createNewCell
+ val value = value ?: newT()
+ MultiElementListEntry(elementName, value, render(value), true)
+ }
+ )
+ }
+
+ fun ConfigEntryBuilder.mkStringField(text: Text, prop: KMutableProperty0<String>) = startStrField(text, prop.get())
+ .setSaveConsumer { prop.set(it) }
+ .setDefaultValue("")
+ .build()
+ fun ConfigEntryBuilder.mkIntField(text: Text, prop: KMutableProperty0<Int>) = startIntField(text, prop.get())
+ .setSaveConsumer { prop.set(it) }
+ .setDefaultValue(0)
+ .build()
+
+ fun ConfigEntryBuilder.mkKeyField(text: Text, prop: KMutableProperty0<InputUtil.Key>) = startKeyCodeField(text, prop.get())
+ .setKeySaveConsumer { prop.set(it) }
+ .setDefaultValue(InputUtil.UNKNOWN_KEY)
+ .build()
+
+ fun ConfigEntryBuilder.mkToggle(text: Text, prop: KMutableProperty0<Boolean>, tooltip: Text = Text.literal(""))
+ = startBooleanToggle(text, prop.get())
+ .setSaveConsumer { prop.set(it) }
+ .setDefaultValue(false)
+ .setTooltip(tooltip)
+ .build()
+} \ No newline at end of file