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