0b9727305e
Update FML: d604e44 d604e44 InterModComms now supports a runtime polling based model for inter-mod comms at runtime. Deprecate method that shouldn't be used. COPY it's content to your mod. Don't CALL it. 8b7778c Don't be as alarming about item overwrites.
142 lines
3.4 KiB
Java
142 lines
3.4 KiB
Java
package net.minecraftforge.liquids;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
|
|
/**
|
|
* Reference implementation of ILiquidTank. Use this or implement your own.
|
|
*/
|
|
public class LiquidTank implements ILiquidTank {
|
|
private LiquidStack liquid;
|
|
private int capacity;
|
|
private int tankPressure;
|
|
private TileEntity tile;
|
|
|
|
public LiquidTank(int capacity)
|
|
{
|
|
this(null, capacity);
|
|
}
|
|
|
|
public LiquidTank(int liquidId, int quantity, int capacity)
|
|
{
|
|
this(new LiquidStack(liquidId, quantity), capacity);
|
|
}
|
|
|
|
public LiquidTank(int liquidId, int quantity, int capacity, TileEntity tile)
|
|
{
|
|
this(liquidId, quantity, capacity);
|
|
this.tile = tile;
|
|
}
|
|
|
|
public LiquidTank(LiquidStack liquid, int capacity)
|
|
{
|
|
this.liquid = liquid;
|
|
this.capacity = capacity;
|
|
}
|
|
|
|
public LiquidTank(LiquidStack liquid, int capacity, TileEntity tile)
|
|
{
|
|
this(liquid, capacity);
|
|
this.tile = tile;
|
|
}
|
|
|
|
@Override
|
|
public LiquidStack getLiquid()
|
|
{
|
|
return this.liquid;
|
|
}
|
|
|
|
@Override
|
|
public int getCapacity()
|
|
{
|
|
return this.capacity;
|
|
}
|
|
|
|
public void setLiquid(LiquidStack liquid)
|
|
{
|
|
this.liquid = liquid;
|
|
}
|
|
|
|
public void setCapacity(int capacity)
|
|
{
|
|
this.capacity = 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;
|
|
if (tile != null)
|
|
LiquidEvent.fireEvent(new LiquidEvent.LiquidFillingEvent(liquid, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this));
|
|
}
|
|
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;
|
|
|
|
if (doDrain && tile != null)
|
|
LiquidEvent.fireEvent(new LiquidEvent.LiquidDrainingEvent(drained, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this));
|
|
|
|
return drained;
|
|
}
|
|
|
|
@Override
|
|
public int getTankPressure()
|
|
{
|
|
return tankPressure;
|
|
}
|
|
|
|
public void setTankPressure(int pressure)
|
|
{
|
|
this.tankPressure = pressure;
|
|
}
|
|
|
|
}
|