package crazypants.enderio.conduit.liquid;
import net.minecraftforge.fluids.FluidStack;
import crazypants.enderio.conduit.AbstractConduitNetwork;
public class AbstractTankConduitNetwork<T extends AbstractTankConduit> extends AbstractConduitNetwork<ILiquidConduit, T> {
protected FluidStack liquidType;
protected boolean fluidTypeLocked = false;
protected AbstractTankConduitNetwork(Class<T> cl) {
super(cl, ILiquidConduit.class);
}
public FluidStack getFluidType() {
return liquidType;
}
@Override
public void addConduit(T con) {
super.addConduit(con);
con.setFluidType(liquidType);
if(con.fluidTypeLocked && !fluidTypeLocked) {
setFluidTypeLocked(true);
}
}
public boolean setFluidType(FluidStack newType) {
if(liquidType != null && liquidType.isFluidEqual(newType)) {
return false;
}
if(newType != null) {
liquidType = newType.copy();
liquidType.amount = 0;
} else {
liquidType = null;
}
for (AbstractTankConduit conduit : conduits) {
conduit.setFluidType(liquidType);
}
return true;
}
public void setFluidTypeLocked(boolean fluidTypeLocked) {
if(this.fluidTypeLocked == fluidTypeLocked) {
return;
}
this.fluidTypeLocked = fluidTypeLocked;
for (AbstractTankConduit conduit : conduits) {
conduit.setFluidTypeLocked(fluidTypeLocked);
}
}
public boolean canAcceptLiquid(FluidStack acceptable) {
return areFluidsCompatable(liquidType, acceptable);
}
public static boolean areFluidsCompatable(FluidStack a, FluidStack b) {
if(a == null || b == null) {
return true;
}
return a.isFluidEqual(b);
}
public int getTotalVolume() {
int totalVolume = 0;
for (T con : conduits) {
totalVolume += con.getTank().getFluidAmount();
}
return totalVolume;
}
}