001package net.minecraft.inventory; 002 003import net.minecraft.entity.player.EntityPlayer; 004import net.minecraft.item.ItemStack; 005import net.minecraft.nbt.NBTTagCompound; 006import net.minecraft.nbt.NBTTagList; 007import net.minecraft.tileentity.TileEntityEnderChest; 008 009public class InventoryEnderChest extends InventoryBasic 010{ 011 private TileEntityEnderChest associatedChest; 012 013 public InventoryEnderChest() 014 { 015 super("container.enderchest", false, 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 i; 026 027 for (i = 0; i < this.getSizeInventory(); ++i) 028 { 029 this.setInventorySlotContents(i, (ItemStack)null); 030 } 031 032 for (i = 0; i < par1NBTTagList.tagCount(); ++i) 033 { 034 NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.tagAt(i); 035 int j = nbttagcompound.getByte("Slot") & 255; 036 037 if (j >= 0 && j < this.getSizeInventory()) 038 { 039 this.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound)); 040 } 041 } 042 } 043 044 public NBTTagList saveInventoryToNBT() 045 { 046 NBTTagList nbttaglist = new NBTTagList("EnderItems"); 047 048 for (int i = 0; i < this.getSizeInventory(); ++i) 049 { 050 ItemStack itemstack = this.getStackInSlot(i); 051 052 if (itemstack != null) 053 { 054 NBTTagCompound nbttagcompound = new NBTTagCompound(); 055 nbttagcompound.setByte("Slot", (byte)i); 056 itemstack.writeToNBT(nbttagcompound); 057 nbttaglist.appendTag(nbttagcompound); 058 } 059 } 060 061 return nbttaglist; 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 093 /** 094 * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. 095 */ 096 public boolean isStackValidForSlot(int par1, ItemStack par2ItemStack) 097 { 098 return true; 099 } 100}