001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import java.util.Iterator; 006 007 public class ContainerBrewingStand extends Container 008 { 009 private TileEntityBrewingStand tileBrewingStand; 010 private final Slot field_75186_f; 011 private int brewTime = 0; 012 013 public ContainerBrewingStand(InventoryPlayer par1InventoryPlayer, TileEntityBrewingStand par2TileEntityBrewingStand) 014 { 015 this.tileBrewingStand = par2TileEntityBrewingStand; 016 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 0, 56, 46)); 017 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 1, 79, 53)); 018 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 2, 102, 46)); 019 this.field_75186_f = this.addSlotToContainer(new SlotBrewingStandIngredient(this, par2TileEntityBrewingStand, 3, 79, 17)); 020 int var3; 021 022 for (var3 = 0; var3 < 3; ++var3) 023 { 024 for (int var4 = 0; var4 < 9; ++var4) 025 { 026 this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); 027 } 028 } 029 030 for (var3 = 0; var3 < 9; ++var3) 031 { 032 this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); 033 } 034 } 035 036 public void addCraftingToCrafters(ICrafting par1ICrafting) 037 { 038 super.addCraftingToCrafters(par1ICrafting); 039 par1ICrafting.updateCraftingInventoryInfo(this, 0, this.tileBrewingStand.getBrewTime()); 040 } 041 042 /** 043 * Updates crafting matrix; called from onCraftMatrixChanged. Args: none 044 */ 045 public void updateCraftingResults() 046 { 047 super.updateCraftingResults(); 048 Iterator var1 = this.crafters.iterator(); 049 050 while (var1.hasNext()) 051 { 052 ICrafting var2 = (ICrafting)var1.next(); 053 054 if (this.brewTime != this.tileBrewingStand.getBrewTime()) 055 { 056 var2.updateCraftingInventoryInfo(this, 0, this.tileBrewingStand.getBrewTime()); 057 } 058 } 059 060 this.brewTime = this.tileBrewingStand.getBrewTime(); 061 } 062 063 @SideOnly(Side.CLIENT) 064 public void updateProgressBar(int par1, int par2) 065 { 066 if (par1 == 0) 067 { 068 this.tileBrewingStand.setBrewTime(par2); 069 } 070 } 071 072 public boolean canInteractWith(EntityPlayer par1EntityPlayer) 073 { 074 return this.tileBrewingStand.isUseableByPlayer(par1EntityPlayer); 075 } 076 077 /** 078 * Called to transfer a stack from one inventory to the other eg. when shift clicking. 079 */ 080 public ItemStack transferStackInSlot(int par1) 081 { 082 ItemStack var2 = null; 083 Slot var3 = (Slot)this.inventorySlots.get(par1); 084 085 if (var3 != null && var3.getHasStack()) 086 { 087 ItemStack var4 = var3.getStack(); 088 var2 = var4.copy(); 089 090 if ((par1 < 0 || par1 > 2) && par1 != 3) 091 { 092 if (!this.field_75186_f.getHasStack() && this.field_75186_f.isItemValid(var4)) 093 { 094 if (!this.mergeItemStack(var4, 3, 4, false)) 095 { 096 return null; 097 } 098 } 099 else if (SlotBrewingStandPotion.func_75243_a_(var2)) 100 { 101 if (!this.mergeItemStack(var4, 0, 3, false)) 102 { 103 return null; 104 } 105 } 106 else if (par1 >= 4 && par1 < 31) 107 { 108 if (!this.mergeItemStack(var4, 31, 40, false)) 109 { 110 return null; 111 } 112 } 113 else if (par1 >= 31 && par1 < 40) 114 { 115 if (!this.mergeItemStack(var4, 4, 31, false)) 116 { 117 return null; 118 } 119 } 120 else if (!this.mergeItemStack(var4, 4, 40, false)) 121 { 122 return null; 123 } 124 } 125 else 126 { 127 if (!this.mergeItemStack(var4, 4, 40, true)) 128 { 129 return null; 130 } 131 132 var3.onSlotChange(var4, var2); 133 } 134 135 if (var4.stackSize == 0) 136 { 137 var3.putStack((ItemStack)null); 138 } 139 else 140 { 141 var3.onSlotChanged(); 142 } 143 144 if (var4.stackSize == var2.stackSize) 145 { 146 return null; 147 } 148 149 var3.onPickupFromSlot(var4); 150 } 151 152 return var2; 153 } 154 }