    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    }