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