From 93b082ee559eb9032846e2d811cf82f74856741b Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Mon, 22 Mar 2021 17:50:48 -0400 Subject: [PATCH] Fix REI not receiving keyboard shortcuts while focused --- .../phycon/plugin/rei/PhyConPlugin.kt | 17 ++++++++++++++++- plugin/rei/src/main/resources/fabric.mod.json | 6 ++++++ .../phycon/block/terminal/TerminalScreen.kt | 18 ++++++++++++++++++ .../block/terminal/TerminalViewController.kt | 3 ++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt index 41b502d..2d36745 100644 --- a/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt +++ b/plugin/rei/src/main/kotlin/net/shadowfacts/phycon/plugin/rei/PhyConPlugin.kt @@ -3,7 +3,9 @@ package net.shadowfacts.phycon.plugin.rei import me.shedaniel.math.Rectangle import me.shedaniel.rei.api.BaseBoundsHandler import me.shedaniel.rei.api.DisplayHelper +import me.shedaniel.rei.api.REIHelper import me.shedaniel.rei.api.plugins.REIPluginV0 +import net.fabricmc.api.ClientModInitializer import net.minecraft.client.MinecraftClient import net.minecraft.util.Identifier import net.shadowfacts.phycon.block.terminal.TerminalScreen @@ -11,9 +13,22 @@ import net.shadowfacts.phycon.block.terminal.TerminalScreen /** * @author shadowfacts */ -object PhyConPlugin: REIPluginV0 { +object PhyConPlugin: ClientModInitializer, REIPluginV0 { const val MODID = "phycon_rei" + override fun onInitializeClient() { + TerminalScreen.registerClickHandler { mouseX, mouseY, button -> + REIHelper.getInstance().searchTextField?.also { + if (it.bounds.contains(mouseX, mouseY)) { + this.terminalVC.searchField.resignFirstResponder() + } else { + this.terminalVC.searchField.becomeFirstResponder() + } + } + null + } + } + override fun getPluginIdentifier() = Identifier(MODID, "rei_plugin") override fun registerBounds(helper: DisplayHelper) { diff --git a/plugin/rei/src/main/resources/fabric.mod.json b/plugin/rei/src/main/resources/fabric.mod.json index 476b6c7..a93fa92 100644 --- a/plugin/rei/src/main/resources/fabric.mod.json +++ b/plugin/rei/src/main/resources/fabric.mod.json @@ -14,6 +14,12 @@ "license": "LGPL-3.0", "environment": "client", "entrypoints": { + "client": [ + { + "adapter": "kotlin", + "value": "net.shadowfacts.phycon.plugin.rei.PhyConPlugin" + } + ], "rei_plugins": [ { "adapter": "kotlin", diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalScreen.kt b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalScreen.kt index dcc6a0e..3011d72 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalScreen.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalScreen.kt @@ -24,6 +24,7 @@ import net.shadowfacts.phycon.networking.C2STerminalUpdateDisplayedItems import net.shadowfacts.phycon.util.SortMode import java.math.RoundingMode import java.text.DecimalFormat +import java.util.LinkedList import kotlin.math.ceil import kotlin.math.min @@ -34,6 +35,12 @@ class TerminalScreen(handler: TerminalScreenHandler, playerInv: PlayerInventory, companion object { private val BACKGROUND = Identifier(PhysicalConnectivity.MODID, "textures/gui/terminal.png") + + private val clickHandlers = LinkedList Boolean?>() + + fun registerClickHandler(handler: TerminalScreen.(Double, Double, Int) -> Boolean?) { + clickHandlers.add(handler) + } } val backgroundWidth: Int @@ -145,6 +152,17 @@ class TerminalScreen(handler: TerminalScreenHandler, playerInv: PlayerInventory, } } + override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean { + for (handler in clickHandlers) { + val res = handler(mouseX, mouseY, button) + if (res != null) { + return res + } + } + + return super.mouseClicked(mouseX, mouseY, button) + } + override fun onMouseClick(slot: Slot?, invSlot: Int, clickData: Int, type: SlotActionType?) { super.onMouseClick(slot, invSlot, clickData, type) diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalViewController.kt b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalViewController.kt index 831c0f7..dbb03a7 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalViewController.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/terminal/TerminalViewController.kt @@ -4,6 +4,7 @@ import net.minecraft.text.TranslatableText import net.minecraft.util.math.MathHelper import net.shadowfacts.cacao.geometry.Point import net.shadowfacts.cacao.util.Color +import net.shadowfacts.cacao.util.MouseButton import net.shadowfacts.cacao.view.Label import net.shadowfacts.cacao.view.View import net.shadowfacts.cacao.view.textfield.TextField @@ -136,7 +137,7 @@ class TerminalViewController( } class TerminalSearchField: TextField("") { - override fun resignFirstResponder() { + override fun mouseClickedOutside(point: Point, mouseButton: MouseButton) { // no-op } }