    001    package net.minecraftforge.liquids;
    002
    003    import java.util.HashMap;
    004    import java.util.Map;
    005
    006    import net.minecraft.src.ItemStack;
    007    import net.minecraftforge.common.MinecraftForge;
    008    import net.minecraftforge.event.Event;
    009    import net.minecraftforge.oredict.OreDictionary.OreRegisterEvent;
    010
    011    import com.google.common.collect.ImmutableMap;
    012
    013    /**
    014     * When creating liquids you should register them with this class.
    015     *
    016     * @author CovertJaguar <railcraft.wikispaces.com>
    017     */
    018    public abstract class LiquidDictionary
    019    {
    020
    021        private static Map<String, LiquidStack> liquids = new HashMap<String, LiquidStack>();
    022
    023        /**
    024         * When creating liquids you should call this function.
    025         *
    026         * Upon passing it a name and liquid item it will return either
    027         * a preexisting implementation of that liquid or the liquid passed in.
    028         *
    029         *
    030         * @param name the name of the liquid
    031         * @param liquid the liquid to use if one doesn't exist
    032         * @return
    033         */
    034        public static LiquidStack getOrCreateLiquid(String name, LiquidStack liquid)
    035        {
    036            LiquidStack existing = liquids.get(name);
    037            if(existing != null) {
    038                return existing.copy();
    039            }
    040            liquids.put(name, liquid.copy());
    041            MinecraftForge.EVENT_BUS.post(new LiquidRegisterEvent(name, liquid));
    042            return liquid;
    043        }
    044
    045        /**
    046         * Returns the liquid matching the name,
    047         * if such a liquid exists.
    048         *
    049         * Can return null.
    050         *
    051         * @param name the name of the liquid
    052         * @param amount the amout of liquid
    053         * @return
    054         */
    055        public static LiquidStack getLiquid(String name, int amount)
    056        {
    057            LiquidStack liquid = liquids.get(name);
    058            if(liquid == null)
    059                return null;
    060
    061            liquid = liquid.copy();
    062            liquid.amount = amount;
    063            return liquid;
    064        }
    065
    066        /**
    067         * Get an immutable list of the liquids defined
    068         *
    069         * @return the defined liquids
    070         */
    071        public Map<String, LiquidStack> getDefinedLiquids()
    072        {
    073            return ImmutableMap.copyOf(liquids);
    074        }
    075
    076
    077        /**
    078         * Fired when a new liquid is created
    079         *
    080         * @author cpw
    081         *
    082         */
    083        public static class LiquidRegisterEvent extends Event
    084        {
    085            public final String Name;
    086            public final LiquidStack Liquid;
    087
    088            public LiquidRegisterEvent(String name, LiquidStack liquid)
    089            {
    090                this.Name = name;
    091                this.Liquid = liquid.copy();
    092            }
    093        }
    094    }