From 01110c0f0efffdc88239515c00a41d6fbc02b803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Fri, 7 Mar 2014 10:48:39 +0100 Subject: [PATCH] fixed covers from forge multipart not properly blocking cables --- src/main/scala/li/cil/oc/common/block/Cable.scala | 9 +++++---- src/main/scala/li/cil/oc/server/network/Network.scala | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/scala/li/cil/oc/common/block/Cable.scala b/src/main/scala/li/cil/oc/common/block/Cable.scala index 845976437..cb6cc9de6 100644 --- a/src/main/scala/li/cil/oc/common/block/Cable.scala +++ b/src/main/scala/li/cil/oc/common/block/Cable.scala @@ -1,7 +1,7 @@ package li.cil.oc.common.block import codechicken.lib.vec.Cuboid6 -import codechicken.multipart.{JNormalOcclusion, NormalOcclusionTest, TileMultipart} +import codechicken.multipart.{TFacePart, JNormalOcclusion, NormalOcclusionTest, TileMultipart} import cpw.mods.fml.common.Loader import cpw.mods.fml.relauncher.{SideOnly, Side} import java.util @@ -128,13 +128,14 @@ object Cable { private def canConnectFromSide(tileEntity: TileEntity, side: ForgeDirection) = tileEntity match { case host: TileMultipart => - !host.partList.exists { + host.partList.forall { case part: JNormalOcclusion if !part.isInstanceOf[CablePart] => import scala.collection.convert.WrapAsScala._ val ownBounds = Iterable(new Cuboid6(cachedBounds(side.flag))) val otherBounds = part.getOcclusionBoxes - !NormalOcclusionTest(ownBounds, otherBounds) - case _ => false + NormalOcclusionTest(ownBounds, otherBounds) + case part: TFacePart => !part.solid(side.ordinal) || (part.getSlotMask & codechicken.multipart.PartMap.face(side.ordinal).mask) == 0 + case _ => true } case _ => true } diff --git a/src/main/scala/li/cil/oc/server/network/Network.scala b/src/main/scala/li/cil/oc/server/network/Network.scala index 971e4b838..830cccded 100644 --- a/src/main/scala/li/cil/oc/server/network/Network.scala +++ b/src/main/scala/li/cil/oc/server/network/Network.scala @@ -1,7 +1,7 @@ package li.cil.oc.server.network import codechicken.lib.vec.Cuboid6 -import codechicken.multipart.{JNormalOcclusion, NormalOcclusionTest, TileMultipart} +import codechicken.multipart.{TFacePart, JNormalOcclusion, NormalOcclusionTest, TileMultipart} import cpw.mods.fml.common.{Loader, FMLCommonHandler} import cpw.mods.fml.relauncher.Side import li.cil.oc.api.network.{Node => ImmutableNode, SidedEnvironment, Environment, Visibility} @@ -413,13 +413,14 @@ object Network extends api.detail.NetworkAPI { private def canConnectFromSide(tileEntity: TileEntity, side: ForgeDirection) = tileEntity match { case host: TileMultipart => - !host.partList.exists { + host.partList.forall { case part: JNormalOcclusion if !part.isInstanceOf[CablePart] => import scala.collection.convert.WrapAsScala._ val ownBounds = Iterable(new Cuboid6(Cable.cachedBounds(side.flag))) val otherBounds = part.getOcclusionBoxes - !NormalOcclusionTest(ownBounds, otherBounds) - case _ => false + NormalOcclusionTest(ownBounds, otherBounds) + case part: TFacePart => !part.solid(side.ordinal) || (part.getSlotMask & codechicken.multipart.PartMap.face(side.ordinal).mask) == 0 + case _ => true } case _ => true }