Got connection types to save/load, NONE sides will now not connect or emit to acceptors

This commit is contained in:
Aidan Brady 2013-12-18 16:23:07 -05:00
parent c5269cc1ab
commit 8f24e5c18f
7 changed files with 43 additions and 49 deletions

View file

@ -310,13 +310,15 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
}
}
for(ITransmitter<GasNetwork> pipe : transmitters)
for(ITransmitter<GasNetwork> transmitter : transmitters)
{
IGasHandler[] acceptors = GasTransmission.getConnectedAcceptors((TileEntity)pipe);
IGasHandler[] acceptors = GasTransmission.getConnectedAcceptors((TileEntity)transmitter);
for(IGasHandler acceptor : acceptors)
{
if(acceptor != null && !(acceptor instanceof ITransmitter))
ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor));
if(side != null && acceptor != null && !(acceptor instanceof ITransmitter) && transmitter.canConnect(side))
{
possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));

View file

@ -1,9 +1,8 @@
package mekanism.api.transmitters;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
public interface ITransmitter<N extends DynamicNetwork<?, N>>
public interface ITransmitter<N extends DynamicNetwork<?, N>> extends IBlockableConnection
{
/**
* Get the transmitter's transmission type
@ -53,17 +52,6 @@ public interface ITransmitter<N extends DynamicNetwork<?, N>>
* it to try and fix itself.
*/
public void fixTransmitterNetwork();
/**
* Return whether the transmitter can connect in the given direction.
*/
public boolean canConnect(ForgeDirection side);
/**
* Return whether the transmitter can connect in the given direction,
* and the tile in the given direction isn't prevented from connecting.
*/
public boolean canConnectMutual(ForgeDirection side);
public boolean areTransmitterNetworksEqual(TileEntity tileEntity);

View file

@ -359,13 +359,15 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
}
}
for(ITransmitter<EnergyNetwork> cable : iterCables)
for(ITransmitter<EnergyNetwork> transmitter : iterCables)
{
TileEntity[] acceptors = CableUtils.getConnectedEnergyAcceptors((TileEntity)cable);
TileEntity[] acceptors = CableUtils.getConnectedEnergyAcceptors((TileEntity)transmitter);
for(TileEntity acceptor : acceptors)
{
if(acceptor != null && !(acceptor instanceof ITransmitter))
ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor));
if(side != null && acceptor != null && !(acceptor instanceof ITransmitter) && transmitter.canConnect(side))
{
possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));

View file

@ -312,15 +312,15 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
}
}
for(ITransmitter<FluidNetwork> pipe : iterPipes)
for(ITransmitter<FluidNetwork> transmitter : iterPipes)
{
if(pipe instanceof TileEntityMechanicalPipe && ((TileEntityMechanicalPipe)pipe).isActive) continue;
IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity)pipe);
IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity)transmitter);
for(IFluidHandler acceptor : acceptors)
{
if(acceptor != null && !(acceptor instanceof ITransmitter))
ForgeDirection side = ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor));
if(side != null && acceptor != null && !(acceptor instanceof ITransmitter) && transmitter.canConnect(side))
{
possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));

View file

@ -43,4 +43,7 @@ public class PartLogisticalTransporter extends PartSidedPipe
{
return tile instanceof IInventory;
}
@Override
public void onModeChange(ForgeDirection side) {}
}

View file

@ -122,30 +122,6 @@ public class PartPressurizedTube extends PartTransmitter<GasNetwork>
nbtTags.setCompoundTag("cacheGas", stack.write(new NBTTagCompound()));
}
}
@Override
public boolean isConnectable(TileEntity tileEntity)
{
if(tileEntity instanceof ITransmitter && TransmissionType.checkTransmissionType(tileEntity, getTransmissionType()))
{
ITransmitter<GasNetwork> transmitter = (ITransmitter<GasNetwork>)tileEntity;
if(getTransmitterNetwork(false) == null || transmitter.getTransmitterNetwork(false) == null)
{
return true;
}
else if(getTransmitterNetwork().gasStored == null || transmitter.getTransmitterNetwork().gasStored == null)
{
return true;
}
else if(getTransmitterNetwork().gasStored.getGas() == transmitter.getTransmitterNetwork().gasStored.getGas())
{
return true;
}
}
return false;
}
@Override
public String getType()

View file

@ -18,6 +18,7 @@ import mekanism.common.item.ItemConfigurator;
import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.util.MovingObjectPosition;
@ -300,7 +301,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart,
@Override
public boolean canConnect(ForgeDirection side)
{
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()) || connectionTypes[side.ordinal()] == ConnectionType.NONE)
{
return false;
}
@ -335,6 +336,28 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart,
packet.writeInt(connectionTypes[i].ordinal());
}
}
@Override
public void load(NBTTagCompound nbtTags)
{
super.load(nbtTags);
for(int i = 0; i < 6; i++)
{
connectionTypes[i] = ConnectionType.values()[nbtTags.getInteger("connection" + i)];
}
}
@Override
public void save(NBTTagCompound nbtTags)
{
super.save(nbtTags);
for(int i = 0; i < 6; i++)
{
nbtTags.setInteger("connection" + i, connectionTypes[i].ordinal());
}
}
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)