fix: MoulConfig options sometimes not saving

This commit is contained in:
Linnea Gräf
2024-11-17 17:45:29 +01:00
parent 7c4205a07c
commit e00c21b2ad
3 changed files with 48 additions and 42 deletions

View File

@@ -122,17 +122,16 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
return GuiOptionEditorBoolean(this, -1, configObject)
}
override fun get(): Any {
return managedOption.value
override fun toT(any: Any?): Boolean? {
return any as Boolean
}
override fun getType(): Type {
return Boolean::class.java
}
override fun set(value: Any?): Boolean {
managedOption.value = value as Boolean
return true
override fun fromT(t: Boolean): Any {
return t
}
}
}
@@ -142,17 +141,16 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
return GuiOptionEditorText(this)
}
override fun get(): Any {
return managedOption.value
}
override fun getType(): Type {
return String::class.java
}
override fun set(value: Any?): Boolean {
managedOption.value = value as String
return true
override fun fromT(t: String): Any {
return t
}
override fun toT(any: Any?): String? {
return any as String
}
}
}
@@ -162,18 +160,17 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
return GuiOptionEditorButton(this, -1, "Click", configObject)
}
override fun get(): Any {
override fun toT(any: Any?): Unit? {
return null
}
override fun fromT(t: Unit): Any {
return Runnable { handler.runnable() }
}
override fun getType(): Type {
return Runnable::class.java
}
override fun set(value: Any?): Boolean {
ErrorUtil.softError("Trying to set a buttons data")
return false
}
}
}
register(HudMetaHandler::class.java) { handler, option, categoryAccordionId, configObject ->
@@ -182,20 +179,18 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
return GuiOptionEditorButton(this, -1, "Edit HUD", configObject)
}
override fun get(): Any {
override fun fromT(t: HudMeta): Any {
return Runnable {
handler.openEditor(option, MC.screen!!)
}
}
override fun getType(): Type {
return Runnable::class.java
}
override fun set(value: Any?): Boolean {
ErrorUtil.softError("Trying to assign to a hud meta")
return false
}
override fun toT(any: Any?): HudMeta? = null
}
}
register(DurationHandler::class.java) { handler, option, categoryAccordionId, configObject ->
@@ -213,7 +208,8 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
)
}
override fun get(): Any {
override fun toT(any: Any?): Duration? = null
override fun fromT(t: Duration): Any {
ErrorUtil.softError("Getting on a slider component")
return Unit
}
@@ -222,10 +218,6 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
return Nothing::class.java
}
override fun set(value: Any?): Boolean {
ErrorUtil.softError("Setting on a slider component")
return false
}
}
}
register(IntegerHandler::class.java) { handler, option, categoryAccordionId, configObject ->
@@ -243,7 +235,8 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
)
}
override fun get(): Any {
override fun toT(any: Any?): Int? = null
override fun fromT(t: Int): Any {
ErrorUtil.softError("Getting on a slider component")
return Unit
}
@@ -251,11 +244,6 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
override fun getType(): Type {
return Nothing::class.java
}
override fun set(value: Any?): Boolean {
ErrorUtil.softError("Setting on a slider component")
return false
}
}
}
register(KeyBindingHandler::class.java) { handler, option, categoryAccordionId, configObject ->
@@ -269,18 +257,17 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
}
}
override fun get(): Any {
ErrorUtil.softError("Getting on a keybinding")
return Unit
override fun toT(any: Any?): SavedKeyBinding? {
return null
}
override fun getType(): Type {
return Nothing::class.java
}
override fun set(value: Any?): Boolean {
ErrorUtil.softError("Setting on a keybinding")
return false
override fun fromT(t: SavedKeyBinding): Any {
ErrorUtil.softError("Cannot get a keybinding editor")
return Unit
}
}
}

View File

@@ -2,6 +2,7 @@ package moe.nea.firmament.compat.moulconfig
import io.github.notenoughupdates.moulconfig.Config
import moe.nea.firmament.gui.config.ManagedOption
import moe.nea.firmament.util.ErrorUtil
abstract class ProcessedEditableOptionFirm<T : Any>(
val managedOption: ManagedOption<T>,
@@ -21,6 +22,22 @@ abstract class ProcessedEditableOptionFirm<T : Any>(
return managedOption.labelDescription.string
}
abstract fun fromT(t: T): Any
abstract fun toT(any: Any?): T?
final override fun get(): Any {
return fromT(managedOption.value)
}
final override fun set(p0: Any?): Boolean {
managedOption.value = toT(p0) ?: run {
ErrorUtil.softError("Failed to set value p0 in $this")
return false
}
managedConfig.save()
return true
}
override fun explicitNotifyChange() {
managedConfig.save()
}

View File

@@ -6,7 +6,6 @@ import io.github.notenoughupdates.moulconfig.deps.libninepatch.NinePatch
import io.github.notenoughupdates.moulconfig.gui.GuiImmediateContext
import io.github.notenoughupdates.moulconfig.gui.KeyboardEvent
import io.github.notenoughupdates.moulconfig.gui.component.TextComponent
import org.lwjgl.glfw.GLFW
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.decodeFromJsonElement
@@ -34,7 +33,10 @@ class KeyBindingHandler(val name: String, val managedConfig: ManagedConfig) :
lateinit var button: FirmButtonComponent
val sm = KeyBindingStateManager(
{ opt.value },
{ opt.value = it },
{
opt.value = it
opt.element.save()
},
{ button.blur() },
{ button.requestFocus() }
)