Last-minute recalculation for Diversion Transporters

This commit is contained in:
Aidan Brady 2013-11-25 16:57:57 -05:00
parent 028c6f8aea
commit 14259f2251
3 changed files with 44 additions and 20 deletions

View file

@ -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))
{

View file

@ -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))

View file

@ -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)
{