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 }