--- a/net/minecraft/world/entity/monster/Skeleton.java
+++ b/net/minecraft/world/entity/monster/Skeleton.java
@@ -16,11 +_,11 @@
 
 public class Skeleton extends AbstractSkeleton {
     private static final int TOTAL_CONVERSION_TIME = 300;
-    private static final EntityDataAccessor<Boolean> DATA_STRAY_CONVERSION_ID = SynchedEntityData.defineId(Skeleton.class, EntityDataSerializers.BOOLEAN);
+    public static final EntityDataAccessor<Boolean> DATA_STRAY_CONVERSION_ID = SynchedEntityData.defineId(Skeleton.class, EntityDataSerializers.BOOLEAN);
     public static final String CONVERSION_TAG = "StrayConversionTime";
     private static final int NOT_CONVERTING = -1;
-    private int inPowderSnowTime;
-    private int conversionTime;
+    public int inPowderSnowTime;
+    public int conversionTime;
 
     public Skeleton(EntityType<? extends Skeleton> entityType, Level level) {
         super(entityType, level);
@@ -93,11 +_,17 @@
     }
 
     protected void doFreezeConversion() {
-        this.convertTo(EntityType.STRAY, ConversionParams.single(this, true, true), mob -> {
+        final Stray stray = this.convertTo(EntityType.STRAY, ConversionParams.single(this, true, true), mob -> { // Paper - Fix issues with mob conversion; reset conversion time to prevent event spam
             if (!this.isSilent()) {
                 this.level().levelEvent(null, 1048, this.blockPosition(), 0);
             }
-        });
+        // Paper start - add spawn and transform reasons
+        }, org.bukkit.event.entity.EntityTransformEvent.TransformReason.FROZEN, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.FROZEN);
+        if (stray == null) {
+            // Reset conversion time to prevent event spam
+            this.conversionTime = 300;
+        }
+        // Paper end - add spawn and transform reasons
     }
 
     @Override
@@ -106,17 +_,17 @@
     }
 
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.SKELETON_AMBIENT;
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.SKELETON_HURT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.SKELETON_DEATH;
     }
 
