From 42f5fb7c6b75f00d85745680fc3bb6e5b65f5fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 29 Nov 2014 21:42:11 +0100 Subject: [PATCH] Fixed bounding box weirdness for blocks with stateful bounds (keyboards and cables, most notably). Closes #699. --- src/main/scala/li/cil/oc/common/block/Keyboard.scala | 2 +- src/main/scala/li/cil/oc/common/block/SimpleBlock.scala | 7 ++++++- src/main/scala/li/cil/oc/server/component/DebugCard.scala | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/block/Keyboard.scala b/src/main/scala/li/cil/oc/common/block/Keyboard.scala index dc4d67306..85f51fe00 100644 --- a/src/main/scala/li/cil/oc/common/block/Keyboard.scala +++ b/src/main/scala/li/cil/oc/common/block/Keyboard.scala @@ -57,7 +57,7 @@ class Keyboard extends SimpleBlock with traits.SpecialBlock { }) } - override def doSetBlockBoundsBasedOnState(world: IBlockAccess, x: Int, y: Int, z: Int) = + override protected def doSetBlockBoundsBasedOnState(world: IBlockAccess, x: Int, y: Int, z: Int) = world.getTileEntity(x, y, z) match { case keyboard: tileentity.Keyboard => setBlockBounds(keyboard.pitch, keyboard.yaw) case _ => diff --git a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala index 107f15965..34b4e5459 100644 --- a/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala +++ b/src/main/scala/li/cil/oc/common/block/SimpleBlock.scala @@ -193,7 +193,7 @@ class SimpleBlock(material: Material = Material.iron) extends Block(material) { protected def doSetBlockBoundsBasedOnState(world: IBlockAccess, x: Int, y: Int, z: Int): Unit = super.setBlockBoundsBasedOnState(world, x, y, z) - def setBlockBounds(bounds: AxisAlignedBB) { + protected def setBlockBounds(bounds: AxisAlignedBB) { setBlockBounds( bounds.minX.toFloat, bounds.minY.toFloat, @@ -207,6 +207,11 @@ class SimpleBlock(material: Material = Material.iron) extends Block(material) { override def collisionRayTrace(world: World, x: Int, y: Int, z: Int, origin: Vec3, direction: Vec3) = this.synchronized(intersect(world, x, y, z, origin, direction)) + override def getCollisionBoundingBoxFromPool(world: World, x: Int, y: Int, z: Int) = this.synchronized { + doSetBlockBoundsBasedOnState(world, x, y, z) + super.getCollisionBoundingBoxFromPool(world, x, y, z) + } + protected def intersect(world: World, x: Int, y: Int, z: Int, origin: Vec3, direction: Vec3) = super.collisionRayTrace(world, x, y, z, origin, direction) diff --git a/src/main/scala/li/cil/oc/server/component/DebugCard.scala b/src/main/scala/li/cil/oc/server/component/DebugCard.scala index e38408dc3..f4e0ecff4 100644 --- a/src/main/scala/li/cil/oc/server/component/DebugCard.scala +++ b/src/main/scala/li/cil/oc/server/component/DebugCard.scala @@ -97,7 +97,7 @@ object DebugCard { } } - @Callback(doc = """function():userdata -- Get the container's world object.""") + @Callback(doc = """function():userdata -- Get the player's world object.""") def getWorld(context: Context, args: Arguments): Array[AnyRef] = { withPlayer(player => result(new DebugCard.WorldValue(player.getEntityWorld))) }