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 }