--- a/net/minecraft/world/entity/monster/Strider.java
+++ b/net/minecraft/world/entity/monster/Strider.java
@@ -1,6 +1,8 @@
 package net.minecraft.world.entity.monster;
 
 import com.google.common.collect.Sets;
+import com.google.common.collect.UnmodifiableIterator;
+import java.util.Iterator;
 import java.util.Set;
 import javax.annotation.Nullable;
 import net.minecraft.core.BlockPos;
@@ -51,6 +53,7 @@
 import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.item.Items;
 import net.minecraft.world.item.crafting.Ingredient;
+import net.minecraft.world.level.ItemLike;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.level.LevelAccessor;
 import net.minecraft.world.level.LevelReader;
@@ -68,6 +71,7 @@
 import net.minecraft.world.phys.shapes.CollisionContext;
 
 public class Strider extends Animal implements ItemSteerable, Saddleable {
+
     private static final float SUFFOCATE_STEERING_MODIFIER = 0.23F;
     private static final float SUFFOCATE_SPEED_MODIFIER = 0.66F;
     private static final float STEERING_MODIFIER = 0.55F;
@@ -76,7 +80,7 @@
     private static final EntityDataAccessor<Integer> DATA_BOOST_TIME = SynchedEntityData.defineId(Strider.class, EntityDataSerializers.INT);
     private static final EntityDataAccessor<Boolean> DATA_SUFFOCATING = SynchedEntityData.defineId(Strider.class, EntityDataSerializers.BOOLEAN);
     private static final EntityDataAccessor<Boolean> DATA_SADDLE_ID = SynchedEntityData.defineId(Strider.class, EntityDataSerializers.BOOLEAN);
-    public final ItemBasedSteering steering = new ItemBasedSteering(this.entityData, DATA_BOOST_TIME, DATA_SADDLE_ID);
+    public final ItemBasedSteering steering;
     @Nullable
     private TemptGoal temptGoal;
     @Nullable
@@ -84,6 +88,7 @@
 
     public Strider(EntityType<? extends Strider> type, Level world) {
         super(type, world);
+        this.steering = new ItemBasedSteering(this.entityData, Strider.DATA_BOOST_TIME, Strider.DATA_SADDLE_ID);
         this.blocksBuilding = true;
         this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F);
         this.setPathfindingMalus(BlockPathTypes.LAVA, 0.0F);
@@ -92,18 +97,18 @@
     }
 
     public static boolean checkStriderSpawnRules(EntityType<Strider> type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
-        BlockPos.MutableBlockPos mutableBlockPos = pos.mutable();
+        BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable();
 
         do {
-            mutableBlockPos.move(Direction.UP);
-        } while(world.getFluidState(mutableBlockPos).is(FluidTags.LAVA));
+            blockposition_mutableblockposition.move(Direction.UP);
+        } while (world.getFluidState(blockposition_mutableblockposition).is(FluidTags.LAVA));
 
-        return world.getBlockState(mutableBlockPos).isAir();
+        return world.getBlockState(blockposition_mutableblockposition).isAir();
     }
 
     @Override
     public void onSyncedDataUpdated(EntityDataAccessor<?> data) {
-        if (DATA_BOOST_TIME.equals(data) && this.level.isClientSide) {
+        if (Strider.DATA_BOOST_TIME.equals(data) && this.level.isClientSide) {
             this.steering.onSynced();
         }
 
@@ -113,9 +118,9 @@
     @Override
     protected void defineSynchedData() {
         super.defineSynchedData();
-        this.entityData.define(DATA_BOOST_TIME, 0);
-        this.entityData.define(DATA_SUFFOCATING, false);
-        this.entityData.define(DATA_SADDLE_ID, false);
+        this.entityData.define(Strider.DATA_BOOST_TIME, 0);
+        this.entityData.define(Strider.DATA_SUFFOCATING, false);
+        this.entityData.define(Strider.DATA_SADDLE_ID, false);
     }
 
     @Override
@@ -144,7 +149,7 @@
     public void equipSaddle(@Nullable SoundSource sound) {
         this.steering.setSaddle(true);
         if (sound != null) {
-            this.level.playSound((Player)null, this, SoundEvents.STRIDER_SADDLE, sound, 0.5F, 1.0F);
+            this.level.playSound((Player) null, (Entity) this, SoundEvents.STRIDER_SADDLE, sound, 0.5F, 1.0F);
         }
 
     }
@@ -154,7 +159,7 @@
         this.panicGoal = new PanicGoal(this, 1.65D);
         this.goalSelector.addGoal(1, this.panicGoal);
         this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D));
