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,37 +31,9 @@ class KeybindingController(
{ option.pendingValue() }, { option.pendingValue() },
{ option.requestSet(it) }, { option.requestSet(it) },
{ screen.focused = null }, { screen.focused = null },
{ screen.focused = button } { screen.focused = button },
) )
button = object : ControllerWidget<KeybindingController>(this, screen, widgetDimension) { button = KeybindingWidget(sm, this, screen, widgetDimension)
override fun getHoveredControlWidth(): Int {
return 130
}
override fun getValueText(): Text {
return sm.label
}
override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, true)
}
override fun keyReleased(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, false)
}
override fun unfocus() {
sm.onLostFocus()
}
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
if (button == 0 && isHovered) {
sm.onClick()
return true
}
return super.mouseClicked(mouseX, mouseY, button)
}
}
option.addListener { t, u -> option.addListener { t, u ->
sm.updateLabel() sm.updateLabel()
} }
@@ -69,3 +41,43 @@ class KeybindingController(
return button 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
}
override fun getValueText(): Text {
return sm.label
}
override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, true)
}
override fun keyReleased(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, false)
}
override fun unfocus() {
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()
return true
}
return super.mouseClicked(mouseX, mouseY, 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.IntegerSliderControllerBuilder
import dev.isxander.yacl3.api.controller.StringControllerBuilder import dev.isxander.yacl3.api.controller.StringControllerBuilder
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder 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
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit import kotlin.time.DurationUnit
import net.minecraft.client.gui.Element
import net.minecraft.client.gui.screen.Screen import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text import net.minecraft.text.Text
import moe.nea.firmament.gui.config.BooleanHandler import moe.nea.firmament.gui.config.BooleanHandler
@@ -121,7 +124,23 @@ class YaclIntegration : FirmamentConfigScreenProvider {
get() = "yacl" get() = "yacl"
override fun open(parent: Screen?): Screen { 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()
}
}
} }
} }