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