001 package net.minecraftforge.liquids;
002
003 import net.minecraft.block.Block;
004 import net.minecraft.item.Item;
005 import net.minecraft.item.ItemStack;
006 import net.minecraft.nbt.NBTTagCompound;
007
008 /**
009 * ItemStack substitute for liquids
010 * @author SirSengir
011 */
012 public class LiquidStack
013 {
014 public int itemID;
015 public int amount;
016 public int itemMeta;
017
018 private LiquidStack(){}
019
020 public LiquidStack(int itemID, int amount) { this(itemID, amount, 0); }
021 public LiquidStack(Item item, int amount) { this(item.itemID, amount, 0); }
022 public LiquidStack(Block block, int amount) { this(block.blockID, amount, 0); }
023
024 public LiquidStack(int itemID, int amount, int itemDamage)
025 {
026 this.itemID = itemID;
027 this.amount = amount;
028 this.itemMeta = itemDamage;
029 }
030
031 public NBTTagCompound writeToNBT(NBTTagCompound nbt)
032 {
033 nbt.setShort("Id", (short)itemID);
034 nbt.setInteger("Amount", amount);
035 nbt.setShort("Meta", (short)itemMeta);
036 return nbt;
037 }
038
039 public void readFromNBT(NBTTagCompound nbt)
040 {
041 itemID = nbt.getShort("Id");
042 amount = nbt.getInteger("Amount");
043 itemMeta = nbt.getShort("Meta");
044 }
045
046 /**
047 * @return A copy of this LiquidStack
048 */
049 public LiquidStack copy()
050 {
051 return new LiquidStack(itemID, amount, itemMeta);
052 }
053
054 /**
055 * @param other
056 * @return true if this LiquidStack contains the same liquid as the one passed in.
057 */
058 public boolean isLiquidEqual(LiquidStack other)
059 {
060 return other != null && itemID == other.itemID && itemMeta == other.itemMeta;
061 }
062
063 /**
064 * @param other
065 * @return true if this LiquidStack contains the other liquid (liquids are equal and amount >= other.amount).
066 */
067 public boolean containsLiquid(LiquidStack other)
068 {
069 return isLiquidEqual(other) && amount >= other.amount;
070 }
071
072 /**
073 * @param other ItemStack containing liquids.
074 * @return true if this LiquidStack contains the same liquid as the one passed in.
075 */
076 public boolean isLiquidEqual(ItemStack other)
077 {
078 return other != null && itemID == other.itemID && itemMeta == other.getItemDamage();
079 }
080
081 /**
082 * @return ItemStack representation of this LiquidStack
083 */
084 public ItemStack asItemStack()
085 {
086 return new ItemStack(itemID, 1, itemMeta);
087 }
088
089 /**
090 * Reads a liquid stack from the passed nbttagcompound and returns it.
091 *
092 * @param nbt
093 * @return
094 */
095 public static LiquidStack loadLiquidStackFromNBT(NBTTagCompound nbt)
096 {
097 LiquidStack liquidstack = new LiquidStack();
098 liquidstack.readFromNBT(nbt);
099 return liquidstack.itemID == 0 ? null : liquidstack;
100 }
101 }