--- a/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -159,12 +_,20 @@
     }
 
     public void startConverting(@Nullable UUID conversionStarter, int villagerConversionTime) {
+        // Paper start - missing entity behaviour api - converting without entity event
+        this.startConverting(conversionStarter, villagerConversionTime, true);
+    }
+
+    public void startConverting(@Nullable UUID conversionStarter, int villagerConversionTime, boolean broadcastEntityEvent) {
+        // Paper end - missing entity behaviour api - converting without entity event
         this.conversionStarter = conversionStarter;
         this.villagerConversionTime = villagerConversionTime;
         this.getEntityData().set(DATA_CONVERTING_ID, true);
-        this.removeEffect(MobEffects.WEAKNESS);
-        this.addEffect(new MobEffectInstance(MobEffects.STRENGTH, villagerConversionTime, Math.min(this.level().getDifficulty().getId() - 1, 0)));
-        this.level().broadcastEntityEvent(this, (byte)16);
+        // CraftBukkit start
+        this.removeEffect(MobEffects.WEAKNESS, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION);
+        this.addEffect(new MobEffectInstance(MobEffects.STRENGTH, villagerConversionTime, Math.min(this.level().getDifficulty().getId() - 1, 0)), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION);
+        // CraftBukkit end
+        if (broadcastEntityEvent) this.level().broadcastEntityEvent(this, (byte)16); // Paper - missing entity behaviour api - converting without entity event
     }
 
     @Override
@@ -189,7 +_,7 @@
     }
 
     private void finishConversion(ServerLevel level) {
-        this.convertTo(
+        Villager converted = this.convertTo( // CraftBukkit
             EntityType.VILLAGER,
             ConversionParams.single(this, false, false),
             mob -> {
@@ -213,19 +_,24 @@
                 mob.finalizeSpawn(level, level.getCurrentDifficultyAt(mob.blockPosition()), EntitySpawnReason.CONVERSION, null);
                 mob.refreshBrain(level);
                 if (this.conversionStarter != null) {
-                    Player playerByUuid = level.getPlayerByUUID(this.conversionStarter);
+                    Player playerByUuid = level.getGlobalPlayerByUUID(this.conversionStarter); // Paper - check global player list where appropriate
                     if (playerByUuid instanceof ServerPlayer) {
                         CriteriaTriggers.CURED_ZOMBIE_VILLAGER.trigger((ServerPlayer)playerByUuid, this, mob);
                         level.onReputationEvent(ReputationEventType.ZOMBIE_VILLAGER_CURED, playerByUuid, mob);
                     }
                 }
 
-                mob.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0));
+                mob.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION); // CraftBukkit
                 if (!this.isSilent()) {
                     level.levelEvent(null, 1027, this.blockPosition(), 0);
                 }
-            }
+                // CraftBukkit start
+            }, org.bukkit.event.entity.EntityTransformEvent.TransformReason.CURED, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CURED // CraftBukkit
         );
+        if (converted == null) {
+            ((org.bukkit.entity.ZombieVillager) this.getBukkitEntity()).setConversionTime(-1); // SPIGOT-5208: End conversion to stop event spam
+        }
+        // CraftBukkit end
     }
 
     @VisibleForTesting
