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