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