From c8ab2c5e8e5f88dc58ae36a735760329c67bfeac Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Tue, 6 Oct 2026 15:01:09 +0200 Subject: [PATCH] Prevent shearing villager display items Co-Authored-By: Jason Penilla <11360596+jpenilla@users.noreply.github.com> --- .../sources/net/minecraft/world/entity/Mob.java.patch | 9 +++++++++ .../world/entity/monster/zombie/Zombie.java.patch | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Mob.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Mob.java.patch index d60922116d5a..003a05421f27 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Mob.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Mob.java.patch @@ -179,6 +179,15 @@ double dropChance = this.dropChances.byEquipment(slot); if (!current.isEmpty() && Math.max(this.random.nextFloat() - 0.1F, 0.0F) < dropChance) { this.spawnAtLocation(level, current); +@@ -562,7 +_,7 @@ + } + + protected boolean canShearEquipment(final Player player) { +- return !this.isVehicle(); ++ return !this.isVehicle() && !(this instanceof net.minecraft.world.entity.npc.villager.Villager); // Paper - Prevent shearing villager display items + } + + protected boolean attemptToShearEquipment(final Player player, final InteractionHand hand, final ItemStack heldItem) { @@ -683,28 +_,34 @@ @Override diff --git a/paper-server/patches/sources/net/minecraft/world/entity/monster/zombie/Zombie.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/monster/zombie/Zombie.java.patch index 4d491e36a453..8ad6c57e779e 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/monster/zombie/Zombie.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/monster/zombie/Zombie.java.patch @@ -72,7 +72,7 @@ } @Override -@@ -231,6 +_,12 @@ +@@ -231,6 +_,19 @@ @VisibleForTesting public boolean convertVillagerToZombieVillager(final ServerLevel level, final Villager villager) { @@ -82,6 +82,13 @@ + + public static @Nullable ZombieVillager convertVillagerToZombieVillager(final ServerLevel level, final Villager villager, final net.minecraft.core.BlockPos blockPosition, boolean silent, org.bukkit.event.entity.EntityTransformEvent.TransformReason transformReason, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason creatureSpawnReason) { + // CraftBukkit end ++ // Paper start - Clear display items before conversion ++ for (net.minecraft.world.entity.ai.behavior.BehaviorControl behavior : villager.getBrain().getRunningBehaviors()) { ++ if (behavior instanceof net.minecraft.world.entity.ai.behavior.ShowTradesToPlayer) { ++ behavior.doStop(level, villager, level.getGameTime()); ++ } ++ } ++ // Paper end - Clear display items before conversion ZombieVillager zombieVillager = villager.convertTo( EntityTypes.ZOMBIE_VILLAGER, ConversionParams.single(villager, true, true),