001    package net.minecraftforge.liquids;
002    
003    import net.minecraft.tileentity.TileEntity;
004    
005    /**
006     * Reference implementation of ILiquidTank. Use this or implement your own.
007     */
008    public class LiquidTank implements ILiquidTank {
009        private LiquidStack liquid;
010        private int capacity;
011        private int tankPressure;
012        private TileEntity tile;
013    
014        public LiquidTank(int capacity) {
015            this(null, capacity);
016        }
017    
018        public LiquidTank(int liquidId, int quantity, int capacity) {
019            this(new LiquidStack(liquidId, quantity), capacity);
020        }
021    
022        public LiquidTank(int liquidId, int quantity, int capacity, TileEntity tile) {
023            this(liquidId, quantity, capacity);
024            this.tile = tile;
025        }
026    
027        public LiquidTank(LiquidStack liquid, int capacity) {
028            this.liquid = liquid;
029            this.capacity = capacity;
030        }
031    
032        public LiquidTank(LiquidStack liquid, int capacity, TileEntity tile)
033        {
034            this(liquid, capacity);
035            this.tile = tile;
036        }
037        @Override
038        public LiquidStack getLiquid() {
039            return this.liquid;
040        }
041    
042        @Override
043        public int getCapacity() {
044            return this.capacity;
045        }
046    
047        @Override
048        public int fill(LiquidStack resource, boolean doFill) {
049            if(resource == null || resource.itemID <= 0)
050                return 0;
051    
052            if(liquid == null || liquid.itemID <= 0) {
053                if(resource.amount <= capacity) {
054                    if(doFill)
055                        this.liquid = resource.copy();
056                    return resource.amount;
057                } else {
058                    if(doFill) {
059                        this.liquid = resource.copy();
060                        this.liquid.amount = capacity;
061                        if (tile!=null)
062                            LiquidEvent.fireEvent(new LiquidEvent.LiquidFillingEvent(liquid, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this));
063                    }
064                    return capacity;
065                }
066            }
067    
068            if(!liquid.isLiquidEqual(resource))
069                return 0;
070    
071            int space = capacity - liquid.amount;
072            if(resource.amount <= space) {
073                if(doFill)
074                    this.liquid.amount += resource.amount;
075                return resource.amount;
076            } else {
077    
078                if(doFill)
079                    this.liquid.amount = capacity;
080                return space;
081            }
082    
083        }
084        @Override
085        public LiquidStack drain(int maxDrain, boolean doDrain) {
086            if(liquid == null || liquid.itemID <= 0)
087                return null;
088            if(liquid.amount <= 0)
089                return null;
090    
091            int used = maxDrain;
092            if(liquid.amount < used)
093                used = liquid.amount;
094    
095            if(doDrain) {
096                liquid.amount -= used;
097            }
098    
099            LiquidStack drained = new LiquidStack(liquid.itemID, used, liquid.itemMeta);
100    
101            // Reset liquid if emptied
102            if(liquid.amount <= 0)
103                liquid = null;
104    
105            if (doDrain && tile!=null)
106                LiquidEvent.fireEvent(new LiquidEvent.LiquidDrainingEvent(drained, tile.worldObj, tile.xCoord, tile.yCoord, tile.zCoord, this));
107    
108            return drained;
109        }
110    
111        @Override
112        public int getTankPressure() {
113            return tankPressure;
114        }
115    
116        public void setTankPressure(int pressure)
117        {
118            this.tankPressure = pressure;
119        }
120    
121    }