-        this.temptGoal = new TemptGoal(this, 1.4D, TEMPT_ITEMS, false);
+        this.temptGoal = new TemptGoal(this, 1.4D, Strider.TEMPT_ITEMS, false);
         this.goalSelector.addGoal(3, this.temptGoal);
         this.goalSelector.addGoal(4, new Strider.StriderGoToLavaGoal(this, 1.5D));
         this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.1D));
@@ -165,11 +170,11 @@
     }
 
     public void setSuffocating(boolean cold) {
-        this.entityData.set(DATA_SUFFOCATING, cold);
+        this.entityData.set(Strider.DATA_SUFFOCATING, cold);
     }
 
     public boolean isSuffocating() {
-        return this.getVehicle() instanceof Strider ? ((Strider)this.getVehicle()).isSuffocating() : this.entityData.get(DATA_SUFFOCATING);
+        return this.getVehicle() instanceof Strider ? ((Strider) this.getVehicle()).isSuffocating() : (Boolean) this.entityData.get(Strider.DATA_SUFFOCATING);
     }
 
     @Override
@@ -180,8 +185,9 @@
     @Override
     public double getPassengersRidingOffset() {
         float f = Math.min(0.25F, this.animationSpeed);
-        float g = this.animationPosition;
-        return (double)this.getBbHeight() - 0.19D + (double)(0.12F * Mth.cos(g * 1.5F) * 2.0F * f);
+        float f1 = this.animationPosition;
+
+        return (double) this.getBbHeight() - 0.19D + (double) (0.12F * Mth.cos(f1 * 1.5F) * 2.0F * f);
     }
 
     @Override
