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    }