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 }