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.minecraftforge.common.ForgeDirection;
import mekanism.common.EnergyNetwork;
import mekanism.common.IMechanicalPipe;
import mekanism.common.IUniversalCable;
public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T, A, N>
public abstract class DynamicNetwork<A, N> implements ITransmitterNetwork<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 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;
public void addAllTransmitters(Set<T> newTransmitters)
public void addAllTransmitters(Set<ITransmitter<N>> newTransmitters)
{
transmitters.addAll(newTransmitters);
}
@Override
public void removeTransmitter(T transmitter)
public void removeTransmitter(ITransmitter<N> transmitter)
{
transmitters.remove(transmitter);
@ -45,7 +41,7 @@ public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T,
public void register()
{
try {
T aTransmitter = transmitters.iterator().next();
ITransmitter<N> aTransmitter = transmitters.iterator().next();
if(aTransmitter instanceof TileEntity && !((TileEntity)aTransmitter).worldObj.isRemote)
{

View file

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

View file

@ -22,24 +22,21 @@ public final class GasTransmission
{
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);
if(tileEntity instanceof IPressurizedTube)
{
if(((IPressurizedTube)tileEntity).canTransferGasToTube(tube))
{
tubes[orientation.ordinal()] = tube;
}
}
else if(tube instanceof IPressurizedTube && ((IPressurizedTube)tube).canTransferGas())
{
TileEntity tube = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(tileEntity instanceof IPressurizedTube)
{
if(((IPressurizedTube)tileEntity).canTransferGasToTube(tube))
{
tubes[orientation.ordinal()] = tube;
}
}
}
}
else if(tube instanceof IPressurizedTube)
{
tubes[orientation.ordinal()] = tube;
}
}
return tubes;
@ -54,7 +51,7 @@ public final class GasTransmission
{
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)
{
@ -79,7 +76,7 @@ public final class GasTransmission
{
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)
{

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

View file

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

View file

@ -1,11 +1,10 @@
package mekanism.client;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.Object3D;
import mekanism.common.EnergyNetwork.NetworkFinder;
import mekanism.common.IUniversalCable;
import mekanism.common.TileEntityUniversalCable;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -32,9 +31,9 @@ public class EnergyClientUpdate
{
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.common.FluidNetwork.NetworkFinder;
import mekanism.common.IMechanicalPipe;
import mekanism.common.IUniversalCable;
import mekanism.common.TileEntityMechanicalPipe;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
@ -33,9 +32,9 @@ public class FluidClientUpdate
{
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.List;
import buildcraft.api.tools.IToolWrench;
import mekanism.api.GasTransmission;
import mekanism.api.IPressurizedTube;
import mekanism.api.ITransmitter;
import mekanism.api.ITubeConnection;
import mekanism.client.ClientProxy;
import net.minecraft.block.Block;
@ -23,6 +21,7 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.tools.IToolWrench;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -264,22 +263,7 @@ public class BlockTransmitter extends Block
if(!world.isRemote)
{
if(tileEntity instanceof IUniversalCable)
{
((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();
}
((ITransmitter)tileEntity).refreshNetwork();
}
}
@ -290,22 +274,7 @@ public class BlockTransmitter extends Block
if(!world.isRemote)
{
if(tileEntity instanceof IUniversalCable)
{
((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();
}
((ITransmitter)tileEntity).refreshNetwork();
}
}

View file

@ -11,11 +11,12 @@ import java.util.Set;
import mekanism.api.ICableOutputter;
import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.power.IPowerReceptor;
import universalelectricity.core.block.IElectrical;
import buildcraft.api.power.IPowerReceptor;
public final class CableUtils
{
@ -34,7 +35,7 @@ public final class CableUtils
if(acceptor instanceof IStrictEnergyAcceptor ||
acceptor instanceof IEnergySink ||
(acceptor instanceof IPowerReceptor && !(acceptor instanceof IUniversalCable) && Mekanism.hooks.BuildCraftLoaded) ||
(acceptor instanceof IPowerReceptor && !(acceptor instanceof ITransmitter) && Mekanism.hooks.BuildCraftLoaded) ||
acceptor instanceof IElectrical)
{
acceptors[orientation.ordinal()] = acceptor;
@ -57,7 +58,7 @@ public final class CableUtils
{
TileEntity cable = Object3D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.worldObj);
if(cable instanceof IUniversalCable)
if(MekanismUtils.checkNetwork(cable, EnergyNetwork.class))
{
cables[orientation.ordinal()] = cable;
}
@ -166,7 +167,7 @@ public final class CableUtils
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()))
{
@ -191,9 +192,9 @@ public final class CableUtils
{
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>();
ignored.add(sender);
@ -224,9 +225,9 @@ public final class CableUtils
{
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.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import mekanism.api.DynamicNetwork;
import mekanism.api.IStrictEnergyAcceptor;
import mekanism.api.ITransmitterNetwork;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import mekanism.api.TransmitterNetworkRegistry;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.ChunkEvent;
import universalelectricity.core.block.IElectrical;
import universalelectricity.core.electricity.ElectricityPack;
import buildcraft.api.power.IPowerReceptor;
@ -32,18 +27,24 @@ import buildcraft.api.power.PowerHandler.PowerReceiver;
import buildcraft.api.power.PowerHandler.Type;
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 joulesTransmitted = 0;
private double joulesLastTick = 0;
public EnergyNetwork(IUniversalCable... varCables)
public EnergyNetwork(ITransmitter<EnergyNetwork>... varCables)
{
transmitters.addAll(Arrays.asList(varCables));
register();
}
public EnergyNetwork(Collection<ITransmitter<EnergyNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public EnergyNetwork(Set<EnergyNetwork> networks)
{
for(EnergyNetwork net : networks)
@ -201,15 +202,15 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
@Override
public void refresh()
{
Set<IUniversalCable> iterCables = (Set<IUniversalCable>) transmitters.clone();
Iterator<IUniversalCable> it = iterCables.iterator();
Set<ITransmitter<EnergyNetwork>> iterCables = (Set<ITransmitter<EnergyNetwork>>) transmitters.clone();
Iterator<ITransmitter<EnergyNetwork>> it = iterCables.iterator();
possibleAcceptors.clear();
acceptorDirections.clear();
while(it.hasNext())
{
IUniversalCable conductor = (IUniversalCable)it.next();
ITransmitter<EnergyNetwork> conductor = (ITransmitter<EnergyNetwork>)it.next();
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);
for(TileEntity acceptor : acceptors)
{
if(acceptor != null && !(acceptor instanceof IUniversalCable))
if(acceptor != null && !(acceptor instanceof ITransmitter))
{
possibleAcceptors.add(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();
if(FMLCommonHandler.instance().getEffectiveSide().isServer())
{
lastPowerScale = currentPowerScale;
@ -258,7 +260,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
}
@Override
public void split(IUniversalCable splitPoint)
public void split(ITransmitter<EnergyNetwork> splitPoint)
{
if(splitPoint instanceof TileEntity)
{
@ -281,7 +283,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{
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));
List<Object3D> partNetwork = finder.exploreNetwork();
@ -290,7 +292,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{
TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof IUniversalCable && !dealtWith[countTwo])
if(MekanismUtils.checkNetwork(connectedBlockB, EnergyNetwork.class) && !dealtWith[countTwo])
{
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)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof IUniversalCable)
if(MekanismUtils.checkNetwork(nodeTile, EnergyNetwork.class))
{
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();
}
}
@ -323,26 +326,26 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
}
@Override
public void fixMessedUpNetwork(IUniversalCable cable)
public void fixMessedUpNetwork(ITransmitter<EnergyNetwork> cable)
{
if(cable instanceof TileEntity)
{
NetworkFinder finder = new NetworkFinder(((TileEntity)cable).getWorldObj(), Object3D.get((TileEntity)cable), null);
List<Object3D> partNetwork = finder.exploreNetwork();
Set<IUniversalCable> newCables = new HashSet<IUniversalCable>();
Set<ITransmitter<EnergyNetwork>> newCables = new HashSet<ITransmitter<EnergyNetwork>>();
for(Object3D node : partNetwork)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity)cable).worldObj);
if(nodeTile instanceof IUniversalCable)
if(nodeTile instanceof ITransmitter)
{
((IUniversalCable)nodeTile).removeFromNetwork();
newCables.add((IUniversalCable)nodeTile);
((ITransmitter<EnergyNetwork>)nodeTile).removeFromNetwork();
newCables.add((ITransmitter<EnergyNetwork>)nodeTile);
}
}
EnergyNetwork newNetwork = new EnergyNetwork(newCables.toArray(new IUniversalCable[0]));
EnergyNetwork newNetwork = new EnergyNetwork(newCables);
newNetwork.refresh();
newNetwork.fixed = true;
deregister();
@ -370,7 +373,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
public void loopAll(Object3D location)
{
if(location.getTileEntity(worldObj) instanceof IUniversalCable)
if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), EnergyNetwork.class))
{
iterated.add(location);
}
@ -383,7 +386,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, E
{
TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof IUniversalCable)
if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{
loopAll(obj);
}

View file

@ -2,6 +2,7 @@ package mekanism.common;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
@ -9,6 +10,7 @@ import java.util.List;
import java.util.Set;
import mekanism.api.DynamicNetwork;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -19,14 +21,20 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler;
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));
register();
}
public FluidNetwork(Collection<ITransmitter<FluidNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public FluidNetwork(Set<FluidNetwork> networks)
{
for(FluidNetwork net : networks)
@ -104,7 +112,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
@Override
public void refresh()
{
Set<IMechanicalPipe> iterPipes = (Set<IMechanicalPipe>) transmitters.clone();
Set<ITransmitter<FluidNetwork>> iterPipes = (Set<ITransmitter<FluidNetwork>>)transmitters.clone();
Iterator it = iterPipes.iterator();
possibleAcceptors.clear();
@ -112,7 +120,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
while(it.hasNext())
{
IMechanicalPipe conductor = (IMechanicalPipe)it.next();
ITransmitter<FluidNetwork> conductor = (ITransmitter<FluidNetwork>)it.next();
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);
for(IFluidHandler acceptor : acceptors)
{
if(acceptor != null && !(acceptor instanceof IMechanicalPipe))
if(acceptor != null && !(acceptor instanceof ITransmitter))
{
possibleAcceptors.add(acceptor);
acceptorDirections.put(acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));
@ -153,7 +161,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
}
@Override
public void split(IMechanicalPipe splitPoint)
public void split(ITransmitter<FluidNetwork> splitPoint)
{
if(splitPoint instanceof TileEntity)
{
@ -176,7 +184,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{
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));
List<Object3D> partNetwork = finder.exploreNetwork();
@ -185,7 +193,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{
TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof IMechanicalPipe && !dealtWith[countTwo])
if(MekanismUtils.checkNetwork(connectedBlockB, FluidNetwork.class) && !dealtWith[countTwo])
{
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)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof IMechanicalPipe)
if(MekanismUtils.checkNetwork(nodeTile, FluidNetwork.class))
{
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();
}
}
@ -218,26 +227,26 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
}
@Override
public void fixMessedUpNetwork(IMechanicalPipe pipe)
public void fixMessedUpNetwork(ITransmitter<FluidNetwork> pipe)
{
if(pipe instanceof TileEntity)
{
NetworkFinder finder = new NetworkFinder(((TileEntity)pipe).getWorldObj(), Object3D.get((TileEntity)pipe), null);
List<Object3D> partNetwork = finder.exploreNetwork();
Set<IMechanicalPipe> newPipes = new HashSet<IMechanicalPipe>();
Set<ITransmitter<FluidNetwork>> newPipes = new HashSet<ITransmitter<FluidNetwork>>();
for(Object3D node : partNetwork)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity)pipe).worldObj);
if(nodeTile instanceof IMechanicalPipe)
if(MekanismUtils.checkNetwork(nodeTile, FluidNetwork.class))
{
((IMechanicalPipe) nodeTile).removeFromNetwork();
newPipes.add((IMechanicalPipe)nodeTile);
((ITransmitter<FluidNetwork>)nodeTile).removeFromNetwork();
newPipes.add((ITransmitter<FluidNetwork>)nodeTile);
}
}
FluidNetwork newNetwork = new FluidNetwork(newPipes.toArray(new IMechanicalPipe[0]));
FluidNetwork newNetwork = new FluidNetwork(newPipes);
newNetwork.refresh();
newNetwork.fixed = true;
deregister();
@ -265,7 +274,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
public void loopAll(Object3D location)
{
if(location.getTileEntity(worldObj) instanceof IMechanicalPipe)
if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), FluidNetwork.class))
{
iterated.add(location);
}
@ -278,7 +287,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler,
{
TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof IMechanicalPipe)
if(MekanismUtils.checkNetwork(tileEntity, FluidNetwork.class))
{
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.Arrays;
import java.util.HashMap;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import mekanism.api.DynamicNetwork;
import mekanism.api.ITransmitterNetwork;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import mekanism.api.TransmitterNetworkRegistry;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
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));
register();
}
public InventoryNetwork(Collection<ITransmitter<InventoryNetwork>> collection)
{
transmitters.addAll(collection);
register();
}
public InventoryNetwork(Set<InventoryNetwork> networks)
{
for(InventoryNetwork net : networks)
@ -53,15 +54,15 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
@Override
public void refresh()
{
Set<ILogisticalTransporter> iterPipes = (Set<ILogisticalTransporter>)transmitters.clone();
Iterator it = iterPipes.iterator();
Set<ITransmitter<InventoryNetwork>> iterTransmitters = (Set<ITransmitter<InventoryNetwork>>)transmitters.clone();
Iterator it = iterTransmitters.iterator();
possibleAcceptors.clear();
acceptorDirections.clear();
while(it.hasNext())
{
ILogisticalTransporter conductor = (ILogisticalTransporter)it.next();
ITransmitter<InventoryNetwork> conductor = (ITransmitter<InventoryNetwork>)it.next();
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)
{
if(inventory != null && !(inventory instanceof ILogisticalTransporter))
if(inventory != null && !(inventory instanceof ITransmitter))
{
possibleAcceptors.add(inventory);
acceptorDirections.put(inventory, ForgeDirection.getOrientation(Arrays.asList(inventories).indexOf(inventory)));
@ -102,7 +103,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
}
@Override
public void split(ILogisticalTransporter splitPoint)
public void split(ITransmitter<InventoryNetwork> splitPoint)
{
if(splitPoint instanceof TileEntity)
{
@ -125,7 +126,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{
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));
List<Object3D> partNetwork = finder.exploreNetwork();
@ -134,7 +135,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{
TileEntity connectedBlockB = connectedBlocks[countTwo];
if(connectedBlockB instanceof ILogisticalTransporter && !dealtWith[countTwo])
if(MekanismUtils.checkNetwork(connectedBlockB, InventoryNetwork.class) && !dealtWith[countTwo])
{
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)
{
TileEntity nodeTile = node.getTileEntity(((TileEntity)splitPoint).worldObj);
if(nodeTile instanceof ILogisticalTransporter)
if(MekanismUtils.checkNetwork(nodeTile, InventoryNetwork.class))
{
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();
}
}
@ -168,26 +169,26 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
}
@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();
Set<ILogisticalTransporter> newTransporters = new HashSet<ILogisticalTransporter>();
Set<ITransmitter<InventoryNetwork>> newTransporters = new HashSet<ITransmitter<InventoryNetwork>>();
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();
newTransporters.add((ILogisticalTransporter)nodeTile);
((ITransmitter<InventoryNetwork>)nodeTile).removeFromNetwork();
newTransporters.add((ITransmitter<InventoryNetwork>)nodeTile);
}
}
InventoryNetwork newNetwork = new InventoryNetwork(newTransporters.toArray(new ILogisticalTransporter[0]));
InventoryNetwork newNetwork = new InventoryNetwork(newTransporters);
newNetwork.refresh();
newNetwork.fixed = true;
deregister();
@ -215,7 +216,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
public void loopAll(Object3D location)
{
if(location.getTileEntity(worldObj) instanceof ILogisticalTransporter)
if(MekanismUtils.checkNetwork(location.getTileEntity(worldObj), InventoryNetwork.class))
{
iterated.add(location);
}
@ -228,7 +229,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
{
TileEntity tileEntity = obj.getTileEntity(worldObj);
if(tileEntity instanceof ILogisticalTransporter)
if(MekanismUtils.checkNetwork(tileEntity, InventoryNetwork.class))
{
loopAll(obj);
}

View file

@ -6,6 +6,7 @@ import java.util.Random;
import mekanism.api.EnumColor;
import mekanism.api.IConfigurable;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.network.PacketTileEntity;
@ -66,9 +67,9 @@ public class ItemConfigurator extends ItemEnergized
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)

View file

@ -2,16 +2,16 @@ package mekanism.common;
import java.util.ArrayList;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
import mekanism.api.EnumColor;
import mekanism.api.ITransmitter;
import mekanism.api.TransmitterNetworkRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatMessageComponent;
import net.minecraft.world.World;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
public class ItemEnergyMeter extends ItemEnergized
{
@ -29,13 +29,13 @@ public class ItemEnergyMeter extends ItemEnergized
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if(tileEntity instanceof IUniversalCable)
if(MekanismUtils.checkNetwork(tileEntity, EnergyNetwork.class))
{
if(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 + " *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 + " -------------"));
}
}
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 + " *Networks: " + EnumColor.DARK_GREY + TransmitterNetworkRegistry.getInstance().toString()));
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 mekanism.api.GasNetwork.GasTransferEvent;
import mekanism.api.GasTransmission;
import mekanism.api.InfuseObject;
import mekanism.api.InfuseRegistry;
import mekanism.api.InfuseType;

View file

@ -13,6 +13,8 @@ import java.util.Iterator;
import mekanism.api.EnumColor;
import mekanism.api.IConfigurable;
import mekanism.api.ITransmitter;
import mekanism.api.ITransmitterNetwork;
import mekanism.api.Object3D;
import mekanism.common.IFactory.RecipeType;
import mekanism.common.IRedstoneControl.RedstoneControl;
@ -958,6 +960,19 @@ public final class MekanismUtils
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
{
GUI("gui"),

View file

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

View file

@ -74,7 +74,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn
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))));
return;

View file

@ -3,6 +3,7 @@ package mekanism.common;
import java.util.ArrayList;
import java.util.HashSet;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission;
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.SideOnly;
public class TileEntityLogisticalTransporter extends TileEntityTransmitter<InventoryNetwork> implements ILogisticalTransporter, ITileNetwork
public class TileEntityLogisticalTransporter extends TileEntityTransmitter<InventoryNetwork> implements ITileNetwork
{
/** This transporter's active state. */
public boolean isActive = false;
@ -31,9 +32,9 @@ public class TileEntityLogisticalTransporter extends TileEntityTransmitter<Inven
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)
@ -89,9 +90,9 @@ public class TileEntityLogisticalTransporter extends TileEntityTransmitter<Inven
{
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.HashSet;
import mekanism.api.ITransmitter;
import mekanism.api.Object3D;
import mekanism.common.PacketHandler.Transmission;
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.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. */
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. */
public float fluidScale;
@Override
public void onTransfer(FluidStack fluidStack)
{
if(fluidStack.isFluidEqual(refFluid))
@ -61,9 +61,9 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
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);
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.GasNetwork;
import mekanism.api.GasTransmission;
import mekanism.api.IPressurizedTube;
import mekanism.api.ITransmitter;
import mekanism.api.ITubeConnection;
import mekanism.api.Object3D;
import net.minecraft.tileentity.TileEntity;
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. */
public EnumGas refGas = null;
@ -29,9 +29,9 @@ public class TileEntityPressurizedTube extends TileEntityTransmitter<GasNetwork>
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);
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()
{
return worldObj.getBlockPowerInput(xCoord, yCoord, zCoord) == 0;
}
@Override
public boolean canTransferGasToTube(TileEntity tile)
{
return canTransferGas();
}
@Override
public void onTransfer(EnumGas type)
{
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
public N getNetwork()
{

View file

@ -2,23 +2,16 @@ package mekanism.common;
import java.util.HashSet;
import mekanism.api.ITransmitter;
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.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.api.power.IPowerReceptor;
import buildcraft.api.power.PowerHandler;
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. */
public PowerHandler powerHandler;
@ -47,9 +40,9 @@ public class TileEntityUniversalCable extends TileEntityTransmitter<EnergyNetwor
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);
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
public void doWork(PowerHandler workProvider) {}
@Override
public void setCachedEnergy(double scale)
{
energyScale = scale;

View file

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

View file

@ -14,13 +14,12 @@ import mekanism.api.ICableOutputter;
import mekanism.api.Object3D;
import mekanism.client.IHasSound;
import mekanism.common.CableUtils;
import mekanism.common.EnergyNetwork;
import mekanism.common.IActiveState;
import mekanism.common.IRedstoneControl;
import mekanism.common.IUniversalCable;
import mekanism.common.Mekanism;
import mekanism.common.MekanismUtils;
import mekanism.common.PacketHandler;
import mekanism.common.IRedstoneControl.RedstoneControl;
import mekanism.common.PacketHandler.Transmission;
import mekanism.common.TileEntityElectricBlock;
import mekanism.common.network.PacketTileEntity;
@ -105,7 +104,7 @@ public abstract class TileEntityGenerator extends TileEntityElectricBlock implem
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))));
}