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) 114 { 115 if (var11 > 0) 116 { 117 ItemStack var12 = new ItemStack(Item.potion, 1, 0); 118 119 if (!par5EntityPlayer.inventory.addItemStackToInventory(var12)) 120 { 121 par1World.spawnEntityInWorld(new EntityItem(par1World, (double)par2 + 0.5D, (double)par3 + 1.5D, (double)par4 + 0.5D, var12)); 122 } 123 else if (par5EntityPlayer instanceof EntityPlayerMP) 124 { 125 ((EntityPlayerMP)par5EntityPlayer).sendContainerToPlayer(par5EntityPlayer.inventorySlots); 126 } 127 128 --var10.stackSize; 129 130 if (var10.stackSize <= 0) 131 { 132 par5EntityPlayer.inventory.setInventorySlotContents(par5EntityPlayer.inventory.currentItem, (ItemStack)null); 133 } 134 135 par1World.setBlockMetadataWithNotify(par2, par3, par4, var11 - 1); 136 } 137 } 138 else if (var11 > 0 && var10.getItem() instanceof ItemArmor && ((ItemArmor)var10.getItem()).func_82812_d() == EnumArmorMaterial.CLOTH) 139 { 140 ItemArmor var13 = (ItemArmor)var10.getItem(); 141 var13.func_82815_c(var10); 142 par1World.setBlockMetadataWithNotify(par2, par3, par4, var11 - 1); 143 return true; 144 } 145 146 return true; 147 } 148 } 149 } 150 } 151 152 /** 153 * currently only used by BlockCauldron to incrament meta-data during rain 154 */ 155 public void fillWithRain(World par1World, int par2, int par3, int par4) 156 { 157 if (par1World.rand.nextInt(20) == 1) 158 { 159 int var5 = par1World.getBlockMetadata(par2, par3, par4); 160 161 if (var5 < 3) 162 { 163 par1World.setBlockMetadataWithNotify(par2, par3, par4, var5 + 1); 164 } 165 } 166 } 167 168 /** 169 * Returns the ID of the items to drop on destruction. 170 */ 171 public int idDropped(int par1, Random par2Random, int par3) 172 { 173 return Item.cauldron.shiftedIndex; 174 } 175 176 @SideOnly(Side.CLIENT) 177 178 /** 179 * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative) 180 */ 181 public int idPicked(World par1World, int par2, int par3, int par4) 182 { 183 return Item.cauldron.shiftedIndex; 184 } 185 }