blob: 5593a83d30630e85399d6f53c64e426ca508811d [file] [log] [blame] [raw]
package mekanism.induction.common.wire;
import ic2.api.energy.tile.IEnergySink;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import codechicken.multipart.TMultiPart;
import codechicken.multipart.TileMultipart;
public class TEnergySink extends TileMultipart implements IEnergySink
{
public Set<IEnergySink> ic2Sinks = new HashSet<IEnergySink>();
@Override
public void copyFrom(TileMultipart that)
{
super.copyFrom(that);
if (that instanceof TEnergySink)
ic2Sinks = ((TEnergySink) that).ic2Sinks;
}
@Override
public void bindPart(TMultiPart part)
{
super.bindPart(part);
if (part instanceof IEnergySink)
ic2Sinks.add((IEnergySink) part);
}
@Override
public void partRemoved(TMultiPart part, int p)
{
super.partRemoved(part, p);
if (part instanceof IEnergySink)
ic2Sinks.remove(part);
}
@Override
public void clearParts()
{
super.clearParts();
ic2Sinks.clear();
}
@Override
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction)
{
for (IEnergySink sink : this.ic2Sinks)
{
if (sink.acceptsEnergyFrom(emitter, direction))
return true;
}
return false;
}
@Override
public double demandedEnergyUnits()
{
double demanded = 0;
for (IEnergySink sink : this.ic2Sinks)
{
demanded += sink.demandedEnergyUnits();
}
return demanded;
}
@Override
public double injectEnergyUnits(ForgeDirection directionFrom, double amount)
{
for (IEnergySink sink : this.ic2Sinks)
{
amount = sink.injectEnergyUnits(directionFrom, Math.min(amount, sink.demandedEnergyUnits()));
}
return amount;
}
@Override
public int getMaxSafeInput()
{
int safe = 0;
for (IEnergySink sink : this.ic2Sinks)
{
safe += sink.getMaxSafeInput();
}
return safe;
}
}