From fb7c2af0d0c7f4ed86a44093bbcae4302eb1d2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 16 Feb 2015 13:16:41 +0100 Subject: [PATCH] Make key bindings support mouse buttons. Which are totally keys. Fixes #914. --- .../scala/li/cil/oc/client/KeyBindings.scala | 36 ++++++++++++++----- .../oc/client/gui/traits/InputBuffer.scala | 6 ++-- .../scala/li/cil/oc/common/block/Item.scala | 5 ++- .../li/cil/oc/common/item/Delegate.scala | 3 +- .../li/cil/oc/common/item/SimpleItem.scala | 3 +- src/main/scala/li/cil/oc/util/Tooltip.scala | 3 +- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/main/scala/li/cil/oc/client/KeyBindings.scala b/src/main/scala/li/cil/oc/client/KeyBindings.scala index 2e4d8265b..1a0940341 100644 --- a/src/main/scala/li/cil/oc/client/KeyBindings.scala +++ b/src/main/scala/li/cil/oc/client/KeyBindings.scala @@ -1,21 +1,41 @@ package li.cil.oc.client import cpw.mods.fml.client.FMLClientHandler +import li.cil.oc.OpenComputers import net.minecraft.client.settings.KeyBinding import org.lwjgl.input.Keyboard +import org.lwjgl.input.Mouse object KeyBindings { - def showExtendedTooltips = Keyboard.isCreated && (try Keyboard.isKeyDown(extendedTooltip.getKeyCode) catch { - case _: Throwable => false // Don't ask me, sometimes things can apparently screw up LWJGL's keyboard handling. - }) + def showExtendedTooltips = isKeybindPressed(extendedTooltip) - def showMaterialCosts = Keyboard.isCreated && (try Keyboard.isKeyDown(materialCosts.getKeyCode) catch { - case _: Throwable => false // Don't ask me, sometimes things can apparently screw up LWJGL's keyboard handling. - }) + def showMaterialCosts = isKeybindPressed(materialCosts) + + def isPastingClipboard = isKeybindPressed(clipboardPaste) + + def getKeybindName(keyBinding: KeyBinding) = try { + if (keyBinding.getKeyCode < 0) + Mouse.getButtonName(keyBinding.getKeyCode + 100) + else + Keyboard.getKeyName(keyBinding.getKeyCode) + } + catch { + case _: Throwable => "???" + } + + def isKeybindPressed(keyBinding: KeyBinding) = try { + if (keyBinding.getKeyCode < 0) + Mouse.isCreated && Mouse.isButtonDown(keyBinding.getKeyCode + 100) + else + Keyboard.isCreated && Keyboard.isKeyDown(keyBinding.getKeyCode) + } + catch { + case _: Throwable => false + } def extendedTooltip = FMLClientHandler.instance.getClient.gameSettings.keyBindSneak - val materialCosts = new KeyBinding("key.materialCosts", Keyboard.KEY_LMENU, "OpenComputers") + val materialCosts = new KeyBinding("key.materialCosts", Keyboard.KEY_LMENU, OpenComputers.Name) - val clipboardPaste = new KeyBinding("key.clipboardPaste", Keyboard.KEY_INSERT, "OpenComputers") + val clipboardPaste = new KeyBinding("key.clipboardPaste", Keyboard.KEY_INSERT, OpenComputers.Name) } diff --git a/src/main/scala/li/cil/oc/client/gui/traits/InputBuffer.scala b/src/main/scala/li/cil/oc/client/gui/traits/InputBuffer.scala index ce51835b1..64e68a7b0 100644 --- a/src/main/scala/li/cil/oc/client/gui/traits/InputBuffer.scala +++ b/src/main/scala/li/cil/oc/client/gui/traits/InputBuffer.scala @@ -82,7 +82,7 @@ trait InputBuffer extends DisplayBuffer { case _ => // Wasn't pressed while viewing the screen. } - if (Keyboard.isKeyDown(KeyBindings.clipboardPaste.getKeyCode) && Keyboard.getEventKeyState) { + if (KeyBindings.clipboardPaste.getKeyCode == code && Keyboard.getEventKeyState) { buffer.clipboard(GuiScreen.getClipboardString, null) } } @@ -94,7 +94,9 @@ trait InputBuffer extends DisplayBuffer { override protected def mouseClicked(x: Int, y: Int, button: Int) { super.mouseClicked(x, y, button) - if (buffer != null && button == 2) { + val isMiddleMouseButton = button == 2 + val isBoundMouseButton = KeyBindings.clipboardPaste.getKeyCode < 0 && button == KeyBindings.clipboardPaste.getKeyCode + 100 + if (buffer != null && (isMiddleMouseButton || isBoundMouseButton)) { if (hasKeyboard) { buffer.clipboard(GuiScreen.getClipboardString, null) } diff --git a/src/main/scala/li/cil/oc/common/block/Item.scala b/src/main/scala/li/cil/oc/common/block/Item.scala index 66666d44c..022012ada 100644 --- a/src/main/scala/li/cil/oc/common/block/Item.scala +++ b/src/main/scala/li/cil/oc/common/block/Item.scala @@ -16,7 +16,6 @@ import net.minecraft.item.ItemStack import net.minecraft.util.StatCollector import net.minecraft.world.World import net.minecraftforge.common.util.ForgeDirection -import org.lwjgl.input class Item(value: Block) extends ItemBlock(value) { setHasSubtypes(true) @@ -29,13 +28,13 @@ class Item(value: Block) extends ItemBlock(value) { case (simple: SimpleBlock, lines: util.List[String]@unchecked) => simple.addInformation(getMetadata(stack.getItemDamage), stack, player, lines, advanced) - if (input.Keyboard.isKeyDown(input.Keyboard.KEY_LMENU)) { + if (KeyBindings.showMaterialCosts) { ItemCosts.addTooltip(stack, lines) } else { lines.add(StatCollector.translateToLocalFormatted( Settings.namespace + "tooltip.MaterialCosts", - input.Keyboard.getKeyName(KeyBindings.materialCosts.getKeyCode))) + KeyBindings.getKeybindName(KeyBindings.materialCosts))) } case _ => } diff --git a/src/main/scala/li/cil/oc/common/item/Delegate.scala b/src/main/scala/li/cil/oc/common/item/Delegate.scala index 1292595f3..e0f1cfddd 100644 --- a/src/main/scala/li/cil/oc/common/item/Delegate.scala +++ b/src/main/scala/li/cil/oc/common/item/Delegate.scala @@ -16,7 +16,6 @@ import net.minecraft.entity.Entity import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.world.World -import org.lwjgl.input trait Delegate { type Icon = net.minecraft.util.IIcon @@ -96,7 +95,7 @@ trait Delegate { else { tooltip.add(Localization.localizeImmediately( Settings.namespace + "tooltip.MaterialCosts", - input.Keyboard.getKeyName(KeyBindings.materialCosts.getKeyCode))) + KeyBindings.getKeybindName(KeyBindings.materialCosts))) } } if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "data")) { diff --git a/src/main/scala/li/cil/oc/common/item/SimpleItem.scala b/src/main/scala/li/cil/oc/common/item/SimpleItem.scala index b04576970..fc451ef94 100644 --- a/src/main/scala/li/cil/oc/common/item/SimpleItem.scala +++ b/src/main/scala/li/cil/oc/common/item/SimpleItem.scala @@ -18,7 +18,6 @@ import net.minecraft.item.ItemStack import net.minecraft.util.WeightedRandomChestContent import net.minecraft.world.World import net.minecraftforge.common.ChestGenHooks -import org.lwjgl.input class SimpleItem extends Item { setCreativeTab(CreativeTab) @@ -49,7 +48,7 @@ class SimpleItem extends Item { else { tt.add(Localization.localizeImmediately( Settings.namespace + "tooltip.MaterialCosts", - input.Keyboard.getKeyName(KeyBindings.materialCosts.getKeyCode))) + KeyBindings.getKeybindName(KeyBindings.materialCosts))) } } if (stack.hasTagCompound && stack.getTagCompound.hasKey(Settings.namespace + "data")) { diff --git a/src/main/scala/li/cil/oc/util/Tooltip.scala b/src/main/scala/li/cil/oc/util/Tooltip.scala index 89dca660e..cadc4d62d 100644 --- a/src/main/scala/li/cil/oc/util/Tooltip.scala +++ b/src/main/scala/li/cil/oc/util/Tooltip.scala @@ -4,7 +4,6 @@ import li.cil.oc.Localization import li.cil.oc.Settings import li.cil.oc.client.KeyBindings import net.minecraft.client.Minecraft -import org.lwjgl.input.Keyboard import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsScala._ @@ -22,7 +21,7 @@ object Tooltip { val shouldShorten = (isSubTooltip || font.getStringWidth(tooltip) > maxWidth) && !KeyBindings.showExtendedTooltips if (shouldShorten) { if (isSubTooltip) Seq.empty[String] - else Seq(Localization.localizeImmediately("tooltip.TooLong", Keyboard.getKeyName(KeyBindings.extendedTooltip.getKeyCode))) + else Seq(Localization.localizeImmediately("tooltip.TooLong", KeyBindings.getKeybindName(KeyBindings.extendedTooltip))) } else tooltip. lines.