package buildcraft.api.liquids; | |
import net.minecraft.src.Block; | |
import net.minecraft.src.Item; | |
import net.minecraft.src.ItemStack; | |
import net.minecraft.src.NBTTagCompound; | |
/** | |
* ItemStack substitute for liquids | |
* @author SirSengir | |
*/ | |
public class LiquidStack { | |
public int itemID; | |
public int amount; | |
public int itemMeta; | |
private LiquidStack() { | |
} | |
public LiquidStack(int itemID, int amount) { | |
this(itemID, amount, 0); | |
} | |
public LiquidStack(Item item, int amount) { | |
this(item.shiftedIndex, amount, 0); | |
} | |
public LiquidStack(Block block, int amount) { | |
this(block.blockID, amount, 0); | |
} | |
public LiquidStack(int itemID, int amount, int itemDamage) { | |
this.itemID = itemID; | |
this.amount = amount; | |
this.itemMeta = itemDamage; | |
} | |
public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) { | |
nbttagcompound.setShort("Id", (short) itemID); | |
nbttagcompound.setInteger("Amount", amount); | |
nbttagcompound.setShort("Meta", (short) itemMeta); | |
return nbttagcompound; | |
} | |
public void readFromNBT(NBTTagCompound nbttagcompound) { | |
itemID = nbttagcompound.getShort("Id"); | |
amount = nbttagcompound.getInteger("Amount"); | |
itemMeta = nbttagcompound.getShort("Meta"); | |
} | |
/** | |
* @return A copy of this LiquidStack | |
*/ | |
public LiquidStack copy() { | |
return new LiquidStack(itemID, amount, itemMeta); | |
} | |
/** | |
* @param other | |
* @return true if this LiquidStack contains the same liquid as the one passed in. | |
*/ | |
public boolean isLiquidEqual(LiquidStack other) { | |
if(other == null) | |
return false; | |
return itemID == other.itemID && itemMeta == other.itemMeta; | |
} | |
/** | |
* @param other | |
* @return true if this LiquidStack contains the other liquid (liquids are equal and amount >= other.amount). | |
*/ | |
public boolean containsLiquid(LiquidStack other) { | |
if(!isLiquidEqual(other)) | |
return false; | |
return amount >= other.amount; | |
} | |
/** | |
* @param other ItemStack containing liquids. | |
* @return true if this LiquidStack contains the same liquid as the one passed in. | |
*/ | |
public boolean isLiquidEqual(ItemStack other) { | |
if(other == null) | |
return false; | |
return itemID == other.itemID && itemMeta == other.getItemDamage(); | |
} | |
/** | |
* @return ItemStack representation of this LiquidStack | |
*/ | |
public ItemStack asItemStack() { | |
return new ItemStack(itemID, 1, itemMeta); | |
} | |
/** | |
* Reads a liquid stack from the passed nbttagcompound and returns it. | |
* | |
* @param nbttagcompound | |
* @return | |
*/ | |
public static LiquidStack loadLiquidStackFromNBT(NBTTagCompound nbttagcompound) { | |
LiquidStack liquidstack = new LiquidStack(); | |
liquidstack.readFromNBT(nbttagcompound); | |
return liquidstack.itemID == 0 ? null : liquidstack; | |
} | |
} |