001    package net.minecraftforge.liquids;
002    
003    import net.minecraft.nbt.NBTTagCompound;
004    
005    /**
006     * Implementors of this interface are a liquid which may receive a block implementation and can be placed in the world.
007     *
008     * @author cpw
009     *
010     */
011    public interface IBlockLiquid extends ILiquid {
012        /**
013         * Controls the type of block that is generated by this IBlockLiquid
014         * @author cpw
015         *
016         */
017        public enum BlockType {
018            /**
019             * No block. Completeness really.
020             */
021            NONE,
022            /**
023             * Vanilla style block, up to 8 flowing states. May be able to generate new sources.
024             */
025            VANILLA,
026            /**
027             * Finite liquid style, uses cellular automata to model flowing behaviour.
028             */
029            FINITE;
030        }
031    
032        /**
033         * Can this liquid, when placed in a specific configuration, generate new source blocks of the liquid.
034         * @return
035         */
036        public boolean willGenerateSources();
037    
038        /**
039         * @return the distance this liquid will flow if placed in the world. Maximum of 7 levels for vanilla types.
040         */
041        public int getFlowDistance();
042    
043        /**
044         * @return the RGB rendering for this liquid
045         */
046        public byte[] getLiquidRGB();
047    
048        /**
049         * Get the texture file for rendering the liquid
050         * @return
051         */
052        public String getLiquidBlockTextureFile();
053        /**
054         * Custom properties of the liquid.
055         * @return
056         */
057        public NBTTagCompound getLiquidProperties();
058    
059    }