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 }