diff --git a/game/client/src/main/java/net/minecraft/client/Minecraft.java b/game/client/src/main/java/net/minecraft/client/Minecraft.java
index a060c5995..610001687 100644
--- a/game/client/src/main/java/net/minecraft/client/Minecraft.java
+++ b/game/client/src/main/java/net/minecraft/client/Minecraft.java
@@ -267,7 +267,8 @@ public class Minecraft
     private int joinPlayerCounter;
     protected boolean toggleFlyPressed = false;
     protected long flyPressedTime = 0;
-    public float hotbarSwapAnimationProgress = 0.0f;
+    public static final int HOTBAR_SWAP_ANIMATION_LENGTH_TICKS = 3;
+    public int hotbarSwapAnimationProgress = 0;
     public ScaledResolution resolution;
     public boolean fullbright = false;
     public Renderer renderer;
@@ -1539,6 +1540,13 @@ public class Minecraft
         {
             startCheckPaidThread();
         }
+
+        if (hotbarSwapAnimationProgress > 0) {
+            hotbarSwapAnimationProgress--;
+        } else if (hotbarSwapAnimationProgress < 0) {
+            hotbarSwapAnimationProgress++;
+        }
+
         Debug.push("gui");
         subtitleTracker.tick();
         statsCounter.tick();
@@ -2038,11 +2046,11 @@ public class Minecraft
             if (!thePlayer.inventory.currentItemLocked()) {
                 if (shift) {
                     thePlayer.setHotbarOffset((thePlayer.inventory.getHotbarOffset() + 27) % (36));
-                    hotbarSwapAnimationProgress = -1.0f;
+                    hotbarSwapAnimationProgress = -HOTBAR_SWAP_ANIMATION_LENGTH_TICKS;
                 }
                 else {
                     thePlayer.setHotbarOffset((thePlayer.inventory.getHotbarOffset() + 9) % (36));
-                    hotbarSwapAnimationProgress = 1.0f;
+                    hotbarSwapAnimationProgress = HOTBAR_SWAP_ANIMATION_LENGTH_TICKS;
                 }
                 thePlayer.inventory.changeCurrentItem(0);
             }
@@ -2230,14 +2238,14 @@ public class Minecraft
             if(controller.digitalPad.up.pressedThisFrame()) {
                 if (!thePlayer.inventory.currentItemLocked()) {
                     thePlayer.setHotbarOffset((thePlayer.inventory.getHotbarOffset() + 27) % (36));
-                    hotbarSwapAnimationProgress = -1.0f;
+                    hotbarSwapAnimationProgress = -HOTBAR_SWAP_ANIMATION_LENGTH_TICKS;
                     thePlayer.inventory.changeCurrentItem(0);
                 }
             }
             if(controller.digitalPad.down.pressedThisFrame()) {
                 if (!thePlayer.inventory.currentItemLocked()) {
                     thePlayer.setHotbarOffset((thePlayer.inventory.getHotbarOffset() + 9) % (36));
-                    hotbarSwapAnimationProgress = 1.0f;
+                    hotbarSwapAnimationProgress = HOTBAR_SWAP_ANIMATION_LENGTH_TICKS;
                     thePlayer.inventory.changeCurrentItem(0);
                 }
             }
diff --git a/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
index e0960ab83..34b9ebb2b 100644
--- a/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
@@ -17,6 +17,8 @@ import net.minecraft.core.player.inventory.container.ContainerInventory;
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.opengl.GL12;
 
