Hack Fix YACL unbinding keys

This commit is contained in:
Linnea Gräf
2024-10-18 21:01:13 +02:00
parent c42bfa6151
commit 6100b8c9a0
2 changed files with 62 additions and 31 deletions

View File

@@ -31,9 +31,23 @@ class KeybindingController(
{ option.pendingValue() },
{ option.requestSet(it) },
{ screen.focused = null },
{ screen.focused = button }
{ screen.focused = button },
)
button = object : ControllerWidget<KeybindingController>(this, screen, widgetDimension) {
button = KeybindingWidget(sm, this, screen, widgetDimension)
option.addListener { t, u ->
sm.updateLabel()
}
sm.updateLabel()
return button
}
}
class KeybindingWidget(
val sm: KeyBindingStateManager,
controller: KeybindingController,
screen: YACLScreen,
dimension: Dimension<Int>
) : ControllerWidget<KeybindingController>(controller, screen, dimension) {
override fun getHoveredControlWidth(): Int {
return 130
}
@@ -54,6 +68,11 @@ class KeybindingController(
sm.onLostFocus()
}
override fun setFocused(focused: Boolean) {
super.setFocused(focused)
if (!focused) sm.onLostFocus()
}
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
if (button == 0 && isHovered) {
sm.onClick()
@@ -62,10 +81,3 @@ class KeybindingController(
return super.mouseClicked(mouseX, mouseY, button)
}
}
option.addListener { t, u ->
sm.updateLabel()
}
sm.updateLabel()
return button
}
}

View File

@@ -13,9 +13,12 @@ import dev.isxander.yacl3.api.controller.DoubleSliderControllerBuilder
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder
import dev.isxander.yacl3.api.controller.StringControllerBuilder
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder
import dev.isxander.yacl3.gui.YACLScreen
import dev.isxander.yacl3.gui.tab.ListHolderWidget
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit
import net.minecraft.client.gui.Element
import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text
import moe.nea.firmament.gui.config.BooleanHandler
@@ -121,7 +124,23 @@ class YaclIntegration : FirmamentConfigScreenProvider {
get() = "yacl"
override fun open(parent: Screen?): Screen {
return buildConfig().generateScreen(parent)
return object : YACLScreen(buildConfig(), parent) {
override fun setFocused(focused: Element?) {
if (this.focused is KeybindingWidget &&
focused is ListHolderWidget<*>
) {
return
}
super.setFocused(focused)
}
override fun shouldCloseOnEsc(): Boolean {
if (focused is KeybindingWidget) {
return false
}
return super.shouldCloseOnEsc()
}
}
}
}