    001package net.minecraft.inventory;
    002
    003import net.minecraft.entity.player.EntityPlayer;
    004import net.minecraft.item.ItemStack;
    005
    006public interface IInventory
    007{
    008    /**
    009     * Returns the number of slots in the inventory.
    010     */
    011    int getSizeInventory();
    012
    013    /**
    014     * Returns the stack in slot i
    015     */
    016    ItemStack getStackInSlot(int i);
    017
    018    /**
    019     * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
    020     * new stack.
    021     */
    022    ItemStack decrStackSize(int i, int j);
    023
    024    /**
    025     * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -
    026     * like when you close a workbench GUI.
    027     */
    028    ItemStack getStackInSlotOnClosing(int i);
    029
    030    /**
    031     * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
    032     */
    033    void setInventorySlotContents(int i, ItemStack itemstack);
    034
    035    /**
    036     * Returns the name of the inventory.
    037     */
    038    String getInvName();
    039
    040    /**
    041     * If this returns false, the inventory name will be used as an unlocalized name, and translated into the player's
    042     * language. Otherwise it will be used directly.
    043     */
    044    boolean isInvNameLocalized();
    045
    046    /**
    047     * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
    048     * this more of a set than a get?*
    049     */
    050    int getInventoryStackLimit();
    051
    052    /**
    053     * Called when an the contents of an Inventory change, usually
    054     */
    055    void onInventoryChanged();
    056
    057    /**
    058     * Do not make give this method the name canInteractWith because it clashes with Container
    059     */
    060    boolean isUseableByPlayer(EntityPlayer entityplayer);
    061
    062    void openChest();
    063
    064    void closeChest();
    065
    066    /**
    067     * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
    068     */
    069    boolean isStackValidForSlot(int i, ItemStack itemstack);
    070}