More logic
This commit is contained in:
parent
516dfb9ffb
commit
5c3943bd5d
7 changed files with 49 additions and 118 deletions
|
@ -22,7 +22,7 @@ public interface ILogisticalTransporter
|
|||
|
||||
public TileEntity getTile();
|
||||
|
||||
public boolean canInsert(ForgeDirection side);
|
||||
boolean canConnect(TileEntity tileEntity, ForgeDirection side);
|
||||
|
||||
public boolean canOutput(ForgeDirection side);
|
||||
public boolean canConnectMutual(TileEntity tileEntity, ForgeDirection side);
|
||||
}
|
||||
|
|
|
@ -130,28 +130,9 @@ public class PartDiversionTransporter extends PartLogisticalTransporter
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canInsert(ForgeDirection side)
|
||||
public boolean canConnect(TileEntity tileEntity, ForgeDirection side)
|
||||
{
|
||||
if(!super.canInsert(side))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int mode = modes[side.ordinal()];
|
||||
boolean redstone = world().isBlockIndirectlyGettingPowered(x(), y(), z());
|
||||
|
||||
if((mode == 2 && redstone == true) || (mode == 1 && redstone == false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canOutput(ForgeDirection side)
|
||||
{
|
||||
if(!super.canOutput(side))
|
||||
if(!super.canConnect(tileEntity, side))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ public class PartLogisticalTransporter extends PartSidedPipe implements ILogisti
|
|||
{
|
||||
ILogisticalTransporter transporter = (ILogisticalTransporter)tileEntity;
|
||||
|
||||
if(getColor() == null || transporter.getColor() == null || getColor() == transporter.getColor())
|
||||
if(canConnectMutual(tileEntity, side) && (getColor() == null || transporter.getColor() == null || getColor() == transporter.getColor()))
|
||||
{
|
||||
connections |= 1 << side.ordinal();
|
||||
}
|
||||
|
@ -304,11 +304,6 @@ public class PartLogisticalTransporter extends PartSidedPipe implements ILogisti
|
|||
recalculate = true;
|
||||
}
|
||||
|
||||
if(!TransporterUtils.checkDiversionLogic(tile(), next, stack.getSide(this)))
|
||||
{
|
||||
recalculate = true;
|
||||
}
|
||||
|
||||
if(recalculate)
|
||||
{
|
||||
if(!recalculate(stack, null))
|
||||
|
@ -695,14 +690,27 @@ public class PartLogisticalTransporter extends PartSidedPipe implements ILogisti
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canInsert(ForgeDirection side)
|
||||
public boolean canConnect(TileEntity tileEntity, ForgeDirection side)
|
||||
{
|
||||
return getConnectionType(side) == ConnectionType.PUSH || getConnectionType(side) == ConnectionType.NORMAL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canOutput(ForgeDirection side)
|
||||
public boolean canConnectMutual(TileEntity tileEntity, ForgeDirection side)
|
||||
{
|
||||
return getConnectionType(side) == ConnectionType.PUSH || getConnectionType(side) == ConnectionType.NORMAL;
|
||||
if(!canConnect(tileEntity, side))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(tileEntity instanceof ILogisticalTransporter)
|
||||
{
|
||||
if(!((ILogisticalTransporter)tileEntity).canConnect(tile(), side.getOpposite()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -186,11 +186,6 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
recalculate = true;
|
||||
}
|
||||
|
||||
if(!TransporterUtils.checkDiversionLogic(this, next, stack.getSide(this)))
|
||||
{
|
||||
recalculate = true;
|
||||
}
|
||||
|
||||
if(recalculate)
|
||||
{
|
||||
if(!recalculate(stack, null))
|
||||
|
@ -575,13 +570,13 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canInsert(ForgeDirection side)
|
||||
public boolean canConnect(TileEntity tileEntity, ForgeDirection side)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canOutput(ForgeDirection side)
|
||||
public boolean canConnectMutual(TileEntity tileEntity, ForgeDirection side)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@ import mekanism.common.tileentity.TileEntityLogisticalSorter;
|
|||
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;
|
||||
|
@ -64,14 +63,11 @@ public final class TransporterPathfinder
|
|||
TileEntity tile = pointer.getFromSide(side).getTileEntity(worldObj);
|
||||
|
||||
if(transportStack.canInsertToTransporter(tile, side) && !currentPath.contains(Coord4D.get(tile)))
|
||||
{
|
||||
if(TransporterUtils.checkDiversionLogic(pointer.getTileEntity(worldObj), tile, side.ordinal()))
|
||||
{
|
||||
loop(Coord4D.get(tile), (ArrayList<Coord4D>)currentPath.clone(), dist);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!found)
|
||||
{
|
||||
|
@ -199,6 +195,16 @@ public final class TransporterPathfinder
|
|||
|
||||
if(tile instanceof IInventory)
|
||||
{
|
||||
if(pointer.getTileEntity(worldObj) instanceof ILogisticalTransporter)
|
||||
{
|
||||
ILogisticalTransporter trans = (ILogisticalTransporter)pointer.getTileEntity(worldObj);
|
||||
|
||||
if(!trans.canConnectMutual(tile, side))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
ItemStack stack = TransporterManager.getPredictedInsert(tile, transportStack.color, transportStack.itemStack, side.ordinal());
|
||||
|
||||
if(TransporterManager.didEmit(transportStack.itemStack, stack))
|
||||
|
@ -436,11 +442,6 @@ public final class TransporterPathfinder
|
|||
|
||||
TileEntity currTile = currentNode.getTileEntity(worldObj);
|
||||
|
||||
if(!TransporterUtils.checkDiversionLogic(currTile, tile, i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!openSet.contains(neighbor) || tentativeG < gScore.get(neighbor))
|
||||
{
|
||||
navMap.put(neighbor, currentNode);
|
||||
|
|
|
@ -279,19 +279,11 @@ public class TransporterStack
|
|||
TileEntity from = Coord4D.get(tileEntity).getFromSide(side.getOpposite()).getTileEntity(tileEntity.worldObj);
|
||||
ILogisticalTransporter transporter = (ILogisticalTransporter)tileEntity;
|
||||
|
||||
if(!transporter.canInsert(side.getOpposite()))
|
||||
if(!transporter.canConnectMutual(from, side.getOpposite()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(from instanceof ILogisticalTransporter)
|
||||
{
|
||||
if(!((ILogisticalTransporter)from).canOutput(side))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return transporter.getColor() == color || transporter.getColor() == null;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@ package mekanism.common.util;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import mekanism.api.EnumColor;
|
||||
import mekanism.api.Coord4D;
|
||||
import mekanism.api.EnumColor;
|
||||
import mekanism.api.transmitters.IGridTransmitter;
|
||||
import mekanism.common.ILogisticalTransporter;
|
||||
import mekanism.common.tileentity.TileEntityDiversionTransporter;
|
||||
|
@ -121,31 +121,12 @@ public final class TransporterUtils
|
|||
{
|
||||
int side = Arrays.asList(connectedTransporters).indexOf(tile);
|
||||
|
||||
if(tileEntity instanceof TileEntityDiversionTransporter)
|
||||
if(tileEntity.canConnectMutual(tile, ForgeDirection.getOrientation(side)))
|
||||
{
|
||||
int mode = ((TileEntityDiversionTransporter)tileEntity).modes[side];
|
||||
boolean redstone = tileEntity.getTile().worldObj.isBlockIndirectlyGettingPowered(tileEntity.getTile().xCoord, tileEntity.getTile().yCoord, tileEntity.getTile().zCoord);
|
||||
|
||||
if((mode == 2 && redstone == true) || (mode == 1 && redstone == false))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(tile instanceof TileEntityDiversionTransporter)
|
||||
{
|
||||
int mode = ((TileEntityDiversionTransporter)tile).modes[ForgeDirection.VALID_DIRECTIONS[side].getOpposite().ordinal()];
|
||||
boolean redstone = tile.worldObj.isBlockIndirectlyGettingPowered(tile.xCoord, tile.yCoord, tile.zCoord);
|
||||
|
||||
if((mode == 2 && redstone == true) || (mode == 1 && redstone == false))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
connectable[side] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return connectable;
|
||||
}
|
||||
|
@ -210,33 +191,6 @@ 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(ILogisticalTransporter tileEntity, TransporterStack stack)
|
||||
{
|
||||
float[] pos = null;
|
||||
|
|
Loading…
Reference in a new issue