001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 006 public class ContainerBrewingStand extends Container 007 { 008 private TileEntityBrewingStand tileBrewingStand; 009 010 /** Instance of Slot. */ 011 private final Slot theSlot; 012 private int brewTime = 0; 013 014 public ContainerBrewingStand(InventoryPlayer par1InventoryPlayer, TileEntityBrewingStand par2TileEntityBrewingStand) 015 { 016 this.tileBrewingStand = par2TileEntityBrewingStand; 017 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 0, 56, 46)); 018 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 1, 79, 53)); 019 this.addSlotToContainer(new SlotBrewingStandPotion(par1InventoryPlayer.player, par2TileEntityBrewingStand, 2, 102, 46)); 020 this.theSlot = this.addSlotToContainer(new SlotBrewingStandIngredient(this, par2TileEntityBrewingStand, 3, 79, 17)); 021 int var3; 022 023 for (var3 = 0; var3 < 3; ++var3) 024 { 025 for (int var4 = 0; var4 < 9; ++var4) 026 { 027 this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); 028 } 029 } 030 031 for (var3 = 0; var3 < 9; ++var3) 032 { 033 this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); 034 } 035 } 036 037 public void addCraftingToCrafters(ICrafting par1ICrafting) 038 { 039 super.addCraftingToCrafters(par1ICrafting); 040 par1ICrafting.updateCraftingInventoryInfo(this, 0, this.tileBrewingStand.getBrewTime()); 041 } 042 043 /** 044 * Updates crafting matrix; called from onCraftMatrixChanged. Args: none 045 */ 046 public void updateCraftingResults() 047 { 048 super.updateCraftingResults(); 049 050 for (int var1 = 0; var1 < this.crafters.size(); ++var1) 051 { 052 ICrafting var2 = (ICrafting)this.crafters.get(var1); 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 when a player shift-clicks on a slot. You must override this or you will crash when someone does that. 079 */ 080 public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) 081 { 082 ItemStack var3 = null; 083 Slot var4 = (Slot)this.inventorySlots.get(par2); 084 085 if (var4 != null && var4.getHasStack()) 086 { 087 ItemStack var5 = var4.getStack(); 088 var3 = var5.copy(); 089 090 if ((par2 < 0 || par2 > 2) && par2 != 3) 091 { 092 if (!this.theSlot.getHasStack() && this.theSlot.isItemValid(var5)) 093 { 094 if (!this.mergeItemStack(var5, 3, 4, false)) 095 { 096 return null; 097 } 098 } 099 else if (SlotBrewingStandPotion.func_75243_a_(var3)) 100 { 101 if (!this.mergeItemStack(var5, 0, 3, false)) 102 { 103 return null; 104 } 105 } 106 else if (par2 >= 4 && par2 < 31) 107 { 108 if (!this.mergeItemStack(var5, 31, 40, false)) 109 { 110 return null; 111 } 112 } 113 else if (par2 >= 31 && par2 < 40) 114 { 115 if (!this.mergeItemStack(var5, 4, 31, false)) 116 { 117 return null; 118 } 119 } 120 else if (!this.mergeItemStack(var5, 4, 40, false)) 121 { 122 return null; 123 } 124 } 125 else 126 { 127 if (!this.mergeItemStack(var5, 4, 40, true)) 128 { 129 return null; 130 } 131 132 var4.onSlotChange(var5, var3); 133 } 134 135 if (var5.stackSize == 0) 136 { 137 var4.putStack((ItemStack)null); 138 } 139 else 140 { 141 var4.onSlotChanged(); 142 } 143 144 if (var5.stackSize == var3.stackSize) 145 { 146 return null; 147 } 148 149 var4.onPickupFromSlot(par1EntityPlayer, var5); 150 } 151 152 return var3; 153 } 154 }