diff --git a/game/client/src/main/java/net/minecraft/client/render/FogManager.java b/game/client/src/main/java/net/minecraft/client/render/FogManager.java
index 9888c7fb7..5c76b3dcf 100644
--- a/game/client/src/main/java/net/minecraft/client/render/FogManager.java
+++ b/game/client/src/main/java/net/minecraft/client/render/FogManager.java
@@ -84,7 +84,7 @@ public class FogManager {
             }
 
             glFogi(GL_FOG_MODE, GL_LINEAR);
-            glFogf(GL_FOG_START, fogDistance * 0.25F);
+            glFogf(GL_FOG_START, (fogDistance * 0.25F) * fogModifier);
             glFogf(GL_FOG_END, fogDistance);
             glFogf(GL_FOG_DENSITY, 1);
             if(fogMode == FOG_MODE_SKY)
diff --git a/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java b/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
index fdd0e2818..f354a636c 100644
--- a/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -918,10 +918,7 @@ public class RenderGlobal
         GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE);
         GL11.glPushMatrix();
         float sunAlpha = 1.0F - (worldObj.getCurrentWeather() != null && worldObj.getCurrentWeather() != Weathers.OVERWORLD_CLEAR ? (worldObj.weatherManager.getWeatherIntensity() * worldObj.weatherManager.getWeatherPower()) * 1.5f : 0.0f);
-        if (!mc.gameSettings.fog.value && worldObj.getCurrentWeather() == Weathers.OVERWORLD_FOG)
-        {
-            sunAlpha = 1f;
-        }
+
         float x = 0.0F;
         float y = 0.0F;
         float z = 0.0F;
diff --git a/game/client/src/main/java/net/minecraft/client/world/WorldClient.java b/game/client/src/main/java/net/minecraft/client/world/WorldClient.java
index ab03c6b85..425038471 100644
--- a/game/client/src/main/java/net/minecraft/client/world/WorldClient.java
+++ b/game/client/src/main/java/net/minecraft/client/world/WorldClient.java
@@ -18,6 +18,7 @@ import net.minecraft.core.world.type.WorldType;
 import net.minecraft.core.world.type.WorldTypes;
 import net.minecraft.core.world.weather.IPrecipitation;
 import net.minecraft.core.world.weather.WeatherManager;
