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 */
071 public static Map<String, LiquidStack> getLiquids()
072 {
073 return ImmutableMap.copyOf(liquids);
074 }
075 /**
076 * Fired when a new liquid is created
077 *
078 * @author cpw
079 *
080 */
081 public static class LiquidRegisterEvent extends Event
082 {
083 public final String Name;
084 public final LiquidStack Liquid;
085
086 public LiquidRegisterEvent(String name, LiquidStack liquid)
087 {
088 this.Name = name;
089 this.Liquid = liquid.copy();
090 }
091 }
092 }