001    package net.minecraftforge.liquids;
002    
003    /**
004     * A tank is the unit of interaction with liquid inventories.
005     *
006     * @author cpw
007     */
008    public interface ILiquidTank {
009    
010        /**
011         * @return LiquidStack representing the liquid contained in the tank, null if empty.
012         */
013        LiquidStack getLiquid();
014    
015        /**
016         * These shouldn't be used to interact with a foreign tank. Use {@link #fill(LiquidStack, boolean)}
017         * and {@link #drain(int, boolean)}.
018         *
019         * @param liquid
020         */
021        @Deprecated
022        void setLiquid(LiquidStack liquid);
023        /**
024         * This method should not be used to interact with a foreign tank. Use {@link #fill(LiquidStack, boolean)}
025         * and {@link #drain(int, boolean)}.
026         *
027         * @param capacity
028         */
029        @Deprecated
030        void setCapacity(int capacity);
031    
032        /**
033         * @return capacity of this tank
034         */
035        int getCapacity();
036    
037        /**
038         *
039         * @param resource
040         * @param doFill
041         * @return Amount of liquid used for filling.
042         */
043        int fill(LiquidStack resource, boolean doFill);
044        /**
045         *
046         * @param maxDrain
047         * @param doDrain
048         * @return Null if nothing was drained, otherwise a LiquidStack containing the drained.
049         */
050        LiquidStack drain(int maxDrain, boolean doDrain);
051    
052        /**
053         * Positive values indicate a positive liquid pressure (liquid wants to leave this tank)
054         * Negative values indicate a negative liquid pressure (liquid wants to fill this tank)
055         * Zero indicates no pressure
056         *
057         * @return a number indicating tank pressure
058         */
059        public int getTankPressure();
060    
061    }