    001    package net.minecraft.inventory;
    002
    003    import net.minecraft.entity.player.EntityPlayer;
    004    import net.minecraft.item.ItemStack;
    005    import net.minecraft.nbt.NBTTagCompound;
    006    import net.minecraft.nbt.NBTTagList;
    007    import net.minecraft.tileentity.TileEntityEnderChest;
    008
    009    public class InventoryEnderChest extends InventoryBasic
    010    {
    011        private TileEntityEnderChest associatedChest;
    012
    013        public InventoryEnderChest()
    014        {
    015            super("container.enderchest", 27);
    016        }
    017
    018        public void setAssociatedChest(TileEntityEnderChest par1TileEntityEnderChest)
    019        {
    020            this.associatedChest = par1TileEntityEnderChest;
    021        }
    022
    023        public void loadInventoryFromNBT(NBTTagList par1NBTTagList)
    024        {
    025            int var2;
    026
    027            for (var2 = 0; var2 < this.getSizeInventory(); ++var2)
    028            {
    029                this.setInventorySlotContents(var2, (ItemStack)null);
    030            }
    031
    032            for (var2 = 0; var2 < par1NBTTagList.tagCount(); ++var2)
    033            {
    034                NBTTagCompound var3 = (NBTTagCompound)par1NBTTagList.tagAt(var2);
    035                int var4 = var3.getByte("Slot") & 255;
    036
    037                if (var4 >= 0 && var4 < this.getSizeInventory())
    038                {
    039                    this.setInventorySlotContents(var4, ItemStack.loadItemStackFromNBT(var3));
    040                }
    041            }
    042        }
    043
    044        public NBTTagList saveInventoryToNBT()
    045        {
    046            NBTTagList var1 = new NBTTagList("EnderItems");
    047
    048            for (int var2 = 0; var2 < this.getSizeInventory(); ++var2)
    049            {
    050                ItemStack var3 = this.getStackInSlot(var2);
    051
    052                if (var3 != null)
    053                {
    054                    NBTTagCompound var4 = new NBTTagCompound();
    055                    var4.setByte("Slot", (byte)var2);
    056                    var3.writeToNBT(var4);
    057                    var1.appendTag(var4);
    058                }
    059            }
    060
    061            return var1;
    062        }
    063
    064        /**
    065         * Do not make give this method the name canInteractWith because it clashes with Container
    066         */
    067        public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    068        {
    069            return this.associatedChest != null && !this.associatedChest.isUseableByPlayer(par1EntityPlayer) ? false : super.isUseableByPlayer(par1EntityPlayer);
    070        }
    071
    072        public void openChest()
    073        {
    074            if (this.associatedChest != null)
    075            {
    076                this.associatedChest.openChest();
    077            }
    078
    079            super.openChest();
    080        }
    081
    082        public void closeChest()
    083        {
    084            if (this.associatedChest != null)
    085            {
    086                this.associatedChest.closeChest();
    087            }
    088
    089            super.closeChest();
    090            this.associatedChest = null;
    091        }
    092    }