--- ../src-base/minecraft/net/minecraft/item/ItemBucket.java +++ ../src-work/minecraft/net/minecraft/item/ItemBucket.java @@ -12,6 +12,13 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.FillBucketEvent; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +// CraftBukkit end + public class ItemBucket extends Item { private Block isFull; @@ -83,23 +90,52 @@ if (material == Material.water && l == 0) { + // CraftBukkit start + PlayerBucketFillEvent cbEvent = CraftEventFactory.callPlayerBucketFillEvent(p_77659_3_, i, j, k, -1, p_77659_1_, Items.water_bucket); + + if (cbEvent.isCancelled()) + { + return p_77659_1_; + } + + // CraftBukkit end p_77659_2_.setBlockToAir(i, j, k); - return this.func_150910_a(p_77659_1_, p_77659_3_, Items.water_bucket); + return this.func_150910_a(p_77659_1_, p_77659_3_, Items.water_bucket, cbEvent.getItemStack()); // CraftBukkit - added Event stack } if (material == Material.lava && l == 0) { + // CraftBukkit start + PlayerBucketFillEvent cbEvent = CraftEventFactory.callPlayerBucketFillEvent(p_77659_3_, i, j, k, -1, p_77659_1_, Items.lava_bucket); + + if (cbEvent.isCancelled()) + { + return p_77659_1_; + } + + // CraftBukkit end p_77659_2_.setBlockToAir(i, j, k); - return this.func_150910_a(p_77659_1_, p_77659_3_, Items.lava_bucket); + return this.func_150910_a(p_77659_1_, p_77659_3_, Items.lava_bucket, cbEvent.getItemStack()); // CraftBukkit - added Event stack } } else { if (this.isFull == Blocks.air) { - return new ItemStack(Items.bucket); + // CraftBukkit start + PlayerBucketEmptyEvent cbEvent = CraftEventFactory.callPlayerBucketEmptyEvent(p_77659_3_, i, j, k, movingobjectposition.sideHit, p_77659_1_); + + if (cbEvent.isCancelled()) + { + return p_77659_1_; + } + + return CraftItemStack.asNMSCopy(cbEvent.getItemStack()); } + int clickedX = i, clickedY = j, clickedZ = k; + // CraftBukkit end + if (movingobjectposition.sideHit == 0) { --j; @@ -135,9 +171,19 @@ return p_77659_1_; } + // CraftBukkit start + PlayerBucketEmptyEvent cbEvent = CraftEventFactory.callPlayerBucketEmptyEvent(p_77659_3_, clickedX, clickedY, clickedZ, movingobjectposition.sideHit, p_77659_1_); + + if (cbEvent.isCancelled()) + { + return p_77659_1_; + } + + // CraftBukkit end + if (this.tryPlaceContainedLiquid(p_77659_2_, i, j, k) && !p_77659_3_.capabilities.isCreativeMode) { - return new ItemStack(Items.bucket); + return CraftItemStack.asNMSCopy(cbEvent.getItemStack()); // CraftBukkit } } } @@ -146,24 +192,32 @@ } } + // Cauldron start - vanilla compatibility private ItemStack func_150910_a(ItemStack p_150910_1_, EntityPlayer p_150910_2_, Item p_150910_3_) { - if (p_150910_2_.capabilities.isCreativeMode) + return this.func_150910_a(p_150910_1_, p_150910_2_, p_150910_3_, null); + } + // Cauldron end + + // CraftBukkit - added ob.ItemStack result - TODO: Is this... the right way to handle this? + private ItemStack func_150910_a(ItemStack itemstack, EntityPlayer entityplayer, Item item, org.bukkit.inventory.ItemStack result) + { + if (entityplayer.capabilities.isCreativeMode) { - return p_150910_1_; + return itemstack; } - else if (--p_150910_1_.stackSize <= 0) + else if (--itemstack.stackSize <= 0) { - return new ItemStack(p_150910_3_); + return CraftItemStack.asNMSCopy(result); // CraftBukkit } else { - if (!p_150910_2_.inventory.addItemStackToInventory(new ItemStack(p_150910_3_))) + if (!entityplayer.inventory.addItemStackToInventory(CraftItemStack.asNMSCopy(result))) // CraftBukkit { - p_150910_2_.dropPlayerItemWithRandomChoice(new ItemStack(p_150910_3_, 1, 0), false); + entityplayer.dropPlayerItemWithRandomChoice(CraftItemStack.asNMSCopy(result), false); // CraftBukkit } - return p_150910_1_; + return itemstack; } }