001package net.minecraft.inventory; 002 003import net.minecraft.entity.player.EntityPlayer; 004import net.minecraft.entity.player.InventoryPlayer; 005import net.minecraft.item.ItemStack; 006 007public class ContainerHopper extends Container 008{ 009 private final IInventory field_94538_a; 010 011 public ContainerHopper(InventoryPlayer par1InventoryPlayer, IInventory par2IInventory) 012 { 013 this.field_94538_a = par2IInventory; 014 par2IInventory.openChest(); 015 byte b0 = 51; 016 int i; 017 018 for (i = 0; i < par2IInventory.getSizeInventory(); ++i) 019 { 020 this.addSlotToContainer(new Slot(par2IInventory, i, 44 + i * 18, 20)); 021 } 022 023 for (i = 0; i < 3; ++i) 024 { 025 for (int j = 0; j < 9; ++j) 026 { 027 this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, i * 18 + b0)); 028 } 029 } 030 031 for (i = 0; i < 9; ++i) 032 { 033 this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 58 + b0)); 034 } 035 } 036 037 public boolean canInteractWith(EntityPlayer par1EntityPlayer) 038 { 039 return this.field_94538_a.isUseableByPlayer(par1EntityPlayer); 040 } 041 042 /** 043 * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that. 044 */ 045 public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) 046 { 047 ItemStack itemstack = null; 048 Slot slot = (Slot)this.inventorySlots.get(par2); 049 050 if (slot != null && slot.getHasStack()) 051 { 052 ItemStack itemstack1 = slot.getStack(); 053 itemstack = itemstack1.copy(); 054 055 if (par2 < this.field_94538_a.getSizeInventory()) 056 { 057 if (!this.mergeItemStack(itemstack1, this.field_94538_a.getSizeInventory(), this.inventorySlots.size(), true)) 058 { 059 return null; 060 } 061 } 062 else if (!this.mergeItemStack(itemstack1, 0, this.field_94538_a.getSizeInventory(), false)) 063 { 064 return null; 065 } 066 067 if (itemstack1.stackSize == 0) 068 { 069 slot.putStack((ItemStack)null); 070 } 071 else 072 { 073 slot.onSlotChanged(); 074 } 075 } 076 077 return itemstack; 078 } 079 080 /** 081 * Callback for when the crafting gui is closed. 082 */ 083 public void onCraftGuiClosed(EntityPlayer par1EntityPlayer) 084 { 085 super.onCraftGuiClosed(par1EntityPlayer); 086 this.field_94538_a.closeChest(); 087 } 088}