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) 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); possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor))); acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));

View file

@ -1,9 +1,8 @@
package mekanism.api.transmitters; package mekanism.api.transmitters;
import net.minecraft.tileentity.TileEntity; 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 * Get the transmitter's transmission type
@ -53,17 +52,6 @@ public interface ITransmitter<N extends DynamicNetwork<?, N>>
* it to try and fix itself. * it to try and fix itself.
*/ */
public void fixTransmitterNetwork(); 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); 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) 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); possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(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)transmitter);
IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity)pipe);
for(IFluidHandler acceptor : acceptors) 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); possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(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; 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())); 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 @Override
public String getType() public String getType()

View file

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