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    }