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