From 39ff9ed2c88ebed480f94a6e5d2b45318f7d3d93 Mon Sep 17 00:00:00 2001 From: Bjarne Koll Date: Wed, 4 Jun 2025 21:10:37 +0200 Subject: [PATCH] Pass hand to entity unleash event --- .../sources/net/minecraft/world/entity/Entity.java.patch | 9 +++++++++ .../org/bukkit/craftbukkit/event/CraftEventFactory.java | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch index 38ce29f1a4..431cef742a 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -1037,6 +1037,15 @@ leashable1.setLeashedTo(this, true); flag = true; } +@@ -2103,7 +_,7 @@ + } + + ItemStack itemInHand = player.getItemInHand(hand); +- if (itemInHand.is(Items.SHEARS) && this.shearOffAllLeashConnections(player)) { ++ if (itemInHand.is(Items.SHEARS) && this.shearOffAllLeashConnections(player, hand)) { // Paper - PlayerUnleashEntityEvent - pass used hand + itemInHand.hurtAndBreak(1, player, hand); + return InteractionResult.SUCCESS; + } else if (this instanceof Mob mob @@ -2116,11 +_,14 @@ if (this.isAlive() && this instanceof Leashable leashable2) { if (leashable2.getLeashHolder() == player) { diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 5ceb08265f..8a7e4c796d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1497,7 +1497,13 @@ public class CraftEventFactory { } public static boolean handlePlayerUnleashEntityEvent(Entity entity, net.minecraft.world.entity.player.@Nullable Player player, @Nullable InteractionHand hand, boolean dropLeash) { - if (player == null || hand == null) return true; + if (player == null || hand == null) { + if (entity instanceof final Leashable leashable) { + if (dropLeash) leashable.dropLeash(); + else leashable.removeLeash(); + } + return true; + } PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity(), CraftEquipmentSlot.getHand(hand), dropLeash); entity.level().getCraftServer().getPluginManager().callEvent(event);