diff --git a/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java b/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
index 0f326ad6b..862981d41 100644
--- a/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
@@ -340,6 +340,7 @@ public abstract class OptionsPages
                 .withComponent(new BooleanOptionComponent(mc.gameSettings.allowSoundOverrides))
                 .withComponent(new BooleanOptionComponent(mc.gameSettings.downloadSoundfiles))
                 .withComponent(new BooleanOptionComponent(mc.gameSettings.enableDevResourceLoading))
+                .withComponent(new BooleanOptionComponent(mc.gameSettings.devModels))
 //                .withComponent(new BooleanOptionComponent(mc.gameSettings.enableMultiDrawRendering))
             )
             .withComponent(new OptionsCategory("gui.options.page.debug.category.utility")
diff --git a/game/client/src/main/java/net/minecraft/client/option/GameSettings.java b/game/client/src/main/java/net/minecraft/client/option/GameSettings.java
index 2761fd304..0cbbfd45d 100644
--- a/game/client/src/main/java/net/minecraft/client/option/GameSettings.java
+++ b/game/client/src/main/java/net/minecraft/client/option/GameSettings.java
@@ -177,6 +177,7 @@ public class GameSettings {
 	public OptionBoolean developerMode = new OptionBoolean(this, "developerMode", false);
 	public OptionBoolean enableHolidayTextures = new OptionBoolean(this, "enableHolidayTextures", true);
 	public OptionBoolean dynamicCursor = new OptionBoolean(this, "dynamicCursor", true);
+	public OptionBoolean devModels = new OptionBoolean(this, "devModels", true);
 
 	public OptionBoolean playerLeftHanded = new OptionBoolean(this, "player.left.handed", false);
 	public OptionBoolean playerCape = new OptionBoolean(this, "player.cape", true);
diff --git a/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java b/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
index 3900439c7..df2ff9c6c 100644
--- a/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
@@ -96,7 +96,7 @@ public class ItemRenderer
 
                     GL11.glRotatef(f18 * 70F, 0.0F, 1.0F, 0.0F);
                     GL11.glRotatef(-f14 * 20F, 0.0F, 0.0F, 1.0F);
-                    mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), PlayerSkinParser.instance);
+                    mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), mc.thePlayer.slimModel ? PlayerSkinParser.instanceAlex : PlayerSkinParser.instanceSteve);
 
                     GL11.glTranslatef(-1F, 3.6F, 3.5F);
                     GL11.glRotatef(120F, 0.0F, 0.0F, 1.0F);
@@ -127,7 +127,7 @@ public class ItemRenderer
                     f18 = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * MathHelper.PI);
                     GL11.glRotatef(f18 * 70F, 0.0F, 1.0F, 0.0F);
                     GL11.glRotatef(-f14 * 20F, 0.0F, 0.0F, 1.0F);
-                    mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), PlayerSkinParser.instance);
+                    mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), mc.thePlayer.slimModel ? PlayerSkinParser.instanceAlex : PlayerSkinParser.instanceSteve);
                     GL11.glTranslatef(-1F, 3.6F, 3.5F);
                     GL11.glRotatef(120F, 0.0F, 0.0F, 1.0F);
                     GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F);
diff --git a/game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java b/game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java
index 17e96e404..a1edf8011 100644
--- a/game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java
+++ b/game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java
@@ -1,23 +1,46 @@
 package net.minecraft.client.render;
 
+import net.minecraft.core.entity.player.Player;
+import net.minecraft.core.util.helper.Color;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.imageio.ImageIO;
 import java.awt.Graphics;
 import java.awt.image.BufferedImage;
 import java.awt.image.DataBufferInt;
