package dev.isxander.yacl3.dsl import dev.isxander.yacl3.api.* import net.minecraft.network.chat.Component interface YACLDsl { val namespaceKey: String val categories: YACLDslReference fun title(component: Component) fun title(block: () -> Component) fun category(id: String, block: CategoryDsl.() -> Unit): ConfigCategory fun save(block: () -> Unit) } interface OptionAddableDsl { fun option(id: String, block: OptionDsl.() -> Unit): Option } interface CategoryDsl : OptionAddableDsl { val groups: CategoryDslReference val options: GroupDslReference fun group(id: String, block: GroupDsl.() -> Unit): OptionGroup fun name(component: Component) fun name(block: () -> Component) fun tooltip(vararg component: Component) fun tooltipBuilder(block: TooltipBuilderDsl.() -> Unit) fun useDefaultTooltip(lines: Int = 1) } interface GroupDsl : OptionAddableDsl { val options: GroupDslReference fun name(component: Component) fun name(block: () -> Component) fun descriptionBuilder(block: OptionDescription.Builder.() -> Unit) fun description(description: OptionDescription) fun useDefaultDescription(lines: Int = 1) } interface OptionDsl : Option.Builder { val option: FutureValue> fun OptionDescription.Builder.addDefaultDescription(lines: Int? = null) } interface TooltipBuilderDsl { fun text(component: Component) fun text(block: () -> Component) operator fun Component.unaryPlus() class Delegate(private val tooltipFunction: (Component) -> Unit) : TooltipBuilderDsl { override fun text(component: Component) { tooltipFunction(component) } override fun text(block: () -> Component) { text(block()) } override fun Component.unaryPlus() { text(this) } } } interface YACLDslReference : Reference { fun get(): YetAnotherConfigLib? val isBuilt: Boolean fun registering(block: CategoryDsl.() -> Unit): RegisterableDelegateProvider } interface CategoryDslReference : Reference { fun get(): ConfigCategory? val root: GroupDslReference val isBuilt: Boolean fun registering(block: GroupDsl.() -> Unit): RegisterableDelegateProvider } interface GroupDslReference { fun get(): OptionGroup? operator fun get(id: String): FutureValue> val isBuilt: Boolean fun registering(block: OptionDsl.() -> Unit): RegisterableDelegateProvider, Option> }