+import net.minecraft.core.world.weather.Weathers;
 
 public class WorldClient extends World {
     public static final WorldClient EMPTY_WORLD = new WorldClient();
@@ -132,6 +133,16 @@ public class WorldClient extends World {
             g = g * f10 + f8 * (1.0F - f10);
             b = b * f10 + f8 * (1.0F - f10);
         }
+
+        float fogIntensity = getCurrentWeather() != null && getCurrentWeather() == Weathers.OVERWORLD_FOG ? weatherManager.getWeatherIntensity() * weatherManager.getWeatherPower() : 0.0f;
+        if(fogIntensity > 0.0F)
+        {
+            float f8 = (r * 0.5F + g * 0.5F + b * 0.5F) * 0.6F;
+            float f10 = 1.0F - fogIntensity * 0.75F;
+            r = r * f10 + f8 * (1.0F - f10);
+            g = g * f10 + f8 * (1.0F - f10);
+            b = b * f10 + f8 * (1.0F - f10);
+        }
         if(lightningFlicker > 0)
         {
             float f12 = (float)lightningFlicker - partialTick;
diff --git a/game/client/src/main/resources/assets/minecraft/models/entity/humanoid.geo.json b/game/client/src/main/resources/assets/minecraft/models/entity/humanoid.geo.json
index 0a8bd6167..e196e711d 100644
--- a/game/client/src/main/resources/assets/minecraft/models/entity/humanoid.geo.json
+++ b/game/client/src/main/resources/assets/minecraft/models/entity/humanoid.geo.json
@@ -17,24 +17,37 @@
 				"pivot": [0, 24, 0]
 			},
 			{
-				"name": "chest",
+				"name": "head",
 				"parent": "body",
 				"pivot": [0, 24, 0],
 				"cubes": [
-					{"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]}
+					{"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}
 				]
 			},
 			{
-				"name": "head",
+				"name": "rightLeg",
 				"parent": "body",
-				"pivot": [0, 24, 0],
+				"pivot": [-1.9, 12, 0],
 				"cubes": [
-					{"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}
+					{"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 16]}
 				]
 			},
 			{
-				"name": "rightArm",
+				"name": "leftLeg",
+				"parent": "body",
+				"pivot": [1.9, 12, 0],
+				"cubes": [
+					{"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [0, 16], "mirror": true}
+				]
+			},
+			{
+				"name": "torso",
 				"parent": "body",
+				"pivot": [0, 24, 0]
+			},
+			{
+				"name": "rightArm",
+				"parent": "torso",
 				"pivot": [-5, 22, 0],
 				"cubes": [
 					{"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16]}
@@ -48,7 +61,7 @@
 			},
 			{
 				"name": "leftArm",
-				"parent": "body",
+				"parent": "torso",
 				"pivot": [5, 22, 0],
 				"cubes": [
 					{"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 16], "mirror": true}
@@ -61,19 +74,11 @@
 				"rotation": [-90, 180, 0]
 			},
 			{
-				"name": "rightLeg",
-				"parent": "body",
-				"pivot": [-1.9, 12, 0],
-				"cubes": [
-					{"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 16]}
-				]
-			},
-			{
-				"name": "leftLeg",
-				"parent": "body",
-				"pivot": [1.9, 12, 0],
+				"name": "chest",
+				"parent": "torso",
+				"pivot": [0, 24, 0],
 				"cubes": [
-					{"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [0, 16], "mirror": true}
+					{"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]}
 				]
 			}
 		]
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrass.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrass.java
index 1851857df..a1869363a 100644
--- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrass.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrass.java
@@ -29,21 +29,17 @@ public class BlockLogicGrass extends BlockLogic
         }
         if(world.getBlockLightValue(x, y + 1, z) < 4 && Blocks.lightBlock[world.getBlockId(x, y + 1, z)] > 2)
         {
-            if(rand.nextInt(4) != 0)
-            {
-                return;
-            }
             world.setBlockWithNotify(x, y, z, dirt.id());
-        } else
-        if(world.getBlockLightValue(x, y + 1, z) >= 9)
+        } else if(world.getBlockLightValue(x, y + 1, z) >= 9)
         {
-            int l = (x + rand.nextInt(3)) - 1;
-            int i1 = (y + rand.nextInt(5)) - 3;
-            int j1 = (z + rand.nextInt(3)) - 1;
-            int k1 = world.getBlockId(l, i1 + 1, j1);
-            if(world.getBlockId(l, i1, j1) == dirt.id() && world.getBlockLightValue(l, i1 + 1, j1) >= 4 && Blocks.lightBlock[k1] <= 2)
-            {
-                world.setBlockWithNotify(l, i1, j1, block.id());
+            for(int i = 0; i < 4; i++) {
+                int x1 = (x + rand.nextInt(3)) - 1;
+                int y1 = (y + rand.nextInt(5)) - 3;
+                int z1 = (z + rand.nextInt(3)) - 1;
+                int above = world.getBlockId(x1, y1 + 1, z1);
+                if (world.getBlockId(x1, y1, z1) == dirt.id() && world.getBlockLightValue(x1, y1 + 1, z1) >= 4 && Blocks.lightBlock[above] <= 2) {
+                    world.setBlockWithNotify(x1, y1, z1, block.id());
+                }
             }
             if (world.getGameRuleValue(GameRules.DO_SEASONAL_GROWTH) && world.getBlockId(x, y + 1, z) == 0 && world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().growFlowers && rand.nextInt(256) == 0)
             {
diff --git a/game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
index a3500037f..10ade7de2 100644
--- a/game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
@@ -76,7 +76,7 @@ public class MobSkeleton extends MobMonsterArmored<HumanArmorShape>
             float f = getBrightness(1.0F);
             Weather weather;
             if(f > 0.5F && world.canBlockSeeTheSky(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)) && random.nextFloat() * 30F < (f - 0.4F) * 2.0F
-                && (weather = world.getCurrentWeather()) != null &&  !weather.isDamp() && (weather != Weathers.OVERWORLD_FOG || world.weatherManager.getWeatherPower() < 0.75F))
+                && (weather = world.getCurrentWeather()) != null &&  !weather.isDamp() && (weather != Weathers.OVERWORLD_FOG || world.weatherManager.getWeatherPower() < 0.8F))
             {
                 remainingFireTicks = 300;
             }
diff --git a/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java
index 5c27418a9..2c5b60abe 100644
--- a/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java
@@ -29,7 +29,7 @@ public class MobZombie extends MobMonsterArmored<HumanArmorShape>
             float f = getBrightness(1.0F);
             Weather weather = world.getCurrentWeather();
             if(f > 0.5F && world.canBlockSeeTheSky(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)) && random.nextFloat() * 30F < (f - 0.4F) * 2.0F
-                && weather != null && !weather.isDamp() && (world.getCurrentWeather() != Weathers.OVERWORLD_FOG || world.weatherManager.getWeatherPower() < 0.75F))
+                && weather != null && !weather.isDamp() && (world.getCurrentWeather() != Weathers.OVERWORLD_FOG || world.weatherManager.getWeatherPower() < 0.8F))
             {
                 remainingFireTicks = 300;
             }
