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.setTabToDisplayOn(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 return event.result; 046 } 047 048 if (var12.typeOfHit == EnumMovingObjectType.TILE) 049 { 050 int var13 = var12.blockX; 051 int var14 = var12.blockY; 052 int var15 = var12.blockZ; 053 054 if (!par2World.canMineBlock(par3EntityPlayer, var13, var14, var15)) 055 { 056 return par1ItemStack; 057 } 058 059 if (this.isFull == 0) 060 { 061 if (!par3EntityPlayer.canPlayerEdit(var13, var14, var15)) 062 { 063 return par1ItemStack; 064 } 065 066 if (par2World.getBlockMaterial(var13, var14, var15) == Material.water && par2World.getBlockMetadata(var13, var14, var15) == 0) 067 { 068 par2World.setBlockWithNotify(var13, var14, var15, 0); 069 070 if (par3EntityPlayer.capabilities.isCreativeMode) 071 { 072 return par1ItemStack; 073 } 074 075 if (--par1ItemStack.stackSize <= 0) 076 { 077 return new ItemStack(Item.bucketWater); 078 } 079 080 if (!par3EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketWater))) 081 { 082 par3EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketWater.shiftedIndex, 1, 0)); 083 } 084 085 return par1ItemStack; 086 } 087 088 if (par2World.getBlockMaterial(var13, var14, var15) == Material.lava && par2World.getBlockMetadata(var13, var14, var15) == 0) 089 { 090 par2World.setBlockWithNotify(var13, var14, var15, 0); 091 092 if (par3EntityPlayer.capabilities.isCreativeMode) 093 { 094 return par1ItemStack; 095 } 096 097 if (--par1ItemStack.stackSize <= 0) 098 { 099 return new ItemStack(Item.bucketLava); 100 } 101 102 if (!par3EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketLava))) 103 { 104 par3EntityPlayer.dropPlayerItem(new ItemStack(Item.bucketLava.shiftedIndex, 1, 0)); 105 } 106 107 return par1ItemStack; 108 } 109 } 110 else 111 { 112 if (this.isFull < 0) 113 { 114 return new ItemStack(Item.bucketEmpty); 115 } 116 117 if (var12.sideHit == 0) 118 { 119 --var14; 120 } 121 122 if (var12.sideHit == 1) 123 { 124 ++var14; 125 } 126 127 if (var12.sideHit == 2) 128 { 129 --var15; 130 } 131 132 if (var12.sideHit == 3) 133 { 134 ++var15; 135 } 136 137 if (var12.sideHit == 4) 138 { 139 --var13; 140 } 141 142 if (var12.sideHit == 5) 143 { 144 ++var13; 145 } 146 147 if (!par3EntityPlayer.canPlayerEdit(var13, var14, var15)) 148 { 149 return par1ItemStack; 150 } 151 152 if (this.func_77875_a(par2World, var5, var7, var9, var13, var14, var15) && !par3EntityPlayer.capabilities.isCreativeMode) 153 { 154 return new ItemStack(Item.bucketEmpty); 155 } 156 } 157 } 158 else if (this.isFull == 0 && var12.entityHit instanceof EntityCow) 159 { 160 return new ItemStack(Item.bucketMilk); 161 } 162 163 return par1ItemStack; 164 } 165 } 166 167 public boolean func_77875_a(World par1World, double par2, double par4, double par6, int par8, int par9, int par10) 168 { 169 if (this.isFull <= 0) 170 { 171 return false; 172 } 173 else if (!par1World.isAirBlock(par8, par9, par10) && par1World.getBlockMaterial(par8, par9, par10).isSolid()) 174 { 175 return false; 176 } 177 else 178 { 179 if (par1World.provider.isHellWorld && this.isFull == Block.waterMoving.blockID) 180 { 181 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); 182 183 for (int var11 = 0; var11 < 8; ++var11) 184 { 185 par1World.spawnParticle("largesmoke", (double)par8 + Math.random(), (double)par9 + Math.random(), (double)par10 + Math.random(), 0.0D, 0.0D, 0.0D); 186 } 187 } 188 else 189 { 190 par1World.setBlockAndMetadataWithNotify(par8, par9, par10, this.isFull, 0); 191 } 192 193 return true; 194 } 195 } 196 }