@@ -193,45 +199,60 @@
     @Override
     public Entity getControllingPassenger() {
         Entity entity = this.getFirstPassenger();
+
         return entity != null && this.canBeControlledBy(entity) ? entity : null;
     }
 
     private boolean canBeControlledBy(Entity entity) {
-        if (!(entity instanceof Player player)) {
+        if (!(entity instanceof Player)) {
             return false;
         } else {
-            return player.getMainHandItem().is(Items.WARPED_FUNGUS_ON_A_STICK) || player.getOffhandItem().is(Items.WARPED_FUNGUS_ON_A_STICK);
+            Player entityhuman = (Player) entity;
+
+            return entityhuman.getMainHandItem().is(Items.WARPED_FUNGUS_ON_A_STICK) || entityhuman.getOffhandItem().is(Items.WARPED_FUNGUS_ON_A_STICK);
         }
     }
 
     @Override
     public Vec3 getDismountLocationForPassenger(LivingEntity passenger) {
-        Vec3[] vec3s = new Vec3[]{getCollisionHorizontalEscapeVector((double)this.getBbWidth(), (double)passenger.getBbWidth(), passenger.getYRot()), getCollisionHorizontalEscapeVector((double)this.getBbWidth(), (double)passenger.getBbWidth(), passenger.getYRot() - 22.5F), getCollisionHorizontalEscapeVector((double)this.getBbWidth(), (double)passenger.getBbWidth(), passenger.getYRot() + 22.5F), getCollisionHorizontalEscapeVector((double)this.getBbWidth(), (double)passenger.getBbWidth(), passenger.getYRot() - 45.0F), getCollisionHorizontalEscapeVector((double)this.getBbWidth(), (double)passenger.getBbWidth(), passenger.getYRot() + 45.0F)};
+        Vec3[] avec3d = new Vec3[]{getCollisionHorizontalEscapeVector((double) this.getBbWidth(), (double) passenger.getBbWidth(), passenger.getYRot()), getCollisionHorizontalEscapeVector((double) this.getBbWidth(), (double) passenger.getBbWidth(), passenger.getYRot() - 22.5F), getCollisionHorizontalEscapeVector((double) this.getBbWidth(), (double) passenger.getBbWidth(), passenger.getYRot() + 22.5F), getCollisionHorizontalEscapeVector((double) this.getBbWidth(), (double) passenger.getBbWidth(), passenger.getYRot() - 45.0F), getCollisionHorizontalEscapeVector((double) this.getBbWidth(), (double) passenger.getBbWidth(), passenger.getYRot() + 45.0F)};
         Set<BlockPos> set = Sets.newLinkedHashSet();
-        double d = this.getBoundingBox().maxY;
-        double e = this.getBoundingBox().minY - 0.5D;
-        BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos();
+        double d0 = this.getBoundingBox().maxY;
+        double d1 = this.getBoundingBox().minY - 0.5D;
+        BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
+        Vec3[] avec3d1 = avec3d;
+        int i = avec3d.length;
 
-        for(Vec3 vec3 : vec3s) {
-            mutableBlockPos.set(this.getX() + vec3.x, d, this.getZ() + vec3.z);
+        for (int j = 0; j < i; ++j) {
+            Vec3 vec3d = avec3d1[j];
 
-            for(double f = d; f > e; --f) {
-                set.add(mutableBlockPos.immutable());
-                mutableBlockPos.move(Direction.DOWN);
+            blockposition_mutableblockposition.set(this.getX() + vec3d.x, d0, this.getZ() + vec3d.z);
+
+            for (double d2 = d0; d2 > d1; --d2) {
+                set.add(blockposition_mutableblockposition.immutable());
+                blockposition_mutableblockposition.move(Direction.DOWN);
             }
         }
 
-        for(BlockPos blockPos : set) {
-            if (!this.level.getFluidState(blockPos).is(FluidTags.LAVA)) {
-                double g = this.level.getBlockFloorHeight(blockPos);
-                if (DismountHelper.isBlockFloorValid(g)) {
-                    Vec3 vec32 = Vec3.upFromBottomCenterOf(blockPos, g);
+        Iterator iterator = set.iterator();
 
-                    for(Pose pose : passenger.getDismountPoses()) {
-                        AABB aABB = passenger.getLocalBoundsForPose(pose);
-                        if (DismountHelper.canDismountTo(this.level, passenger, aABB.move(vec32))) {
-                            passenger.setPose(pose);
-                            return vec32;
+        while (iterator.hasNext()) {
+            BlockPos blockposition = (BlockPos) iterator.next();
+
+            if (!this.level.getFluidState(blockposition).is(FluidTags.LAVA)) {
+                double d3 = this.level.getBlockFloorHeight(blockposition);
+
+                if (DismountHelper.isBlockFloorValid(d3)) {
+                    Vec3 vec3d1 = Vec3.upFromBottomCenterOf(blockposition, d3);
+                    UnmodifiableIterator unmodifiableiterator = passenger.getDismountPoses().iterator();
+
+                    while (unmodifiableiterator.hasNext()) {
+                        Pose entitypose = (Pose) unmodifiableiterator.next();
+                        AABB axisalignedbb = passenger.getLocalBoundsForPose(entitypose);
+
+                        if (DismountHelper.canDismountTo(this.level, passenger, axisalignedbb.move(vec3d1))) {
+                            passenger.setPose(entitypose);
+                            return vec3d1;
                         }
                     }
                 }
@@ -248,12 +269,12 @@
     }
 
     public float getMoveSpeed() {
-        return (float)this.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.isSuffocating() ? 0.66F : 1.0F);
+        return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.isSuffocating() ? 0.66F : 1.0F);
     }
 
     @Override
     public float getSteeringSpeed() {
-        return (float)this.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.isSuffocating() ? 0.23F : 0.55F);
+        return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * (this.isSuffocating() ? 0.23F : 0.55F);
     }
 
     @Override
@@ -295,10 +316,17 @@
         }
 
         if (!this.isNoAi()) {
-            BlockState blockState = this.level.getBlockState(this.blockPosition());
-            BlockState blockState2 = this.getBlockStateOnLegacy();
-            boolean bl = blockState.is(BlockTags.STRIDER_WARM_BLOCKS) || blockState2.is(BlockTags.STRIDER_WARM_BLOCKS) || this.getFluidHeight(FluidTags.LAVA) > 0.0D;
-            this.setSuffocating(!bl);
+            BlockState iblockdata = this.level.getBlockState(this.blockPosition());
+            BlockState iblockdata1 = this.getBlockStateOnLegacy();
+            boolean flag = iblockdata.is(BlockTags.STRIDER_WARM_BLOCKS) || iblockdata1.is(BlockTags.STRIDER_WARM_BLOCKS) || this.getFluidHeight(FluidTags.LAVA) > 0.0D;
+
+            // CraftBukkit start
+            if (!flag ^ this.isSuffocating()) {
+                if (org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory.callStriderTemperatureChangeEvent(this, !flag)) {
+                    this.setSuffocating(!flag);
+                }
+            }
+            // CraftBukkit end
         }
 
         super.tick();
@@ -321,8 +349,9 @@
 
     private void floatStrider() {
         if (this.isInLava()) {
-            CollisionContext collisionContext = CollisionContext.of(this);
-            if (collisionContext.isAbove(LiquidBlock.STABLE_SHAPE, this.blockPosition(), true) && !this.level.getFluidState(this.blockPosition().above()).is(FluidTags.LAVA)) {
+            CollisionContext voxelshapecollision = CollisionContext.of(this);
+
+            if (voxelshapecollision.isAbove(LiquidBlock.STABLE_SHAPE, this.blockPosition(), true) && !this.level.getFluidState(this.blockPosition().above()).is(FluidTags.LAVA)) {
                 this.onGround = true;
             } else {
                 this.setDeltaMovement(this.getDeltaMovement().scale(0.5D).add(0.0D, 0.05D, 0.0D));
@@ -332,7 +361,7 @@
     }
 
     public static AttributeSupplier.Builder createAttributes() {
-        return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.175F).add(Attributes.FOLLOW_RANGE, 16.0D);
+        return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.17499999701976776D).add(Attributes.FOLLOW_RANGE, 16.0D);
     }
 
     @Override
@@ -372,98 +401,101 @@
 
     @Override
     public float getWalkTargetValue(BlockPos pos, LevelReader world) {
-        if (world.getBlockState(pos).getFluidState().is(FluidTags.LAVA)) {
-            return 10.0F;
-        } else {
-            return this.isInLava() ? Float.NEGATIVE_INFINITY : 0.0F;
-        }
+        return world.getBlockState(pos).getFluidState().is(FluidTags.LAVA) ? 10.0F : (this.isInLava() ? Float.NEGATIVE_INFINITY : 0.0F);
     }
 
     @Nullable
     @Override
-    public Strider getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) {
-        return EntityType.STRIDER.create(serverLevel);
+    public Strider getBreedOffspring(ServerLevel world, AgeableMob entity) {
+        return (Strider) EntityType.STRIDER.create(world);
     }
 
     @Override
     public boolean isFood(ItemStack stack) {
-        return FOOD_ITEMS.test(stack);
+        return Strider.FOOD_ITEMS.test(stack);
     }
 
     @Override
     protected void dropEquipment() {
         super.dropEquipment();
         if (this.isSaddled()) {
-            this.spawnAtLocation(Items.SADDLE);
+            this.spawnAtLocation((ItemLike) Items.SADDLE);
         }
 
     }
 
     @Override
     public InteractionResult mobInteract(Player player, InteractionHand hand) {
-        boolean bl = this.isFood(player.getItemInHand(hand));
-        if (!bl && this.isSaddled() && !this.isVehicle() && !player.isSecondaryUseActive()) {
+        boolean flag = this.isFood(player.getItemInHand(hand));
+
+        if (!flag && this.isSaddled() && !this.isVehicle() && !player.isSecondaryUseActive()) {
             if (!this.level.isClientSide) {
                 player.startRiding(this);
             }
 
             return InteractionResult.sidedSuccess(this.level.isClientSide);
         } else {
-            InteractionResult interactionResult = super.mobInteract(player, hand);
-            if (!interactionResult.consumesAction()) {
-                ItemStack itemStack = player.getItemInHand(hand);
-                return itemStack.is(Items.SADDLE) ? itemStack.interactLivingEntity(player, this, hand) : InteractionResult.PASS;
+            InteractionResult enuminteractionresult = super.mobInteract(player, hand);
+
+            if (!enuminteractionresult.consumesAction()) {
+                ItemStack itemstack = player.getItemInHand(hand);
+
+                return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, this, hand) : InteractionResult.PASS;
             } else {
-                if (bl && !this.isSilent()) {
-                    this.level.playSound((Player)null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
+                if (flag && !this.isSilent()) {
+                    this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
                 }
 
-                return interactionResult;
+                return enuminteractionresult;
             }
         }
     }
 
     @Override
     public Vec3 getLeashOffset() {
-        return new Vec3(0.0D, (double)(0.6F * this.getEyeHeight()), (double)(this.getBbWidth() * 0.4F));
+        return new Vec3(0.0D, (double) (0.6F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F));
     }
 
     @Nullable
     @Override
     public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
         if (this.isBaby()) {
-            return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt);
+            return super.finalizeSpawn(world, difficulty, spawnReason, (SpawnGroupData) entityData, entityNbt);
         } else {
-            RandomSource randomSource = world.getRandom();
-            if (randomSource.nextInt(30) == 0) {
-                Mob mob = EntityType.ZOMBIFIED_PIGLIN.create(world.getLevel());
-                if (mob != null) {
-                    entityData = this.spawnJockey(world, difficulty, mob, new Zombie.ZombieGroupData(Zombie.getSpawnAsBabyOdds(randomSource), false));
-                    mob.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(Items.WARPED_FUNGUS_ON_A_STICK));
-                    this.equipSaddle((SoundSource)null);
+            RandomSource randomsource = world.getRandom();
+
+            if (randomsource.nextInt(30) == 0) {
+                Mob entityinsentient = (Mob) EntityType.ZOMBIFIED_PIGLIN.create(world.getLevel());
+
+                if (entityinsentient != null) {
+                    entityData = this.spawnJockey(world, difficulty, entityinsentient, new Zombie.ZombieGroupData(Zombie.getSpawnAsBabyOdds(randomsource), false));
+                    entityinsentient.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(Items.WARPED_FUNGUS_ON_A_STICK));
+                    this.equipSaddle((SoundSource) null);
                 }
-            } else if (randomSource.nextInt(10) == 0) {
-                AgeableMob ageableMob = EntityType.STRIDER.create(world.getLevel());
-                if (ageableMob != null) {
-                    ageableMob.setAge(-24000);
-                    entityData = this.spawnJockey(world, difficulty, ageableMob, (SpawnGroupData)null);
+            } else if (randomsource.nextInt(10) == 0) {
+                AgeableMob entityageable = (AgeableMob) EntityType.STRIDER.create(world.getLevel());
+
+                if (entityageable != null) {
+                    entityageable.setAge(-24000);
+                    entityData = this.spawnJockey(world, difficulty, entityageable, (SpawnGroupData) null);
                 }
             } else {
                 entityData = new AgeableMob.AgeableMobGroupData(0.5F);
             }
 
-            return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt);
+            return super.finalizeSpawn(world, difficulty, spawnReason, (SpawnGroupData) entityData, entityNbt);
         }
     }
 
     private SpawnGroupData spawnJockey(ServerLevelAccessor world, DifficultyInstance difficulty, Mob rider, @Nullable SpawnGroupData entityData) {
         rider.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
-        rider.finalizeSpawn(world, difficulty, MobSpawnType.JOCKEY, entityData, (CompoundTag)null);
+        rider.finalizeSpawn(world, difficulty, MobSpawnType.JOCKEY, entityData, (CompoundTag) null);
         rider.startRiding(this, true);
         return new AgeableMob.AgeableMobGroupData(0.0F);
     }
 
-    static class StriderGoToLavaGoal extends MoveToBlockGoal {
+    private static class StriderGoToLavaGoal extends MoveToBlockGoal {
+
         private final Strider strider;
 
         StriderGoToLavaGoal(Strider strider, double speed) {
@@ -497,7 +529,8 @@
         }
     }
 
-    static class StriderPathNavigation extends GroundPathNavigation {
+    private static class StriderPathNavigation extends GroundPathNavigation {
+
         StriderPathNavigation(Strider entity, Level world) {
             super(entity, world);
         }
