001 package net.minecraft.src; 002 003 import net.minecraftforge.common.MinecraftForge; 004 import net.minecraftforge.event.entity.player.FillBucketEvent; 005 006 public class ItemBucket extends Item 007 { 008 /** field for checking if the bucket has been filled. */ 009 private int isFull; 010 011 public ItemBucket(int par1, int par2) 012 { 013 super(par1); 014 this.maxStackSize = 1; 015 this.isFull = par2; 016 this.setCreativeTab(CreativeTabs.tabMisc); 017 } 018 019 /** 020 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer 021 */ 022 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) 023 { 024 float var4 = 1.0F; 025 double var5 = par3EntityPlayer.prevPosX + (par3EntityPlayer.posX - par3EntityPlayer.prevPosX) * (double)var4; 026 double var7 = par3EntityPlayer.prevPosY + (par3EntityPlayer.posY - par3EntityPlayer.prevPosY) * (double)var4 + 1.62D - (double)par3EntityPlayer.yOffset; 027 double var9 = par3EntityPlayer.prevPosZ + (par3EntityPlayer.posZ - par3EntityPlayer.prevPosZ) * (double)var4; 028 boolean var11 = this.isFull == 0; 029 MovingObjectPosition var12 = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, var11); 030 031 if (var12 == null) 032 { 033 return par1ItemStack; 034 } 035 else 036 { 037 FillBucketEvent event = new FillBucketEvent(par3EntityPlayer, par1ItemStack, par2World, var12); 038 if (MinecraftForge.EVENT_BUS.post(event)) 039 { 040 return par1ItemStack; 041 } 042 043 if (event.isHandeled()) 044 { 045 if (par3EntityPlayer.capabilities.isCreativeMode) 046 { 047 return par1ItemStack; 048 } 049 050 if (--par1ItemStack.stackSize <= 0) 051 { 052 return event.result; 053 } 054 055 if (!par3EntityPlayer.inventory.addItemStackToInventory(event.result)) 056 { 057 par3EntityPlayer.dropPlayerItem(event.result); 058 } 059 060 return par1ItemStack; 061 } 062 063 if (var12.typeOfHit == EnumMovingObjectType.TILE) 064 { 065 int var13 = var12.blockX; 066 int var14 = var12.blockY; 067 int var15 = var12.blockZ; 068 069 if (!par2World.canMineBlock(par3EntityPlayer, var13, var14, var15)) 070 { 071 return par1ItemStack; 072 } 073 074 if (this.isFull == 0) 075 { 076 if (!par3EntityPlayer.func_82247_a(var13, var14, var15, var12.sideHit, par1ItemStack)) 077 { 078 return par1ItemStack; 079 } 080 081 if (par2World.getBlockMaterial(var13, var14, var15) == Material.water && par2World.getBlockMetadata(var13, var14, var15) == 0) 082 { 083 par2World.setBlockWithNotify(var13, var14, var15, 0); 084 085 if (par3EntityPlayer.capabilities.isCreativeMode) 086 { 087 return par1ItemStack; 088 } 089 090 if (--par1ItemStack.stackSize <= 0) 091 { 092 return new ItemStack(Item.bucketWater); 093 } 094 095 if (!par3EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketWater))) 096 { 097 par3EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketWater.shiftedIndex, 1, 0)); 098 } 099 100 return par1ItemStack; 101 } 102 103 if (par2World.getBlockMaterial(var13, var14, var15) == Material.lava && par2World.getBlockMetadata(var13, var14, var15) == 0) 104 { 105 par2World.setBlockWithNotify(var13, var14, var15, 0); 106 107 if (par3EntityPlayer.capabilities.isCreativeMode) 108 { 109 return par1ItemStack; 110 } 111 112 if (--par1ItemStack.stackSize <= 0) 113 { 114 return new ItemStack(Item.bucketLava); 115 } 116 117 if (!par3EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketLava))) 118 { 119 par3EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketLava.shiftedIndex, 1, 0)); 120 } 121 122 return par1ItemStack; 123 } 124 } 125 else 126 { 127 if (this.isFull < 0) 128 { 129 return new ItemStack(Item.bucketEmpty); 130 } 131 132 if (var12.sideHit == 0) 133 { 134 --var14; 135 } 136 137 if (var12.sideHit == 1) 138 { 139 ++var14; 140 } 141 142 if (var12.sideHit == 2) 143 { 144 --var15; 145 } 146 147 if (var12.sideHit == 3) 148 { 149 ++var15; 150 } 151 152 if (var12.sideHit == 4) 153 { 154 --var13; 155 } 156 157 if (var12.sideHit == 5) 158 { 159 ++var13; 160 } 161 162 if (!par3EntityPlayer.func_82247_a(var13, var14, var15, var12.sideHit, par1ItemStack)) 163 { 164 return par1ItemStack; 165 } 166 167 if (this.tryPlaceContainedLiquid(par2World, var5, var7, var9, var13, var14, var15) && !par3EntityPlayer.capabilities.isCreativeMode) 168 { 169 return new ItemStack(Item.bucketEmpty); 170 } 171 } 172 } 173 else if (this.isFull == 0 && var12.entityHit instanceof EntityCow) 174 { 175 return new ItemStack(Item.bucketMilk); 176 } 177 178 return par1ItemStack; 179 } 180 } 181 182 /** 183 * Attempts to place the liquid contained inside the bucket. 184 */ 185 public boolean tryPlaceContainedLiquid(World par1World, double par2, double par4, double par6, int par8, int par9, int par10) 186 { 187 if (this.isFull <= 0) 188 { 189 return false; 190 } 191 else if (!par1World.isAirBlock(par8, par9, par10) && par1World.getBlockMaterial(par8, par9, par10).isSolid()) 192 { 193 return false; 194 } 195 else 196 { 197 if (par1World.provider.isHellWorld && this.isFull == Block.waterMoving.blockID) 198 { 199 par1World.playSoundEffect(par2 + 0.5D, par4 + 0.5D, par6 + 0.5D, "random.fizz", 0.5F, 2.6F + (par1World.rand.nextFloat() - par1World.rand.nextFloat()) * 0.8F); 200 201 for (int var11 = 0; var11 < 8; ++var11) 202 { 203 par1World.spawnParticle("largesmoke", (double)par8 + Math.random(), (double)par9 + Math.random(), (double)par10 + Math.random(), 0.0D, 0.0D, 0.0D); 204 } 205 } 206 else 207 { 208 par1World.setBlockAndMetadataWithNotify(par8, par9, par10, this.isFull, 0); 209 } 210 211 return true; 212 } 213 } 214 }