diff options
Diffstat (limited to 'src/main/kotlin/dev/isxander/yacl3/dsl/Extensions.kt')
-rw-r--r-- | src/main/kotlin/dev/isxander/yacl3/dsl/Extensions.kt | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/kotlin/dev/isxander/yacl3/dsl/Extensions.kt b/src/main/kotlin/dev/isxander/yacl3/dsl/Extensions.kt new file mode 100644 index 0000000..4b93f5f --- /dev/null +++ b/src/main/kotlin/dev/isxander/yacl3/dsl/Extensions.kt @@ -0,0 +1,36 @@ +package dev.isxander.yacl3.dsl + +import dev.isxander.yacl3.api.Option +import dev.isxander.yacl3.api.OptionDescription +import dev.isxander.yacl3.api.OptionGroup +import dev.isxander.yacl3.api.controller.ControllerBuilder +import net.minecraft.network.chat.Component +import kotlin.reflect.KMutableProperty0 + +fun <T : Any> Option.Builder<T>.binding(property: KMutableProperty0<T>, default: T) { + binding(default, { property.get() }, { property.set(it) }) +} + +fun <T : Any> Option.Builder<T>.descriptionBuilder(block: OptionDescription.Builder.(T) -> Unit) { + description { OptionDescription.createBuilder().apply { block(it) }.build() } +} + +fun Option.Builder<*>.descriptionBuilderConst(block: OptionDescription.Builder.() -> Unit) { + description(OptionDescription.createBuilder().apply(block).build()) +} + +fun Option.Builder<*>.available(block: () -> Boolean) { + available(block()) +} + +fun OptionDescription.Builder.text(block: () -> Component) { + text(block()) +} + +fun OptionGroup.Builder.descriptionBuilder(block: OptionDescription.Builder.() -> Unit) { + description(OptionDescription.createBuilder().apply(block).build()) +} + +fun <T, B : ControllerBuilder<T>> Option.Builder<T>.controller(builder: (Option<T>) -> B, block: B.() -> Unit = {}) { + controller { builder(it).apply(block) } +} |