Fix canTransferGas()

Tested and working.
This commit is contained in:
micdoodle8 2013-08-25 01:34:45 -04:00
parent 0951acf142
commit 8e667efd7b
6 changed files with 60 additions and 24 deletions

View file

@ -1,7 +1,6 @@
package mekanism.api; package mekanism.api;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -9,7 +8,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
@ -108,7 +106,7 @@ public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)transmitter).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)transmitter).worldObj);
if(TransmissionType.checkTransmissionType(nodeTile, getTransmissionType())) if(TransmissionType.checkTransmissionType(nodeTile, getTransmissionType(), (TileEntity) transmitter))
{ {
((ITransmitter<N>)nodeTile).removeFromNetwork(); ((ITransmitter<N>)nodeTile).removeFromNetwork();
newTransporters.add((ITransmitter<N>)nodeTile); newTransporters.add((ITransmitter<N>)nodeTile);
@ -147,7 +145,10 @@ public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
if(ignore != null) if(ignore != null)
{ {
toIgnore = Arrays.asList(ignore); for (int i = 0; i < ignore.length; i++)
{
this.toIgnore.add(ignore[i]);
}
} }
} }
@ -157,6 +158,10 @@ public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
{ {
iterated.add(location); iterated.add(location);
} }
else
{
toIgnore.add(location);
}
for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) for(ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS)
{ {
@ -166,7 +171,7 @@ public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
{ {
TileEntity tileEntity = obj.getTileEntity(worldObj); TileEntity tileEntity = obj.getTileEntity(worldObj);
if(TransmissionType.checkTransmissionType(tileEntity, transmissionType)) if(TransmissionType.checkTransmissionType(tileEntity, transmissionType, location.getTileEntity(worldObj)))
{ {
loopAll(obj); loopAll(obj);
} }

View file

@ -179,7 +179,7 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
{ {
TileEntity connectedBlockA = connectedBlocks[countOne]; TileEntity connectedBlockA = connectedBlocks[countOne];
if(TransmissionType.checkTransmissionType(connectedBlockA, TransmissionType.GAS) && !dealtWith[countOne]) if(TransmissionType.checkTransmissionType(connectedBlockA, TransmissionType.GAS, (TileEntity) splitPoint) && !dealtWith[countOne])
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, getTransmissionType(), Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint)); NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, getTransmissionType(), Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint));
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
@ -188,7 +188,7 @@ public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
{ {
TileEntity connectedBlockB = connectedBlocks[countTwo]; TileEntity connectedBlockB = connectedBlocks[countTwo];
if(TransmissionType.checkTransmissionType(connectedBlockB, TransmissionType.GAS) && !dealtWith[countTwo]) if(TransmissionType.checkTransmissionType(connectedBlockB, TransmissionType.GAS, (TileEntity) splitPoint) && !dealtWith[countTwo])
{ {
if(partNetwork.contains(Object3D.get(connectedBlockB))) if(partNetwork.contains(Object3D.get(connectedBlockB)))
{ {

View file

@ -2,7 +2,6 @@ package mekanism.api;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
@ -26,7 +25,7 @@ public final class GasTransmission
{ {
TileEntity tube = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity tube = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS)) if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS, tileEntity))
{ {
tubes[orientation.ordinal()] = tube; tubes[orientation.ordinal()] = tube;
} }
@ -70,7 +69,7 @@ public final class GasTransmission
{ {
TileEntity connection = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity connection = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(connection instanceof ITubeConnection) if(connection instanceof ITubeConnection && (!(connection instanceof IGasTransmitter) || TransmissionType.checkTransmissionType(connection, TransmissionType.GAS, tileEntity)))
{ {
connections[orientation.ordinal()] = (ITubeConnection)connection; connections[orientation.ordinal()] = (ITubeConnection)connection;
} }
@ -91,7 +90,7 @@ public final class GasTransmission
{ {
TileEntity pointer = Object3D.get(sender).getFromSide(facing).getTileEntity(sender.worldObj); TileEntity pointer = Object3D.get(sender).getFromSide(facing).getTileEntity(sender.worldObj);
if(TransmissionType.checkTransmissionType(pointer, TransmissionType.GAS)) if(TransmissionType.checkTransmissionType(pointer, TransmissionType.GAS, sender))
{ {
return ((ITransmitter<GasNetwork>)pointer).getNetwork().emit(amount, type, sender); return ((ITransmitter<GasNetwork>)pointer).getNetwork().emit(amount, type, sender);
} }
@ -117,7 +116,7 @@ public final class GasTransmission
{ {
TileEntity sideTile = Object3D.get(pointer).getFromSide(side).getTileEntity(pointer.worldObj); TileEntity sideTile = Object3D.get(pointer).getFromSide(side).getTileEntity(pointer.worldObj);
if(TransmissionType.checkTransmissionType(sideTile, TransmissionType.GAS)) if(TransmissionType.checkTransmissionType(sideTile, TransmissionType.GAS, pointer))
{ {
networks.add(((ITransmitter<GasNetwork>)sideTile).getNetwork()); networks.add(((ITransmitter<GasNetwork>)sideTile).getNetwork());
} }

View file

@ -0,0 +1,8 @@
package mekanism.api;
import net.minecraft.tileentity.TileEntity;
public interface IGasTransmitter extends ITransmitter<GasNetwork>
{
public boolean canTransferGasToTube(TileEntity tile);
}

View file

@ -8,22 +8,40 @@ public enum TransmissionType
FLUID, FLUID,
GAS, GAS,
ITEM; ITEM;
public static boolean checkTransmissionType(TileEntity tileEntity, TransmissionType type) public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type)
{ {
return type.checkTransmissionType(tileEntity); return checkTransmissionType(sideTile, type, null);
}
public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type, TileEntity currentPipe)
{
return type.checkTransmissionType(sideTile, currentPipe);
} }
public boolean checkTransmissionType(TileEntity tileEntity) public boolean checkTransmissionType(TileEntity sideTile, TileEntity currentTile)
{ {
if(tileEntity instanceof ITransmitter) if (sideTile == null)
{
return false;
}
if (sideTile instanceof ITransmitter)
{ {
if(((ITransmitter<?>)tileEntity).getTransmissionType() == this) if(((ITransmitter<?>)sideTile).getTransmissionType() != this)
{ {
return true; return false;
} }
} }
return false; if (this == GAS && currentTile instanceof IGasTransmitter)
{
if (!((IGasTransmitter)currentTile).canTransferGasToTube(sideTile))
{
return false;
}
}
return true;
} }
} }

View file

@ -1,10 +1,10 @@
package mekanism.common; package mekanism.common;
import java.util.HashSet; import java.util.HashSet;
import mekanism.api.EnumGas; import mekanism.api.EnumGas;
import mekanism.api.GasNetwork; import mekanism.api.GasNetwork;
import mekanism.api.GasTransmission; import mekanism.api.GasTransmission;
import mekanism.api.IGasTransmitter;
import mekanism.api.ITransmitter; import mekanism.api.ITransmitter;
import mekanism.api.ITubeConnection; import mekanism.api.ITubeConnection;
import mekanism.api.Object3D; import mekanism.api.Object3D;
@ -12,7 +12,7 @@ import mekanism.api.TransmissionType;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork> implements ITubeConnection public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork> implements ITubeConnection, IGasTransmitter
{ {
/** The gas currently displayed in this tube. */ /** The gas currently displayed in this tube. */
public EnumGas refGas = null; public EnumGas refGas = null;
@ -36,7 +36,7 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
for(TileEntity tube : adjacentTubes) for(TileEntity tube : adjacentTubes)
{ {
if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS) && ((ITransmitter<GasNetwork>)tube).getNetwork(false) != null) if(TransmissionType.checkTransmissionType(tube, TransmissionType.GAS, this) && ((ITransmitter<GasNetwork>)tube).getNetwork(false) != null)
{ {
connectedNets.add(((ITransmitter<GasNetwork>)tube).getNetwork()); connectedNets.add(((ITransmitter<GasNetwork>)tube).getNetwork());
} }
@ -95,7 +95,7 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
{ {
TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj); TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj);
if(TransmissionType.checkTransmissionType(tileEntity, TransmissionType.GAS)) if(TransmissionType.checkTransmissionType(tileEntity, TransmissionType.GAS, this))
{ {
getNetwork().merge(((ITransmitter<GasNetwork>)tileEntity).getNetwork()); getNetwork().merge(((ITransmitter<GasNetwork>)tileEntity).getNetwork());
} }
@ -153,4 +153,10 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
{ {
return getNetwork().getFlow(); return getNetwork().getFlow();
} }
@Override
public boolean canTransferGasToTube(TileEntity tile)
{
return tile != null && tile.getClass().equals(this.getClass());
}
} }