ForgePatch/common/net/minecraftforge/liquids/LiquidTank.java
Christian 58fc306bf2 As agreed, liquid API from BuildCraft has been migrated to minecraft forge. There will be cleanups to follow,
including sided handling and client rendering tweaks. Stay tuned!
Tweak forgedirection for a couple of naming constants
2012-11-10 21:27:08 -05:00

100 lines
2 KiB
Java

package net.minecraftforge.liquids;
/**
* Reference implementation of ILiquidTank. Use this or implement your own.
*/
public class LiquidTank implements ILiquidTank {
private LiquidStack liquid;
private int capacity;
public LiquidTank(int capacity) {
this(null, capacity);
}
public LiquidTank(int liquidId, int quantity, int capacity) {
this(new LiquidStack(liquidId, quantity), capacity);
}
public LiquidTank(LiquidStack liquid, int capacity) {
this.liquid = liquid;
this.capacity = capacity;
}
@Override
public LiquidStack getLiquid() {
return this.liquid;
}
@Override
public void setLiquid(LiquidStack liquid) {
this.liquid = liquid;
}
@Override
public void setCapacity(int capacity) {
this.capacity = capacity;
}
@Override
public int getCapacity() {
return this.capacity;
}
@Override
public int fill(LiquidStack resource, boolean doFill) {
if(resource == null || resource.itemID <= 0)
return 0;
if(liquid == null || liquid.itemID <= 0) {
if(resource.amount <= capacity) {
if(doFill)
this.liquid = resource.copy();
return resource.amount;
} else {
if(doFill) {
this.liquid = resource.copy();
this.liquid.amount = capacity;
}
return capacity;
}
}
if(!liquid.isLiquidEqual(resource))
return 0;
int space = capacity - liquid.amount;
if(resource.amount <= space) {
if(doFill)
this.liquid.amount += resource.amount;
return resource.amount;
} else {
if(doFill)
this.liquid.amount = capacity;
return space;
}
}
@Override
public LiquidStack drain(int maxDrain, boolean doDrain) {
if(liquid == null || liquid.itemID <= 0)
return null;
if(liquid.amount <= 0)
return null;
int used = maxDrain;
if(liquid.amount < used)
used = liquid.amount;
if(doDrain) {
liquid.amount -= used;
}
LiquidStack drained = new LiquidStack(liquid.itemID, used, liquid.itemMeta);
// Reset liquid if emptied
if(liquid.amount <= 0)
liquid = null;
return drained;
}
}