Merge branch 'master' into development

Conflicts:
	src/main/java/mekanism/common/tile/TileEntityPortableTank.java
This commit is contained in:
Ben Spiers 2014-12-18 22:56:26 +00:00
commit 6aa84d1388
6 changed files with 64 additions and 6 deletions

View file

@ -170,7 +170,7 @@ public class PartLogisticalTransporter extends PartSidedPipe implements ILogisti
@Override
public boolean isValidAcceptor(TileEntity tile, ForgeDirection side)
{
return TransporterUtils.getConnections(this)[side.ordinal()];
return TransporterUtils.isValidAcceptorOnSide(tile, side);
}
@Override

View file

@ -230,9 +230,9 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
}
@Override
public boolean isValidAcceptor(TileEntity tile, ForgeDirection side)
public boolean isValidAcceptor(TileEntity acceptor, ForgeDirection side)
{
return PipeUtils.getConnections(tile())[side.ordinal()];
return PipeUtils.isValidAcceptorOnSide(acceptor, side);
}
@Override

View file

@ -222,7 +222,7 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork> implement
@Override
public boolean isValidAcceptor(TileEntity acceptor, ForgeDirection side)
{
return CableUtils.getConnections(tile())[side.ordinal()];
return CableUtils.isValidAcceptorOnSide(tile(), acceptor, side);
}
@Override

View file

@ -109,14 +109,26 @@ public final class CableUtils
{
TileEntity tile = coord.getFromSide(side).getTileEntity(tileEntity.getWorldObj());
connectable[side.ordinal()] |= isEnergyAcceptor(tile) && isConnectable(tileEntity, tile, side);
connectable[side.ordinal()] = isValidAcceptorOnSide(tileEntity, tile, side);
connectable[side.ordinal()] |= isCable(tile);
connectable[side.ordinal()] |= isOutputter(tile, side);
}
return connectable;
}
/**
* Gets the adjacent connections to a TileEntity, from a subset of its sides.
* @param cableEntity - TileEntity that's trying to connect
* @param side - side to check
* @return boolean whether the acceptor is valid
*/
public static boolean isValidAcceptorOnSide(TileEntity cableEntity, TileEntity tile, ForgeDirection side)
{
if(isEnergyAcceptor(tile) && isConnectable(cableEntity, tile, side))
return true;
return isOutputter(tile, side);
}
/**
* Gets all the connected cables around a specific tile entity.
* @param tileEntity - center tile entity

View file

@ -38,6 +38,32 @@ public final class PipeUtils
return pipes;
}
public static boolean isValidAcceptorOnSide(TileEntity tile, ForgeDirection side)
{
if(tile instanceof IGridTransmitter || !(tile instanceof IFluidHandler))
return false;
IFluidHandler container = (IFluidHandler)tile;
FluidTankInfo[] infoArray = container.getTankInfo(side.getOpposite());
if(container.canDrain(side.getOpposite(), FluidRegistry.WATER)
|| container.canFill(side.getOpposite(), FluidRegistry.WATER)) //I hesitate to pass null to these.
{
return true;
}
else if(infoArray != null && infoArray.length > 0)
{
for(FluidTankInfo info : infoArray)
{
if(info != null)
{
return true;
}
}
}
return false;
}
/**
* Gets all the adjacent connections to a TileEntity.
* @param tileEntity - center TileEntity

View file

@ -19,6 +19,7 @@ import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.IFluidHandler;
public final class TransporterUtils
{
@ -52,6 +53,25 @@ public final class TransporterUtils
return transporters;
}
public static boolean isValidAcceptorOnSide(TileEntity tile, ForgeDirection side)
{
if(tile instanceof IGridTransmitter || !(tile instanceof IInventory))
return false;
IInventory inventory = (IInventory)tile;
if(inventory.getSizeInventory() > 0)
{
if(!(inventory instanceof ISidedInventory))
return true;
int[] slots = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(side.getOpposite().ordinal());
return (slots != null && slots.length > 0);
}
return false;
}
/**
* Gets all the adjacent connections to a TileEntity.
* @param tileEntity - center TileEntity