BloodMagic/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java

154 lines
3.3 KiB
Java
Raw Normal View History

2014-08-25 11:58:39 +00:00
package WayofTime.alchemicalWizardry.api.alchemy.energy;
import net.minecraft.nbt.NBTTagCompound;
public class ReagentContainer implements IReagentContainer
{
2014-10-13 20:33:20 +00:00
protected ReagentStack reagentStack;
protected int capacity;
2014-08-25 11:58:39 +00:00
2014-10-13 20:33:20 +00:00
public ReagentContainer(int capacity)
2014-08-25 11:58:39 +00:00
{
this(null, capacity);
}
public ReagentContainer(ReagentStack stack, int capacity)
{
this.reagentStack = stack;
this.capacity = capacity;
}
public ReagentContainer(Reagent reagent, int amount, int capacity)
{
this(new ReagentStack(reagent, amount), capacity);
}
public static ReagentContainer readFromNBT(NBTTagCompound nbt)
{
ReagentStack reagent = ReagentStack.loadReagentStackFromNBT(nbt);
int capacity = nbt.getInteger("capacity");
2014-10-13 20:33:20 +00:00
2014-08-25 11:58:39 +00:00
if (reagent != null)
{
return new ReagentContainer(reagent, capacity);
2014-10-13 20:33:20 +00:00
} else
2014-08-25 11:58:39 +00:00
{
2014-10-13 20:33:20 +00:00
return new ReagentContainer(null, capacity);
2014-08-25 11:58:39 +00:00
}
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{
if (reagentStack != null)
{
reagentStack.writeToNBT(nbt);
}
2014-10-13 20:33:20 +00:00
2014-08-25 11:58:39 +00:00
nbt.setInteger("capacity", capacity);
return nbt;
}
2014-10-13 20:33:20 +00:00
2014-08-25 11:58:39 +00:00
@Override
public ReagentStack getReagent()
{
return reagentStack;
}
@Override
public int getReagentStackAmount()
{
if (reagentStack == null)
{
return 0;
}
return reagentStack.amount;
}
@Override
public int getCapacity()
{
return capacity;
}
@Override
public int fill(ReagentStack resource, boolean doFill)
{
if (resource == null)
{
return 0;
}
if (!doFill)
{
if (reagentStack == null)
{
return Math.min(capacity, resource.amount);
}
if (!reagentStack.isReagentEqual(resource))
{
return 0;
}
return Math.min(capacity - reagentStack.amount, resource.amount);
}
if (reagentStack == null)
{
reagentStack = new ReagentStack(resource, Math.min(capacity, resource.amount));
return reagentStack.amount;
}
if (!reagentStack.isReagentEqual(resource))
{
return 0;
}
int filled = capacity - reagentStack.amount;
if (resource.amount < filled)
{
reagentStack.amount += resource.amount;
filled = resource.amount;
2014-10-13 20:33:20 +00:00
} else
2014-08-25 11:58:39 +00:00
{
reagentStack.amount = capacity;
}
return filled;
}
@Override
public ReagentStack drain(int maxDrain, boolean doDrain)
{
if (reagentStack == null)
{
return null;
}
int drained = maxDrain;
if (reagentStack.amount < drained)
{
drained = reagentStack.amount;
}
ReagentStack stack = new ReagentStack(reagentStack, drained);
if (doDrain)
{
reagentStack.amount -= drained;
if (reagentStack.amount <= 0)
{
reagentStack = null;
}
}
return stack;
}
2014-10-13 20:33:20 +00:00
@Override
public ReagentContainerInfo getInfo()
{
return new ReagentContainerInfo(this);
}
2014-08-25 11:58:39 +00:00
}