blob: 440510aa4f3141eb052c62effb9376ba3ae453e7 [file] [log] [blame] [raw]
package universalelectricity.electricity;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.src.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.implement.IConductor;
import universalelectricity.implement.IElectricityReceiver;
public class ElectricityNetwork
{
private int ID;
public List<IConductor> conductors = new ArrayList<IConductor>();
public ElectricityNetwork(int ID, IConductor conductor)
{
this.ID = ID;
this.addConductor(conductor);
}
public void addConductor(IConductor newConductor)
{
this.cleanUpArray();
if (!conductors.contains(newConductor))
{
conductors.add(newConductor);
newConductor.setConnectionID(this.ID);
}
}
/**
* Get only the electric units that can receive electricity from the given side.
*/
public List<IElectricityReceiver> getConnectedReceivers()
{
this.cleanUpArray();
List<IElectricityReceiver> returnArray = new ArrayList<IElectricityReceiver>();
for (IConductor conductor : conductors)
{
for (byte i = 0; i < conductor.getConnectedBlocks().length; i++)
{
TileEntity tileEntity = conductor.getConnectedBlocks()[i];
if (tileEntity != null)
{
if (tileEntity instanceof IElectricityReceiver)
{
if (!returnArray.contains((IElectricityReceiver)tileEntity) && ((IElectricityReceiver)tileEntity).canReceiveFromSide(ForgeDirection.getOrientation(i).getOpposite()))
{
returnArray.add((IElectricityReceiver)tileEntity);
}
}
}
}
}
return returnArray;
}
public void cleanUpArray()
{
for (int i = 0; i < conductors.size(); i++)
{
if (conductors.get(i) == null)
{
conductors.remove(i);
}
else if (((TileEntity)conductors.get(i)).isInvalid())
{
conductors.remove(i);
}
}
}
public void setID(int ID)
{
this.ID = ID;
this.cleanUpArray();
for (IConductor conductor : this.conductors)
{
conductor.setConnectionID(this.ID);
}
}
public int getID()
{
return this.ID;
}
public void meltDown()
{
this.cleanUpArray();
for (int i = 0; i < conductors.size(); i++)
{
conductors.get(i).onConductorMelt();
}
}
public double getLowestAmpConductor()
{
double lowestAmp = 0;
for(IConductor conductor : conductors)
{
if(lowestAmp == 0 || conductor.getMaxAmps() < lowestAmp)
{
lowestAmp = conductor.getMaxAmps();
}
}
return lowestAmp;
}
}