From 14259f2251b88dddd3e1632f1c142abb0904b68c Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Mon, 25 Nov 2013 16:57:57 -0500 Subject: [PATCH] Last-minute recalculation for Diversion Transporters --- .../TileEntityLogisticalTransporter.java | 15 ++++++++++- .../transporter/TransporterPathfinder.java | 22 +++------------ .../common/util/TransporterUtils.java | 27 +++++++++++++++++++ 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java index ba7f2558f..1aa1bc0c5 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java @@ -174,7 +174,20 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile } } else { - if(!stack.canInsertToTransporter(stack.getNext(this).getTileEntity(worldObj))) + TileEntity next = stack.getNext(this).getTileEntity(worldObj); + boolean recalculate = false; + + if(!stack.canInsertToTransporter(next)) + { + recalculate = true; + } + + if(!TransporterUtils.checkDiversionLogic(this, next, stack.getSide(this))) + { + recalculate = true; + } + + if(recalculate) { if(!recalculate(stack, null)) { diff --git a/common/mekanism/common/transporter/TransporterPathfinder.java b/common/mekanism/common/transporter/TransporterPathfinder.java index 255fd9fee..920c6d400 100644 --- a/common/mekanism/common/transporter/TransporterPathfinder.java +++ b/common/mekanism/common/transporter/TransporterPathfinder.java @@ -15,6 +15,7 @@ import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.transporter.TransporterPathfinder.Pathfinder.DestChecker; import mekanism.common.transporter.TransporterStack.Path; import mekanism.common.util.InventoryUtils; +import mekanism.common.util.TransporterUtils; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -433,26 +434,9 @@ public final class TransporterPathfinder TileEntity currTile = currentNode.getTileEntity(worldObj); - if(currTile instanceof TileEntityDiversionTransporter) + if(!TransporterUtils.checkDiversionLogic(currTile, tile, i)) { - int mode = ((TileEntityDiversionTransporter)currTile).modes[i]; - boolean redstone = currTile.worldObj.isBlockIndirectlyGettingPowered(currTile.xCoord, currTile.yCoord, currTile.zCoord); - - if((mode == 2 && redstone == true) || (mode == 1 && redstone == false)) - { - continue; - } - } - - if(tile instanceof TileEntityDiversionTransporter) - { - int mode = ((TileEntityDiversionTransporter)tile).modes[ForgeDirection.getOrientation(i).getOpposite().ordinal()]; - boolean redstone = tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, tile.yCoord, tile.zCoord); - - if((mode == 2 && redstone == true) || (mode == 1 && redstone == false)) - { - continue; - } + continue; } if(!openSet.contains(neighbor) || tentativeG < gScore.get(neighbor)) diff --git a/common/mekanism/common/util/TransporterUtils.java b/common/mekanism/common/util/TransporterUtils.java index d6a5fd55f..427709ca0 100644 --- a/common/mekanism/common/util/TransporterUtils.java +++ b/common/mekanism/common/util/TransporterUtils.java @@ -213,6 +213,33 @@ public final class TransporterUtils return colors.get(colors.indexOf(color)+1); } + + public static boolean checkDiversionLogic(TileEntity currTile, TileEntity tile, int side) + { + if(currTile instanceof TileEntityDiversionTransporter) + { + int mode = ((TileEntityDiversionTransporter)currTile).modes[side]; + boolean redstone = currTile.worldObj.isBlockIndirectlyGettingPowered(currTile.xCoord, currTile.yCoord, currTile.zCoord); + + if((mode == 2 && redstone == true) || (mode == 1 && redstone == false)) + { + return false; + } + } + + if(tile instanceof TileEntityDiversionTransporter) + { + int mode = ((TileEntityDiversionTransporter)tile).modes[ForgeDirection.getOrientation(side).getOpposite().ordinal()]; + boolean redstone = tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, tile.yCoord, tile.zCoord); + + if((mode == 2 && redstone == true) || (mode == 1 && redstone == false)) + { + return false; + } + } + + return true; + } public static void drop(TileEntityLogisticalTransporter tileEntity, TransporterStack stack) {