001package net.minecraft.block;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import java.util.List;
006import java.util.Random;
007import net.minecraft.block.material.Material;
008import net.minecraft.entity.Entity;
009import net.minecraft.entity.item.EntityItem;
010import net.minecraft.entity.player.EntityPlayer;
011import net.minecraft.entity.player.EntityPlayerMP;
012import net.minecraft.item.EnumArmorMaterial;
013import net.minecraft.item.Item;
014import net.minecraft.item.ItemArmor;
015import net.minecraft.item.ItemStack;
016import net.minecraft.util.AxisAlignedBB;
017import net.minecraft.world.World;
018
019public class BlockCauldron extends Block
020{
021    public BlockCauldron(int par1)
022    {
023        super(par1, Material.iron);
024        this.blockIndexInTexture = 154;
025    }
026
027    /**
028     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
029     */
030    public int getBlockTextureFromSideAndMetadata(int par1, int par2)
031    {
032        return par1 == 1 ? 138 : (par1 == 0 ? 155 : 154);
033    }
034
035    /**
036     * if the specified block is in the given AABB, add its collision bounding box to the given list
037     */
038    public void addCollidingBlockToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity)
039    {
040        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F);
041        super.addCollidingBlockToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
042        float var8 = 0.125F;
043        this.setBlockBounds(0.0F, 0.0F, 0.0F, var8, 1.0F, 1.0F);
044        super.addCollidingBlockToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
045        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var8);
046        super.addCollidingBlockToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
047        this.setBlockBounds(1.0F - var8, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
048        super.addCollidingBlockToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
049        this.setBlockBounds(0.0F, 0.0F, 1.0F - var8, 1.0F, 1.0F, 1.0F);
050        super.addCollidingBlockToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
051        this.setBlockBoundsForItemRender();
052    }
053
054    /**
055     * Sets the block's bounds for rendering it as an item
056     */
057    public void setBlockBoundsForItemRender()
058    {
059        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
060    }
061
062    /**
063     * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
064     * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
065     */
066    public boolean isOpaqueCube()
067    {
068        return false;
069    }
070
071    /**
072     * The type of render function that is called for this block
073     */
074    public int getRenderType()
075    {
076        return 24;
077    }
078
079    /**
080     * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
081     */
082    public boolean renderAsNormalBlock()
083    {
084        return false;
085    }
086
087    /**
088     * Called upon block activation (right click on the block.)
089     */
090    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
091    {
092        if (par1World.isRemote)
093        {
094            return true;
095        }
096        else
097        {
098            ItemStack var10 = par5EntityPlayer.inventory.getCurrentItem();
099
100            if (var10 == null)
101            {
102                return true;
103            }
104            else
105            {
106                int var11 = par1World.getBlockMetadata(par2, par3, par4);
107
108                if (var10.itemID == Item.bucketWater.itemID)
109                {
110                    if (var11 < 3)
111                    {
112                        if (!par5EntityPlayer.capabilities.isCreativeMode)
113                        {
114                            par5EntityPlayer.inventory.setInventorySlotContents(par5EntityPlayer.inventory.currentItem, new ItemStack(Item.bucketEmpty));
115                        }
116
117                        par1World.setBlockMetadataWithNotify(par2, par3, par4, 3);
118                    }
119
120                    return true;
121                }
122                else
123                {
124                    if (var10.itemID == Item.glassBottle.itemID)
125                    {
126                        if (var11 > 0)
127                        {
128                            ItemStack var12 = new ItemStack(Item.potion, 1, 0);
129
130                            if (!par5EntityPlayer.inventory.addItemStackToInventory(var12))
131                            {
132                                par1World.spawnEntityInWorld(new EntityItem(par1World, (double)par2 + 0.5D, (double)par3 + 1.5D, (double)par4 + 0.5D, var12));
133                            }
134                            else if (par5EntityPlayer instanceof EntityPlayerMP)
135                            {
136                                ((EntityPlayerMP)par5EntityPlayer).sendContainerToPlayer(par5EntityPlayer.inventoryContainer);
137                            }
138
139                            --var10.stackSize;
140
141                            if (var10.stackSize <= 0)
142                            {
143                                par5EntityPlayer.inventory.setInventorySlotContents(par5EntityPlayer.inventory.currentItem, (ItemStack)null);
144                            }
145
146                            par1World.setBlockMetadataWithNotify(par2, par3, par4, var11 - 1);
147                        }
148                    }
149                    else if (var11 > 0 && var10.getItem() instanceof ItemArmor && ((ItemArmor)var10.getItem()).getArmorMaterial() == EnumArmorMaterial.CLOTH)
150                    {
151                        ItemArmor var13 = (ItemArmor)var10.getItem();
152                        var13.removeColor(var10);
153                        par1World.setBlockMetadataWithNotify(par2, par3, par4, var11 - 1);
154                        return true;
155                    }
156
157                    return true;
158                }
159            }
160        }
161    }
162
163    /**
164     * currently only used by BlockCauldron to incrament meta-data during rain
165     */
166    public void fillWithRain(World par1World, int par2, int par3, int par4)
167    {
168        if (par1World.rand.nextInt(20) == 1)
169        {
170            int var5 = par1World.getBlockMetadata(par2, par3, par4);
171
172            if (var5 < 3)
173            {
174                par1World.setBlockMetadataWithNotify(par2, par3, par4, var5 + 1);
175            }
176        }
177    }
178
179    /**
180     * Returns the ID of the items to drop on destruction.
181     */
182    public int idDropped(int par1, Random par2Random, int par3)
183    {
184        return Item.cauldron.itemID;
185    }
186
187    @SideOnly(Side.CLIENT)
188
189    /**
190     * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
191     */
192    public int idPicked(World par1World, int par2, int par3, int par4)
193    {
194        return Item.cauldron.itemID;
195    }
196}