From 6aabdde93b9b33ce22d99774b944688f1d9e7eb9 Mon Sep 17 00:00:00 2001 From: Doc Date: Thu, 6 Aug 2026 16:14:57 -0400 Subject: [PATCH] Call PlayerBucketEmptyEvent for Sulfur Cube in Bucket --- .../net/minecraft/world/item/BucketItem.java.patch | 4 ++-- .../minecraft/world/item/MobBucketItem.java.patch | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/item/BucketItem.java.patch b/paper-server/patches/sources/net/minecraft/world/item/BucketItem.java.patch index d1a861696089..9c6e4c03eebc 100644 --- a/paper-server/patches/sources/net/minecraft/world/item/BucketItem.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/item/BucketItem.java.patch @@ -4,7 +4,7 @@ import org.jspecify.annotations.Nullable; public class BucketItem extends Item implements DispensibleContainerItem { -+ private static @Nullable ItemStack itemLeftInHandAfterPlayerBucketEmptyEvent = null; // Paper - Fix PlayerBucketEmptyEvent result itemstack ++ static @Nullable ItemStack itemLeftInHandAfterPlayerBucketEmptyEvent = null; // Paper - Fix PlayerBucketEmptyEvent result itemstack protected final Fluid content; public BucketItem(final Fluid content, final Item.Properties properties) { @@ -65,7 +65,7 @@ + return this.emptyContents(user, level, pos, hitResult, null, null, null, InteractionHand.MAIN_HAND); + } + -+ public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult, final Direction direction, final BlockPos clicked, final ItemStack itemStack, final InteractionHand hand) { ++ public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult, final @Nullable Direction direction, final @Nullable BlockPos clicked, final @Nullable ItemStack itemStack, final InteractionHand hand) { + // CraftBukkit end if (!(this.content instanceof FlowingFluid flowingFluid)) { return false; diff --git a/paper-server/patches/sources/net/minecraft/world/item/MobBucketItem.java.patch b/paper-server/patches/sources/net/minecraft/world/item/MobBucketItem.java.patch index e1c94b1481b5..38753b14161f 100644 --- a/paper-server/patches/sources/net/minecraft/world/item/MobBucketItem.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/item/MobBucketItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/MobBucketItem.java +++ b/net/minecraft/world/item/MobBucketItem.java -@@ -52,18 +_,18 @@ +@@ -52,18 +_,28 @@ } if (mob != null) { @@ -14,6 +14,16 @@ - public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult) { + public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult, final net.minecraft.core.Direction direction, final BlockPos clicked, final ItemStack itemStack, final net.minecraft.world.InteractionHand hand) { // Paper if (this.content == Fluids.EMPTY) { ++ // Paper start - call PlayerBucketEmptyEvent for mobs in buckets with not fluids ++ if (user instanceof net.minecraft.world.entity.player.Player player) { ++ org.bukkit.event.player.PlayerBucketEmptyEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerBucketEmptyEvent(level, player, pos, clicked, direction, itemStack, hand); ++ if (event.isCancelled()) { ++ player.containerMenu.sendAllDataToRemote(); // SPIGOT-4541 ++ return false; ++ } ++ BucketItem.itemLeftInHandAfterPlayerBucketEmptyEvent = event.getItemStack() != null ? event.getItemStack().equals(org.bukkit.craftbukkit.inventory.CraftItemStack.asNewCraftStack(net.minecraft.world.item.Items.BUCKET)) ? null : org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getItemStack()) : ItemStack.EMPTY; // Paper - Fix PlayerBucketEmptyEvent result itemstack ++ } ++ // Paper end this.playEmptySound(user, level, pos); return true; } else {