001 package net.minecraft.src;
002
003 public class ContainerDispenser extends Container
004 {
005 private TileEntityDispenser tileEntityDispenser;
006
007 public ContainerDispenser(IInventory par1IInventory, TileEntityDispenser par2TileEntityDispenser)
008 {
009 this.tileEntityDispenser = par2TileEntityDispenser;
010 int var3;
011 int var4;
012
013 for (var3 = 0; var3 < 3; ++var3)
014 {
015 for (var4 = 0; var4 < 3; ++var4)
016 {
017 this.addSlotToContainer(new Slot(par2TileEntityDispenser, var4 + var3 * 3, 62 + var4 * 18, 17 + var3 * 18));
018 }
019 }
020
021 for (var3 = 0; var3 < 3; ++var3)
022 {
023 for (var4 = 0; var4 < 9; ++var4)
024 {
025 this.addSlotToContainer(new Slot(par1IInventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18));
026 }
027 }
028
029 for (var3 = 0; var3 < 9; ++var3)
030 {
031 this.addSlotToContainer(new Slot(par1IInventory, var3, 8 + var3 * 18, 142));
032 }
033 }
034
035 public boolean canInteractWith(EntityPlayer par1EntityPlayer)
036 {
037 return this.tileEntityDispenser.isUseableByPlayer(par1EntityPlayer);
038 }
039
040 /**
041 * Called to transfer a stack from one inventory to the other eg. when shift clicking.
042 */
043 public ItemStack transferStackInSlot(int par1)
044 {
045 ItemStack var2 = null;
046 Slot var3 = (Slot)this.inventorySlots.get(par1);
047
048 if (var3 != null && var3.getHasStack())
049 {
050 ItemStack var4 = var3.getStack();
051 var2 = var4.copy();
052
053 if (par1 < 9)
054 {
055 if (!this.mergeItemStack(var4, 9, 45, true))
056 {
057 return null;
058 }
059 }
060 else if (!this.mergeItemStack(var4, 0, 9, false))
061 {
062 return null;
063 }
064
065 if (var4.stackSize == 0)
066 {
067 var3.putStack((ItemStack)null);
068 }
069 else
070 {
071 var3.onSlotChanged();
072 }
073
074 if (var4.stackSize == var2.stackSize)
075 {
076 return null;
077 }
078
079 var3.onPickupFromSlot(var4);
080 }
081
082 return var2;
083 }
084 }