mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-14 17:56:34 -04:00
fixed keyboard detection on multiblock screens; fixed screen gui not being centered
This commit is contained in:
parent
19c2f7db23
commit
40755b9279
@ -14,32 +14,35 @@ object PacketSender {
|
||||
pb.sendToServer()
|
||||
}
|
||||
|
||||
def sendKeyDown[T <: Buffer](t: T, char: Char, code: Int) = if (t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.KeyDown)
|
||||
def sendKeyDown[T <: Buffer](t: T, char: Char, code: Int) =
|
||||
if (t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.KeyDown)
|
||||
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeChar(char)
|
||||
pb.writeInt(code)
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeChar(char)
|
||||
pb.writeInt(code)
|
||||
|
||||
pb.sendToServer()
|
||||
}
|
||||
pb.sendToServer()
|
||||
}
|
||||
|
||||
def sendKeyUp[T <: Buffer](t: T, char: Char, code: Int) = if (t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.KeyUp)
|
||||
def sendKeyUp[T <: Buffer](t: T, char: Char, code: Int) =
|
||||
if (t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.KeyUp)
|
||||
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeChar(char)
|
||||
pb.writeInt(code)
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeChar(char)
|
||||
pb.writeInt(code)
|
||||
|
||||
pb.sendToServer()
|
||||
}
|
||||
pb.sendToServer()
|
||||
}
|
||||
|
||||
def sendClipboard[T <: Buffer](t: T, value: String) = if (!value.isEmpty && t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.Clipboard)
|
||||
def sendClipboard[T <: Buffer](t: T, value: String) =
|
||||
if (!value.isEmpty && t.hasKeyboard) {
|
||||
val pb = new PacketBuilder(PacketType.Clipboard)
|
||||
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeUTF(value.substring(0, value.length min 1024))
|
||||
pb.writeTileEntity(t)
|
||||
pb.writeUTF(value.substring(0, value.length min 1024))
|
||||
|
||||
pb.sendToServer()
|
||||
}
|
||||
pb.sendToServer()
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ trait Buffer extends GuiScreen {
|
||||
|
||||
private val pressedKeys = mutable.Map.empty[Int, Char]
|
||||
|
||||
private var currentWidth, currentHeight = -1.0
|
||||
protected var currentWidth, currentHeight = -1
|
||||
|
||||
private var shouldRecompileDisplayLists = true
|
||||
|
||||
@ -34,6 +34,7 @@ trait Buffer extends GuiScreen {
|
||||
BufferRenderer.init(Minecraft.getMinecraft.renderEngine)
|
||||
Keyboard.enableRepeatEvents(true)
|
||||
buffer.owner.currentGui = Some(this)
|
||||
recompileDisplayLists()
|
||||
}
|
||||
|
||||
override def onGuiClosed() = {
|
||||
@ -47,12 +48,11 @@ trait Buffer extends GuiScreen {
|
||||
|
||||
protected def drawBufferLayer() {
|
||||
if (shouldRecompileDisplayLists) {
|
||||
shouldRecompileDisplayLists = false
|
||||
val (w, h) = buffer.resolution
|
||||
if (w != currentWidth || h != currentHeight) {
|
||||
currentWidth = w
|
||||
currentHeight = h
|
||||
scale = changeSize(currentWidth, currentHeight)
|
||||
}
|
||||
currentWidth = w
|
||||
currentHeight = h
|
||||
scale = changeSize(currentWidth, currentHeight)
|
||||
BufferRenderer.compileText(scale, buffer.lines, buffer.color, buffer.depth)
|
||||
}
|
||||
GL11.glPushMatrix()
|
||||
|
@ -1,8 +1,8 @@
|
||||
package li.cil.oc.common
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler
|
||||
import cpw.mods.fml.common.network.PacketDispatcher
|
||||
import cpw.mods.fml.common.network.Player
|
||||
import cpw.mods.fml.common.{ObfuscationReflectionHelper, FMLCommonHandler}
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.DataOutputStream
|
||||
import li.cil.oc.common.tileentity.TileEntity
|
||||
@ -45,7 +45,8 @@ class PacketBuilder(packetType: PacketType.Value, private val stream: ByteArrayO
|
||||
val server = FMLCommonHandler.instance.getMinecraftServerInstance
|
||||
val manager = server.getConfigurationManager
|
||||
for (player <- manager.playerEntityList.map(_.asInstanceOf[EntityPlayerMP]) if player.dimension == dimension) {
|
||||
val playerSpecificRange = range min ((manager.getViewDistance min PacketBuilder.tryGetPlayerRenderDistance(player)) * 16)
|
||||
val playerRenderDistance = ObfuscationReflectionHelper.getPrivateValue(classOf[EntityPlayerMP], player, "renderDistance").asInstanceOf[Integer]
|
||||
val playerSpecificRange = range min ((manager.getViewDistance min playerRenderDistance) * 16)
|
||||
if (player.getDistanceSq(x, y, z) < playerSpecificRange * playerSpecificRange) {
|
||||
sendToPlayer(player.asInstanceOf[Player])
|
||||
}
|
||||
@ -64,27 +65,3 @@ class PacketBuilder(packetType: PacketType.Value, private val stream: ByteArrayO
|
||||
p
|
||||
}
|
||||
}
|
||||
|
||||
object PacketBuilder {
|
||||
private val renderDistanceField = try {
|
||||
val field = classOf[EntityPlayerMP].getDeclaredField("renderDistance")
|
||||
field.setAccessible(true)
|
||||
Some(field)
|
||||
}
|
||||
catch {
|
||||
case _: Throwable => None
|
||||
}
|
||||
|
||||
private def tryGetPlayerRenderDistance(player: EntityPlayerMP): Int = {
|
||||
try {
|
||||
renderDistanceField match {
|
||||
case Some(field) => return field.get(player).asInstanceOf[Integer]
|
||||
case _ =>
|
||||
}
|
||||
}
|
||||
catch {
|
||||
case _: Throwable =>
|
||||
}
|
||||
Int.MaxValue
|
||||
}
|
||||
}
|
@ -9,7 +9,6 @@ import net.minecraft.inventory.IInventory
|
||||
import net.minecraft.inventory.Slot
|
||||
import net.minecraft.item.ItemStack
|
||||
|
||||
/** Utility for inventory containers providing basic re-usable functionality. */
|
||||
abstract class Player(protected val playerInventory: InventoryPlayer, val otherInventory: IInventory) extends Container {
|
||||
/** Number of player inventory slots to display horizontally. */
|
||||
protected val playerInventorySizeX = InventoryPlayer.getHotbarSize
|
||||
|
@ -41,11 +41,11 @@ class Screen(var tier: Int) extends Buffer with SidedEnvironment with Rotatable
|
||||
|
||||
def sidedNode(side: ForgeDirection) = if (canConnect(side)) node else null
|
||||
|
||||
override def hasKeyboard = ForgeDirection.VALID_DIRECTIONS.
|
||||
map(side => (side, world.getBlockTileEntity(x + side.offsetX, y + side.offsetY, z + side.offsetZ))).
|
||||
override def hasKeyboard = screens.exists(screen => ForgeDirection.VALID_DIRECTIONS.
|
||||
map(side => (side, world.getBlockTileEntity(screen.x + side.offsetX, screen.y + side.offsetY, screen.z + side.offsetZ))).
|
||||
collect {
|
||||
case (side, keyboard: Keyboard) if keyboard.facing == side => keyboard
|
||||
}.nonEmpty
|
||||
}.nonEmpty)
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user