+import java.io.IOException;
 
 public class PlayerSkinParser implements ImageParser {
-	
-	public static final PlayerSkinParser instance = new PlayerSkinParser();
-	
-	private int imageData[];
-	private int width = 64;
-	private int height = 64;
+	public static final BufferedImage maskImageSteve;
+	public static final BufferedImage maskImageAlex;
+	static {
+        try {
+            maskImageSteve = ImageIO.read(PlayerSkinParser.class.getResourceAsStream("/assets/minecraft/textures/entity/char/mask_steve.png"));
+            maskImageAlex = ImageIO.read(PlayerSkinParser.class.getResourceAsStream("/assets/minecraft/textures/entity/char/mask_alex.png"));
+        } catch (final IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+	public static final PlayerSkinParser instanceSteve = new PlayerSkinParser(false);
+	public static final PlayerSkinParser instanceAlex = new PlayerSkinParser(true);
+
+	private int[] imageData;
+	private final int width = 64;
+	private final int height = 64;
+	private final boolean slim;
+
+	public PlayerSkinParser(boolean slim) {
+		this.slim = slim;
+	}
 
 	@Override
-	public BufferedImage parseImage(BufferedImage image) {
+	public BufferedImage parseImage(final BufferedImage image) {
 		if(image == null) return null;
 		
-		BufferedImage newImage = new BufferedImage(width, height, 2);
-		Graphics g = newImage.getGraphics();
+		final BufferedImage newImage = new BufferedImage(this.width, this.height, 2);
+		final Graphics g = newImage.getGraphics();
 		g.drawImage(image, 0, 0, null);
 
 		if (image.getHeight() == 32)
@@ -48,22 +71,18 @@ public class PlayerSkinParser implements ImageParser {
 		}
 
 		g.dispose();
-		imageData = ((DataBufferInt) newImage.getRaster().getDataBuffer()).getData();
-
-		// Remove Head Transparency
-		removeTransparency(0, 0, 32, 16);
-
-		// Remove Body Transparency
-		removeTransparency(0, 16, 64, 16);
-		removeTransparency(16, 48, 32, 16);
+        this.imageData = ((DataBufferInt) newImage.getRaster().getDataBuffer()).getData();
+		
+		removeTransparency();
 
 		return newImage;
 	}
 
-	private void removeTransparency(int x1, int y1, int w2, int h2) {
-		for (int x = x1; x < x1 + w2; x++) {
-			for (int y = y1; y < y1 + h2; y++) {
-				imageData[x + y * width] |= 0xff000000;
+	private void removeTransparency() {
+		final BufferedImage mask = (this.slim) ? maskImageAlex : maskImageSteve;
+		for (int x = 0; x < this.width; x++) {
+			for (int y = 0; y < this.height; y++) {
+				this.imageData[x + y * this.width] |= (mask.getRGB(x, y) & 0xff) << 24;
 			}
 		}
 	}
diff --git a/game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java
index 939f9752c..d97611bf1 100644
--- a/game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java
@@ -33,6 +33,7 @@ public abstract class MobRenderer<T extends Mob> extends EntityRenderer<T>{
         loadEntityTexture(entity);
 //        bindTexture("/assets/minecraft/textures/entity/creeper/debug.png");
         GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+        GL11.glEnable(GL11.GL_BLEND);
         GL11.glDisable(GL11.GL_CULL_FACE);
 
         GL11.glPushMatrix();
diff --git a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
index 010ba3e13..ed0757df0 100644
--- a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
@@ -36,16 +36,14 @@ public class MobRendererHuman extends MobRendererBiped<MobHuman>
     @Override
     public void loadEntityTexture(final @NotNull MobHuman entity)
     {
-        bindDownloadableTexture(entity.skinUrl, entity.getEntityTexture(), PlayerSkinParser.instance);
+        bindDownloadableTexture(entity.skinUrl, entity.getEntityTexture(), entity.slimModel ? PlayerSkinParser.instanceAlex : PlayerSkinParser.instanceSteve);
     }
 
     @Override
     protected @Nullable StaticEntityModel getActiveModel(@NotNull final MobHuman entity) {
-        if (isASign(entity)) return getModel("main.shign");
+        final MobRendererPlayer.Specials specials = MobRendererPlayer.Specials.getSpecialsForMob(entity);
+        if (specials != null) return getModel(specials.modelReference);
         return entity.slimModel ? getModel("main.slim") : getModel("main");
     }
 
-    public static boolean isASign(@NotNull final MobHuman human) {
-        return human.nickname.equals("ShignBright");
-    }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
index 087eccbf0..f1d1184fc 100644
--- a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
@@ -14,6 +14,7 @@ import net.minecraft.client.render.tileentity.TileEntityRenderer;
 import net.minecraft.core.Global;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.motion.CarriedBlock;
+import net.minecraft.core.entity.Mob;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.util.helper.MathHelper;
@@ -28,7 +29,6 @@ import java.util.UUID;
 
 public class MobRendererPlayer extends MobRendererBipedArmored<Player>
 {
-    public static final UUID UUID_SHIGN = UUID.fromString("49f6ea39-30b2-4441-b07c-7bfe0beeb61e");
     private BlocksContainer container = null;
 
     public MobRendererPlayer()
@@ -40,7 +40,8 @@ public class MobRendererPlayer extends MobRendererBipedArmored<Player>
         if (onlyArms) {
             return player.slimModel ? getModel("arms.slim") : getModel("arms");
         } else {
-            if (isASign(player)) return getModel("main.shign");
+            final Specials specials = Specials.getSpecialsForPlayer(player);
+            if (specials != null) return getModel(specials.modelReference);
             return player.slimModel ? getModel("main.slim") : getModel("main");
         }
     }
@@ -270,7 +271,8 @@ public class MobRendererPlayer extends MobRendererBipedArmored<Player>
 
     @Override
     protected @Nullable StaticEntityModel getActiveModel(@NotNull final Player entity) {
-        if (isASign(entity)) return getModel("main.shign");
+        final Specials specials = Specials.getSpecialsForPlayer(entity);
+        if (specials != null) return getModel(specials.modelReference);
         return entity.slimModel ? getModel("main.slim") : getModel("main");
     }
 
@@ -302,10 +304,38 @@ public class MobRendererPlayer extends MobRendererBipedArmored<Player>
 
     @Override
     public void loadEntityTexture(final @NotNull Player entity) {
-        bindDownloadableTexture(entity.skinURL, entity.getEntityTexture(), PlayerSkinParser.instance);
+        bindDownloadableTexture(entity.skinURL, entity.getEntityTexture(), entity.slimModel ? PlayerSkinParser.instanceAlex : PlayerSkinParser.instanceSteve);
     }
 
-    public static boolean isASign(@NotNull final Player player) {
-        return player.uuid.equals(UUID_SHIGN) || player.username.equals("ShignBright");
+    public enum Specials {
+        SHIGN(UUID.fromString("49f6ea39-30b2-4441-b07c-7bfe0beeb61e"), "ShignBright", "main.shign"),
+        COOKIE(UUID.fromString("2c3bfa2c-95b0-48a8-baa2-9f3802190d86"), "DaCookieCakes", "main.cookie"),
+        THA_BOAR(UUID.fromString("f73086f5-d583-408b-a65c-d2dbdd9afaae"), "thaboar", "main.boar");
+
+        public final @NotNull UUID uuid;
+        public final @NotNull String username;
+        public final @NotNull String modelReference;
+
+        Specials(final @NotNull UUID uuid, final @NotNull String username, final @NotNull String modelReference) {
+            this.uuid = uuid;
+            this.username = username;
+            this.modelReference = modelReference;
+        }
+
+        public static @Nullable Specials getSpecialsForPlayer(final @NotNull Player player) {
+            if (!Minecraft.getMinecraft().gameSettings.devModels.value) return null;
+            if (player.uuid.equals(SHIGN.uuid) || player.username.equals(SHIGN.username)) return SHIGN;
+            if (player.uuid.equals(COOKIE.uuid) || player.username.equals(COOKIE.username)) return COOKIE;
+            if (player.uuid.equals(THA_BOAR.uuid) || player.username.equals(THA_BOAR.username)) return THA_BOAR;
+            return null;
+        }
+
+        public static @Nullable Specials getSpecialsForMob(final @NotNull Mob mob) {
+            if (!Minecraft.getMinecraft().gameSettings.devModels.value) return null;
+            if (mob.nickname.equals(SHIGN.username)) return SHIGN;
+            if (mob.nickname.equals(COOKIE.username)) return COOKIE;
+            if (mob.nickname.equals(THA_BOAR.username)) return THA_BOAR;
+            return null;
+        }
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
index 70519b93a..5317abc54 100644
--- a/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
+++ b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
@@ -52,7 +52,7 @@ public class ItemModelMap extends ItemModelStandard {
             GL11.glEnable(GL12.GL_RESCALE_NORMAL);
 
             // Render both player arms
-            mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), PlayerSkinParser.instance);
+            mc.textureManager.bindDownloadableTexture(mc.thePlayer.skinURL, mc.thePlayer.getEntityTexture(), mc.thePlayer.slimModel ? PlayerSkinParser.instanceAlex : PlayerSkinParser.instanceSteve);
             MobRendererPlayer playerRenderer = (MobRendererPlayer) (EntityRenderer<? extends Entity>) EntityRenderDispatcher.instance.getRenderer(mc.thePlayer);
 
             GL11.glPushMatrix();
diff --git a/game/client/src/main/resources/assets/minecraft/models/entity/models.json b/game/client/src/main/resources/assets/minecraft/models/entity/models.json
index 49c14cc39..416b19095 100644
--- a/game/client/src/main/resources/assets/minecraft/models/entity/models.json
+++ b/game/client/src/main/resources/assets/minecraft/models/entity/models.json
@@ -90,6 +90,8 @@
             "main":"geometry.player.base.steve",
             "main.slim":"geometry.player.base.alex",
             "main.shign":"geometry.player.base.shign",
+            "main.cookie":"geometry.player.base.cookie",
+            "main.boar":"geometry.player.base.boar",
             "arms":"geometry.player.base.steve.arms",
             "arms.slim":"geometry.player.base.alex.arms",
             "cape":"geometry.player.cape",
@@ -102,6 +104,8 @@
             "main":"geometry.player.base.steve",
             "main.slim":"geometry.player.base.alex",
             "main.shign":"geometry.player.base.shign",
+            "main.cookie":"geometry.player.base.cookie",
+            "main.boar":"geometry.player.base.boar",
             "arms":"geometry.player.base.steve.arms",
             "arms.slim":"geometry.player.base.alex.arms",
             "cape":"geometry.player.cape"
diff --git a/game/client/src/main/resources/assets/minecraft/models/entity/secret.geo.json b/game/client/src/main/resources/assets/minecraft/models/entity/secret.geo.json
index 2c427a6d2..c4e90d15c 100644
--- a/game/client/src/main/resources/assets/minecraft/models/entity/secret.geo.json
+++ b/game/client/src/main/resources/assets/minecraft/models/entity/secret.geo.json
@@ -173,6 +173,399 @@
 					]
 				}
 			]
+		},
+		{
+			"description": {
+				"identifier": "geometry.player.base.cookie",
+				"texture_width": 64,
+				"texture_height": 64,
+				"visible_bounds_width": 3,
+				"visible_bounds_height": 3,
+				"visible_bounds_offset": [0, 1.5, 0]
+			},
+			"bones": [
+				{
+					"name": "waist",
+					"pivot": [0, 12, 0]
+				},
+				{
+					"name": "body",
+					"parent": "waist",
+					"pivot": [0, 24, 0]
+				},
+				{
+					"name": "torso",
+					"parent": "body",
+					"pivot": [0, 24, 0],
+					"cubes": [
+						{"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]},
+						{
+							"origin": [-4, 11.5, 2],
+							"size": [8, 0, 6],
+							"pivot": [0, 11.5, 3],
+							"rotation": [-45, 0, 0],
+							"uv": {
+								"north": {"uv": [48, 31], "uv_size": [8, 0]},
+								"east": {"uv": [33, 31], "uv_size": [15, 0]},
+								"south": {"uv": [71, 31], "uv_size": [8, 0]},
+								"west": {"uv": [56, 31], "uv_size": [15, 0]},
+								"up": {"uv": [56, 16], "uv_size": [8, 6], "uv_rotation": 180},
+								"down": {"uv": [56, 22], "uv_size": [8, -6], "uv_rotation": 180}
+							}
+						},
+						{
+							"origin": [-4, 9.5, 7.5],
+							"size": [8, 0, 6],
+							"pivot": [0, 11.5, 3],
+							"rotation": [-22.5, 0, 0],
+							"uv": {
+								"north": {"uv": [48, 31], "uv_size": [8, 0]},
+								"east": {"uv": [33, 31], "uv_size": [15, 0]},
+								"south": {"uv": [71, 31], "uv_size": [8, 0]},
+								"west": {"uv": [56, 31], "uv_size": [15, 0]},
+								"up": {"uv": [56, 22], "uv_size": [8, 6], "uv_rotation": 180},
+								"down": {"uv": [56, 28], "uv_size": [8, -6], "uv_rotation": 180}
+							}
+						}
+					]
+				},
+				{
+					"name": "jacket",
+					"parent": "torso",
+					"pivot": [0, 18, 0],
+					"cubes": [
+						{"origin": [-4, 12, -2], "size": [8, 12, 4], "inflate": 0.25, "uv": [16, 32]}
+					]
+				},
+				{
+					"name": "rightArm",
+					"parent": "torso",
+					"pivot": [-5, 22, 0],
+					"cubes": [
+						{"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16]}
+					]
+				},
+				{
+					"name": "rightSleeve",
+					"parent": "rightArm",
+					"pivot": [-6, 18, 0],
+					"cubes": [
+						{"origin": [-8, 12, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [40, 32]}
+					]
+				},
+				{
+					"name": "rightItem",
+					"parent": "rightArm",
+					"pivot": [-6, 12, -2],
+					"rotation": [90, 0, 0]
+				},
+				{
+					"name": "leftArm",
+					"parent": "torso",
+					"pivot": [5, 22, 0],
+					"cubes": [
+						{"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [32, 48]}
+					]
+				},
+				{
+					"name": "leftSleeve",
+					"parent": "leftArm",
+					"pivot": [6, 18, 0],
+					"cubes": [
+						{"origin": [4, 12, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [48, 48]}
+					]
+				},
+				{
+					"name": "leftItem",
+					"parent": "leftArm",
+					"pivot": [6, 12, -2],
+					"rotation": [-90, 180, 0]
+				},
+				{
+					"name": "cape",
+					"parent": "torso",
+					"pivot": [0, 24, 2.5]
+				},
+				{
+					"name": "head",
+					"parent": "body",
+					"pivot": [0, 24, 0],
+					"cubes": [
+						{"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]},
+						{
+							"origin": [-5, 32, 0],
+							"size": [10, 8, 0],
+							"uv": {
+								"north": {"uv": [27, 0], "uv_size": [10, 8]},
+								"east": {"uv": [27, 0], "uv_size": [0, 8]},
+								"south": {"uv": [56, 31], "uv_size": [8, 10], "uv_rotation": 270},
+								"west": {"uv": [37, 0], "uv_size": [0, 8]},
+								"up": {"uv": [27, 0], "uv_size": [10, 0]},
+								"down": {"uv": [37, 0], "uv_size": [10, 0]}
+							}
+						}
+					]
+				},
+				{
+					"name": "hat",
+					"parent": "head",
+					"pivot": [0, 28, 0],
+					"cubes": [
+						{"origin": [-4, 24, -4], "size": [8, 8, 8], "inflate": 0.25, "uv": [32, 0]}
+					]
+				},
+				{
+					"name": "rightLeg",
+					"parent": "body",
+					"pivot": [-1.9, 12, 0],
+					"cubes": [
+						{"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 16]}
+					]
+				},
+				{
+					"name": "rightPant",
+					"parent": "rightLeg",
+					"pivot": [-2, 6, 0],
+					"cubes": [
+						{"origin": [-4, 0, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [0, 32]}
+					]
+				},
+				{
+					"name": "leftLeg",
+					"parent": "body",
+					"pivot": [1.9, 12, 0],
+					"cubes": [
+						{"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [16, 48]}
+					]
+				},
+				{
+					"name": "leftPant",
+					"parent": "leftLeg",
+					"pivot": [2, 6, 0],
+					"cubes": [
+						{"origin": [0, 0, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [0, 48]}
+					]
+				}
+			]
+		},
+		{
+			"description": {
+				"identifier": "geometry.player.base.boar",
+				"texture_width": 64,
+				"texture_height": 64,
+				"visible_bounds_width": 3,
+				"visible_bounds_height": 4,
+				"visible_bounds_offset": [0, 2, 0]
+			},
+			"bones": [
+				{
+					"name": "waist",
+					"pivot": [0, 12, 0]
+				},
+				{
+					"name": "body",
+					"parent": "waist",
+					"pivot": [0, 24, 0]
+				},
+				{
+					"name": "torso",
+					"parent": "body",
+					"pivot": [0, 24, 0],
+					"cubes": [
+						{"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]}
+					]
+				},
+				{
+					"name": "jacket",
+					"parent": "torso",
+					"pivot": [0, 18, 0],
+					"cubes": [
+						{"origin": [-4, 12, -2], "size": [8, 12, 4], "inflate": 0.25, "uv": [16, 32]}
+					]
+				},
+				{
+					"name": "rightArm",
+					"parent": "torso",
+					"pivot": [-5, 22, 0],
+					"cubes": [
+						{"origin": [-7, 12, -2], "size": [3, 12, 4], "uv": [40, 16]}
+					]
+				},
+				{
+					"name": "rightSleeve",
+					"parent": "rightArm",
+					"pivot": [-6, 18, 0],
+					"cubes": [
+						{"origin": [-7, 12, -2], "size": [3, 12, 4], "inflate": 0.25, "uv": [40, 32]}
+					]
+				},
+				{
+					"name": "rightItem",
+					"parent": "rightArm",
+					"pivot": [-5.5, 12, -2],
+					"rotation": [90, 0, 0]
+				},
+				{
+					"name": "leftArm",
+					"parent": "torso",
+					"pivot": [5, 22, 0],
+					"cubes": [
+						{"origin": [4, 12, -2], "size": [3, 12, 4], "uv": [32, 48]}
+					]
+				},
+				{
+					"name": "leftSleeve",
+					"parent": "leftArm",
+					"pivot": [5, 18, 0],
+					"cubes": [
+						{"origin": [4, 12, -2], "size": [3, 12, 4], "inflate": 0.25, "uv": [48, 48]}
+					]
+				},
+				{
+					"name": "leftItem",
+					"parent": "leftArm",
+					"pivot": [5.5, 12, -2],
+					"rotation": [-90, 180, 0]
+				},
+				{
+					"name": "cape",
+					"parent": "torso",
+					"pivot": [0, 24, 2.5]
+				},
+				{
+					"name": "head",
+					"parent": "body",
+					"pivot": [0, 24, 0],
+					"cubes": [
+						{"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}
+					]
+				},
+				{
+					"name": "hat",
+					"parent": "head",
+					"pivot": [0, 28, 0],
+					"cubes": [
+						{"origin": [-4, 24, -4], "size": [8, 8, 8], "inflate": 0.25, "uv": [32, 0]}
+					]
+				},
+				{
+					"name": "rightLeg",
+					"parent": "body",
+					"pivot": [-1.9, 12, 0],
+					"cubes": [
+						{"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 16]}
+					]
+				},
+				{
+					"name": "rightPant",
+					"parent": "rightLeg",
+					"pivot": [-2, 6, 0],
+					"cubes": [
+						{"origin": [-4, 0, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [0, 32]}
+					]
+				},
+				{
+					"name": "leftLeg",
+					"parent": "body",
+					"pivot": [1.9, 12, 0],
+					"cubes": [
+						{"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [16, 48]}
+					]
+				},
+				{
+					"name": "leftPant",
+					"parent": "leftLeg",
+					"pivot": [2, 6, 0],
+					"cubes": [
+						{"origin": [0, 0, -2], "size": [4, 12, 4], "inflate": 0.25, "uv": [0, 48]}
+					]
+				},
+				{
+					"name": "bone",
+					"pivot": [9, 30, -7],
+					"rotation": [-12.5, 0, 0],
+					"cubes": [
+						{
+							"origin": [-1.5, 28, -12],
+							"size": [10.5, 2, 24],
+							"pivot": [11, 30, -7],
+							"rotation": [0, 0, 22.5],
+							"uv": {
+								"north": {"uv": [55, 40], "uv_size": [9, 2]},
+								"east": {"uv": [55, 34], "uv_size": [9, 2]},
+								"south": {"uv": [55, 36], "uv_size": [9, 2]},
+								"west": {"uv": [55, 38], "uv_size": [9, 2]},
+								"up": {"uv": [55, 18], "uv_size": [9, 14]},
+								"down": {"uv": [55, 47], "uv_size": [9, -15]}
+							}
+						},
+						{
+							"origin": [-9, 35, -12],
+							"size": [10.5, 2, 24],
+							"pivot": [6, 30, -7],
+							"rotation": [0, 0, -22.5],
+							"uv": {
+								"north": {"uv": [55, 40], "uv_size": [9, 2]},
+								"east": {"uv": [55, 42], "uv_size": [9, 2]},
+								"south": {"uv": [55, 38], "uv_size": [9, 2]},
+								"west": {"uv": [55, 36], "uv_size": [9, 2]},
+								"up": {"uv": [55, 18], "uv_size": [9, 14]},
+								"down": {"uv": [55, 47], "uv_size": [9, -15]}
+							}
+						},
+						{
+							"origin": [-3.25, 38, -6.5],
+							"size": [6.25, 11.5, 7],
+							"pivot": [9, 30, -7],
+							"rotation": [-22.5, 0, 0],
+							"uv": {
+								"north": {"uv": [55, 18], "uv_size": [9, 11]},
+								"east": {"uv": [55, 18], "uv_size": [9, 11]},
+								"south": {"uv": [55, 18], "uv_size": [9, 11]},
+								"west": {"uv": [55, 18], "uv_size": [9, 11]},
+								"up": {"uv": [55, 18], "uv_size": [9, 14]},
+								"down": {"uv": [55, 47], "uv_size": [9, -15]}
+							}
+						},
+						{
+							"origin": [-4.75, 32.5, -5],
+							"size": [9.25, 5.5, 11],
+							"uv": {
+								"north": {"uv": [55, 18], "uv_size": [9, 5]},
+								"east": {"uv": [55, 18], "uv_size": [9, 5]},
+								"south": {"uv": [55, 18], "uv_size": [9, 5]},
+								"west": {"uv": [55, 18], "uv_size": [9, 5]},
+								"up": {"uv": [55, 18], "uv_size": [9, 14]},
+								"down": {"uv": [55, 43], "uv_size": [9, -11]}
+							}
+						}
+					]
+				}
+			],
+			"item_display_transforms": {
+				"thirdperson_righthand": {
+					"rotation": [-68, 0, 92],
+					"translation": [0, -1.5, 0],
+					"scale": [1, 1, 1],
+					"rotation_pivot": [0, 0, 0],
+					"scale_pivot": [0, 0, 0]
+				},
+				"gui": {
+					"rotation": [34, 40, 0],
+					"translation": [-0.75, 2.25, 0],
+					"scale": [0.95, 0.95, 0.95],
+					"rotation_pivot": [0, 0, 0],
+					"scale_pivot": [0, 0, 0],
+					"fit_to_frame": false
+				},
+				"head": {
+					"rotation": [19, 0, 0],
+					"translation": [-2.75, 16.75, 4.25],
+					"scale": [2.6, 2.6, 2.6],
+					"rotation_pivot": [0, 0, 0],
+					"scale_pivot": [0, 0, 0]
+				}
+			}
 		}
 	]
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_alex.png b/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_alex.png
new file mode 100644
index 000000000..c891ff9c3
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_alex.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_steve.png b/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_steve.png
new file mode 100644
index 000000000..5985a8099
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/entity/char/mask_steve.png differ
diff --git a/game/core/src/main/resources/lang/en_US/options.lang b/game/core/src/main/resources/lang/en_US/options.lang
index c8bb6b258..4e97a2853 100644
--- a/game/core/src/main/resources/lang/en_US/options.lang
+++ b/game/core/src/main/resources/lang/en_US/options.lang
@@ -172,6 +172,7 @@ options.chatVisibility.show_all=Always Show
 options.chatVisibility.show_when_chatting=Only Show When Chatting
 options.chatVisibility.never_show=Never Show
 options.developerMode=Developer Mode
+options.devModels=Show Developer Models
 options.forceOnscreenKeyboard=Force On Screen Keyboard
 options.enableHolidayTextures=Enable Holiday Textures
 options.dynamicCursor=Dynamic Cursor
