diff --git a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java index ddcf78a..a14c2e3 100644 --- a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java +++ b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java @@ -146,7 +146,7 @@ reg(true, org.bukkit.event.player.PlayerBedEnterEvent.class); reg(false, org.bukkit.event.player.PlayerBedLeaveEvent.class); reg(true, org.bukkit.event.player.PlayerBucketEmptyEvent.class); - reg(false, org.bukkit.event.player.PlayerBucketFillEvent.class); + reg(true, org.bukkit.event.player.PlayerBucketFillEvent.class); reg(true, org.bukkit.event.player.PlayerChangedWorldEvent.class); reg(false, org.bukkit.event.player.PlayerChannelEvent.class); reg(false, org.bukkit.event.player.PlayerChatEvent.class); diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/item/MixinItemBucket.java b/src/main/java/org/ultramine/mods/bukkit/mixin/item/MixinItemBucket.java index 94969ca..46079f9 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/item/MixinItemBucket.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/item/MixinItemBucket.java @@ -17,6 +17,7 @@ import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -83,13 +84,19 @@ int l = world.getBlockMetadata(i, j, k); if (material == Material.water && l == 0) { + PlayerBucketFillEvent fillEvent = CraftEventFactory.callPlayerBucketFillEvent(player, i, j, k, -1, itemStack, Items.water_bucket); + if (fillEvent.isCancelled()) + return itemStack; world.setBlockToAir(i, j, k); - return this.func_150910_a(itemStack, player, Items.water_bucket); + return this.func_150910_a(itemStack, player, Items.water_bucket, fillEvent.getItemStack()); } if (material == Material.lava && l == 0) { + PlayerBucketFillEvent fillEvent = CraftEventFactory.callPlayerBucketFillEvent(player, i, j, k, -1, itemStack, Items.lava_bucket); + if (fillEvent.isCancelled()) + return itemStack; world.setBlockToAir(i, j, k); - return this.func_150910_a(itemStack, player, Items.lava_bucket); + return this.func_150910_a(itemStack, player, Items.lava_bucket, fillEvent.getItemStack()); } } else @@ -127,4 +134,22 @@ } } } + + private ItemStack func_150910_a(ItemStack itemstack, EntityPlayer entityplayer, Item item, org.bukkit.inventory.ItemStack result) + { + if (entityplayer.capabilities.isCreativeMode) + { + return itemstack; + } + else if (--itemstack.stackSize <= 0) + { + return CraftItemStack.asNMSCopy(result); + } + else + { + if (!entityplayer.inventory.addItemStackToInventory(CraftItemStack.asNMSCopy(result))) + entityplayer.dropPlayerItemWithRandomChoice(CraftItemStack.asNMSCopy(result), false); + return itemstack; + } + } }