+import static net.minecraft.client.Minecraft.HOTBAR_SWAP_ANIMATION_LENGTH_TICKS;
+
 public class HudComponentHotbar
     extends HudComponentMovable {
     private static final ItemStack[] PREVIEW_ITEMS = new ItemStack[] {
@@ -81,41 +83,52 @@ public class HudComponentHotbar
         if (mc.hotbarSwapAnimationProgress != 0.0f) {
             Scissor.enable(x + 8, y + 3, 176, 16);
 
-            if (mc.hotbarSwapAnimationProgress > 0.0f) {
-                mc.hotbarSwapAnimationProgress -= (partialTick * mc.hotbarSwapAnimationProgress * 2) / 16f;
+            if (mc.hotbarSwapAnimationProgress > 0) {
 
                 // Draw last hotbar
                 for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
                     int itemX = x + 8 + itemIndex * 20;
-                    int itemY = y + 3 - 22 + (int) (22 * mc.hotbarSwapAnimationProgress);
+                    int itemY = y + 3 - 22 + (int) (22 * (mc.hotbarSwapAnimationProgress - partialTick)/ HOTBAR_SWAP_ANIMATION_LENGTH_TICKS);
                     renderInventorySlot(mc, itemIndex + lastHotbarStart, itemX, itemY, partialTick);
                 }
-                if (mc.hotbarSwapAnimationProgress < 0.05f) {
-                    mc.hotbarSwapAnimationProgress = 0.0f;
+
+                // Render hotbar items
+                GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
+                for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
+                    int itemX = x + 8 + itemIndex * 20;
+                    int itemY = y + 3 + (int) (22 * (mc.hotbarSwapAnimationProgress - partialTick)/ HOTBAR_SWAP_ANIMATION_LENGTH_TICKS);
+                    renderInventorySlot(mc, itemIndex + mc.thePlayer.inventory.getHotbarOffset(), itemX, itemY, partialTick);
                 }
             } else {
-                mc.hotbarSwapAnimationProgress += (partialTick * -mc.hotbarSwapAnimationProgress * 2) / 16f;
-
                 // Draw next hotbar
                 for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
                     int itemX = x + 8 + itemIndex * 20;
-                    int itemY = y + 3 + 22 + (int) (22 * mc.hotbarSwapAnimationProgress);
+                    int itemY = y + 3 + 22 + (int) (22 * (mc.hotbarSwapAnimationProgress + partialTick)/ HOTBAR_SWAP_ANIMATION_LENGTH_TICKS);
                     renderInventorySlot(mc, itemIndex + nextHotbarStart, itemX, itemY, partialTick);
                 }
-                if (mc.hotbarSwapAnimationProgress > -0.05f) {
-                    mc.hotbarSwapAnimationProgress = 0.0f;
+
+                // Render hotbar items
+                GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
+                for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
+                    int itemX = x + 8 + itemIndex * 20;
+                    int itemY = y + 3 + (int) (22 * (mc.hotbarSwapAnimationProgress + partialTick)/ HOTBAR_SWAP_ANIMATION_LENGTH_TICKS);
+                    renderInventorySlot(mc, itemIndex + mc.thePlayer.inventory.getHotbarOffset(), itemX, itemY, partialTick);
                 }
             }
-        }
 
-        // Render hotbar items
-        GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
-            int itemX = x + 8 + itemIndex * 20;
-            int itemY = y + 3 + (int) (22 * mc.hotbarSwapAnimationProgress);
-            renderInventorySlot(mc, itemIndex + mc.thePlayer.inventory.getHotbarOffset(), itemX, itemY, partialTick);
+
+        } else {
+            // Render hotbar items
+            GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
+            for (int itemIndex = 0; itemIndex < 9; itemIndex++) {
+                int itemX = x + 8 + itemIndex * 20;
+                int itemY = y + 3;
+                renderInventorySlot(mc, itemIndex + mc.thePlayer.inventory.getHotbarOffset(), itemX, itemY, partialTick);
+            }
         }
 
+
+
         Scissor.disable();
         Lighting.disable();
 
diff --git a/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
index da3815398..46cfe5563 100644
--- a/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
+++ b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
@@ -18,6 +18,7 @@ import java.util.*;
 
 public class ChunkProviderDynamic implements IChunkProvider
 {
+    public static final int CHUNK_RADIUS = 32;
     private static final Logger LOGGER = LogUtils.getLogger();
     private final IntSet droppedChunksSet;
     private final Chunk emptyChunk;
@@ -61,8 +62,8 @@ public class ChunkProviderDynamic implements IChunkProvider
     public boolean canChunkBeUnloaded(int chunkX, int chunkZ) {
         int id = ChunkCoordinate.toInt(chunkX, chunkZ);
         if(forceLoadedChunkMap.containsKey(id)) return false;
-        int renderDistance = Minecraft.getMinecraft().gameSettings.renderDistance.value;
-        return chunkX <= currentChunkX - renderDistance || chunkZ <= currentChunkZ - renderDistance || chunkX >= currentChunkX + renderDistance || chunkZ >= currentChunkZ + renderDistance;
+        int renderDistance = CHUNK_RADIUS - 1;
+        return !(chunkX >= currentChunkX - renderDistance && chunkZ >= currentChunkZ - renderDistance && chunkX <= currentChunkX + renderDistance && chunkZ <= currentChunkZ + renderDistance);
     }
 
     @Override
@@ -251,9 +252,7 @@ public class ChunkProviderDynamic implements IChunkProvider
         int dropped = 0;
         for (Chunk chunk : chunkMap.values()) {
             if(dropped >= maxUnloadPerTick) break;
-            if(!isChunkLoaded(chunk.xPosition,chunk.zPosition)){
-                break;
-            } //droppedChunksSet gets updated as side-effect
+            isChunkLoaded(chunk.xPosition,chunk.zPosition); //droppedChunksSet gets updated as side-effect
         }
         if(!droppedChunksSet.isEmpty()){
             int unloaded = 0;
