Loads of work on modularization, BROKEN BUILD

This commit is contained in:
Aidan Brady 2013-08-18 21:32:47 -04:00
parent 046cab7880
commit 30f7bfa126
29 changed files with 237 additions and 312 deletions

View file

@ -9,13 +9,9 @@ import java.util.Set;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import mekanism.common.EnergyNetwork; public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<A, N>
import mekanism.common.IMechanicalPipe;
import mekanism.common.IUniversalCable;
public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T, A, N>
{ {
public HashSet<T> transmitters = new HashSet<T>(); public HashSet<ITransmitter<N>> transmitters = new HashSet<ITransmitter<N>>();
public Set<A> possibleAcceptors = new HashSet<A>(); public Set<A> possibleAcceptors = new HashSet<A>();
public Map<A, ForgeDirection> acceptorDirections = new HashMap<A, ForgeDirection>(); public Map<A, ForgeDirection> acceptorDirections = new HashMap<A, ForgeDirection>();
@ -25,13 +21,13 @@ public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T,
protected boolean fixed = false; protected boolean fixed = false;
public void addAllTransmitters(Set<T> newTransmitters) public void addAllTransmitters(Set<ITransmitter<N>> newTransmitters)
{ {
transmitters.addAll(newTransmitters); transmitters.addAll(newTransmitters);
} }
@Override @Override
public void removeTransmitter(T transmitter) public void removeTransmitter(ITransmitter<N> transmitter)
{ {
transmitters.remove(transmitter); transmitters.remove(transmitter);
@ -45,7 +41,7 @@ public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T,
public void register() public void register()
{ {
try { try {
T aTransmitter = transmitters.iterator().next(); ITransmitter<N> aTransmitter = transmitters.iterator().next();
if(aTransmitter instanceof TileEntity && !((TileEntity)aTransmitter).worldObj.isRemote) if(aTransmitter instanceof TileEntity && !((TileEntity)aTransmitter).worldObj.isRemote)
{ {

View file

@ -2,32 +2,35 @@ package mekanism.api;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import mekanism.common.MekanismUtils;
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;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event; import net.minecraftforge.event.Event;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.ChunkEvent;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, GasNetwork> public class GasNetwork extends DynamicNetwork<IGasAcceptor, GasNetwork>
{ {
public GasNetwork(IPressurizedTube... varPipes) public GasNetwork(ITransmitter<GasNetwork>... varPipes)
{ {
transmitters.addAll(Arrays.asList(varPipes)); transmitters.addAll(Arrays.asList(varPipes));
register(); register();
} }
public GasNetwork(Collection<ITransmitter<GasNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public GasNetwork(Set<GasNetwork> networks) public GasNetwork(Set<GasNetwork> networks)
{ {
for(GasNetwork net : networks) for(GasNetwork net : networks)
@ -107,15 +110,15 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
@Override @Override
public void refresh() public void refresh()
{ {
Set<IPressurizedTube> iterTubes = (Set<IPressurizedTube>) transmitters.clone(); Set<ITransmitter<GasNetwork>> iterTubes = (Set<ITransmitter<GasNetwork>>)transmitters.clone();
Iterator<IPressurizedTube> it = iterTubes.iterator(); Iterator<ITransmitter<GasNetwork>> it = iterTubes.iterator();
possibleAcceptors.clear(); possibleAcceptors.clear();
acceptorDirections.clear(); acceptorDirections.clear();
while(it.hasNext()) while(it.hasNext())
{ {
IPressurizedTube conductor = (IPressurizedTube)it.next(); ITransmitter<GasNetwork> conductor = (ITransmitter<GasNetwork>)it.next();
if(conductor == null || ((TileEntity)conductor).isInvalid()) if(conductor == null || ((TileEntity)conductor).isInvalid())
{ {
@ -127,13 +130,13 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
} }
} }
for(IPressurizedTube pipe : transmitters) for(ITransmitter<GasNetwork> pipe : transmitters)
{ {
IGasAcceptor[] acceptors = GasTransmission.getConnectedAcceptors((TileEntity)pipe); IGasAcceptor[] acceptors = GasTransmission.getConnectedAcceptors((TileEntity)pipe);
for(IGasAcceptor acceptor : acceptors) for(IGasAcceptor acceptor : acceptors)
{ {
if(acceptor != null && !(acceptor instanceof IPressurizedTube)) if(acceptor != null && !(acceptor instanceof ITransmitter))
{ {
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)));
@ -156,7 +159,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
} }
@Override @Override
public void split(IPressurizedTube splitPoint) public void split(ITransmitter<GasNetwork> splitPoint)
{ {
if(splitPoint instanceof TileEntity) if(splitPoint instanceof TileEntity)
{ {
@ -179,7 +182,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
{ {
TileEntity connectedBlockA = connectedBlocks[countOne]; TileEntity connectedBlockA = connectedBlocks[countOne];
if(connectedBlockA instanceof IPressurizedTube && !dealtWith[countOne]) if(MekanismUtils.checkNetwork(connectedBlockA, GasNetwork.class) && !dealtWith[countOne])
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint)); NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint));
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
@ -188,7 +191,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
{ {
TileEntity connectedBlockB = connectedBlocks[countTwo]; TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof IPressurizedTube && !dealtWith[countTwo]) if(MekanismUtils.checkNetwork(connectedBlockB, GasNetwork.class) && !dealtWith[countTwo])
{ {
if(partNetwork.contains(Object3D.get(connectedBlockB))) if(partNetwork.contains(Object3D.get(connectedBlockB)))
{ {
@ -203,11 +206,11 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof IPressurizedTube) if(MekanismUtils.checkNetwork(nodeTile, GasNetwork.class))
{ {
if(nodeTile != splitPoint) if(nodeTile != splitPoint)
{ {
newNetwork.transmitters.add((IPressurizedTube)nodeTile); newNetwork.transmitters.add((ITransmitter<GasNetwork>)nodeTile);
} }
} }
} }
@ -221,26 +224,26 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
} }
@Override @Override
public void fixMessedUpNetwork(IPressurizedTube tube) public void fixMessedUpNetwork(ITransmitter<GasNetwork> tube)
{ {
if(tube instanceof TileEntity) if(tube instanceof TileEntity)
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)tube).getWorldObj(), Object3D.get((TileEntity)tube), null); NetworkFinder finder = new NetworkFinder(((TileEntity)tube).getWorldObj(), Object3D.get((TileEntity)tube), null);
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
Set<IPressurizedTube> newTubes = new HashSet<IPressurizedTube>(); Set<ITransmitter<GasNetwork>> newTubes = new HashSet<ITransmitter<GasNetwork>>();
for(Object3D node : partNetwork) for(Object3D node : partNetwork)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)tube).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)tube).worldObj);
if(nodeTile instanceof IPressurizedTube) if(MekanismUtils.checkNetwork(nodeTile, GasNetwork.class))
{ {
((IPressurizedTube) nodeTile).removeFromNetwork(); ((ITransmitter<GasNetwork>)nodeTile).removeFromNetwork();
newTubes.add((IPressurizedTube)nodeTile); newTubes.add((ITransmitter<GasNetwork>)nodeTile);
} }
} }
GasNetwork newNetwork = new GasNetwork(newTubes.toArray(new IPressurizedTube[0])); GasNetwork newNetwork = new GasNetwork();
newNetwork.refresh(); newNetwork.refresh();
newNetwork.fixed = true; newNetwork.fixed = true;
deregister(); deregister();
@ -268,7 +271,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
public void loopAll(Object3D location) public void loopAll(Object3D location)
{ {
if(location.getTileEntity(worldObj) instanceof IPressurizedTube) if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), GasNetwork.class))
{ {
iterated.add(location); iterated.add(location);
} }
@ -281,7 +284,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, G
{ {
TileEntity tileEntity = obj.getTileEntity(worldObj); TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof IPressurizedTube) if(MekanismUtils.checkNetwork(tileEntity, GasNetwork.class))
{ {
loopAll(obj); loopAll(obj);
} }

View file

@ -22,24 +22,21 @@ public final class GasTransmission
{ {
TileEntity[] tubes = new TileEntity[] {null, null, null, null, null, null}; TileEntity[] tubes = new TileEntity[] {null, null, null, null, null, null};
if(!(tileEntity instanceof IPressurizedTube) || ((IPressurizedTube)tileEntity).canTransferGas()) for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{ {
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) TileEntity tube = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
{
TileEntity tube = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); if(tileEntity instanceof IPressurizedTube)
{
if(tileEntity instanceof IPressurizedTube) if(((IPressurizedTube)tileEntity).canTransferGasToTube(tube))
{ {
if(((IPressurizedTube)tileEntity).canTransferGasToTube(tube))
{
tubes[orientation.ordinal()] = tube;
}
}
else if(tube instanceof IPressurizedTube && ((IPressurizedTube)tube).canTransferGas())
{
tubes[orientation.ordinal()] = tube; tubes[orientation.ordinal()] = tube;
} }
} }
else if(tube instanceof IPressurizedTube)
{
tubes[orientation.ordinal()] = tube;
}
} }
return tubes; return tubes;
@ -54,7 +51,7 @@ public final class GasTransmission
{ {
IGasAcceptor[] acceptors = new IGasAcceptor[] {null, null, null, null, null, null}; IGasAcceptor[] acceptors = new IGasAcceptor[] {null, null, null, null, null, null};
if(!(tileEntity instanceof IPressurizedTube) || ((IPressurizedTube)tileEntity).canTransferGas()) if(!(tileEntity instanceof IPressurizedTube))
{ {
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{ {
@ -79,7 +76,7 @@ public final class GasTransmission
{ {
ITubeConnection[] connections = new ITubeConnection[] {null, null, null, null, null, null}; ITubeConnection[] connections = new ITubeConnection[] {null, null, null, null, null, null};
if(!(tileEntity instanceof IPressurizedTube) || ((IPressurizedTube)tileEntity).canTransferGas()) if(!(tileEntity instanceof IPressurizedTube))
{ {
for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS)
{ {

View file

@ -1,25 +0,0 @@
package mekanism.api;
import net.minecraft.tileentity.TileEntity;
public interface IPressurizedTube extends ITransmitter<GasNetwork>
{
/**
* Whether or not this tube can transfer gas.
* @return if the tube can transfer gas
*/
public boolean canTransferGas();
/**
* Whether or not this tube can transfer gas into an adjacent tube.
* @param tile - the adjacent tube
* @return if this tube can transfer gas into the passed tube
*/
public boolean canTransferGasToTube(TileEntity tile);
/**
* Called when a gas is transferred through this tube.
* @param type - the type of gas transferred
*/
public void onTransfer(EnumGas type);
}

View file

@ -1,5 +1,7 @@
package mekanism.api; package mekanism.api;
import net.minecraft.tileentity.TileEntity;
public interface ITransmitter<N> public interface ITransmitter<N>
{ {
/** /**
@ -38,4 +40,6 @@ public interface ITransmitter<N>
* it to try and fix itself. * it to try and fix itself.
*/ */
public void fixNetwork(); public void fixNetwork();
public boolean areNetworksEqual(TileEntity tileEntity);
} }

View file

@ -2,9 +2,7 @@ package mekanism.api;
import java.util.Set; import java.util.Set;
import mekanism.common.IUniversalCable; public interface ITransmitterNetwork<A, N>
public interface ITransmitterNetwork<T, A, N>
{ {
public void tick(); public void tick();
@ -12,15 +10,15 @@ public interface ITransmitterNetwork<T, A, N>
public Set<A> getAcceptors(Object... data); public Set<A> getAcceptors(Object... data);
public void removeTransmitter(T transmitter); public void removeTransmitter(ITransmitter<N> transmitter);
public void refresh(); public void refresh();
public void split(T splitPoint); public void split(ITransmitter<N> splitPoint);
public void merge(N network); public void merge(N network);
public void fixMessedUpNetwork(T transmitter); public void fixMessedUpNetwork(ITransmitter<N> transmitter);
public void register(); public void register();

View file

@ -1,11 +1,10 @@
package mekanism.client; package mekanism.client;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.EnergyNetwork.NetworkFinder; import mekanism.common.EnergyNetwork.NetworkFinder;
import mekanism.common.IUniversalCable; import mekanism.common.TileEntityUniversalCable;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -32,9 +31,9 @@ public class EnergyClientUpdate
{ {
TileEntity tileEntity = object.getTileEntity(worldObj); TileEntity tileEntity = object.getTileEntity(worldObj);
if(tileEntity instanceof IUniversalCable) if(tileEntity instanceof TileEntityUniversalCable)
{ {
((IUniversalCable)tileEntity).setCachedEnergy(energyScale); ((TileEntityUniversalCable)tileEntity).setCachedEnergy(energyScale);
} }
} }
} }

View file

@ -4,8 +4,7 @@ import java.util.List;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.FluidNetwork.NetworkFinder; import mekanism.common.FluidNetwork.NetworkFinder;
import mekanism.common.IMechanicalPipe; import mekanism.common.TileEntityMechanicalPipe;
import mekanism.common.IUniversalCable;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
@ -33,9 +32,9 @@ public class FluidClientUpdate
{ {
TileEntity tileEntity = object.getTileEntity(worldObj); TileEntity tileEntity = object.getTileEntity(worldObj);
if(tileEntity instanceof IMechanicalPipe) if(tileEntity instanceof TileEntityMechanicalPipe)
{ {
((IMechanicalPipe)tileEntity).onTransfer(fluidStack); ((TileEntityMechanicalPipe)tileEntity).onTransfer(fluidStack);
} }
} }
} }

View file

@ -3,10 +3,8 @@ package mekanism.common;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import buildcraft.api.tools.IToolWrench;
import mekanism.api.GasTransmission; import mekanism.api.GasTransmission;
import mekanism.api.IPressurizedTube; import mekanism.api.ITransmitter;
import mekanism.api.ITubeConnection; import mekanism.api.ITubeConnection;
import mekanism.client.ClientProxy; import mekanism.client.ClientProxy;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -23,6 +21,7 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -264,22 +263,7 @@ public class BlockTransmitter extends Block
if(!world.isRemote) if(!world.isRemote)
{ {
if(tileEntity instanceof IUniversalCable) ((ITransmitter)tileEntity).refreshNetwork();
{
((IUniversalCable)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof IMechanicalPipe)
{
((IMechanicalPipe)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof IPressurizedTube)
{
((IPressurizedTube)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof ILogisticalTransporter)
{
((ILogisticalTransporter)tileEntity).refreshNetwork();
}
} }
} }
@ -290,22 +274,7 @@ public class BlockTransmitter extends Block
if(!world.isRemote) if(!world.isRemote)
{ {
if(tileEntity instanceof IUniversalCable) ((ITransmitter)tileEntity).refreshNetwork();
{
((IUniversalCable)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof IMechanicalPipe)
{
((IMechanicalPipe)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof IPressurizedTube)
{
((IPressurizedTube)tileEntity).refreshNetwork();
}
else if(tileEntity instanceof ILogisticalTransporter)
{
((ILogisticalTransporter)tileEntity).refreshNetwork();
}
} }
} }

View file

@ -11,11 +11,12 @@ import java.util.Set;
import mekanism.api.ICableOutputter; import mekanism.api.ICableOutputter;
import mekanism.api.IStrictEnergyAcceptor; import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.power.IPowerReceptor;
import universalelectricity.core.block.IElectrical; import universalelectricity.core.block.IElectrical;
import buildcraft.api.power.IPowerReceptor;
public final class CableUtils public final class CableUtils
{ {
@ -34,7 +35,7 @@ public final class CableUtils
if(acceptor instanceof IStrictEnergyAcceptor || if(acceptor instanceof IStrictEnergyAcceptor ||
acceptor instanceof IEnergySink || acceptor instanceof IEnergySink ||
(acceptor instanceof IPowerReceptor && !(acceptor instanceof IUniversalCable) && Mekanism.hooks.BuildCraftLoaded) || (acceptor instanceof IPowerReceptor && !(acceptor instanceof ITransmitter) && Mekanism.hooks.BuildCraftLoaded) ||
acceptor instanceof IElectrical) acceptor instanceof IElectrical)
{ {
acceptors[orientation.ordinal()] = acceptor; acceptors[orientation.ordinal()] = acceptor;
@ -57,7 +58,7 @@ public final class CableUtils
{ {
TileEntity cable = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity cable = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(cable instanceof IUniversalCable) if(MekanismUtils.checkNetwork(cable, EnergyNetwork.class))
{ {
cables[orientation.ordinal()] = cable; cables[orientation.ordinal()] = cable;
} }
@ -166,7 +167,7 @@ public final class CableUtils
return true; return true;
} }
if(tileEntity instanceof IPowerReceptor && !(tileEntity instanceof IUniversalCable) && Mekanism.hooks.BuildCraftLoaded) if(tileEntity instanceof IPowerReceptor && !(tileEntity instanceof ITransmitter) && Mekanism.hooks.BuildCraftLoaded)
{ {
if(!(tileEntity instanceof IEnergyAcceptor) || ((IEnergyAcceptor)tileEntity).acceptsEnergyFrom(null, MekanismUtils.toIC2Direction(side).getInverse())) if(!(tileEntity instanceof IEnergyAcceptor) || ((IEnergyAcceptor)tileEntity).acceptsEnergyFrom(null, MekanismUtils.toIC2Direction(side).getInverse()))
{ {
@ -191,9 +192,9 @@ public final class CableUtils
{ {
TileEntity pointer = Object3D.get(sender).getFromSide(facing).getTileEntity(sender.worldObj); TileEntity pointer = Object3D.get(sender).getFromSide(facing).getTileEntity(sender.worldObj);
if(pointer instanceof IUniversalCable) if(MekanismUtils.checkNetwork(pointer, EnergyNetwork.class))
{ {
IUniversalCable cable = (IUniversalCable)pointer; ITransmitter<EnergyNetwork> cable = (ITransmitter<EnergyNetwork>)pointer;
ArrayList<TileEntity> ignored = new ArrayList<TileEntity>(); ArrayList<TileEntity> ignored = new ArrayList<TileEntity>();
ignored.add(sender); ignored.add(sender);
@ -224,9 +225,9 @@ public final class CableUtils
{ {
TileEntity sideTile = Object3D.get(pointer).getFromSide(side).getTileEntity(pointer.worldObj); TileEntity sideTile = Object3D.get(pointer).getFromSide(side).getTileEntity(pointer.worldObj);
if(sideTile instanceof IUniversalCable && !ignored.contains(sideTile)) if(MekanismUtils.checkNetwork(sideTile, EnergyNetwork.class) && !ignored.contains(sideTile))
{ {
networks.add(((IUniversalCable)sideTile).getNetwork()); networks.add(((ITransmitter<EnergyNetwork>)sideTile).getNetwork());
} }
} }

View file

@ -4,27 +4,22 @@ import ic2.api.energy.tile.IEnergySink;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import mekanism.api.DynamicNetwork; import mekanism.api.DynamicNetwork;
import mekanism.api.IStrictEnergyAcceptor; import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.ITransmitterNetwork; import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.api.TransmitterNetworkRegistry;
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;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event; import net.minecraftforge.event.Event;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.ChunkEvent;
import universalelectricity.core.block.IElectrical; import universalelectricity.core.block.IElectrical;
import universalelectricity.core.electricity.ElectricityPack; import universalelectricity.core.electricity.ElectricityPack;
import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.IPowerReceptor;
@ -32,18 +27,24 @@ import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.api.power.PowerHandler.Type; import buildcraft.api.power.PowerHandler.Type;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, EnergyNetwork> public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork>
{ {
private double lastPowerScale = 0; private double lastPowerScale = 0;
private double joulesTransmitted = 0; private double joulesTransmitted = 0;
private double joulesLastTick = 0; private double joulesLastTick = 0;
public EnergyNetwork(IUniversalCable... varCables) public EnergyNetwork(ITransmitter<EnergyNetwork>... varCables)
{ {
transmitters.addAll(Arrays.asList(varCables)); transmitters.addAll(Arrays.asList(varCables));
register(); register();
} }
public EnergyNetwork(Collection<ITransmitter<EnergyNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public EnergyNetwork(Set<EnergyNetwork> networks) public EnergyNetwork(Set<EnergyNetwork> networks)
{ {
for(EnergyNetwork net : networks) for(EnergyNetwork net : networks)
@ -201,15 +202,15 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
@Override @Override
public void refresh() public void refresh()
{ {
Set<IUniversalCable> iterCables = (Set<IUniversalCable>) transmitters.clone(); Set<ITransmitter<EnergyNetwork>> iterCables = (Set<ITransmitter<EnergyNetwork>>) transmitters.clone();
Iterator<IUniversalCable> it = iterCables.iterator(); Iterator<ITransmitter<EnergyNetwork>> it = iterCables.iterator();
possibleAcceptors.clear(); possibleAcceptors.clear();
acceptorDirections.clear(); acceptorDirections.clear();
while(it.hasNext()) while(it.hasNext())
{ {
IUniversalCable conductor = (IUniversalCable)it.next(); ITransmitter<EnergyNetwork> conductor = (ITransmitter<EnergyNetwork>)it.next();
if(conductor == null || ((TileEntity)conductor).isInvalid()) if(conductor == null || ((TileEntity)conductor).isInvalid())
{ {
@ -221,13 +222,13 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
} }
} }
for(IUniversalCable cable : iterCables) for(ITransmitter<EnergyNetwork> cable : iterCables)
{ {
TileEntity[] acceptors = CableUtils.getConnectedEnergyAcceptors((TileEntity)cable); TileEntity[] acceptors = CableUtils.getConnectedEnergyAcceptors((TileEntity)cable);
for(TileEntity acceptor : acceptors) for(TileEntity acceptor : acceptors)
{ {
if(acceptor != null && !(acceptor instanceof IUniversalCable)) if(acceptor != null && !(acceptor instanceof ITransmitter))
{ {
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)));
@ -236,6 +237,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
} }
double currentPowerScale = getPowerScale(); double currentPowerScale = getPowerScale();
if(FMLCommonHandler.instance().getEffectiveSide().isServer()) if(FMLCommonHandler.instance().getEffectiveSide().isServer())
{ {
lastPowerScale = currentPowerScale; lastPowerScale = currentPowerScale;
@ -258,7 +260,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
} }
@Override @Override
public void split(IUniversalCable splitPoint) public void split(ITransmitter<EnergyNetwork> splitPoint)
{ {
if(splitPoint instanceof TileEntity) if(splitPoint instanceof TileEntity)
{ {
@ -281,7 +283,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{ {
TileEntity connectedBlockA = connectedBlocks[countOne]; TileEntity connectedBlockA = connectedBlocks[countOne];
if(connectedBlockA instanceof IUniversalCable && !dealtWith[countOne]) if(MekanismUtils.checkNetwork(connectedBlockA, EnergyNetwork.class) && !dealtWith[countOne])
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint)); NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint));
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
@ -290,7 +292,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{ {
TileEntity connectedBlockB = connectedBlocks[countTwo]; TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof IUniversalCable && !dealtWith[countTwo]) if(MekanismUtils.checkNetwork(connectedBlockB, EnergyNetwork.class) && !dealtWith[countTwo])
{ {
if(partNetwork.contains(Object3D.get(connectedBlockB))) if(partNetwork.contains(Object3D.get(connectedBlockB)))
{ {
@ -299,21 +301,22 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
} }
} }
Set<IUniversalCable> newNetCables= new HashSet<IUniversalCable>(); Set<ITransmitter<EnergyNetwork>> newNetCables = new HashSet<ITransmitter<EnergyNetwork>>();
for(Object3D node : finder.iterated) for(Object3D node : finder.iterated)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof IUniversalCable) if(MekanismUtils.checkNetwork(nodeTile, EnergyNetwork.class))
{ {
if(nodeTile != splitPoint) if(nodeTile != splitPoint)
{ {
newNetCables.add((IUniversalCable)nodeTile); newNetCables.add((ITransmitter<EnergyNetwork>)nodeTile);
} }
} }
} }
EnergyNetwork newNetwork = new EnergyNetwork(newNetCables.toArray(new IUniversalCable[0])); EnergyNetwork newNetwork = new EnergyNetwork(newNetCables);
newNetwork.refresh(); newNetwork.refresh();
} }
} }
@ -323,26 +326,26 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
} }
@Override @Override
public void fixMessedUpNetwork(IUniversalCable cable) public void fixMessedUpNetwork(ITransmitter<EnergyNetwork> cable)
{ {
if(cable instanceof TileEntity) if(cable instanceof TileEntity)
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)cable).getWorldObj(), Object3D.get((TileEntity)cable), null); NetworkFinder finder = new NetworkFinder(((TileEntity)cable).getWorldObj(), Object3D.get((TileEntity)cable), null);
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
Set<IUniversalCable> newCables = new HashSet<IUniversalCable>(); Set<ITransmitter<EnergyNetwork>> newCables = new HashSet<ITransmitter<EnergyNetwork>>();
for(Object3D node : partNetwork) for(Object3D node : partNetwork)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)cable).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)cable).worldObj);
if(nodeTile instanceof IUniversalCable) if(nodeTile instanceof ITransmitter)
{ {
((IUniversalCable)nodeTile).removeFromNetwork(); ((ITransmitter<EnergyNetwork>)nodeTile).removeFromNetwork();
newCables.add((IUniversalCable)nodeTile); newCables.add((ITransmitter<EnergyNetwork>)nodeTile);
} }
} }
EnergyNetwork newNetwork = new EnergyNetwork(newCables.toArray(new IUniversalCable[0])); EnergyNetwork newNetwork = new EnergyNetwork(newCables);
newNetwork.refresh(); newNetwork.refresh();
newNetwork.fixed = true; newNetwork.fixed = true;
deregister(); deregister();
@ -370,7 +373,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
public void loopAll(Object3D location) public void loopAll(Object3D location)
{ {
if(location.getTileEntity(worldObj) instanceof IUniversalCable) if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), EnergyNetwork.class))
{ {
iterated.add(location); iterated.add(location);
} }
@ -383,7 +386,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{ {
TileEntity tileEntity = obj.getTileEntity(worldObj); TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof IUniversalCable) if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{ {
loopAll(obj); loopAll(obj);
} }

View file

@ -2,6 +2,7 @@ package mekanism.common;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
@ -9,6 +10,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import mekanism.api.DynamicNetwork; import mekanism.api.DynamicNetwork;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -19,14 +21,20 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler, FluidNetwork> public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
{ {
public FluidNetwork(IMechanicalPipe... varPipes) public FluidNetwork(ITransmitter<FluidNetwork>... varPipes)
{ {
transmitters.addAll(Arrays.asList(varPipes)); transmitters.addAll(Arrays.asList(varPipes));
register(); register();
} }
public FluidNetwork(Collection<ITransmitter<FluidNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public FluidNetwork(Set<FluidNetwork> networks) public FluidNetwork(Set<FluidNetwork> networks)
{ {
for(FluidNetwork net : networks) for(FluidNetwork net : networks)
@ -104,7 +112,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
@Override @Override
public void refresh() public void refresh()
{ {
Set<IMechanicalPipe> iterPipes = (Set<IMechanicalPipe>) transmitters.clone(); Set<ITransmitter<FluidNetwork>> iterPipes = (Set<ITransmitter<FluidNetwork>>)transmitters.clone();
Iterator it = iterPipes.iterator(); Iterator it = iterPipes.iterator();
possibleAcceptors.clear(); possibleAcceptors.clear();
@ -112,7 +120,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
while(it.hasNext()) while(it.hasNext())
{ {
IMechanicalPipe conductor = (IMechanicalPipe)it.next(); ITransmitter<FluidNetwork> conductor = (ITransmitter<FluidNetwork>)it.next();
if(conductor == null || ((TileEntity)conductor).isInvalid()) if(conductor == null || ((TileEntity)conductor).isInvalid())
{ {
@ -124,13 +132,13 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
} }
} }
for(IMechanicalPipe pipe : iterPipes) for(ITransmitter<FluidNetwork> pipe : iterPipes)
{ {
IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity)pipe); IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity)pipe);
for(IFluidHandler acceptor : acceptors) for(IFluidHandler acceptor : acceptors)
{ {
if(acceptor != null && !(acceptor instanceof IMechanicalPipe)) if(acceptor != null && !(acceptor instanceof ITransmitter))
{ {
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)));
@ -153,7 +161,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
} }
@Override @Override
public void split(IMechanicalPipe splitPoint) public void split(ITransmitter<FluidNetwork> splitPoint)
{ {
if(splitPoint instanceof TileEntity) if(splitPoint instanceof TileEntity)
{ {
@ -176,7 +184,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{ {
TileEntity connectedBlockA = connectedBlocks[countOne]; TileEntity connectedBlockA = connectedBlocks[countOne];
if(connectedBlockA instanceof IMechanicalPipe && !dealtWith[countOne]) if(MekanismUtils.checkNetwork(connectedBlockA, FluidNetwork.class) && !dealtWith[countOne])
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint)); NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint));
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
@ -185,7 +193,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{ {
TileEntity connectedBlockB = connectedBlocks[countTwo]; TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof IMechanicalPipe && !dealtWith[countTwo]) if(MekanismUtils.checkNetwork(connectedBlockB, FluidNetwork.class) && !dealtWith[countTwo])
{ {
if(partNetwork.contains(Object3D.get(connectedBlockB))) if(partNetwork.contains(Object3D.get(connectedBlockB)))
{ {
@ -194,21 +202,22 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
} }
} }
Set<IMechanicalPipe> newNetPipes= new HashSet<IMechanicalPipe>(); Set<ITransmitter<FluidNetwork>> newNetPipes= new HashSet<ITransmitter<FluidNetwork>>();
for(Object3D node : finder.iterated) for(Object3D node : finder.iterated)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(nodeTile, FluidNetwork.class))
{ {
if(nodeTile != splitPoint) if(nodeTile != splitPoint)
{ {
newNetPipes.add((IMechanicalPipe)nodeTile); newNetPipes.add((ITransmitter<FluidNetwork>)nodeTile);
} }
} }
} }
FluidNetwork newNetwork = new FluidNetwork(newNetPipes.toArray(new IMechanicalPipe[0])); FluidNetwork newNetwork = new FluidNetwork(newNetPipes);
newNetwork.refresh(); newNetwork.refresh();
} }
} }
@ -218,26 +227,26 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
} }
@Override @Override
public void fixMessedUpNetwork(IMechanicalPipe pipe) public void fixMessedUpNetwork(ITransmitter<FluidNetwork> pipe)
{ {
if(pipe instanceof TileEntity) if(pipe instanceof TileEntity)
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)pipe).getWorldObj(), Object3D.get((TileEntity)pipe), null); NetworkFinder finder = new NetworkFinder(((TileEntity)pipe).getWorldObj(), Object3D.get((TileEntity)pipe), null);
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
Set<IMechanicalPipe> newPipes = new HashSet<IMechanicalPipe>(); Set<ITransmitter<FluidNetwork>> newPipes = new HashSet<ITransmitter<FluidNetwork>>();
for(Object3D node : partNetwork) for(Object3D node : partNetwork)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)pipe).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)pipe).worldObj);
if(nodeTile instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(nodeTile, FluidNetwork.class))
{ {
((IMechanicalPipe) nodeTile).removeFromNetwork(); ((ITransmitter<FluidNetwork>)nodeTile).removeFromNetwork();
newPipes.add((IMechanicalPipe)nodeTile); newPipes.add((ITransmitter<FluidNetwork>)nodeTile);
} }
} }
FluidNetwork newNetwork = new FluidNetwork(newPipes.toArray(new IMechanicalPipe[0])); FluidNetwork newNetwork = new FluidNetwork(newPipes);
newNetwork.refresh(); newNetwork.refresh();
newNetwork.fixed = true; newNetwork.fixed = true;
deregister(); deregister();
@ -265,7 +274,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
public void loopAll(Object3D location) public void loopAll(Object3D location)
{ {
if(location.getTileEntity(worldObj) instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), FluidNetwork.class))
{ {
iterated.add(location); iterated.add(location);
} }
@ -278,7 +287,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{ {
TileEntity tileEntity = obj.getTileEntity(worldObj); TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(tileEntity, FluidNetwork.class))
{ {
loopAll(obj); loopAll(obj);
} }

View file

@ -1,8 +0,0 @@
package mekanism.common;
import mekanism.api.ITransmitter;
public interface ILogisticalTransporter extends ITransmitter<InventoryNetwork>
{
}

View file

@ -1,18 +0,0 @@
package mekanism.common;
import mekanism.api.ITransmitter;
import net.minecraftforge.fluids.FluidStack;
/**
* Implement this in your TileEntity class if the block can transfer fluid as a Mechanical Pipe.
* @author AidanBrady
*
*/
public interface IMechanicalPipe extends ITransmitter<FluidNetwork>
{
/**
* Called when fluid is transferred through this pipe.
* @param fluidStack - the fluid transferred
*/
public void onTransfer(FluidStack fluidStack);
}

View file

@ -1,17 +0,0 @@
package mekanism.common;
import mekanism.api.ITransmitter;
/**
* Implement this in your TileEntity class if the block can transfer energy as a Universal Cable.
* @author AidanBrady
*
*/
public interface IUniversalCable extends ITransmitter<EnergyNetwork>
{
/**
* Sets a Universal Cable's energy scale to a new value.
* @param energyScale - energy scale to set
*/
public void setCachedEnergy(double energyScale);
}

View file

@ -2,33 +2,34 @@ package mekanism.common;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import mekanism.api.DynamicNetwork; import mekanism.api.DynamicNetwork;
import mekanism.api.ITransmitterNetwork; import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.api.TransmitterNetworkRegistry;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
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;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.ChunkEvent;
public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IInventory, InventoryNetwork> public class InventoryNetwork extends DynamicNetwork<IInventory, InventoryNetwork>
{ {
public InventoryNetwork(ILogisticalTransporter... varTransporters) public InventoryNetwork(ITransmitter<InventoryNetwork>... varTransporters)
{ {
transmitters.addAll(Arrays.asList(varTransporters)); transmitters.addAll(Arrays.asList(varTransporters));
register(); register();
} }
public InventoryNetwork(Collection<ITransmitter<InventoryNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public InventoryNetwork(Set<InventoryNetwork> networks) public InventoryNetwork(Set<InventoryNetwork> networks)
{ {
for(InventoryNetwork net : networks) for(InventoryNetwork net : networks)
@ -53,15 +54,15 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
@Override @Override
public void refresh() public void refresh()
{ {
Set<ILogisticalTransporter> iterPipes = (Set<ILogisticalTransporter>)transmitters.clone(); Set<ITransmitter<InventoryNetwork>> iterTransmitters = (Set<ITransmitter<InventoryNetwork>>)transmitters.clone();
Iterator it = iterPipes.iterator(); Iterator it = iterTransmitters.iterator();
possibleAcceptors.clear(); possibleAcceptors.clear();
acceptorDirections.clear(); acceptorDirections.clear();
while(it.hasNext()) while(it.hasNext())
{ {
ILogisticalTransporter conductor = (ILogisticalTransporter)it.next(); ITransmitter<InventoryNetwork> conductor = (ITransmitter<InventoryNetwork>)it.next();
if(conductor == null || ((TileEntity)conductor).isInvalid()) if(conductor == null || ((TileEntity)conductor).isInvalid())
{ {
@ -73,13 +74,13 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
} }
} }
for(ILogisticalTransporter pipe : iterPipes) for(ITransmitter<InventoryNetwork> transmitter : iterTransmitters)
{ {
IInventory[] inventories = TransporterUtils.getConnectedInventories((TileEntity)pipe); IInventory[] inventories = TransporterUtils.getConnectedInventories((TileEntity)transmitter);
for(IInventory inventory : inventories) for(IInventory inventory : inventories)
{ {
if(inventory != null && !(inventory instanceof ILogisticalTransporter)) if(inventory != null && !(inventory instanceof ITransmitter))
{ {
possibleAcceptors.add(inventory); possibleAcceptors.add(inventory);
acceptorDirections.put(inventory, ForgeDirection.getOrientation(Arrays.asList(inventories).indexOf(inventory))); acceptorDirections.put(inventory, ForgeDirection.getOrientation(Arrays.asList(inventories).indexOf(inventory)));
@ -102,7 +103,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
} }
@Override @Override
public void split(ILogisticalTransporter splitPoint) public void split(ITransmitter<InventoryNetwork> splitPoint)
{ {
if(splitPoint instanceof TileEntity) if(splitPoint instanceof TileEntity)
{ {
@ -125,7 +126,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{ {
TileEntity connectedBlockA = connectedBlocks[countOne]; TileEntity connectedBlockA = connectedBlocks[countOne];
if(connectedBlockA instanceof ILogisticalTransporter && !dealtWith[countOne]) if(MekanismUtils.checkNetwork(connectedBlockA, InventoryNetwork.class) && !dealtWith[countOne])
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint)); NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).worldObj, Object3D.get(connectedBlockA), Object3D.get((TileEntity)splitPoint));
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
@ -134,7 +135,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{ {
TileEntity connectedBlockB = connectedBlocks[countTwo]; TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof ILogisticalTransporter && !dealtWith[countTwo]) if(MekanismUtils.checkNetwork(connectedBlockB, InventoryNetwork.class) && !dealtWith[countTwo])
{ {
if(partNetwork.contains(Object3D.get(connectedBlockB))) if(partNetwork.contains(Object3D.get(connectedBlockB)))
{ {
@ -143,22 +144,22 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
} }
} }
Set<ILogisticalTransporter> newNetTransporters= new HashSet<ILogisticalTransporter>(); Set<ITransmitter<InventoryNetwork>> newNetTransporters = new HashSet<ITransmitter<InventoryNetwork>>();
for(Object3D node : finder.iterated) for(Object3D node : finder.iterated)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(nodeTile, InventoryNetwork.class))
{ {
if(nodeTile != splitPoint) if(nodeTile != splitPoint)
{ {
newNetTransporters.add((ILogisticalTransporter)nodeTile); newNetTransporters.add((ITransmitter<InventoryNetwork>)nodeTile);
} }
} }
} }
InventoryNetwork newNetwork = new InventoryNetwork(newNetTransporters.toArray(new ILogisticalTransporter[0])); InventoryNetwork newNetwork = new InventoryNetwork(newNetTransporters);
newNetwork.refresh(); newNetwork.refresh();
} }
} }
@ -168,26 +169,26 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
} }
@Override @Override
public void fixMessedUpNetwork(ILogisticalTransporter pipe) public void fixMessedUpNetwork(ITransmitter<InventoryNetwork> transmitter)
{ {
if(pipe instanceof TileEntity) if(transmitter instanceof TileEntity)
{ {
NetworkFinder finder = new NetworkFinder(((TileEntity)pipe).getWorldObj(), Object3D.get((TileEntity)pipe), null); NetworkFinder finder = new NetworkFinder(((TileEntity)transmitter).getWorldObj(), Object3D.get((TileEntity)transmitter), null);
List<Object3D> partNetwork = finder.exploreNetwork(); List<Object3D> partNetwork = finder.exploreNetwork();
Set<ILogisticalTransporter> newTransporters = new HashSet<ILogisticalTransporter>(); Set<ITransmitter<InventoryNetwork>> newTransporters = new HashSet<ITransmitter<InventoryNetwork>>();
for(Object3D node : partNetwork) for(Object3D node : partNetwork)
{ {
TileEntity nodeTile = node.getTileEntity(((TileEntity)pipe).worldObj); TileEntity nodeTile = node.getTileEntity(((TileEntity)transmitter).worldObj);
if(nodeTile instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(nodeTile, InventoryNetwork.class))
{ {
((ILogisticalTransporter)nodeTile).removeFromNetwork(); ((ITransmitter<InventoryNetwork>)nodeTile).removeFromNetwork();
newTransporters.add((ILogisticalTransporter)nodeTile); newTransporters.add((ITransmitter<InventoryNetwork>)nodeTile);
} }
} }
InventoryNetwork newNetwork = new InventoryNetwork(newTransporters.toArray(new ILogisticalTransporter[0])); InventoryNetwork newNetwork = new InventoryNetwork(newTransporters);
newNetwork.refresh(); newNetwork.refresh();
newNetwork.fixed = true; newNetwork.fixed = true;
deregister(); deregister();
@ -215,7 +216,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
public void loopAll(Object3D location) public void loopAll(Object3D location)
{ {
if(location.getTileEntity(worldObj) instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), InventoryNetwork.class))
{ {
iterated.add(location); iterated.add(location);
} }
@ -228,7 +229,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{ {
TileEntity tileEntity = obj.getTileEntity(worldObj); TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(tileEntity, InventoryNetwork.class))
{ {
loopAll(obj); loopAll(obj);
} }

View file

@ -6,6 +6,7 @@ import java.util.Random;
import mekanism.api.EnumColor; import mekanism.api.EnumColor;
import mekanism.api.IConfigurable; import mekanism.api.IConfigurable;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission; import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity; import mekanism.common.network.PacketTileEntity;
@ -66,9 +67,9 @@ public class ItemConfigurator extends ItemEnergized
return true; return true;
} }
} }
else if(world.getBlockTileEntity(x, y, z) instanceof IUniversalCable) else if(world.getBlockTileEntity(x, y, z) instanceof ITransmitter)
{ {
((IUniversalCable)world.getBlockTileEntity(x, y, z)).fixNetwork(); ((ITransmitter)world.getBlockTileEntity(x, y, z)).fixNetwork();
} }
if(getState(stack) == 0) if(getState(stack) == 0)

View file

@ -2,16 +2,16 @@ package mekanism.common;
import java.util.ArrayList; import java.util.ArrayList;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
import mekanism.api.EnumColor; import mekanism.api.EnumColor;
import mekanism.api.ITransmitter;
import mekanism.api.TransmitterNetworkRegistry; import mekanism.api.TransmitterNetworkRegistry;
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.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatMessageComponent; import net.minecraft.util.ChatMessageComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
public class ItemEnergyMeter extends ItemEnergized public class ItemEnergyMeter extends ItemEnergized
{ {
@ -29,13 +29,13 @@ public class ItemEnergyMeter extends ItemEnergized
{ {
TileEntity tileEntity = world.getBlockTileEntity(x, y, z); TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if(tileEntity instanceof IUniversalCable) if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{ {
if(getEnergy(stack) >= ENERGY_PER_USE) if(getEnergy(stack) >= ENERGY_PER_USE)
{ {
setEnergy(stack, getEnergy(stack)-ENERGY_PER_USE); setEnergy(stack, getEnergy(stack)-ENERGY_PER_USE);
IUniversalCable cable = (IUniversalCable)tileEntity; ITransmitter<EnergyNetwork> cable = (ITransmitter<EnergyNetwork>)tileEntity;
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " -------------")); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " -------------"));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Cables: " + EnumColor.DARK_GREY + cable.getNetwork().transmitters.size())); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Cables: " + EnumColor.DARK_GREY + cable.getNetwork().transmitters.size()));
@ -45,7 +45,9 @@ public class ItemEnergyMeter extends ItemEnergized
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------")); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------"));
} }
} }
if(player.isSneaking() && Mekanism.debug){
if(player.isSneaking() && Mekanism.debug)
{
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "---------- " + EnumColor.DARK_BLUE + "[Mekanism Debug]" + EnumColor.GREY + " ----------")); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "---------- " + EnumColor.DARK_BLUE + "[Mekanism Debug]" + EnumColor.GREY + " ----------"));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Networks: " + EnumColor.DARK_GREY + TransmitterNetworkRegistry.getInstance().toString())); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + " *Networks: " + EnumColor.DARK_GREY + TransmitterNetworkRegistry.getInstance().toString()));
player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------")); player.sendChatToPlayer(ChatMessageComponent.func_111066_d(EnumColor.GREY + "------------- " + EnumColor.DARK_BLUE + "[=======]" + EnumColor.GREY + " -------------"));

View file

@ -10,7 +10,6 @@ import java.util.Map;
import java.util.logging.Logger; import java.util.logging.Logger;
import mekanism.api.GasNetwork.GasTransferEvent; import mekanism.api.GasNetwork.GasTransferEvent;
import mekanism.api.GasTransmission;
import mekanism.api.InfuseObject; import mekanism.api.InfuseObject;
import mekanism.api.InfuseRegistry; import mekanism.api.InfuseRegistry;
import mekanism.api.InfuseType; import mekanism.api.InfuseType;

View file

@ -13,6 +13,8 @@ import java.util.Iterator;
import mekanism.api.EnumColor; import mekanism.api.EnumColor;
import mekanism.api.IConfigurable; import mekanism.api.IConfigurable;
import mekanism.api.ITransmitter;
import mekanism.api.ITransmitterNetwork;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.IFactory.RecipeType; import mekanism.common.IFactory.RecipeType;
import mekanism.common.IRedstoneControl.RedstoneControl; import mekanism.common.IRedstoneControl.RedstoneControl;
@ -958,6 +960,19 @@ public final class MekanismUtils
return false; return false;
} }
public static boolean checkNetwork(TileEntity tileEntity, Class<? extends ITransmitterNetwork> networkClass)
{
if(tileEntity instanceof ITransmitter)
{
if(((ITransmitter)tileEntity).getNetwork().getClass() == networkClass)
{
return true;
}
}
return false;
}
public static enum ResourceType public static enum ResourceType
{ {
GUI("gui"), GUI("gui"),

View file

@ -2,6 +2,7 @@ package mekanism.common;
import java.util.Arrays; import java.util.Arrays;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
@ -23,7 +24,7 @@ public final class PipeUtils
{ {
TileEntity pipe = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity pipe = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(pipe instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(pipe, FluidNetwork.class))
{ {
pipes[orientation.ordinal()] = pipe; pipes[orientation.ordinal()] = pipe;
} }
@ -97,7 +98,7 @@ public final class PipeUtils
{ {
TileEntity acceptor = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity acceptor = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(acceptor instanceof IFluidHandler && !(acceptor instanceof IMechanicalPipe)) if(acceptor instanceof IFluidHandler && !(acceptor instanceof ITransmitter))
{ {
acceptors[orientation.ordinal()] = (IFluidHandler)acceptor; acceptors[orientation.ordinal()] = (IFluidHandler)acceptor;
} }

View file

@ -74,7 +74,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
if(electricityStored > 0) if(electricityStored > 0)
{ {
if(tileEntity instanceof IUniversalCable) if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{ {
setEnergy(electricityStored - (Math.min(electricityStored, tier.OUTPUT) - CableUtils.emitEnergyToNetwork(Math.min(electricityStored, tier.OUTPUT), this, ForgeDirection.getOrientation(facing)))); setEnergy(electricityStored - (Math.min(electricityStored, tier.OUTPUT) - CableUtils.emitEnergyToNetwork(Math.min(electricityStored, tier.OUTPUT), this, ForgeDirection.getOrientation(facing))));
return; return;

View file

@ -3,6 +3,7 @@ package mekanism.common;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission; import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketDataRequest; import mekanism.common.network.PacketDataRequest;
@ -16,7 +17,7 @@ import com.google.common.io.ByteArrayDataInput;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
public class TileEntityLogisticalTransporter extends TileEntityTransmitter<InventoryNetwork> implements ILogisticalTransporter, ITileNetwork public class TileEntityLogisticalTransporter extends TileEntityTransmitter<InventoryNetwork> implements ITileNetwork
{ {
/** This transporter's active state. */ /** This transporter's active state. */
public boolean isActive = false; public boolean isActive = false;
@ -31,9 +32,9 @@ public class TileEntityLogisticalTransporter extends TileEntityTransmitter<Inven
for(TileEntity transporter : adjacentTransporters) for(TileEntity transporter : adjacentTransporters)
{ {
if(transporter instanceof ILogisticalTransporter && ((ILogisticalTransporter)transporter).getNetwork(false) != null) if(MekanismUtils.checkNetwork(transporter, InventoryNetwork.class) && ((ITransmitter<InventoryNetwork>)transporter).getNetwork(false) != null)
{ {
connectedNets.add(((ILogisticalTransporter)transporter).getNetwork()); connectedNets.add(((ITransmitter<InventoryNetwork>)transporter).getNetwork());
} }
} }
if(connectedNets.size() == 0 || worldObj.isRemote) if(connectedNets.size() == 0 || worldObj.isRemote)
@ -89,9 +90,9 @@ public class TileEntityLogisticalTransporter extends TileEntityTransmitter<Inven
{ {
TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj); TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj);
if(tileEntity instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(tileEntity, InventoryNetwork.class))
{ {
getNetwork().merge(((ILogisticalTransporter)tileEntity).getNetwork()); getNetwork().merge(((ITransmitter<InventoryNetwork>)tileEntity).getNetwork());
} }
} }

View file

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission; import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketDataRequest; import mekanism.common.network.PacketDataRequest;
@ -23,7 +24,7 @@ import com.google.common.io.ByteArrayDataInput;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork> implements IMechanicalPipe, IFluidHandler, ITileNetwork public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork> implements IFluidHandler, ITileNetwork
{ {
/** The fake tank used for fluid transfer calculations. */ /** The fake tank used for fluid transfer calculations. */
public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME); public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
@ -36,8 +37,7 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
/** The scale (0F -> 1F) of this pipe's fluid level. */ /** The scale (0F -> 1F) of this pipe's fluid level. */
public float fluidScale; public float fluidScale;
@Override
public void onTransfer(FluidStack fluidStack) public void onTransfer(FluidStack fluidStack)
{ {
if(fluidStack.isFluidEqual(refFluid)) if(fluidStack.isFluidEqual(refFluid))
@ -61,9 +61,9 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
for(TileEntity pipe : adjacentPipes) for(TileEntity pipe : adjacentPipes)
{ {
if(pipe instanceof IMechanicalPipe && ((IMechanicalPipe)pipe).getNetwork(false) != null) if(MekanismUtils.checkNetwork(pipe, FluidNetwork.class) && ((ITransmitter<FluidNetwork>)pipe).getNetwork(false) != null)
{ {
connectedNets.add(((IMechanicalPipe)pipe).getNetwork()); connectedNets.add(((ITransmitter<FluidNetwork>)pipe).getNetwork());
} }
} }
@ -120,9 +120,9 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
{ {
TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj); TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj);
if(tileEntity instanceof IMechanicalPipe) if(MekanismUtils.checkNetwork(tileEntity, FluidNetwork.class))
{ {
getNetwork().merge(((IMechanicalPipe)tileEntity).getNetwork()); getNetwork().merge(((ITransmitter<FluidNetwork>)tileEntity).getNetwork());
} }
} }

View file

@ -5,13 +5,13 @@ 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.IPressurizedTube; import mekanism.api.ITransmitter;
import mekanism.api.ITubeConnection; import mekanism.api.ITubeConnection;
import mekanism.api.Object3D; import mekanism.api.Object3D;
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 IPressurizedTube, ITubeConnection public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork> implements ITubeConnection
{ {
/** The gas currently displayed in this tube. */ /** The gas currently displayed in this tube. */
public EnumGas refGas = null; public EnumGas refGas = null;
@ -29,9 +29,9 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
for(TileEntity tube : adjacentTubes) for(TileEntity tube : adjacentTubes)
{ {
if(tube instanceof IPressurizedTube && ((IPressurizedTube)tube).getNetwork(false) != null) if(MekanismUtils.checkNetwork(tube, GasNetwork.class) && ((ITransmitter<GasNetwork>)tube).getNetwork(false) != null)
{ {
connectedNets.add(((IPressurizedTube)tube).getNetwork()); connectedNets.add(((ITransmitter<GasNetwork>)tube).getNetwork());
} }
} }
@ -90,9 +90,9 @@ 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(tileEntity instanceof IPressurizedTube && ((IPressurizedTube)tileEntity).canTransferGas()) if(MekanismUtils.checkNetwork(tileEntity, GasNetwork.class))
{ {
getNetwork().merge(((IPressurizedTube)tileEntity).getNetwork()); getNetwork().merge(((ITransmitter<GasNetwork>)tileEntity).getNetwork());
} }
} }
@ -104,19 +104,16 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
} }
} }
@Override
public boolean canTransferGas() public boolean canTransferGas()
{ {
return worldObj.getBlockPowerInput(xCoord, yCoord, zCoord) == 0; return worldObj.getBlockPowerInput(xCoord, yCoord, zCoord) == 0;
} }
@Override
public boolean canTransferGasToTube(TileEntity tile) public boolean canTransferGasToTube(TileEntity tile)
{ {
return canTransferGas(); return canTransferGas();
} }
@Override
public void onTransfer(EnumGas type) public void onTransfer(EnumGas type)
{ {
if(type == refGas) if(type == refGas)

View file

@ -35,6 +35,12 @@ public abstract class TileEntityTransmitter<N> extends TileEntity implements ITr
} }
} }
@Override
public boolean areNetworksEqual(TileEntity tileEntity)
{
return tileEntity instanceof ITransmitter && getNetwork().getClass() == ((ITransmitter)tileEntity).getNetwork().getClass();
}
@Override @Override
public N getNetwork() public N getNetwork()
{ {

View file

@ -2,23 +2,16 @@ package mekanism.common;
import java.util.HashSet; import java.util.HashSet;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.api.TransmitterNetworkRegistry;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet132TileEntityData;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.power.IPowerReceptor; import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerHandler; import buildcraft.api.power.PowerHandler;
import buildcraft.api.power.PowerHandler.PowerReceiver; import buildcraft.api.power.PowerHandler.PowerReceiver;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwork> implements IUniversalCable, IPowerReceptor public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwork> implements IPowerReceptor
{ {
/** A fake power handler used to initiate energy transfer calculations. */ /** A fake power handler used to initiate energy transfer calculations. */
public PowerHandler powerHandler; public PowerHandler powerHandler;
@ -47,9 +40,9 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
for(TileEntity cable : adjacentCables) for(TileEntity cable : adjacentCables)
{ {
if(cable instanceof IUniversalCable && ((IUniversalCable)cable).getNetwork(false) != null) if(MekanismUtils.checkNetwork(cable, EnergyNetwork.class) && ((ITransmitter<EnergyNetwork>)cable).getNetwork(false) != null)
{ {
connectedNets.add(((IUniversalCable)cable).getNetwork()); connectedNets.add(((ITransmitter<EnergyNetwork>)cable).getNetwork());
} }
} }
@ -106,9 +99,9 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
{ {
TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj); TileEntity tileEntity = Object3D.get(this).getFromSide(side).getTileEntity(worldObj);
if(tileEntity instanceof IUniversalCable) if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{ {
getNetwork().merge(((IUniversalCable)tileEntity).getNetwork()); getNetwork().merge(((ITransmitter<EnergyNetwork>)tileEntity).getNetwork());
} }
} }
@ -131,7 +124,6 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
@Override @Override
public void doWork(PowerHandler workProvider) {} public void doWork(PowerHandler workProvider) {}
@Override
public void setCachedEnergy(double scale) public void setCachedEnergy(double scale)
{ {
energyScale = scale; energyScale = scale;

View file

@ -2,6 +2,7 @@ package mekanism.common;
import java.util.Arrays; import java.util.Arrays;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ISidedInventory;
@ -23,7 +24,7 @@ public final class TransporterUtils
{ {
TileEntity transporter = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity transporter = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(transporter instanceof ILogisticalTransporter) if(MekanismUtils.checkNetwork(transporter, InventoryNetwork.class))
{ {
transporters[orientation.ordinal()] = transporter; transporters[orientation.ordinal()] = transporter;
} }
@ -98,7 +99,7 @@ public final class TransporterUtils
{ {
TileEntity inventory = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj); TileEntity inventory = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(inventory instanceof IInventory && !(inventory instanceof ILogisticalTransporter)) if(inventory instanceof IInventory && !(inventory instanceof ITransmitter))
{ {
inventories[orientation.ordinal()] = (IInventory)inventory; inventories[orientation.ordinal()] = (IInventory)inventory;
} }

View file

@ -14,13 +14,12 @@ import mekanism.api.ICableOutputter;
import mekanism.api.Object3D; import mekanism.api.Object3D;
import mekanism.client.IHasSound; import mekanism.client.IHasSound;
import mekanism.common.CableUtils; import mekanism.common.CableUtils;
import mekanism.common.EnergyNetwork;
import mekanism.common.IActiveState; import mekanism.common.IActiveState;
import mekanism.common.IRedstoneControl; import mekanism.common.IRedstoneControl;
import mekanism.common.IUniversalCable;
import mekanism.common.Mekanism; import mekanism.common.Mekanism;
import mekanism.common.MekanismUtils; import mekanism.common.MekanismUtils;
import mekanism.common.PacketHandler; import mekanism.common.PacketHandler;
import mekanism.common.IRedstoneControl.RedstoneControl;
import mekanism.common.PacketHandler.Transmission; import mekanism.common.PacketHandler.Transmission;
import mekanism.common.TileEntityElectricBlock; import mekanism.common.TileEntityElectricBlock;
import mekanism.common.network.PacketTileEntity; import mekanism.common.network.PacketTileEntity;
@ -105,7 +104,7 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
if(electricityStored > 0) if(electricityStored > 0)
{ {
if(tileEntity instanceof IUniversalCable) if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{ {
setEnergy(electricityStored - (Math.min(electricityStored, output) - CableUtils.emitEnergyToNetwork(Math.min(electricityStored, output), this, ForgeDirection.getOrientation(facing)))); setEnergy(electricityStored - (Math.min(electricityStored, output) - CableUtils.emitEnergyToNetwork(Math.min(electricityStored, output), this, ForgeDirection.getOrientation(facing))));
} }