Add config categories

This commit is contained in:
Linnea Gräf
2024-10-13 21:46:46 +02:00
parent 0cc77949c9
commit 4e9b0ded27
32 changed files with 337 additions and 220 deletions

View File

@@ -4,11 +4,12 @@ import com.mrcrayfish.configured.api.IConfigEntry
import com.mrcrayfish.configured.api.IConfigValue
import net.minecraft.text.Text
import moe.nea.firmament.gui.config.AllConfigsGui
import moe.nea.firmament.gui.config.ManagedConfig
object BaseConfigNode : IConfigEntry {
override fun getChildren(): List<IConfigEntry> {
return AllConfigsGui.allConfigs.map {
ConfigNode(it)
return ManagedConfig.allManagedConfigs.getAll().map {
ConfigNode(it) // TODO: fix add categories here
}
}

View File

@@ -6,6 +6,7 @@ import com.mrcrayfish.configured.api.IModConfigProvider
import com.mrcrayfish.configured.api.ModContext
import moe.nea.firmament.Firmament
import moe.nea.firmament.gui.config.AllConfigsGui
import moe.nea.firmament.gui.config.ManagedConfig
/**
* Registered in `fabric.mod.json` at `custom.configured.providers`
@@ -23,7 +24,7 @@ class ConfiguredCompat : IModConfigProvider {
return "firmament.config.all-configs"
}
})
AllConfigsGui.allConfigs.mapTo(this) { ConfigCategory(it) }
ManagedConfig.allManagedConfigs.getAll().mapTo(this) { ConfigCategory(it) }
}
}
}

View File

@@ -6,6 +6,7 @@ import dev.isxander.yacl3.api.ButtonOption
import dev.isxander.yacl3.api.ConfigCategory
import dev.isxander.yacl3.api.LabelOption
import dev.isxander.yacl3.api.Option
import dev.isxander.yacl3.api.OptionGroup
import dev.isxander.yacl3.api.YetAnotherConfigLib
import dev.isxander.yacl3.api.controller.ControllerBuilder
import dev.isxander.yacl3.api.controller.DoubleSliderControllerBuilder
@@ -17,7 +18,6 @@ import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit
import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text
import moe.nea.firmament.gui.config.AllConfigsGui
import moe.nea.firmament.gui.config.BooleanHandler
import moe.nea.firmament.gui.config.ClickHandler
import moe.nea.firmament.gui.config.DurationHandler
@@ -36,15 +36,20 @@ import moe.nea.firmament.util.FirmFormatters
@AutoService(FirmamentConfigScreenProvider::class)
class YaclIntegration : FirmamentConfigScreenProvider {
fun buildCategories() =
AllConfigsGui.allConfigs
ManagedConfig.Category.entries
.map(::buildCategory)
private fun buildCategory(managedConfig: ManagedConfig): ConfigCategory {
private fun buildCategory(category: ManagedConfig.Category): ConfigCategory {
return ConfigCategory.createBuilder()
.name(managedConfig.labelText)
.also {
it.rootGroupBuilder()
.options(buildOptions(managedConfig.sortedOptions))
.name(category.labelText)
.also { categoryB ->
category.configs.forEach {
categoryB.group(
OptionGroup.createBuilder()
.name(it.labelText)
.options(buildOptions(it.sortedOptions))
.build())
}
}
.build()
}
@@ -54,7 +59,10 @@ class YaclIntegration : FirmamentConfigScreenProvider {
private fun <T : Any> buildOption(managedOption: ManagedOption<T>): Option<*> {
val handler = managedOption.handler
val binding = Binding.generic(managedOption.default(), managedOption::value, managedOption::value.setter)
val binding = Binding.generic(managedOption.default(),
managedOption::value,
{ managedOption.value = it; managedOption.element.save() })
fun <T> createDefaultBinding(function: (Option<T>) -> ControllerBuilder<T>): Option.Builder<T> {
return Option.createBuilder<T>()
.name(managedOption.labelText)