001 package net.minecraft.inventory; 002 003 import net.minecraft.entity.player.EntityPlayer; 004 import net.minecraft.item.ItemStack; 005 006 public class InventoryLargeChest implements IInventory 007 { 008 /** Name of the chest. */ 009 private String name; 010 011 /** Inventory object corresponding to double chest upper part */ 012 private IInventory upperChest; 013 014 /** Inventory object corresponding to double chest lower part */ 015 private IInventory lowerChest; 016 017 public InventoryLargeChest(String par1Str, IInventory par2IInventory, IInventory par3IInventory) 018 { 019 this.name = par1Str; 020 021 if (par2IInventory == null) 022 { 023 par2IInventory = par3IInventory; 024 } 025 026 if (par3IInventory == null) 027 { 028 par3IInventory = par2IInventory; 029 } 030 031 this.upperChest = par2IInventory; 032 this.lowerChest = par3IInventory; 033 } 034 035 /** 036 * Returns the number of slots in the inventory. 037 */ 038 public int getSizeInventory() 039 { 040 return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); 041 } 042 043 public boolean func_90010_a(IInventory par1IInventory) 044 { 045 return this.upperChest == par1IInventory || this.lowerChest == par1IInventory; 046 } 047 048 /** 049 * Returns the name of the inventory. 050 */ 051 public String getInvName() 052 { 053 return this.name; 054 } 055 056 /** 057 * Returns the stack in slot i 058 */ 059 public ItemStack getStackInSlot(int par1) 060 { 061 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(par1); 062 } 063 064 /** 065 * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a 066 * new stack. 067 */ 068 public ItemStack decrStackSize(int par1, int par2) 069 { 070 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(par1 - this.upperChest.getSizeInventory(), par2) : this.upperChest.decrStackSize(par1, par2); 071 } 072 073 /** 074 * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - 075 * like when you close a workbench GUI. 076 */ 077 public ItemStack getStackInSlotOnClosing(int par1) 078 { 079 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlotOnClosing(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlotOnClosing(par1); 080 } 081 082 /** 083 * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). 084 */ 085 public void setInventorySlotContents(int par1, ItemStack par2ItemStack) 086 { 087 if (par1 >= this.upperChest.getSizeInventory()) 088 { 089 this.lowerChest.setInventorySlotContents(par1 - this.upperChest.getSizeInventory(), par2ItemStack); 090 } 091 else 092 { 093 this.upperChest.setInventorySlotContents(par1, par2ItemStack); 094 } 095 } 096 097 /** 098 * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't 099 * this more of a set than a get?* 100 */ 101 public int getInventoryStackLimit() 102 { 103 return this.upperChest.getInventoryStackLimit(); 104 } 105 106 /** 107 * Called when an the contents of an Inventory change, usually 108 */ 109 public void onInventoryChanged() 110 { 111 this.upperChest.onInventoryChanged(); 112 this.lowerChest.onInventoryChanged(); 113 } 114 115 /** 116 * Do not make give this method the name canInteractWith because it clashes with Container 117 */ 118 public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) 119 { 120 return this.upperChest.isUseableByPlayer(par1EntityPlayer) && this.lowerChest.isUseableByPlayer(par1EntityPlayer); 121 } 122 123 public void openChest() 124 { 125 this.upperChest.openChest(); 126 this.lowerChest.openChest(); 127 } 128 129 public void closeChest() 130 { 131 this.upperChest.closeChest(); 132 this.lowerChest.closeChest(); 133 } 134 }