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.itemID, 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 }