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);