Files
TinkersConstruct/src/main/java/tconstruct/library/component/MultiFluidTank.java
T

203 lines
5.1 KiB
Java
Raw Normal View History

2013-09-29 19:38:20 -07:00
package tconstruct.library.component;
2014-09-09 18:30:15 +10:00
import java.util.*;
import net.minecraft.nbt.*;
import net.minecraftforge.fluids.*;
2013-10-09 22:21:19 -07:00
import tconstruct.library.crafting.Smeltery;
2013-09-29 19:38:20 -07:00
public class MultiFluidTank extends LogicComponent implements IFluidTank
{
2013-10-01 19:44:04 -07:00
public ArrayList<FluidStack> fluidlist = new ArrayList<FluidStack>();
protected int maxLiquid;
protected int currentLiquid;
public MultiFluidTank()
{
}
public MultiFluidTank(int max)
{
maxLiquid = max;
}
public void setCapacity (int i)
{
maxLiquid = i;
}
@Override
public int getCapacity ()
{
return maxLiquid;
}
@Override
public int getFluidAmount ()
{
return currentLiquid;
}
2013-09-29 19:38:20 -07:00
@Override
public FluidStack drain (int maxDrain, boolean doDrain)
{
2013-10-01 19:44:04 -07:00
if (fluidlist.size() == 0)
2013-09-29 19:38:20 -07:00
return null;
2013-10-01 19:44:04 -07:00
FluidStack liquid = fluidlist.get(0);
2013-09-29 19:38:20 -07:00
if (liquid != null)
{
if (liquid.amount - maxDrain <= 0)
{
FluidStack liq = liquid.copy();
if (doDrain)
{
2013-10-01 19:44:04 -07:00
fluidlist.remove(liquid);
2013-09-29 19:38:20 -07:00
currentLiquid = 0;
}
return liq;
}
else
{
if (doDrain)
{
liquid.amount -= maxDrain;
currentLiquid -= maxDrain;
}
2015-04-10 11:49:04 +02:00
return new FluidStack(liquid.getFluid(), maxDrain, liquid.tag);
2013-09-29 19:38:20 -07:00
}
}
else
{
return new FluidStack(0, 0);
}
}
@Override
public int fill (FluidStack resource, boolean doFill)
{
if (resource != null && currentLiquid < maxLiquid)
{
if (resource.amount + currentLiquid > maxLiquid)
resource.amount = maxLiquid - currentLiquid;
int amount = resource.amount;
if (doFill)
{
if (addFluidToTank(resource, false))
{
2013-10-01 19:44:04 -07:00
ArrayList alloys = Smeltery.mixMetals(fluidlist);
2013-09-29 19:38:20 -07:00
for (int al = 0; al < alloys.size(); al++)
{
FluidStack liquid = (FluidStack) alloys.get(al);
addFluidToTank(liquid, true);
}
}
}
return amount;
}
else
return 0;
}
2013-10-01 19:44:04 -07:00
public boolean addFluidToTank (FluidStack liquid, boolean first)
2013-09-29 19:38:20 -07:00
{
2013-10-01 19:44:04 -07:00
if (fluidlist.size() == 0)
2013-09-29 19:38:20 -07:00
{
2013-10-01 19:44:04 -07:00
fluidlist.add(liquid.copy());
2013-09-29 19:38:20 -07:00
currentLiquid += liquid.amount;
return true;
}
else
{
if (liquid.amount + currentLiquid > maxLiquid)
return false;
currentLiquid += liquid.amount;
boolean added = false;
2013-10-01 19:44:04 -07:00
for (int i = 0; i < fluidlist.size(); i++)
2013-09-29 19:38:20 -07:00
{
2013-10-01 19:44:04 -07:00
FluidStack l = fluidlist.get(i);
2013-09-29 19:38:20 -07:00
if (l.isFluidEqual(liquid))
{
l.amount += liquid.amount;
added = true;
}
if (l.amount <= 0)
{
2013-10-01 19:44:04 -07:00
fluidlist.remove(l);
2013-09-29 19:38:20 -07:00
i--;
}
}
if (!added)
{
if (first)
2013-10-01 19:44:04 -07:00
fluidlist.add(0, liquid.copy());
2013-09-29 19:38:20 -07:00
else
2013-10-01 19:44:04 -07:00
fluidlist.add(liquid.copy());
2013-09-29 19:38:20 -07:00
}
return true;
}
}
@Override
public FluidStack getFluid ()
{
2013-10-01 19:44:04 -07:00
if (fluidlist.size() == 0)
2013-09-29 19:38:20 -07:00
return null;
2013-10-01 19:44:04 -07:00
return fluidlist.get(0);
2013-09-29 19:38:20 -07:00
}
public List<FluidStack> getAllFluids ()
2013-10-09 22:21:19 -07:00
{
return fluidlist;
}
2013-09-29 19:38:20 -07:00
@Override
public FluidTankInfo getInfo ()
{
return new FluidTankInfo(this);
}
public FluidTankInfo[] getMultiTankInfo ()
{
2013-10-01 19:44:04 -07:00
FluidTankInfo[] info = new FluidTankInfo[fluidlist.size() + 1];
for (int i = 0; i < fluidlist.size(); i++)
2013-09-29 19:38:20 -07:00
{
2013-10-01 19:44:04 -07:00
FluidStack fluid = fluidlist.get(i);
2013-09-29 19:38:20 -07:00
info[i] = new FluidTankInfo(fluid.copy(), fluid.amount);
}
2013-10-01 19:44:04 -07:00
info[fluidlist.size()] = new FluidTankInfo(null, maxLiquid - currentLiquid);
2013-09-29 19:38:20 -07:00
return info;
}
2013-10-07 20:49:55 -07:00
/* Sync liquids */
2013-09-29 19:38:20 -07:00
@Override
2013-10-07 20:49:55 -07:00
public void readNetworkNBT (NBTTagCompound tags)
2013-09-29 19:38:20 -07:00
{
2014-02-17 15:09:49 -05:00
NBTTagList liquidTag = tags.getTagList("Liquids", 10);
2013-10-01 19:44:04 -07:00
fluidlist.clear();
for (int iter = 0; iter < liquidTag.tagCount(); iter++)
{
2014-02-05 08:28:53 -05:00
NBTTagCompound nbt = (NBTTagCompound) liquidTag.getCompoundTagAt(iter);
2013-10-01 19:44:04 -07:00
FluidStack fluid = FluidStack.loadFluidStackFromNBT(nbt);
if (fluid != null)
fluidlist.add(fluid);
2013-10-01 19:44:04 -07:00
}
2013-09-29 19:38:20 -07:00
}
@Override
2013-10-07 20:49:55 -07:00
public void writeNetworkNBT (NBTTagCompound tags)
2013-09-29 19:38:20 -07:00
{
2013-10-01 19:44:04 -07:00
NBTTagList taglist = new NBTTagList();
for (FluidStack liquid : fluidlist)
{
NBTTagCompound nbt = new NBTTagCompound();
liquid.writeToNBT(nbt);
taglist.appendTag(nbt);
}
2013-09-29 19:38:20 -07:00
2013-10-01 19:44:04 -07:00
tags.setTag("Liquids", taglist);
}
2014-02-13 23:03:13 -05:00
}