From d24907b7abaf41fb285a8802e624d3cf7699e8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 10 Jul 2014 11:25:11 +0200 Subject: [PATCH] Fixed keyboard behavior some. I'm not really happy with this fix, because it adds special behavior for multiblock screens where it shouldn't be, but meh. --- .../cil/oc/common/component/TextBuffer.scala | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala index ee57d313f..9f558c25d 100644 --- a/src/main/scala/li/cil/oc/common/component/TextBuffer.scala +++ b/src/main/scala/li/cil/oc/common/component/TextBuffer.scala @@ -127,7 +127,12 @@ class TextBuffer(val owner: Container) extends ManagedComponent with api.compone @Callback(doc = """function():table -- The list of keyboards attached to the screen.""") def getKeyboards(context: Context, args: Arguments): Array[AnyRef] = { context.pause(0.25) - Array(node.neighbors.filter(_.host.isInstanceOf[Keyboard]).map(_.address).toArray) + node.host match { + case screen: tileentity.Screen => + Array(screen.screens.map(_.node).flatMap(_.neighbors.filter(_.host.isInstanceOf[Keyboard]).map(_.address)).toArray) + case _ => + Array(node.neighbors.filter(_.host.isInstanceOf[Keyboard]).map(_.address).toArray) + } } // ----------------------------------------------------------------------- // @@ -571,15 +576,16 @@ object TextBuffer { } override def keyDown(character: Char, code: Int, player: EntityPlayer) { - owner.node.sendToVisible("keyboard.keyDown", player, Char.box(character), Int.box(code)) + sendToKeyboards("keyboard.keyDown", player, Char.box(character), Int.box(code)) } + override def keyUp(character: Char, code: Int, player: EntityPlayer) { - owner.node.sendToVisible("keyboard.keyUp", player, Char.box(character), Int.box(code)) + sendToKeyboards("keyboard.keyUp", player, Char.box(character), Int.box(code)) } override def clipboard(value: String, player: EntityPlayer) { - owner.node.sendToVisible("keyboard.clipboard", player, value) + sendToKeyboards("keyboard.clipboard", player, value) } override def mouseDown(x: Int, y: Int, button: Int, player: EntityPlayer) { @@ -601,6 +607,15 @@ object TextBuffer { if (Settings.get.inputUsername) owner.node.sendToReachable("computer.checked_signal", player, "scroll", Int.box(x), Int.box(y), Int.box(delta), player.getCommandSenderName) else owner.node.sendToReachable("computer.checked_signal", player, "scroll", Int.box(x), Int.box(y), Int.box(delta)) } + + private def sendToKeyboards(name: String, values: AnyRef*) { + owner.owner match { + case screen: tileentity.Screen => + screen.screens.foreach(_.node.sendToNeighbors(name, values: _*)) + case _ => + owner.node.sendToNeighbors(name, values: _*) + } + } } } \ No newline at end of file