    001    package net.minecraftforge.liquids;
    002
    003    import java.util.HashMap;
    004    import java.util.Map;
    005
    006    import net.minecraft.item.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         * @see LiquidDictionary#getLiquids()
    071         */
    072        @Deprecated
    073        public Map<String, LiquidStack> getDefinedLiquids()
    074        {
    075            return getLiquids();
    076        }
    077
    078
    079        /**
    080         * Get an immutable list of the liquids defined
    081         *
    082         * @return the defined liquids
    083         */
    084        public static Map<String, LiquidStack> getLiquids()
    085        {
    086            return ImmutableMap.copyOf(liquids);
    087        }
    088        /**
    089         * Fired when a new liquid is created
    090         *
    091         * @author cpw
    092         *
    093         */
    094        public static class LiquidRegisterEvent extends Event
    095        {
    096            public final String Name;
    097            public final LiquidStack Liquid;
    098
    099            public LiquidRegisterEvent(String name, LiquidStack liquid)
    100            {
    101                this.Name = name;
    102                this.Liquid = liquid.copy();
    103            }
    104        }
    105    }