From 72bdd69060c7cc492447ba6c4203cb565903cddc Mon Sep 17 00:00:00 2001 From: Brian Ricketts Date: Mon, 11 Feb 2013 12:03:54 -0600 Subject: [PATCH] Implemented dynamic crane rail connection --- .../common/machine/crane/CraneHelper.java | 28 ++++++++++++++++++- .../machine/crane/ICraneConnectable.java | 4 ++- .../crane/TileEntityCraneController.java | 14 ++++++++++ .../machine/crane/TileEntityCraneRail.java | 7 +++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/minecraft/assemblyline/common/machine/crane/CraneHelper.java b/src/minecraft/assemblyline/common/machine/crane/CraneHelper.java index abf3295f..9c8d72dc 100644 --- a/src/minecraft/assemblyline/common/machine/crane/CraneHelper.java +++ b/src/minecraft/assemblyline/common/machine/crane/CraneHelper.java @@ -20,9 +20,35 @@ public class CraneHelper { if (tileEntity.worldObj.getBlockTileEntity(x, y, z) != null && tileEntity.worldObj.getBlockTileEntity(x, y, z) instanceof ICraneConnectable) { - return true; + return ((ICraneConnectable) tileEntity.worldObj.getBlockTileEntity(x, y, z)).canFrameConnectTo(side); } return false; } + + public static ForgeDirection rotateClockwise(ForgeDirection direction) + { + if (direction == ForgeDirection.NORTH) + return ForgeDirection.EAST; + if (direction == ForgeDirection.EAST) + return ForgeDirection.SOUTH; + if (direction == ForgeDirection.SOUTH) + return ForgeDirection.WEST; + if (direction == ForgeDirection.WEST) + return ForgeDirection.NORTH; + return ForgeDirection.UNKNOWN; + } + + public static ForgeDirection rotateCounterClockwise(ForgeDirection direction) + { + if (direction == ForgeDirection.NORTH) + return ForgeDirection.WEST; + if (direction == ForgeDirection.WEST) + return ForgeDirection.SOUTH; + if (direction == ForgeDirection.SOUTH) + return ForgeDirection.EAST; + if (direction == ForgeDirection.EAST) + return ForgeDirection.NORTH; + return ForgeDirection.UNKNOWN; + } } diff --git a/src/minecraft/assemblyline/common/machine/crane/ICraneConnectable.java b/src/minecraft/assemblyline/common/machine/crane/ICraneConnectable.java index db54acad..eb200bd6 100644 --- a/src/minecraft/assemblyline/common/machine/crane/ICraneConnectable.java +++ b/src/minecraft/assemblyline/common/machine/crane/ICraneConnectable.java @@ -1,6 +1,8 @@ package assemblyline.common.machine.crane; +import net.minecraftforge.common.ForgeDirection; + public interface ICraneConnectable { - + boolean canFrameConnectTo(ForgeDirection side); } diff --git a/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneController.java b/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneController.java index 6ee95552..a1d67f8b 100644 --- a/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneController.java +++ b/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneController.java @@ -1,5 +1,6 @@ package assemblyline.common.machine.crane; +import net.minecraftforge.common.ForgeDirection; import assemblyline.common.machine.TileEntityAssemblyNetwork; public class TileEntityCraneController extends TileEntityAssemblyNetwork implements ICraneConnectable @@ -9,4 +10,17 @@ public class TileEntityCraneController extends TileEntityAssemblyNetwork impleme { } + + @Override + public boolean canFrameConnectTo(ForgeDirection side) + { + ForgeDirection facing = ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); + if (side == facing) + return true; + if (side == CraneHelper.rotateClockwise(facing)) + return true; + if (side == ForgeDirection.UP) + return true; + return false; + } } diff --git a/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneRail.java b/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneRail.java index f5a2d9c8..06e19a05 100644 --- a/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneRail.java +++ b/src/minecraft/assemblyline/common/machine/crane/TileEntityCraneRail.java @@ -1,8 +1,15 @@ package assemblyline.common.machine.crane; +import net.minecraftforge.common.ForgeDirection; import assemblyline.common.machine.TileEntityAssemblyNetwork; public class TileEntityCraneRail extends TileEntityAssemblyNetwork implements ICraneConnectable { + @Override + public boolean canFrameConnectTo(ForgeDirection side) + { + return true; + } + }