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 /** 044 * Return whether the given inventory is part of this large chest. 045 */ 046 public boolean isPartOfLargeChest(IInventory par1IInventory) 047 { 048 return this.upperChest == par1IInventory || this.lowerChest == par1IInventory; 049 } 050 051 /** 052 * Returns the name of the inventory. 053 */ 054 public String getInvName() 055 { 056 return this.name; 057 } 058 059 /** 060 * Returns the stack in slot i 061 */ 062 public ItemStack getStackInSlot(int par1) 063 { 064 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(par1); 065 } 066 067 /** 068 * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a 069 * new stack. 070 */ 071 public ItemStack decrStackSize(int par1, int par2) 072 { 073 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(par1 - this.upperChest.getSizeInventory(), par2) : this.upperChest.decrStackSize(par1, par2); 074 } 075 076 /** 077 * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - 078 * like when you close a workbench GUI. 079 */ 080 public ItemStack getStackInSlotOnClosing(int par1) 081 { 082 return par1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlotOnClosing(par1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlotOnClosing(par1); 083 } 084 085 /** 086 * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). 087 */ 088 public void setInventorySlotContents(int par1, ItemStack par2ItemStack) 089 { 090 if (par1 >= this.upperChest.getSizeInventory()) 091 { 092 this.lowerChest.setInventorySlotContents(par1 - this.upperChest.getSizeInventory(), par2ItemStack); 093 } 094 else 095 { 096 this.upperChest.setInventorySlotContents(par1, par2ItemStack); 097 } 098 } 099 100 /** 101 * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't 102 * this more of a set than a get?* 103 */ 104 public int getInventoryStackLimit() 105 { 106 return this.upperChest.getInventoryStackLimit(); 107 } 108 109 /** 110 * Called when an the contents of an Inventory change, usually 111 */ 112 public void onInventoryChanged() 113 { 114 this.upperChest.onInventoryChanged(); 115 this.lowerChest.onInventoryChanged(); 116 } 117 118 /** 119 * Do not make give this method the name canInteractWith because it clashes with Container 120 */ 121 public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) 122 { 123 return this.upperChest.isUseableByPlayer(par1EntityPlayer) && this.lowerChest.isUseableByPlayer(par1EntityPlayer); 124 } 125 126 public void openChest() 127 { 128 this.upperChest.openChest(); 129 this.lowerChest.openChest(); 130 } 131 132 public void closeChest() 133 { 134 this.upperChest.closeChest(); 135 this.lowerChest.closeChest(); 136 } 137 }