diff --git a/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
index cb66b9133..f11708a46 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
@@ -14,7 +14,7 @@ public class BlockColorWater extends BlockColorCustom {
 	
 	@Override
 	public int getFallbackColor(int meta) {
-		if(!mc.gameSettings.biomeWater.value) {
+		if(!mc.gameSettings.biomeWater.value || (mc.currentWorld != null && mc.currentWorld.isRetro())) {
 			return 0xFFFFFFFF;
 		}
 		return super.getFallbackColor(meta);
@@ -22,7 +22,7 @@ public class BlockColorWater extends BlockColorCustom {
 	
 	@Override
 	public int getWorldColor(WorldSource world, int x, int y, int z) {
-		if(!mc.gameSettings.biomeWater.value) {
+		if(!mc.gameSettings.biomeWater.value || world.isRetro()) {
 			return 0xFFFFFFFF;
 		}
 		return super.getWorldColor(world, x, y, z);
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
index e21074ca7..03c18b0ff 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
@@ -1,5 +1,6 @@
 package net.minecraft.client.render.block.model;
 
+import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.RenderBlocks;
 import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.tessellator.Tessellator;
@@ -14,7 +15,6 @@ public abstract class BlockModel<T extends BlockLogic>
 {
     public static RenderBlocks renderBlocks;
     public final Block<T> block;
-    protected boolean hasOverbright = false;
     public BlockModel(Block<T> block){
         this.block = block;
     }
@@ -54,7 +54,10 @@ public abstract class BlockModel<T extends BlockLogic>
         return block.getBounds();
     }
     public boolean hasOverbright(){
-        return hasOverbright;
+        return false;
+    }
+    public boolean isRetro() {
+        return Minecraft.getMinecraft().currentWorld != null && Minecraft.getMinecraft().currentWorld.isRetro();
     }
     // Everything below is utility
     public static void setRenderBlocks(RenderBlocks rb)
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
index a7b9dfd7b..6ce62dc91 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
@@ -16,16 +16,14 @@ public class BlockModelActivator<T extends BlockLogic> extends BlockModelVeryRot
         TextureRegistry.getTexture("minecraft:block/activator/side_active"),
         TextureRegistry.getTexture("minecraft:block/activator/side_active")
     };
-    public final IconCoordinate[] overbrightTextures = {
-        TextureRegistry.getTexture("minecraft:block/activator/bottom_active_overlay"),
-        TextureRegistry.getTexture("minecraft:block/activator/top_active_overlay"),
-        TextureRegistry.getTexture("minecraft:block/activator/side_active_overlay"),
-        TextureRegistry.getTexture("minecraft:block/activator/front_active_overlay"),
-        TextureRegistry.getTexture("minecraft:block/activator/side_active_overlay"),
-        TextureRegistry.getTexture("minecraft:block/activator/side_active_overlay")
-    };
+
     public BlockModelActivator(Block<T> block) {
         super(block);
+        overbrightTextures
+            .set("minecraft:block/activator/bottom_active_overlay", Side.BOTTOM)
+            .set("minecraft:block/activator/top_active_overlay", Side.TOP)
+            .set("minecraft:block/activator/front_active_overlay", Side.SOUTH)
+            .set("minecraft:block/activator/side_active_overlay", Side.WEST, Side.EAST, Side.NORTH);
     }
 
     @Override
@@ -37,7 +35,7 @@ public class BlockModelActivator<T extends BlockLogic> extends BlockModelVeryRot
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
         if ((data & BlockLogicActivator.MASK_POWERED) != 0) {
-            return poweredTextures[getTextureIndex(side, data)];
+            return poweredTextures[getRotatedSide(side, data).getId()];
         } else {
             return super.getBlockTextureFromSideAndMetadata(side, data);
         }
@@ -48,6 +46,6 @@ public class BlockModelActivator<T extends BlockLogic> extends BlockModelVeryRot
     {
         boolean isPowered = (data & BlockLogicActivator.MASK_POWERED) != 0;
         if (!isPowered) return null;
-        return overbrightTextures[getTextureIndex(side, data)];
+        return super.getBlockOverbrightTextureFromSideAndMeta(side, data);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
index 94842cfef..4770216a6 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
@@ -50,7 +50,7 @@ public class BlockModelAxisAligned<T extends BlockLogic> extends BlockModelStand
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
         if ((6 * (data & 3) + side.getId()) >= Sides.orientationLookUpXYZAligned.length) return TextureRegistry.getTexture("minecraft:block/grass_top");
-        return atlasIndices[Sides.orientationLookUpXYZAligned[6 * (data & 3) + side.getId()]];
+        return super.getBlockTextureFromSideAndMetadata(Side.getSideById(Sides.orientationLookUpXYZAligned[6 * (data & 3) + side.getId()]), data);
     }
 
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
index 7cccfe222..3976bc5cf 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
@@ -11,14 +11,16 @@ import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelBed<T extends BlockLogic> extends BlockModelStandard<T> {
     protected IconCoordinate underTexture = TextureRegistry.getTexture("minecraft:block/bed/bottom");
+    protected final IconCoordinate[] bedTextures = new IconCoordinate[6];
+
     public BlockModelBed(Block<T> block) {
         super(block);
-        atlasIndices[0] = TextureRegistry.getTexture("minecraft:block/bed/foot_front");
-        atlasIndices[1] = TextureRegistry.getTexture("minecraft:block/bed/foot_side");
-        atlasIndices[2] = TextureRegistry.getTexture("minecraft:block/bed/foot_top");
-        atlasIndices[3] = TextureRegistry.getTexture("minecraft:block/bed/head_front");
-        atlasIndices[4] = TextureRegistry.getTexture("minecraft:block/bed/head_side");
-        atlasIndices[5] = TextureRegistry.getTexture("minecraft:block/bed/head_top");
+        bedTextures[0] = TextureRegistry.getTexture("minecraft:block/bed/foot_front");
+        bedTextures[1] = TextureRegistry.getTexture("minecraft:block/bed/foot_side");
+        bedTextures[2] = TextureRegistry.getTexture("minecraft:block/bed/foot_top");
+        bedTextures[3] = TextureRegistry.getTexture("minecraft:block/bed/head_front");
+        bedTextures[4] = TextureRegistry.getTexture("minecraft:block/bed/head_side");
+        bedTextures[5] = TextureRegistry.getTexture("minecraft:block/bed/head_top");
     }
 
     @Override
@@ -93,21 +95,21 @@ public class BlockModelBed<T extends BlockLogic> extends BlockModelStandard<T> {
         int l = BlockLogicBed.bedDirection[k][side.getId()];
         if(BlockLogicBed.isBlockFootOfBed(data)) {
             if(l == 2) {
-                return atlasIndices[3];
+                return bedTextures[3];
             }
             if(l == 5 || l == 4) {
-                return atlasIndices[4];
+                return bedTextures[4];
             } else {
-                return atlasIndices[5];
+                return bedTextures[5];
             }
         }
         if(l == 3) {
-            return atlasIndices[0];
+            return bedTextures[0];
         }
         if(l == 5 || l == 4) {
-            return atlasIndices[1];
+            return bedTextures[1];
         } else {
-            return atlasIndices[2];
+            return bedTextures[2];
         }
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
index aab08a3ed..47b31a82d 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
@@ -21,9 +21,7 @@ public class BlockModelCake<T extends BlockLogic> extends BlockModelStandard<T>
         if(data > 0 && side == Side.WEST)
         {
             return cakeInner;
-        } else
-        {
-            return atlasIndices[side.getId()];
         }
+        return super.getBlockTextureFromSideAndMetadata(side, data);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
index 35f13b428..693dacd99 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
@@ -4,10 +4,18 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.util.dispatch.Dispatcher;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
+import net.minecraft.core.util.helper.Side;
+
+import static net.minecraft.client.render.block.model.BlockModelStandard.BLOCK_TEXTURES;
+import static net.minecraft.client.render.block.model.BlockModelStandard.OVERBRIGHT_TEXTURES;
+import static net.minecraft.client.render.block.model.BlockModelStandard.RETRO_BLOCK_TEXTURES;
 
 public class BlockModelDispatcher
     extends Dispatcher<Block<?>, BlockModel<?>>
 {
+    private static final Side[] S_TB = new Side[]{Side.TOP, Side.BOTTOM};
+    private static final Side[] S_SIDES = new Side[]{Side.NORTH, Side.EAST, Side.SOUTH, Side.WEST};
+
     private static BlockModelDispatcher instance = new BlockModelDispatcher();
     public static BlockModelDispatcher getInstance()
     {
@@ -21,7 +29,7 @@ public class BlockModelDispatcher
     @Override
     public void addDispatch(Block<?> key, BlockModel<?> value)
     {
-        if (dispatches.containsValue(key)){
+        if (hasDispatch(key)){
             throw new IllegalArgumentException("Block '" + key.toString() + "' already assigned a model!");
         }
         dispatches.put(key, value);
@@ -34,74 +42,120 @@ public class BlockModelDispatcher
     private BlockModelDispatcher()
     {
         instance = this;
-        addDispatch(new BlockModelStandard<>(Blocks.STONE).withTextures("minecraft:block/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT).withTextures("minecraft:block/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE).withTextures("minecraft:block/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE).withTextures("minecraft:block/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.MARBLE).withTextures("minecraft:block/marble"));
-        addDispatch(new BlockModelStandard<>(Blocks.SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST).withTextures("minecraft:block/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE).withTextures("minecraft:block/cobbled_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE_MOSSY).withTextures("minecraft:block/cobbled_stone_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_BASALT).withTextures("minecraft:block/cobbled_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_LIMESTONE).withTextures("minecraft:block/cobbled_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_GRANITE).withTextures("minecraft:block/cobbled_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_PERMAFROST).withTextures("minecraft:block/cobbled_permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.STONE_POLISHED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/polished_stone_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_POLISHED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/polished_granite_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_POLISHED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/polished_limestone_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT_POLISHED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/polished_basalt_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.SLATE_POLISHED).withTextures("minecraft:block/polished_slate_top", "minecraft:block/polished_slate_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_POLISHED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/polished_permafrost_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_POLISHED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/polished_netherrack_side"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.PILLAR_MARBLE).withTextures("minecraft:block/pillar_marble/top", "minecraft:block/pillar_marble/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.CAPSTONE_MARBLE).withTextures("minecraft:block/capstone_marble/top", "minecraft:block/capstone_marble/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SANDSTONE).withTextures("minecraft:block/sandstone/top", "minecraft:block/sandstone/bottom", "minecraft:block/sandstone/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.STONE_CARVED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/carved_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_CARVED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/carved_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_CARVED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/carved_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT_CARVED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/carved_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_CARVED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/carved_permafrost"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_CARVED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/carved_netherrack"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelStandard<>(Blocks.STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.MARBLE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/marble"));
+        addDispatch(new BlockModelStandard<>(Blocks.SLATE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/slate_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/slate_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/cobbled_stone_retro")
+        );
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE_MOSSY)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_stone_mossy")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/cobbled_stone_mossy_retro")
+        );
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.STONE_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_stone_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_stone_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_granite_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_granite_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_limestone_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_limestone_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_basalt_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_basalt_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.SLATE_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_slate_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_slate_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_permafrost_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_permafrost_side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_POLISHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_netherrack_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_netherrack_side", S_SIDES));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.PILLAR_MARBLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pillar_marble/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pillar_marble/side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.CAPSTONE_MARBLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/capstone_marble/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/capstone_marble/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SANDSTONE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/sandstone/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/sandstone/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/sandstone/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.STONE_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_stone_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_stone", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_granite_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_granite", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_limestone_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_limestone", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_basalt_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_basalt", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_permafrost_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_permafrost", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_CARVED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_netherrack_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/carved_netherrack", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
         addDispatch(new BlockModelPlanksPainted<>(Blocks.PLANKS_OAK_PAINTED));
 
-        addDispatch(new BlockModelTorch<>(Blocks.TORCH_COAL).withTextures("minecraft:block/torch_coal"));
+        addDispatch(new BlockModelTorch<>(Blocks.TORCH_COAL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/torch_coal"));
 
-        addDispatch(new BlockModelLadder<>(Blocks.LADDER_OAK).withTextures("minecraft:block/ladder"));
+        addDispatch(new BlockModelLadder<>(Blocks.LADDER_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ladder"));
 
-        addDispatch(new BlockModelFence<>(Blocks.FENCE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelFence<>(Blocks.FENCE_PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
         addDispatch(new BlockModelFencePainted<>(Blocks.FENCE_PLANKS_OAK_PAINTED));
 
-        addDispatch(new BlockModelFenceGate<>(Blocks.FENCE_GATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelFenceGate<>(Blocks.FENCE_GATE_PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
         addDispatch(new BlockModelFenceGatePainted<>(Blocks.FENCE_GATE_PLANKS_OAK_PAINTED));
 
-        addDispatch(new BlockModelStandard<>(Blocks.BOOKSHELF_PLANKS_OAK).withTextures("minecraft:block/bookshelf/top", "minecraft:block/bookshelf/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BOOKSHELF_PLANKS_OAK)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/bookshelf/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/bookshelf/side", S_SIDES));
 
         addDispatch(new BlockModelWool<>(Blocks.WOOL));
-        addDispatch(new BlockModelRope<>(Blocks.ROPE).withTextures("minecraft:block/rope"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_CLAY).withTextures("minecraft:block/brick_clay"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED).withTextures("minecraft:block/brick_polished_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED_MOSSY).withTextures("minecraft:block/brick_polished_stone_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SANDSTONE).withTextures("minecraft:block/brick_sandstone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GOLD).withTextures("minecraft:block/brick_gold"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LAPIS).withTextures("minecraft:block/brick_lapis"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_BASALT).withTextures("minecraft:block/brick_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LIMESTONE).withTextures("minecraft:block/brick_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GRANITE).withTextures("minecraft:block/brick_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_MARBLE).withTextures("minecraft:block/brick_marble"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SLATE).withTextures("minecraft:block/brick_slate"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE).withTextures("minecraft:block/brick_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_PERMAFROST).withTextures("minecraft:block/brick_permafrost"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_IRON).withTextures("minecraft:block/brick_iron"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STEEL).withTextures("minecraft:block/brick_steel"));
+        addDispatch(new BlockModelRope<>(Blocks.ROPE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/rope"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_CLAY)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_clay")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/brick_clay_retro")
+        );
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_polished_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED_MOSSY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_polished_stone_mossy"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SANDSTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_sandstone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GOLD).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_gold"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LAPIS).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_lapis"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_MARBLE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_marble"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SLATE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_slate"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_permafrost"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_IRON).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_iron"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STEEL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_steel"));
 
         addDispatch(new BlockModelSlab<>(Blocks.SLAB_PLANKS_OAK));
         addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_STONE));
@@ -147,56 +201,100 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_SANDSTONE));
         addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_PERMAFROST));
 
-        addDispatch(new BlockModelStandard<>(Blocks.OBSIDIAN).withTextures("minecraft:block/obsidian"));
-
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS, false).withTextures("minecraft:block/glass"));
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_TINTED, false).onRenderLayer(1).withTextures("minecraft:block/glass_tinted"));
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_STEEL, false).withTextures("minecraft:block/glass_steel"));
-
-        addDispatch(new BlockModelGrass<>(Blocks.GRASS).withTextures("minecraft:block/grass/top", "minecraft:block/grass/bottom", "minecraft:block/grass/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRASS_RETRO).withTextures("minecraft:block/grass_retro/top", "minecraft:block/grass_retro/bottom", "minecraft:block/grass_retro/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRASS_SCORCHED).withTextures("minecraft:block/grass_scorched/top", "minecraft:block/grass_scorched/bottom", "minecraft:block/grass_scorched/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.PATH_DIRT).withTextures("minecraft:block/grass_path/top", "minecraft:block/grass_path/bottom", "minecraft:block/grass_path/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT).withTextures("minecraft:block/dirt"));
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED).withTextures("minecraft:block/dirt_scorched"));
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED_RICH).withTextures("minecraft:block/dirt_scorched_rich"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.MUD).withTextures("minecraft:block/mud"));
-        addDispatch(new BlockModelStandard<>(Blocks.MUD_BAKED).withTextures("minecraft:block/mud_baked"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_DRY).withTextures("minecraft:block/sponge"));
-        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_WET).withTextures("minecraft:block/sponge_wet"));
-        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_DRY).withTextures("minecraft:block/pumice"));
-        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_WET).withTextures("minecraft:block/pumice_overlay"));
-
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_STONE).withTextures("minecraft:block/stone"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_BASALT).withTextures("minecraft:block/basalt"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_LIMESTONE).withTextures("minecraft:block/limestone"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_GRANITE).withTextures("minecraft:block/granite"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SAND).withTextures("minecraft:block/sand"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRAVEL).withTextures("minecraft:block/gravel"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BEDROCK).withTextures("minecraft:block/bedrock"));
-        addDispatch(new BlockModelFullyRotatable<>(Blocks.BONESHALE).withTextures("minecraft:block/bone_shale/top", "minecraft:block/bone_shale/bottom", "minecraft:block/bone_shale/side"));
-
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_FLOWING).onRenderLayer(1).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing", "minecraft:block/water_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_STILL).onRenderLayer(1).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_FLOWING).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing", "minecraft:block/lava_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_STILL).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK).withTextures("minecraft:block/log/oak_top", "minecraft:block/log/oak_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PINE).withTextures("minecraft:block/log/pine_top", "minecraft:block/log/pine_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_BIRCH).withTextures("minecraft:block/log/birch_top", "minecraft:block/log/birch_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_CHERRY).withTextures("minecraft:block/log/cherry_top", "minecraft:block/log/cherry_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_EUCALYPTUS).withTextures("minecraft:block/log/eucalyptus_top", "minecraft:block/log/eucalyptus_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK_MOSSY).withTextures("minecraft:block/log/oak_mossy_top", "minecraft:block/log/oak_mossy_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_THORN).withTextures("minecraft:block/log/thorn_top", "minecraft:block/log/thorn_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PALM).withTextures("minecraft:block/log/palm_top", "minecraft:block/log/palm_side"));
-
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK, "minecraft:block/leaves/oak"));
+        addDispatch(new BlockModelStandard<>(Blocks.OBSIDIAN).setAllTextures(BLOCK_TEXTURES, "minecraft:block/obsidian"));
+
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS, false).setAllTextures(BLOCK_TEXTURES, "minecraft:block/glass"));
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_TINTED, false).onRenderLayer(1).setAllTextures(BLOCK_TEXTURES, "minecraft:block/glass_tinted"));
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_STEEL, false).setAllTextures(BLOCK_TEXTURES, "minecraft:block/glass_steel"));
+
+        addDispatch(new BlockModelGrass<>(Blocks.GRASS)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass/side", S_SIDES)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/grass_retro/top", Side.TOP)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/grass_retro/bottom", Side.BOTTOM)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/grass_retro/side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.GRASS_RETRO)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_retro/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_retro/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_retro/side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.GRASS_SCORCHED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_scorched/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_scorched/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_scorched/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.PATH_DIRT)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_path/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_path/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/grass_path/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/dirt"));
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/dirt_scorched"));
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED_RICH).setAllTextures(BLOCK_TEXTURES, "minecraft:block/dirt_scorched_rich"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.MUD).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mud"));
+        addDispatch(new BlockModelStandard<>(Blocks.MUD_BAKED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mud_baked"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_DRY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sponge"));
+        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_WET).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sponge_wet"));
+        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_DRY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/pumice"));
+        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_WET).setAllTextures(BLOCK_TEXTURES, "minecraft:block/pumice_overlay"));
+
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/stone"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/basalt"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/limestone"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/granite"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SAND).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sand"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRAVEL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/gravel"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BEDROCK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/bedrock"));
+        addDispatch(new BlockModelFullyRotatable<>(Blocks.BONESHALE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/bone_shale/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/bone_shale/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/bone_shale/side", S_SIDES));
+
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_FLOWING)
+            .onRenderLayer(1)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/water_flowing")
+            .setTex(BLOCK_TEXTURES, "minecraft:block/water_still", Side.TOP));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_STILL)
+            .onRenderLayer(1)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/water_still", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/water_flowing", S_SIDES));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_FLOWING)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/lava_flowing")
+            .setTex(BLOCK_TEXTURES, "minecraft:block/lava_still", Side.TOP));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_STILL)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/lava_still", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/lava_flowing", S_SIDES));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/oak_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/oak_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PINE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/pine_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/pine_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_BIRCH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/birch_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/birch_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_CHERRY)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/cherry_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/cherry_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_EUCALYPTUS)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/eucalyptus_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/eucalyptus_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK_MOSSY)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/oak_mossy_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/oak_mossy_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_THORN)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/thorn_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/thorn_side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PALM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/palm_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/log/palm_side", S_SIDES));
+
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK, "minecraft:block/leaves/oak", true));
         addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK_RETRO, "minecraft:block/leaves/oak_retro"));
         addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PINE, "minecraft:block/leaves/pine"));
         addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_BIRCH, "minecraft:block/leaves/birch"));
@@ -208,22 +306,24 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_THORN, "minecraft:block/leaves/caatinga"));
         addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PALM, "minecraft:block/leaves/palm"));
 
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK).withTextures("minecraft:block/sapling/oak"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK_RETRO).withTextures("minecraft:block/sapling/oak_retro"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PINE).withTextures("minecraft:block/sapling/pine"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_BIRCH).withTextures("minecraft:block/sapling/birch"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CHERRY).withTextures("minecraft:block/sapling/cherry"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_EUCALYPTUS).withTextures("minecraft:block/sapling/eucalyptus"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_SHRUB).withTextures("minecraft:block/sapling/shrub"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CACAO).withTextures("minecraft:block/sapling/cacao"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_THORN).withTextures("minecraft:block/sapling/thorn"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PALM).withTextures("minecraft:block/sapling/palm"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS).withTextures("minecraft:block/tallgrass"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS_FERN).withTextures("minecraft:block/fern"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.DEADBUSH).withTextures("minecraft:block/deadbush"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SPINIFEX).withTextures("minecraft:block/spinifex"));
-        addDispatch(new BlockModelAlgae<>(Blocks.ALGAE).withTextures("minecraft:block/algae").withCustomItemBounds(0.0f, 0.01f, 0.0f, 1.0f, 0.0125f, 1.0f));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/oak")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/sapling/oak_retro"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK_RETRO).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/oak_retro"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PINE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/pine"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_BIRCH).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/birch"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CHERRY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/cherry"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_EUCALYPTUS).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/eucalyptus"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_SHRUB).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/shrub"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CACAO).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/cacao"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_THORN).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/thorn"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PALM).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sapling/palm"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS).setAllTextures(BLOCK_TEXTURES, "minecraft:block/tallgrass"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS_FERN).setAllTextures(BLOCK_TEXTURES, "minecraft:block/fern"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.DEADBUSH).setAllTextures(BLOCK_TEXTURES, "minecraft:block/deadbush"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SPINIFEX).setAllTextures(BLOCK_TEXTURES, "minecraft:block/spinifex"));
+        addDispatch(new BlockModelAlgae<>(Blocks.ALGAE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/algae").withCustomItemBounds(0.0f, 0.01f, 0.0f, 1.0f, 0.0125f, 1.0f));
 
         addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_YELLOW, "minecraft:block/flower_yellow/"));
         addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_RED, "minecraft:block/flower_red/"));
@@ -232,243 +332,417 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_LIGHT_BLUE, "minecraft:block/flower_lightblue/"));
         addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_ORANGE, "minecraft:block/flower_orange/"));
 
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_BROWN).withTextures("minecraft:block/mushroom_brown"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_RED).withTextures("minecraft:block/mushroom_red"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_STONE).withTextures("minecraft:block/ore/coal/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_BASALT).withTextures("minecraft:block/ore/coal/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_LIMESTONE).withTextures("minecraft:block/ore/coal/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_GRANITE).withTextures("minecraft:block/ore/coal/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_PERMAFROST).withTextures("minecraft:block/ore/coal/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_STONE).withTextures("minecraft:block/ore/iron/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_BASALT).withTextures("minecraft:block/ore/iron/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_LIMESTONE).withTextures("minecraft:block/ore/iron/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_GRANITE).withTextures("minecraft:block/ore/iron/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_PERMAFROST).withTextures("minecraft:block/ore/iron/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_STONE).withTextures("minecraft:block/ore/gold/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_BASALT).withTextures("minecraft:block/ore/gold/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_LIMESTONE).withTextures("minecraft:block/ore/gold/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_GRANITE).withTextures("minecraft:block/ore/gold/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_PERMAFROST).withTextures("minecraft:block/ore/gold/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_STONE).withTextures("minecraft:block/ore/lapis/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_BASALT).withTextures("minecraft:block/ore/lapis/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_LIMESTONE).withTextures("minecraft:block/ore/lapis/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_GRANITE).withTextures("minecraft:block/ore/lapis/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_PERMAFROST).withTextures("minecraft:block/ore/lapis/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_STONE).withTextures("minecraft:block/ore/redstone/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_BASALT).withTextures("minecraft:block/ore/redstone/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GRANITE).withTextures("minecraft:block/ore/redstone/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_STONE).withTextures("minecraft:block/ore/redstone/stone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_BASALT).withTextures("minecraft:block/ore/redstone/basalt").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_GRANITE).withTextures("minecraft:block/ore/redstone/granite").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE).withTextures("minecraft:block/ore/diamond/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_BASALT).withTextures("minecraft:block/ore/diamond/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_LIMESTONE).withTextures("minecraft:block/ore/diamond/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_GRANITE).withTextures("minecraft:block/ore/diamond/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_PERMAFROST).withTextures("minecraft:block/ore/diamond/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_NETHERCOAL_NETHERRACK).withTextures("minecraft:block/ore/nethercoal/netherrack").withOverbrightTexture("minecraft:block/ore/nethercoal/netherrack_overlay"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_COAL).withTextures("minecraft:block/block_coal"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_IRON).withTextures("minecraft:block/block_iron/top", "minecraft:block/block_iron/bottom", "minecraft:block/block_iron/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_GOLD).withTextures("minecraft:block/block_gold/top", "minecraft:block/block_gold/bottom", "minecraft:block/block_gold/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_LAPIS).withTextures("minecraft:block/block_lapis"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_REDSTONE).withTextures("minecraft:block/block_redstone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_DIAMOND).withTextures("minecraft:block/block_diamond/top", "minecraft:block/block_diamond/bottom", "minecraft:block/block_diamond/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_NETHER_COAL).withTextures("minecraft:block/block_nethercoal").withOverbrightTexture("minecraft:block/block_nethercoal_overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_STEEL).withTextures("minecraft:block/block_steel/top", "minecraft:block/block_steel/bottom", "minecraft:block/block_steel/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_QUARTZ).withTextures("minecraft:block/block_quartz"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_OLIVINE).withTextures("minecraft:block/block_olivine"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CHARCOAL).withTextures("minecraft:block/block_charcoal"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_BROWN).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mushroom_brown"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_RED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mushroom_red"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/coal/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/coal/stone_retro"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/coal/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/coal/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/coal/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/coal/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/iron/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/iron/stone_retro"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/iron/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/iron/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/iron/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/iron/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/gold/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/gold/stone_retro"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/gold/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/gold/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/gold/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/gold/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/lapis/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/lapis/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/lapis/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/lapis/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/lapis/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/redstone/stone_retro"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/redstone/stone_retro")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_BASALT)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/basalt")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_LIMESTONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/limestone")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_GRANITE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/granite")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_PERMAFROST)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/permafrost")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_PERMAFROST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_NETHERCOAL_NETHERRACK)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/nethercoal/netherrack")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/nethercoal/netherrack_overlay"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_COAL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_coal"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_IRON)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_iron/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_iron/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_iron/side", S_SIDES)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_iron/top_retro", Side.TOP)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_iron/bottom_retro", Side.BOTTOM)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_iron/side_retro", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_GOLD)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_gold/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_gold/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_gold/side", S_SIDES)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_gold/top_retro", Side.TOP)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_gold/bottom_retro", Side.BOTTOM)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_gold/side_retro", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_LAPIS).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_lapis"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_REDSTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_redstone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_DIAMOND)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_diamond/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_diamond/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_diamond/side", S_SIDES)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_diamond/top_retro", Side.TOP)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_diamond/bottom_retro", Side.BOTTOM)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/block_diamond/side_retro", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_NETHER_COAL)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_nethercoal")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/block_nethercoal_overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_STEEL)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_steel/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_steel/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_steel/side", S_SIDES));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_QUARTZ).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_quartz"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_OLIVINE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_olivine"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CHARCOAL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_charcoal"));
 
         addDispatch(new BlockModelWireRedstone<>(Blocks.WIRE_REDSTONE));
 
-        addDispatch(new BlockModelTorchRedstone<>(Blocks.TORCH_REDSTONE_IDLE).withTextures("minecraft:block/torch_redstone_idle"));
-        addDispatch(new BlockModelTorchRedstone<>(Blocks.TORCH_REDSTONE_ACTIVE).withTextures("minecraft:block/torch_redstone_active"));
+        addDispatch(new BlockModelTorchRedstone<>(Blocks.TORCH_REDSTONE_IDLE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/torch_redstone_idle"));
+        addDispatch(new BlockModelTorchRedstone<>(Blocks.TORCH_REDSTONE_ACTIVE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/torch_redstone_active"));
 
         final float width = 0.1875F;
         final float height = 0.125F;
         final float depth = 0.125F;
-        addDispatch(new BlockModelStandard<>(Blocks.BUTTON_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - width, 0.5F - height, 0.5F - depth, 0.5F + width, 0.5F + height, 0.5F + depth));
+        addDispatch(new BlockModelStandard<>(Blocks.BUTTON_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/stone").withCustomItemBounds(0.5F - width, 0.5F - height, 0.5F - depth, 0.5F + width, 0.5F + height, 0.5F + depth));
 
-        addDispatch(new BlockModelLever<>(Blocks.LEVER_COBBLE_STONE).withTextures("minecraft:block/lever_cobbled_stone"));
+        addDispatch(new BlockModelLever<>(Blocks.LEVER_COBBLE_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/lever_cobbled_stone"));
 
         final float f = 0.5F;
         final float f1 = 0.125F;
         final float f2 = 0.5F;
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_COBBLE_STONE).withTextures("minecraft:block/cobbled_stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-
-        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_IDLE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/idle_front", "minecraft:block/motion_sensor/side"));
-        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_ACTIVE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/active_front", "minecraft:block/motion_sensor/side"));
-
-        addDispatch(new BlockModelRepeater(Blocks.REPEATER_IDLE).withTextures("minecraft:block/repeater/idle_top", "minecraft:block/polished_stone_top"));
-        addDispatch(new BlockModelRepeater(Blocks.REPEATER_ACTIVE).withTextures("minecraft:block/repeater/active_top", "minecraft:block/polished_stone_top").withOverbrightTexture("minecraft:block/repeater/active_overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_COBBLE_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+
+        addDispatch(new BlockModelVeryRotatable<>(Blocks.MOTION_SENSOR_IDLE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/motion_sensor/side")
+            .setTex(BLOCK_TEXTURES, "minecraft:block/motion_sensor/idle_front", Side.SOUTH));
+        addDispatch(new BlockModelVeryRotatable<>(Blocks.MOTION_SENSOR_ACTIVE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/motion_sensor/side")
+            .setTex(BLOCK_TEXTURES, "minecraft:block/motion_sensor/active_front", Side.SOUTH)
+            .setTex(OVERBRIGHT_TEXTURES, "minecraft:block/motion_sensor/active_front_overlay", Side.SOUTH));
+
+        addDispatch(new BlockModelRepeater(Blocks.REPEATER_IDLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/repeater/idle_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_stone_top", S_SIDES));
+        addDispatch(new BlockModelRepeater(Blocks.REPEATER_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/repeater/active_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/polished_stone_top", S_SIDES)
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/repeater/active_overlay"));
 
         addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE,
             TextureRegistry.getTexture("minecraft:block/piston/face"))
             .setPistonTextures("minecraft:block/piston/side", "minecraft:block/piston/top", "minecraft:block/piston/bottom")
-            .withTextures("minecraft:block/piston/face")
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/piston/face")
             .withCustomItemBounds(0,0,0,1,1,1));
         addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STICKY,
             TextureRegistry.getTexture("minecraft:block/piston_sticky/face"))
             .setPistonTextures("minecraft:block/piston_sticky/side", "minecraft:block/piston_sticky/top", "minecraft:block/piston_sticky/bottom")
-            .withTextures("minecraft:block/piston_sticky/face")
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/piston_sticky/face")
             .withCustomItemBounds(0,0,0,1,1,1));
         addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STEEL,
             TextureRegistry.getTexture("minecraft:block/piston_steel/face"), 6/16d)
             .setPistonTextures("minecraft:block/piston_steel/side", "minecraft:block/piston_steel/top", "minecraft:block/piston_steel/bottom")
-            .withTextures("minecraft:block/piston_steel/face")
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/piston_steel/face")
             .withCustomItemBounds(0,0,0,1,1,1));
 
-        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD, TextureRegistry.getTexture("minecraft:block/piston/side")).withTextures("minecraft:block/piston/face"));
+        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD, TextureRegistry.getTexture("minecraft:block/piston/side")).setAllTextures(BLOCK_TEXTURES, "minecraft:block/piston/face"));
         addDispatch(new BlockModelEmpty<>(Blocks.PISTON_MOVING));
-        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD_STEEL, TextureRegistry.getTexture("minecraft:block/piston_steel/side"), 6/16d).withTextures("minecraft:block/piston_steel/face"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.NOTEBLOCK).withTextures("minecraft:block/noteblock"));
-
-        addDispatch(new BlockModelRail<>(Blocks.RAIL).withTextures("minecraft:block/rail/straight"));
-        addDispatch(new BlockModelRail<>(Blocks.RAIL_POWERED).withTextures("minecraft:block/rail_powered/idle"));
-        addDispatch(new BlockModelRail<>(Blocks.RAIL_DETECTOR).withTextures("minecraft:block/rail_detector/straight"));
-
-        addDispatch(new BlockModelSpikes<>(Blocks.SPIKES).withTextures("minecraft:block/spikes/top", "minecraft:block/spikes/bottom", "minecraft:block/spikes/side"));
-
-        addDispatch(new BlockModelVeryRotatable<>(Blocks.DISPENSER_COBBLE_STONE).withTextures("minecraft:block/dispenser/top", "minecraft:block/dispenser/bottom", "minecraft:block/dispenser/side", "minecraft:block/dispenser/side", "minecraft:block/dispenser/front", "minecraft:block/dispenser/side"));
-        addDispatch(new BlockModelActivator<>(Blocks.ACTIVATOR_COBBLE_NETHERRACK).withTextures("minecraft:block/activator/top", "minecraft:block/activator/bottom", "minecraft:block/activator/side", "minecraft:block/activator/side", "minecraft:block/activator/front", "minecraft:block/activator/side"));
-
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_PLANKS_OAK).withTextures("minecraft:block/trapdoor/planks/top", "minecraft:block/trapdoor/planks/side"));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_IRON).withTextures("minecraft:block/trapdoor/iron/top", "minecraft:block/trapdoor/iron/side"));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_GLASS).withTextures("minecraft:block/trapdoor/glass/top", "minecraft:block/trapdoor/glass/side"));
+        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD_STEEL, TextureRegistry.getTexture("minecraft:block/piston_steel/side"), 6/16d).setAllTextures(BLOCK_TEXTURES, "minecraft:block/piston_steel/face"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.NOTEBLOCK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/noteblock"));
+
+        addDispatch(new BlockModelRail<>(Blocks.RAIL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/rail/straight"));
+        addDispatch(new BlockModelRail<>(Blocks.RAIL_POWERED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/rail_powered/idle"));
+        addDispatch(new BlockModelRail<>(Blocks.RAIL_DETECTOR).setAllTextures(BLOCK_TEXTURES, "minecraft:block/rail_detector/straight"));
+
+        addDispatch(new BlockModelSpikes<>(Blocks.SPIKES)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/spikes/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/spikes/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/spikes/side", S_SIDES));
+
+        addDispatch(new BlockModelVeryRotatable<>(Blocks.DISPENSER_COBBLE_STONE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/dispenser/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/dispenser/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/dispenser/side", Side.NORTH, Side.EAST, Side.WEST)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/dispenser/front", Side.SOUTH));
+        addDispatch(new BlockModelActivator<>(Blocks.ACTIVATOR_COBBLE_NETHERRACK)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/activator/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/activator/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/activator/side", Side.NORTH, Side.EAST, Side.WEST)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/activator/front", Side.SOUTH));
+
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_PLANKS_OAK)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/planks/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/planks/side", S_SIDES));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_IRON)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/iron/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/iron/side", S_SIDES));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_GLASS)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/glass/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/glass/side", S_SIDES));
         addDispatch(new BlockModelTrapDoorPainted<>(Blocks.TRAPDOOR_PLANKS_PAINTED));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_STEEL).withTextures("minecraft:block/trapdoor/steel/top", "minecraft:block/trapdoor/steel/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.TNT).withTextures("minecraft:block/tnt/top", "minecraft:block/tnt/bottom", "minecraft:block/tnt/side"));
-
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_BOTTOM).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_TOP).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_BOTTOM).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_TOP).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/top"));
-        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_BOTTOM, false).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
-        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_TOP, true).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
-        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_BOTTOM).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/bottom"));
-        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_TOP).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/top"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_BOTTOM).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_TOP).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/top"));
-
-        addDispatch(new BlockModelTransparent<>(Blocks.MESH, true).withTextures("minecraft:block/mesh"));
-        addDispatch(new BlockModelTransparent<>(Blocks.MESH_GOLD, true).withTextures("minecraft:block/mesh_gold"));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_STEEL)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/steel/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trapdoor/steel/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.TNT)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/tnt/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/tnt/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/tnt/side", S_SIDES));
+
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/bottom", S_SIDES));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/top", S_SIDES));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/iron/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/iron/bottom", S_SIDES));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/iron/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/iron/top", S_SIDES));
+        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_BOTTOM, false)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/bottom", S_SIDES));
+        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_TOP, true)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/planks/top", S_SIDES));
+        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/glass/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/glass/bottom", S_SIDES));
+        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/glass/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/glass/top", S_SIDES));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/steel/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/steel/bottom", S_SIDES));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/steel/frame_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/door/steel/top", S_SIDES));
+
+        addDispatch(new BlockModelTransparent<>(Blocks.MESH, true).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mesh"));
+        addDispatch(new BlockModelTransparent<>(Blocks.MESH_GOLD, true).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mesh_gold"));
 
         addDispatch(new BlockModelBed<>(Blocks.BED));
-        addDispatch(new BlockModelSeat<>(Blocks.SEAT).withTextures("minecraft:block/seat/top", "minecraft:block/seat/bottom", "minecraft:block/seat/side"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.COBWEB).withTextures("minecraft:block/cobweb"));
-        addDispatch(new BlockModelFire<>(Blocks.FIRE).withTextures("minecraft:block/fire"));
-        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_INACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
-        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_ACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.MOBSPAWNER).withTextures("minecraft:block/mobspawner"));
-        addDispatch(new BlockModelTransparent<>(Blocks.MOBSPAWNER_DEACTIVATED, true).withTextures("minecraft:block/mobspawner"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.WORKBENCH).withTextures("minecraft:block/workbench/top", "minecraft:block/workbench/bottom", "minecraft:block/workbench/front", "minecraft:block/workbench/side", "minecraft:block/workbench/front", "minecraft:block/workbench/side"));
-
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_IDLE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/idle_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_ACTIVE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/active_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_IDLE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/idle_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_ACTIVE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/active_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
-
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_IDLE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_ACTIVE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/active_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/active_back", "minecraft:block/trommel/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY).withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY_PAINTED).withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelChest<>(Blocks.CHEST_PLANKS_OAK, "minecraft:block/chest/planks/").withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelChestPainted<>(Blocks.CHEST_PLANKS_OAK_PAINTED).withTextures("minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelSeat<>(Blocks.SEAT)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/seat/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/seat/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/seat/side", S_SIDES));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.COBWEB).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobweb"));
+        addDispatch(new BlockModelFire<>(Blocks.FIRE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/fire"));
+        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_INACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/brazier/base", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/brazier/side", S_SIDES));
+        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/brazier/base", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/brazier/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.MOBSPAWNER).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mobspawner"));
+        addDispatch(new BlockModelTransparent<>(Blocks.MOBSPAWNER_DEACTIVATED, true).setAllTextures(BLOCK_TEXTURES, "minecraft:block/mobspawner"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.WORKBENCH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/workbench/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/workbench/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/workbench/front", Side.NORTH, Side.SOUTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/workbench/side", Side.WEST, Side.EAST));
+
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_IDLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/idle_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/side", Side.WEST, Side.EAST, Side.SOUTH));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/active_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_stone/side", Side.WEST, Side.EAST, Side.SOUTH));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_IDLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/idle_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/side", Side.WEST, Side.EAST, Side.SOUTH));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/active_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/furnace_blast/side", Side.WEST, Side.EAST, Side.SOUTH));
+
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_IDLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/idle_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/idle_back", Side.SOUTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/side", Side.WEST, Side.EAST));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/active_front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/active_back", Side.SOUTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/trommel/side", Side.WEST, Side.EAST, Side.SOUTH));
+
+        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY_PAINTED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelChest<>(Blocks.CHEST_PLANKS_OAK, "minecraft:block/chest/planks/").setAllTextures(BLOCK_TEXTURES, "minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelChestPainted<>(Blocks.CHEST_PLANKS_OAK_PAINTED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/chest/planks/top"));
 
         addDispatch(new BlockModelCropsWheat<>(Blocks.CROPS_WHEAT));
         addDispatch(new BlockModelCropsPumpkin<>(Blocks.CROPS_PUMPKIN));
 
-        addDispatch(new BlockModelFarmland<>(Blocks.FARMLAND_DIRT).withTextures("minecraft:block/farmland/dry"));
-
-        addDispatch(new BlockModelEmpty<>(Blocks.SIGN_POST_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelEmpty<>(Blocks.SIGN_WALL_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelEmpty<>(Blocks.FLAG).withTextures("minecraft:block/planks/oak"));
-
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SNOW).withTextures("minecraft:block/block_snow"));
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_LEAVES_OAK).withTextures("minecraft:block/leaves/oak_fancy"));
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
-
-        addDispatch(new BlockModelIce<>(Blocks.ICE).onRenderLayer(1).withTextures("minecraft:block/ice"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAICE).withTextures("minecraft:block/permaice"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_SNOW).withTextures("minecraft:block/block_snow"));
-
-        addDispatch(new BlockModelCactus<>(Blocks.CACTUS).withCustomItemBounds(0, 0, 0, 1, 1, 1).withTextures("minecraft:block/cactus/top", "minecraft:block/cactus/bottom", "minecraft:block/cactus/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CLAY).withTextures("minecraft:block/block_clay"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SUGARCANE).withTextures("minecraft:block/sugarcane"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE).withTextures("minecraft:block/block_sugarcane/top", "minecraft:block/block_sugarcane/side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE_BAKED).withTextures("minecraft:block/block_baked_sugarcane/top", "minecraft:block/block_baked_sugarcane/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.JUKEBOX).withTextures("minecraft:block/jukebox/top", "minecraft:block/jukebox/bottom", "minecraft:block/jukebox/side"));
-
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN).withTextures("minecraft:block/pumpkin/top", "minecraft:block/pumpkin/bottom", "minecraft:block/pumpkin/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_IDLE).withTextures("minecraft:block/pumpkin_carved/top", "minecraft:block/pumpkin_carved/bottom", "minecraft:block/pumpkin_carved/front", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_ACTIVE).withTextures("minecraft:block/pumpkin_carved_lit/top", "minecraft:block/pumpkin_carved_lit/bottom", "minecraft:block/pumpkin_carved_lit/front", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side"));
-        addDispatch(new BlockModelPumpkinRedstone<>(Blocks.PUMPKIN_REDSTONE).withTextures("minecraft:block/pumpkin_redstone/top", "minecraft:block/pumpkin_redstone/bottom", "minecraft:block/pumpkin_redstone/front", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side"));
-
-
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK).withTextures("minecraft:block/cobbled_netherrack"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_IGNEOUS).withTextures("minecraft:block/cobbled_netherrack_igneous").withOverbrightTexture("minecraft:block/cobbled_netherrack_igneous_overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_MOSSY).withTextures("minecraft:block/cobbled_netherrack_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK).withTextures("minecraft:block/netherrack"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_NETHERRACK).withTextures("minecraft:block/brick_netherrack"));
+        addDispatch(new BlockModelFarmland<>(Blocks.FARMLAND_DIRT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/farmland/dry"));
+
+        addDispatch(new BlockModelEmpty<>(Blocks.SIGN_POST_PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
+        addDispatch(new BlockModelEmpty<>(Blocks.SIGN_WALL_PLANKS_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
+        addDispatch(new BlockModelEmpty<>(Blocks.FLAG).setAllTextures(BLOCK_TEXTURES, "minecraft:block/planks/oak"));
+
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SNOW).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_snow"));
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_LEAVES_OAK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/leaves/oak_fancy"));
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SLATE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/slate_top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/slate_side", S_SIDES));
+
+        addDispatch(new BlockModelIce<>(Blocks.ICE).onRenderLayer(1).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ice"));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAICE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/permaice"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_SNOW).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_snow"));
+
+        addDispatch(new BlockModelCactus<>(Blocks.CACTUS).withCustomItemBounds(0, 0, 0, 1, 1, 1)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cactus/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cactus/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cactus/side", S_SIDES)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/cactus/top_retro", Side.TOP)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/cactus/bottom_retro", Side.BOTTOM)
+            .setTex(RETRO_BLOCK_TEXTURES, "minecraft:block/cactus/side_retro", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CLAY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/block_clay"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SUGARCANE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/sugarcane"));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_sugarcane/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_sugarcane/side", S_SIDES));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE_BAKED)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_baked_sugarcane/top", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/block_baked_sugarcane/side", S_SIDES));
+
+        addDispatch(new BlockModelStandard<>(Blocks.JUKEBOX)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/jukebox/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/jukebox/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/jukebox/side", S_SIDES));
+
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin/side", S_SIDES));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_IDLE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved/front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved/side", Side.WEST, Side.EAST, Side.SOUTH));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_ACTIVE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved_lit/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved_lit/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved_lit/front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_carved_lit/side", Side.WEST, Side.EAST, Side.SOUTH));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_REDSTONE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_redstone/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_redstone/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_redstone/front", Side.NORTH)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_redstone/side", Side.WEST, Side.EAST, Side.SOUTH)
+            .setTex(OVERBRIGHT_TEXTURES, "minecraft:block/pumpkin_redstone/front_overlay", Side.NORTH));
+
+
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_netherrack"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_IGNEOUS)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_netherrack_igneous")
+            .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/cobbled_netherrack_igneous_overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_MOSSY).setAllTextures(BLOCK_TEXTURES, "minecraft:block/cobbled_netherrack_mossy"));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/netherrack"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_NETHERRACK).setAllTextures(BLOCK_TEXTURES, "minecraft:block/brick_netherrack"));
         addDispatch(new BlockModelSlab<>(Blocks.SLAB_NETHERRACK_POLISHED));
         addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_NETHERRACK));
         addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_NETHERRACK));
         addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_NETHERRACK));
         addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_NETHERRACK));
 
-        addDispatch(new BlockModelStandard<>(Blocks.SOULSAND).withTextures("minecraft:block/soulsand"));
-        addDispatch(new BlockModelStandard<>(Blocks.SOULSCHIST).withTextures("minecraft:block/soulschist"));
+        addDispatch(new BlockModelStandard<>(Blocks.SOULSAND).setAllTextures(BLOCK_TEXTURES, "minecraft:block/soulsand"));
+        addDispatch(new BlockModelStandard<>(Blocks.SOULSCHIST).setAllTextures(BLOCK_TEXTURES, "minecraft:block/soulschist"));
 
-        addDispatch(new BlockModelStandard<>(Blocks.GLOWSTONE).withTextures("minecraft:block/glowstone"));
+        addDispatch(new BlockModelStandard<>(Blocks.GLOWSTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/glowstone"));
 
-        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_NETHER, "minecraft:block/portal_nether/").withTextures("minecraft:block/portal_nether"));
-        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_PARADISE, "minecraft:block/portal_paradise/").withTextures("minecraft:block/portal_nether"));
+        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_NETHER, "minecraft:block/portal_nether/").setAllTextures(BLOCK_TEXTURES, "minecraft:block/portal_nether"));
+        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_PARADISE, "minecraft:block/portal_paradise/").setAllTextures(BLOCK_TEXTURES, "minecraft:block/portal_nether"));
 
-        addDispatch(new BlockModelCake<>(Blocks.CAKE).withTextures("minecraft:block/cake/top", "minecraft:block/cake/bottom", "minecraft:block/cake/side"));
-        addDispatch(new BlockModelPiePumpkin<>(Blocks.PUMPKIN_PIE).withTextures("minecraft:block/pumpkin_pie/top", "minecraft:block/pumpkin_pie/bottom", "minecraft:block/pumpkin_pie/side"));
+        addDispatch(new BlockModelCake<>(Blocks.CAKE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cake/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cake/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/cake/side", S_SIDES));
+        addDispatch(new BlockModelPiePumpkin<>(Blocks.PUMPKIN_PIE)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_pie/top", Side.TOP)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_pie/bottom", Side.BOTTOM)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/pumpkin_pie/side", S_SIDES));
 
         addDispatch(new BlockModelLamp<>(Blocks.LAMP_IDLE));
         addDispatch(new BlockModelLamp<>(Blocks.LAMP_ACTIVE));
 
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_GREEN).withTextures("minecraft:block/lantern_firefly/green"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_BLUE).withTextures("minecraft:block/lantern_firefly/blue"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_ORANGE).withTextures("minecraft:block/lantern_firefly/orange"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_RED).withTextures("minecraft:block/lantern_firefly/red"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_GREEN).setAllTextures(BLOCK_TEXTURES, "minecraft:block/lantern_firefly/green"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_BLUE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/lantern_firefly/blue"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_ORANGE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/lantern_firefly/orange"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_RED).setAllTextures(BLOCK_TEXTURES, "minecraft:block/lantern_firefly/red"));
         addDispatch(new BlockModelJar<>(Blocks.JAR_GLASS));
 
         addDispatch(new BlockModelPebbles<>(Blocks.OVERLAY_PEBBLES));
 
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_CHAINLINK,TextureRegistry.getTexture("minecraft:block/fence_chain/center"), null, TextureRegistry.getTexture("minecraft:block/fence_chain/top"), TextureRegistry.getTexture("minecraft:block/fence_chain/column")).withTextures("minecraft:block/fence_chain/center"));
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_PAPER_WALL,TextureRegistry.getTexture("minecraft:block/fence_paper/center"), null, null, TextureRegistry.getTexture("minecraft:block/fence_paper/column")).withTextures("minecraft:block/fence_paper/center"));
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_STEEL,TextureRegistry.getTexture("minecraft:block/fence_steel/center"), null, TextureRegistry.getTexture("minecraft:block/fence_steel/top"), TextureRegistry.getTexture("minecraft:block/fence_steel/column")).withTextures("minecraft:block/fence_steel/center"));
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_CHAINLINK,TextureRegistry.getTexture("minecraft:block/fence_chain/center"), null, TextureRegistry.getTexture("minecraft:block/fence_chain/top"), TextureRegistry.getTexture("minecraft:block/fence_chain/column")).setAllTextures(BLOCK_TEXTURES, "minecraft:block/fence_chain/center"));
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_PAPER_WALL,TextureRegistry.getTexture("minecraft:block/fence_paper/center"), null, null, TextureRegistry.getTexture("minecraft:block/fence_paper/column")).setAllTextures(BLOCK_TEXTURES, "minecraft:block/fence_paper/center"));
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_STEEL,TextureRegistry.getTexture("minecraft:block/fence_steel/center"), null, TextureRegistry.getTexture("minecraft:block/fence_steel/top"), TextureRegistry.getTexture("minecraft:block/fence_steel/column")).setAllTextures(BLOCK_TEXTURES, "minecraft:block/fence_steel/center"));
 
-        addDispatch(new BlockModelBasket<>(Blocks.BASKET).withTextures("minecraft:block/basket/bottom", "minecraft:block/basket/side"));
+        addDispatch(new BlockModelBasket<>(Blocks.BASKET)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/basket/bottom", S_TB)
+            .setTex(BLOCK_TEXTURES, "minecraft:block/basket/side", S_SIDES));
 
-        addDispatch(new BlockModelStandard<>(Blocks.PAPER_WALL).withTextures("minecraft:block/paperwall"));
+        addDispatch(new BlockModelStandard<>(Blocks.PAPER_WALL).setAllTextures(BLOCK_TEXTURES, "minecraft:block/paperwall"));
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
index e56bd181f..fa3bdb76e 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
@@ -112,12 +112,6 @@ public class BlockModelDoor<T extends BlockLogicDoor> extends BlockModelStandard
         return false;
     }
 
-    @Override
-    public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
-    {
-        int sideId = side.getId();
-        return atlasIndices[sideId];
-    }
     protected boolean shouldFlipTexture(Side side, int meta){
         if(side == Side.TOP || side == Side.BOTTOM) return false;
         int state = block.getLogic().getRotation(meta);
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
index a99cc6e5c..f15b2aa0a 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
@@ -40,13 +40,8 @@ public class BlockModelFarmland<T extends BlockLogic> extends BlockModelStandard
             if (isWet) {
                 return mud;
             }
-            return atlasIndices[side.getId()];
+            return super.getBlockTextureFromSideAndMetadata(side, data);
         }
     }
 
-    @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side) {
-        if (side >= 2 && blockAccess.getBlockId(x, y, z) == block.id()) return false;
-        return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
-    }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
index e47a6c138..411126ea4 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
@@ -69,8 +69,8 @@ public class BlockModelFullyRotatable<T extends BlockLogic> extends BlockModelSt
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data) {
         final Direction dir = BlockLogicFullyRotatable.metaToDirection(data);
         if (side == dir.getSide()) {
-            return atlasIndices[Side.TOP.getId()];
+            return blockTextures.get(Side.TOP);
         }
-        return side.getDirection() != dir.getOpposite() ? atlasIndices[Side.NORTH.getId()] : atlasIndices[Side.BOTTOM.getId()];
+        return side.getDirection() != dir.getOpposite() ? blockTextures.get(Side.NORTH) : blockTextures.get(Side.BOTTOM);
     }
 }
\ No newline at end of file
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
index d512b8726..a1f862167 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
@@ -20,9 +20,9 @@ public class BlockModelFurnace<T extends BlockLogic>
     public IconCoordinate getBlockTexture(WorldSource blockAccess, int x, int y, int z, Side side) {
         int data = blockAccess.getBlockMetadata(x, y, z);
         int index = Sides.orientationLookUpHorizontal[6 * Math.min(data, 5) + side.getId()];
-        if (index >= Sides.orientationLookUpHorizontal.length) return atlasIndices[0];
+        if (index >= Sides.orientationLookUpHorizontal.length) return blockTextures.get(Side.BOTTOM);
         if (index == Side.NORTH.getId()) {
-            IconCoordinate originalFront = atlasIndices[index];
+            IconCoordinate originalFront = blockTextures.get(Side.NORTH);
             Container container = (Container) blockAccess.getBlockEntity(x, y, z);
             if (container != null) {
                 boolean hasOutput = container.getItem(2) != null;
@@ -32,6 +32,6 @@ public class BlockModelFurnace<T extends BlockLogic>
             }
             return originalFront;
         }
-        return atlasIndices[index];
+        return blockTextures.get(Side.getSideById(index));
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
index 862c7b768..6c36c8811 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
@@ -32,8 +32,8 @@ public class BlockModelGrass<T extends BlockLogic> extends BlockModelStandard<T>
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
         AABB bounds = block.getBounds();
-        boolean didRender = renderStandardBlock(tessellator, bounds, x, y, z);
-        if (RenderBlocks.fancyGrass){
+        boolean didRender = isRetro() ? renderStandardBlock(tessellator, bounds, x, y, z, 1, 1, 1) : renderStandardBlock(tessellator, bounds, x, y, z);
+        if (RenderBlocks.fancyGrass && !(retroBlockTextures.hasTexture() && isRetro())){
             useOverlay = true;
             didRender |= renderStandardBlock(tessellator, bounds, x, y, z);
             useOverlay = false;
@@ -71,7 +71,7 @@ public class BlockModelGrass<T extends BlockLogic> extends BlockModelStandard<T>
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
         renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
         tessellator.draw();
-        if(renderBlocks.useInventoryTint)
+        if(renderBlocks.useInventoryTint && !isRetro())
         {
             int l = BlockColorDispatcher.getInstance().getDispatch(block).getFallbackColor(metadata);
             float f4 = (float)(l >> 16 & 0xff) / 255F;
@@ -83,7 +83,7 @@ public class BlockModelGrass<T extends BlockLogic> extends BlockModelStandard<T>
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
         renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
         tessellator.draw();
-        if (RenderBlocks.fancyGrass){
+        if (RenderBlocks.fancyGrass && !isRetro()){
             useOverlay = true;
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, -1F);
@@ -119,7 +119,7 @@ public class BlockModelGrass<T extends BlockLogic> extends BlockModelStandard<T>
         if (useOverlay){
             return overlayIndices[side.getId()];
         }
-        return atlasIndices[side.getId()];
+        return super.getBlockTextureFromSideAndMetadata(side, data);
     }
     @Override
     public boolean shouldSideBeColored(WorldSource blockAccess, int x, int y, int z, int side, int meta){
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
index fe338966d..ce5d2d110 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
@@ -12,11 +12,18 @@ public class BlockModelHorizontalRotation<T extends BlockLogic> extends BlockMod
         super(block);
     }
 
+    @Override
+    public IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data) {
+        int index = Sides.orientationLookUpHorizontal[6 * Math.min(data & BlockLogicRotatable.MASK_DIRECTION, 5) + side.getId()];
+        if (index >= Sides.orientationLookUpHorizontal.length) return overbrightTextures.get(Side.BOTTOM);
+        return super.getBlockOverbrightTextureFromSideAndMeta(Side.getSideById(index), data);
+    }
+
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
         int index = Sides.orientationLookUpHorizontal[6 * Math.min(data & BlockLogicRotatable.MASK_DIRECTION, 5) + side.getId()];
-        if (index >= Sides.orientationLookUpHorizontal.length) return atlasIndices[0];
-        return atlasIndices[index];
+        if (index >= Sides.orientationLookUpHorizontal.length) return blockTextures.get(Side.BOTTOM);
+        return super.getBlockTextureFromSideAndMetadata(Side.getSideById(index), data);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
index f5f5a7ed9..c155b498d 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
@@ -1,5 +1,6 @@
 package net.minecraft.client.render.block.model;
 
+import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.core.block.Block;
@@ -7,25 +8,55 @@ import net.minecraft.core.block.BlockLogic;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
+import org.jetbrains.annotations.Nullable;
 
 public class BlockModelLeaves<T extends BlockLogic> extends BlockModelStandard<T> {
     protected static boolean fancyGraphics;
     protected final IconCoordinate fancyLeavesTexture;
+    protected final boolean canBeRetro;
+
+    protected final IconCoordinate retroLeaves = TextureRegistry.getTexture("minecraft:block/leaves/oak_retro");
+    protected final IconCoordinate retroLeavesFancy = TextureRegistry.getTexture("minecraft:block/leaves/oak_retro_fancy");
 
     public BlockModelLeaves(Block<T> block, String leavesTex) {
+        this(block, leavesTex, false);
+    }
+
+    public BlockModelLeaves(Block<T> block, String leavesTex, boolean canBeRetro) {
         super(block);
-        withTextures(leavesTex);
+        setAllTextures(BLOCK_TEXTURES, leavesTex);
         fancyLeavesTexture = TextureRegistry.getTexture(leavesTex + "_fancy");
+        this.canBeRetro = canBeRetro;
     }
 
     public static void setGraphicsLevel(boolean graphicsLevel)
     {
         fancyGraphics = graphicsLevel;
     }
+
+    @Override
+    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
+        boolean invTint = renderBlocks.useInventoryTint;
+        renderBlocks.useInventoryTint = (canBeRetro && isRetro());
+        super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, lightmapCoordinate);
+        renderBlocks.useInventoryTint = invTint;
+    }
+
+    @Override
+    public boolean render(Tessellator tessellator, int x, int y, int z) {
+        if (canBeRetro && isRetro()) {
+            return renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z, 1, 1, 1);
+        }
+        return super.render(tessellator, x, y, z);
+    }
+
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
-        return fancyGraphics ? fancyLeavesTexture : atlasIndices[side.getId()];
+        if (canBeRetro && isRetro()) {
+            return fancyGraphics ? retroLeavesFancy : retroLeaves;
+        }
+        return fancyGraphics ? fancyLeavesTexture : super.getBlockTextureFromSideAndMetadata(side, data);
     }
     @Override
     public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java
deleted file mode 100644
index 47ac3ca0f..000000000
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.minecraft.client.render.block.model;
-
-import net.minecraft.client.render.texture.stitcher.IconCoordinate;
-import net.minecraft.client.render.texture.stitcher.TextureRegistry;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.BlockLogicVeryRotatable;
-import net.minecraft.core.block.BlockLogicMotionSensor;
-import net.minecraft.core.util.helper.Side;
-
-public class BlockModelMotionSensor extends BlockModelVeryRotatable<BlockLogicMotionSensor> {
-    protected IconCoordinate overlay = TextureRegistry.getTexture("minecraft:block/motion_sensor/active_front_overlay");
-    public BlockModelMotionSensor(Block<BlockLogicMotionSensor> block) {
-        super(block);
-    }
-
-    @Override
-    public IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data)
-    {
-        if (!block.getLogic().isActive) return null;
-
-        if(side.getId() == BlockLogicVeryRotatable.metaToDirection(data).getSide().getId())
-        {
-            return overlay;
-        }
-        return null;
-    }
-    @Override
-    public boolean hasOverbright(){
-        return block.getLogic().isActive;
-    }
-}
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
index 0ae4bffe9..a81cd0632 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
@@ -165,7 +165,7 @@ public class BlockModelPiston<T extends BlockLogicPistonBase> extends BlockModel
         Direction direction = BlockLogicPistonBase.getDirection(data);
         if (direction == Direction.NONE)
         {
-            return atlasIndices[0];
+            return blockTextures.get(Side.BOTTOM);
         }
         if (side.getDirection() == direction)
         {
@@ -175,7 +175,7 @@ public class BlockModelPiston<T extends BlockLogicPistonBase> extends BlockModel
             }
             else
             {
-                return atlasIndices[0];
+                return blockTextures.get(Side.BOTTOM);
             }
         }
         return side.getDirection() != direction.getOpposite() ? sideTexture : bottomTexture;
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java
deleted file mode 100644
index fb63afe6b..000000000
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.minecraft.client.render.block.model;
-
-import net.minecraft.client.render.texture.stitcher.IconCoordinate;
-import net.minecraft.client.render.texture.stitcher.TextureRegistry;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.BlockLogic;
-import net.minecraft.core.util.helper.Side;
-
-public class BlockModelPumpkinRedstone<T extends BlockLogic> extends BlockModelHorizontalRotation<T> {
-    protected IconCoordinate overlay = TextureRegistry.getTexture("minecraft:block/pumpkin_redstone/front_overlay");
-    public BlockModelPumpkinRedstone(Block<T> block) {
-        super(block);
-    }
-
-    @Override
-    public IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data)
-    {
-        if(side.getId() == data)
-        {
-            return overlay;
-        }
-        return null;
-    }
-
-    @Override
-    public boolean hasOverbright(){
-        return true;
-    }
-}
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
index ffb05a58e..23b3375e5 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
@@ -19,7 +19,11 @@ public class BlockModelRail<T extends BlockLogicRail> extends BlockModelStandard
 
     public BlockModelRail(Block<T> block) {
         super(block);
-        this.hasOverbright = true;
+    }
+
+    @Override
+    public boolean hasOverbright() {
+        return true;
     }
 
     @Override
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
index 53d1eb180..16cf2cce7 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
@@ -15,6 +15,6 @@ public class BlockModelRotatable<T extends BlockLogic> extends BlockModelStandar
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
         int index = Sides.orientationLookUp[6 * data + side.getId()];
-        return atlasIndices[index];
+        return blockTextures.get(Side.getSideById(index));
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
index 6ec38e54c..483bf3a65 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
@@ -7,25 +7,30 @@ import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelSlab<T extends BlockLogicSlab> extends BlockModelStandard<T> {
+    protected BlockModelStandard<T> parentModel;
     public BlockModelSlab(Block<T> block){
         super(block);
-        this.atlasIndices = ((BlockModelStandard<?>)BlockModelDispatcher.getInstance().getDispatch(this.block.getLogic().modelBlock)).atlasIndices;
+        parentModel = (BlockModelStandard<T>)BlockModelDispatcher.getInstance().getDispatch(this.block.getLogic().modelBlock);
+        blockTextures.copy(parentModel.blockTextures);
+        overbrightTextures.copy(parentModel.overbrightTextures);
+        retroBlockTextures.copy(parentModel.retroBlockTextures);
+        retroOverbrightTextures.copy(parentModel.retroOverbrightTextures);
         withCustomItemBounds(0, 0, 0, 1, 0.5d, 1);
     }
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).getBlockTextureFromSideAndMetadata(side, block.getLogic().modelBlockMetadata);
+        return parentModel.getBlockTextureFromSideAndMetadata(side, block.getLogic().modelBlockMetadata);
     }
 
     @Override
     public IconCoordinate getBlockTexture(WorldSource blockAccess, int x, int y, int z, Side side)
     {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).getBlockTextureFromSideAndMetadata(side, block.getLogic().modelBlockMetadata);
+        return parentModel.getBlockTextureFromSideAndMetadata(side, block.getLogic().modelBlockMetadata);
     }
 
     @Override
     public int renderLayer() {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).renderLayer();
+        return parentModel.renderLayer();
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
index 84aca82a7..cd9b156d6 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
@@ -26,6 +26,6 @@ public class BlockModelSlabMarble<T extends BlockLogicSlab> extends BlockModelSl
         {
             return slabSide;
         }
-        return atlasIndices[side.getId()];
+        return super.getBlockTextureFromSideAndMetadata(side, data);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
index 1ba715e77..563d440dd 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
@@ -12,9 +12,14 @@ import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
 public class BlockModelStairs<T extends BlockLogicStairs> extends BlockModelStandard<T> {
+    protected BlockModelStandard<T> parentModel;
     public BlockModelStairs(Block<T> block) {
         super(block);
-        this.atlasIndices = ((BlockModelStandard<?>)BlockModelDispatcher.getInstance().getDispatch(this.block.getLogic().modelBlock)).atlasIndices;
+        parentModel = (BlockModelStandard<T>)BlockModelDispatcher.getInstance().getDispatch(this.block.getLogic().modelBlock);
+        blockTextures.copy(parentModel.blockTextures);
+        overbrightTextures.copy(parentModel.overbrightTextures);
+        retroBlockTextures.copy(parentModel.retroBlockTextures);
+        retroOverbrightTextures.copy(parentModel.retroOverbrightTextures);
     }
 
     @Override
@@ -112,17 +117,17 @@ public class BlockModelStairs<T extends BlockLogicStairs> extends BlockModelStan
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).getBlockTextureFromSideAndMetadata(side, data);
+        return parentModel.getBlockTextureFromSideAndMetadata(side, data);
     }
 
     @Override
     public IconCoordinate getBlockTexture(WorldSource blockAccess, int x, int y, int z, Side side)
     {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).getBlockTexture(blockAccess, x, y, z, side);
+        return parentModel.getBlockTexture(blockAccess, x, y, z, side);
     }
 
     @Override
     public int renderLayer() {
-        return BlockModelDispatcher.getInstance().getDispatch(block.getLogic().modelBlock).renderLayer();
+        return parentModel.renderLayer();
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
index cefbbe29b..1601225cd 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
@@ -10,16 +10,27 @@ import net.minecraft.core.block.BlockLogic;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
+import java.util.Arrays;
+
 public class BlockModelStandard<T extends BlockLogic> extends BlockModel<T>{
     public static final IconCoordinate BLOCK_TEXTURE_MISSING = TextureRegistry.getTexture("minecraft:block/texture_missing");
     public static final IconCoordinate BLOCK_TEXTURE_UNASSIGNED = TextureRegistry.getTexture("minecraft:block/texture_unassigned");
-    public IconCoordinate[] atlasIndices = new IconCoordinate[]{BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED};
-    public AABB itemRenderBounds = null;
-    public IconCoordinate overbrightTexture = null;
-    public int renderlayer = 0;
+    public @Nullable AABB itemRenderBounds = null;
+    public int renderLayer = 0;
+
+    public static final int BLOCK_TEXTURES = 0;
+    public static final int OVERBRIGHT_TEXTURES = 1;
+    public static final int RETRO_BLOCK_TEXTURES = 2;
+    public static final int RETRO_OVERBRIGHT_TEXTURES = 3;
+
+    protected final TextureLayer blockTextures = new TextureLayer().setAll(BLOCK_TEXTURE_UNASSIGNED);
+    protected final TextureLayer overbrightTextures = new TextureLayer();
+    protected final TextureLayer retroBlockTextures = new TextureLayer();
+    protected final TextureLayer retroOverbrightTextures = new TextureLayer();
 
     public BlockModelStandard(Block<T> block) {
         super(block);
@@ -139,15 +150,26 @@ public class BlockModelStandard<T extends BlockLogic> extends BlockModel<T>{
         return getBlockOverbrightTextureFromSideAndMeta(Side.getSideById(side), blockAccess.getBlockMetadata(x, y, z));
     }
 
+    @Override
+    public boolean hasOverbright() {
+        return overbrightTextures.hasTexture();
+    }
+
     @Override
     public IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data) {
-        return overbrightTexture;
+        if (retroOverbrightTextures.hasTexture && isRetro()) {
+            return retroOverbrightTextures.get(side);
+        }
+        return overbrightTextures.get(side);
     }
 
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
-        return atlasIndices[side.getId()];
+        if (retroBlockTextures.hasTexture && isRetro()) {
+            return retroBlockTextures.get(side);
+        }
+        return blockTextures.get(side);
     }
     @Override
     public IconCoordinate getParticleTexture(Side side, int meta){
@@ -206,11 +228,11 @@ public class BlockModelStandard<T extends BlockLogic> extends BlockModel<T>{
 
     @Override
     public int renderLayer() {
-        return renderlayer;
+        return renderLayer;
     }
 
     public BlockModelStandard<T> onRenderLayer(int layer) {
-        this.renderlayer = layer;
+        this.renderLayer = layer;
         return this;
     }
 
@@ -218,28 +240,169 @@ public class BlockModelStandard<T extends BlockLogic> extends BlockModel<T>{
         this.itemRenderBounds = AABB.getPermanentBB(minX, minY, minZ, maxX, maxY, maxZ);
         return this;
     }
+
+    public BlockModelStandard<T> setTex(int layer, @Nullable IconCoordinate coordinate, Side ... sides) {
+        switch (layer) {
+            case BLOCK_TEXTURES:
+                blockTextures.set(coordinate, sides);
+                break;
+            case OVERBRIGHT_TEXTURES:
+                overbrightTextures.set(coordinate, sides);
+                break;
+            case RETRO_BLOCK_TEXTURES:
+                retroBlockTextures.set(coordinate, sides);
+                break;
+            case RETRO_OVERBRIGHT_TEXTURES:
+                retroOverbrightTextures.set(coordinate, sides);
+                break;
+        }
+        return this;
+    }
+
+    public BlockModelStandard<T> setTex(int layer, @Nullable String texture, Side ... sides) {
+        switch (layer) {
+            case BLOCK_TEXTURES:
+                blockTextures.set(texture, sides);
+                break;
+            case OVERBRIGHT_TEXTURES:
+                overbrightTextures.set(texture, sides);
+                break;
+            case RETRO_BLOCK_TEXTURES:
+                retroBlockTextures.set(texture, sides);
+                break;
+            case RETRO_OVERBRIGHT_TEXTURES:
+                retroOverbrightTextures.set(texture, sides);
+                break;
+        }
+        return this;
+    }
+
+    public BlockModelStandard<T> setAllTextures(int layer, @Nullable IconCoordinate coordinate) {
+        switch (layer) {
+            case BLOCK_TEXTURES:
+                blockTextures.setAll(coordinate);
+                break;
+            case OVERBRIGHT_TEXTURES:
+                overbrightTextures.setAll(coordinate);
+                break;
+            case RETRO_BLOCK_TEXTURES:
+                retroBlockTextures.setAll(coordinate);
+                break;
+            case RETRO_OVERBRIGHT_TEXTURES:
+                retroOverbrightTextures.setAll(coordinate);
+                break;
+        }
+        return this;
+    }
+
+    public BlockModelStandard<T> setAllTextures(int layer, @Nullable String texture) {
+        switch (layer) {
+            case BLOCK_TEXTURES:
+                blockTextures.setAll(texture);
+                break;
+            case OVERBRIGHT_TEXTURES:
+                overbrightTextures.setAll(texture);
+                break;
+            case RETRO_BLOCK_TEXTURES:
+                retroBlockTextures.setAll(texture);
+                break;
+            case RETRO_OVERBRIGHT_TEXTURES:
+                retroOverbrightTextures.setAll(texture);
+                break;
+        }
+        return this;
+    }
+
+
+    @Deprecated
     public BlockModelStandard<T> withOverbrightTexture(String texture)
     {
-        this.hasOverbright = true;
-        this.overbrightTexture = TextureRegistry.getTexture(texture);
+        overbrightTextures.setAll(texture);
         return this;
     }
+    @Deprecated
     public BlockModelStandard<T> withTextures(String texture){
-        return withTextures(texture, texture, texture);
+        blockTextures.setAll(texture);
+        return this;
     }
+    @Deprecated
     public BlockModelStandard<T> withTextures(String textureTopBottom, String textureSides){
-        return withTextures(textureTopBottom, textureTopBottom, textureSides);
+        blockTextures
+            .set(textureTopBottom, Side.TOP, Side.BOTTOM)
+            .set(textureSides, Side.NORTH, Side.EAST, Side.SOUTH, Side.WEST);
+        return this;
     }
+    @Deprecated
     public BlockModelStandard<T> withTextures(String textureTop, String textureBottom, String textureSides){
-        return withTextures(textureTop, textureBottom, textureSides, textureSides, textureSides, textureSides);
+        blockTextures
+            .set(textureTop, Side.TOP)
+            .set(textureBottom, Side.BOTTOM)
+            .set(textureSides, Side.NORTH, Side.EAST, Side.SOUTH, Side.WEST);
+        return this;
     }
+    @Deprecated
     public BlockModelStandard<T> withTextures(String textureTop, String textureBottom, String textureNorth, String textureEast, String textureSouth, String textureWest){
-        atlasIndices[Side.TOP.getId()] = TextureRegistry.getTexture(textureTop);
-        atlasIndices[Side.BOTTOM.getId()] = TextureRegistry.getTexture(textureBottom);
-        atlasIndices[Side.NORTH.getId()] = TextureRegistry.getTexture(textureNorth);
-        atlasIndices[Side.EAST.getId()] = TextureRegistry.getTexture(textureEast);
-        atlasIndices[Side.SOUTH.getId()] = TextureRegistry.getTexture(textureSouth);
-        atlasIndices[Side.WEST.getId()] = TextureRegistry.getTexture(textureWest);
+        blockTextures
+            .set(textureTop, Side.TOP)
+            .set(textureBottom, Side.BOTTOM)
+            .set(textureNorth, Side.NORTH)
+            .set(textureEast, Side.EAST)
+            .set(textureSouth, Side.SOUTH)
+            .set(textureWest, Side.WEST);
         return this;
     }
+
+    protected static class TextureLayer {
+        private final @Nullable IconCoordinate @NotNull [] coordinates = new IconCoordinate[6];
+        private boolean hasTexture = false;
+
+        public TextureLayer set(@Nullable IconCoordinate coordinate, Side ... sides) {
+            for (Side s : sides) {
+                assert s != Side.NONE : "Cannot set texture on a 'NONE' side!";
+                coordinates[s.getId()] = coordinate;
+            }
+
+            hasTexture = false;
+            for (int i = 0, coordinatesLength = coordinates.length; i < coordinatesLength; i++) {
+                IconCoordinate iconCoordinate = coordinates[i];
+                hasTexture |= iconCoordinate != null;
+            }
+            return this;
+        }
+
+        public TextureLayer set(@Nullable String texture, Side ... sides) {
+            return set(texture == null ? null : TextureRegistry.getTexture(texture), sides);
+        }
+
+        public TextureLayer setAll(@Nullable IconCoordinate coordinate) {
+            Arrays.fill(coordinates, coordinate);
+            hasTexture = coordinate != null;
+            return this;
+        }
+
+        public TextureLayer setAll(@Nullable String texture) {
+            return setAll(texture == null ? null : TextureRegistry.getTexture(texture));
+        }
+
+        public TextureLayer copy(@NotNull TextureLayer layer) {
+            System.arraycopy(layer.coordinates, 0, coordinates, 0, 6);
+            this.hasTexture = layer.hasTexture;
+            return this;
+        }
+
+        public @Nullable IconCoordinate get(@NotNull Side side) {
+            assert side != Side.NONE : "Cannot set texture on a 'NONE' side!";
+            return coordinates[side.getId()];
+        }
+
+        public @Nullable IconCoordinate get(int index) {
+            assert index >= 0 : "Index must be greater then or equal to 0!";
+            assert index < coordinates.length : "Index must be less then " + coordinates.length + "!";
+            return coordinates[index];
+        }
+
+        public boolean hasTexture() {
+            return this.hasTexture;
+        }
+    }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
index c79309466..0b31ef818 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
@@ -27,6 +27,6 @@ public class BlockModelTorchRedstone<T extends BlockLogic> extends BlockModelTor
 
     @Override
     public IconCoordinate getParticleTexture(Side side, int meta) {
-        return atlasIndices[Side.NORTH.getId()];
+        return blockTextures.get(Side.NORTH);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
index 1b3b32487..f29b8e6a1 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
@@ -77,12 +77,12 @@ public class BlockModelTrapDoor<T extends BlockLogic> extends BlockModelStandard
         int orientation = data & 3;
         if(BlockLogicTrapDoor.isTrapdoorOpen(data)) {
             int index = Sides.orientationLookUpTrapdoorOpen[6 * orientation + side.getId()];
-            return atlasIndices[index];
+            return blockTextures.get(index);
         } else {
             if(side.getAxis() == Axis.Y) {
-                return atlasIndices[1];
+                return blockTextures.get(Side.BOTTOM);
             }else {
-                return atlasIndices[3];
+                return blockTextures.get(Side.SOUTH);
             }
         }
 
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
index a5877d724..1bc761e1a 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
@@ -35,50 +35,55 @@ public class BlockModelVeryRotatable<T extends BlockLogic> extends BlockModelSta
         super.renderBlockOnInventory(tessellator, 3, brightness, alpha, lightmapCoordinate);
     }
 
+    @Override
+    public IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data) {
+        return super.getBlockOverbrightTextureFromSideAndMeta(getRotatedSide(side, data), data);
+    }
+
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
-        return atlasIndices[getTextureIndex(side, data)];
+        return super.getBlockTextureFromSideAndMetadata(getRotatedSide(side, data), data);
     }
 
-    public int getTextureIndex(Side side, int data) {
+    public Side getRotatedSide(Side side, int data) {
         final Direction dir = BlockLogicVeryRotatable.metaToDirection(data);
         switch (dir) { // I love brute forcing fixes so much :3
             case SOUTH:
-                return side.getId();
+                return side;
             case EAST:
-                return side.getDirection().rotate(1).getId();
+                return side.getDirection().rotate(1).getSide();
             case NORTH:
-                return side.getDirection().rotate(2).getId();
+                return side.getDirection().rotate(2).getSide();
             case WEST:
-                return side.getDirection().rotate(3).getId();
+                return side.getDirection().rotate(3).getSide();
             case UP:
                 switch (side) {
                     case NORTH:
-                        return Side.TOP.getId();
+                        return Side.TOP;
                     case SOUTH:
-                        return Side.BOTTOM.getId();
+                        return Side.BOTTOM;
                     case TOP:
-                        return Side.SOUTH.getId();
+                        return Side.SOUTH;
                     case BOTTOM:
-                        return Side.NORTH.getId();
+                        return Side.NORTH;
                     default:
-                        return side.getId();
+                        return side;
                 }
             case DOWN:
                 switch (side) {
                     case NORTH:
-                        return Side.TOP.getId();
+                        return Side.TOP;
                     case SOUTH:
-                        return Side.BOTTOM.getId();
+                        return Side.BOTTOM;
                     case TOP:
-                        return Side.NORTH.getId();
+                        return Side.NORTH;
                     case BOTTOM:
-                        return Side.SOUTH.getId();
+                        return Side.SOUTH;
                     default:
-                        return side.getId();
+                        return side;
                 }
         }
-        return 0;
+        return Side.BOTTOM;
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
index b3d1576c5..1d9bdfe47 100644
--- a/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
+++ b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
@@ -81,7 +81,7 @@ public class DynamicTextureWaterFlow extends DynamicTexture {
 			int b = 255;
 			int a = (int) (146.0F + var13 * 50.0F);
 
-			if (mc.gameSettings.biomeWater.value) {
+			if (mc.gameSettings.biomeWater.value && !(mc.currentWorld != null && mc.currentWorld.isRetro())) {
 				r = g = b = (r + g + b) / 3;
 			}
 
diff --git a/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
index 17811a091..24bdb87e1 100644
--- a/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
+++ b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
@@ -80,7 +80,7 @@ public class DynamicTextureWaterStill extends DynamicTexture {
 			int b = 255;
 			int a = (int) (146.0F + var13 * 50.0F);
 
-			if (mc.gameSettings.biomeWater.value) {
+			if (mc.gameSettings.biomeWater.value && !(mc.currentWorld != null && mc.currentWorld.isRetro())) {
 				r = g = b = (r + g + b) / 3;
 			}
 
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom_retro.png
new file mode 100644
index 000000000..ee47be028
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/side_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/side_retro.png
new file mode 100644
index 000000000..d31d26d71
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/side_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/top_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/top_retro.png
new file mode 100644
index 000000000..c9b0af7af
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/top_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/bottom_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/bottom_retro.png
new file mode 100644
index 000000000..b4e4f7c18
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/bottom_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/side_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/side_retro.png
new file mode 100644
index 000000000..9962d72ad
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/side_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/top_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/top_retro.png
new file mode 100644
index 000000000..fc5715a0a
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/top_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/bottom_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/bottom_retro.png
new file mode 100644
index 000000000..fbfbfdb6d
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/bottom_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/side_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/side_retro.png
new file mode 100644
index 000000000..0d7f2e949
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/side_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/top_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/top_retro.png
new file mode 100644
index 000000000..cb402081a
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/top_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/brick_clay_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_clay_retro.png
new file mode 100644
index 000000000..bd7a49360
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/brick_clay_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/cactus/bottom_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/bottom_retro.png
new file mode 100644
index 000000000..d4d7c8060
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/bottom_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/cactus/side_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/side_retro.png
new file mode 100644
index 000000000..8f283ac20
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/side_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/cactus/top_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/top_retro.png
new file mode 100644
index 000000000..6f60234ad
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/top_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy_retro.png
new file mode 100644
index 000000000..96beadcac
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/stone_retro.png
new file mode 100644
index 000000000..0f94b36ea
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/stone_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone_retro.png
new file mode 100644
index 000000000..fcf1e3cab
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/stone_retro.png
new file mode 100644
index 000000000..98880f081
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/stone_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/stone_retro.png
new file mode 100644
index 000000000..ffbb14c47
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/stone_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone_retro.png
new file mode 100644
index 000000000..844a82d6f
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone_retro.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/trommel/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/bottom.png
new file mode 100644
index 000000000..be7cead3e
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/bottom.png differ
diff --git a/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java b/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
index e8fd35cdd..f1df137a7 100644
--- a/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
+++ b/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
@@ -141,6 +141,12 @@ public class BlocksContainer implements WorldSource {
     public int getSavedLightValue(LightLayer layer, int x, int y, int z) {
         return world.getSavedLightValue(layer, x, y, z);
     }
+
+    @Override
+    public boolean isRetro() {
+        return world.isRetro();
+    }
+
     public static class BlockEntry {
         public final int blockID;
         public final int blockMeta;
diff --git a/game/core/src/main/java/net/minecraft/core/world/World.java b/game/core/src/main/java/net/minecraft/core/world/World.java
index 15b0c607b..9029ed847 100644
--- a/game/core/src/main/java/net/minecraft/core/world/World.java
+++ b/game/core/src/main/java/net/minecraft/core/world/World.java
@@ -1063,6 +1063,11 @@ public class World implements WorldSource {
         }
     }
 
+    @Override
+    public boolean isRetro() {
+        return worldType.isRetro();
+    }
+
     public void setLightValue(LightLayer layer, int x, int y, int z, int value)
     {
         if(x < MIN_BLOCK_X || z < MIN_BLOCK_Z || x >= MAX_BLOCK_X || z > MAX_BLOCK_Z)
diff --git a/game/core/src/main/java/net/minecraft/core/world/WorldSource.java b/game/core/src/main/java/net/minecraft/core/world/WorldSource.java
index 208a53557..6c036563b 100644
--- a/game/core/src/main/java/net/minecraft/core/world/WorldSource.java
+++ b/game/core/src/main/java/net/minecraft/core/world/WorldSource.java
@@ -37,5 +37,7 @@ public interface WorldSource
     SeasonManager getSeasonManager();
     Biome getBlockBiome(int x, int y, int z);
     
-    public int getSavedLightValue(LightLayer layer, int x, int y, int z);
+    int getSavedLightValue(LightLayer layer, int x, int y, int z);
+
+    boolean isRetro();
 }
diff --git a/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
index 472de83b1..c2bc4d8d7 100644
--- a/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
@@ -282,4 +282,9 @@ public class ChunkCache
 	public int getSavedLightValue(LightLayer layer, int x, int y, int z) {
 		return worldObj.getSavedLightValue(layer, x, y, z);
 	}
+
+    @Override
+    public boolean isRetro() {
+        return worldObj.isRetro();
+    }
 }
diff --git a/game/core/src/main/java/net/minecraft/core/world/type/WorldType.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldType.java
index 9190e849a..1c7425b77 100644
--- a/game/core/src/main/java/net/minecraft/core/world/type/WorldType.java
+++ b/game/core/src/main/java/net/minecraft/core/world/type/WorldType.java
@@ -31,6 +31,7 @@ public abstract class WorldType {
     private final int fillerBlockId;
     private final int dayNightCycleTicks;
     private final boolean mayRespawn;
+    private final boolean isRetro;
 
     public WorldType(Properties properties) {
         this.languageKey = properties.languageKey;
@@ -56,6 +57,7 @@ public abstract class WorldType {
         this.fillerBlockId = properties.fillerBlock == null ? 0 : properties.fillerBlock.id();
         this.dayNightCycleTicks = properties.dayNightCycleTicks;
         this.mayRespawn = properties.mayRespawn;
+        this.isRetro = properties.isRetro;
     }
 
     public String getLanguageKey() {
@@ -118,6 +120,10 @@ public abstract class WorldType {
         return mayRespawn;
     }
 
+    public boolean isRetro() {
+        return isRetro;
+    }
+
     public void onWorldCreation(World world) { }
 
     public final int getYRange() {
@@ -248,6 +254,7 @@ public abstract class WorldType {
         private Block<?> fillerBlock = null;
         private int dayNightCycleTicks = Global.DAY_LENGTH_TICKS;
         private boolean mayRespawn = false;
+        private boolean isRetro = false;
 
         private Properties(String languageKey) {
             this.languageKey = languageKey;
@@ -337,5 +344,10 @@ public abstract class WorldType {
             this.mayRespawn = true;
             return this;
         }
+
+        public Properties setRetro() {
+            this.isRetro = true;
+            return this;
+        }
     }
 }
diff --git a/game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java
index 1dadb8f1b..4d6fe1dc5 100644
--- a/game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java
+++ b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java
@@ -79,6 +79,7 @@ public abstract class WorldTypes {
                     WorldTypeOverworld.defaultProperties("worldType.overworld.retro")
                             .seasonConfig(null)
                             .bounds(0, 127, 64)
+                            .setRetro()
             )
     );
     public static final WorldType OVERWORLD_ISLANDS = register(
@@ -155,6 +156,7 @@ public abstract class WorldTypes {
                     WorldTypeOverworld.defaultProperties("worldType.overworld.indev")
                             .seasonConfig(null)
                             .bounds(0, 127, 64)
+                            .setRetro()
             )
     );
     public static final WorldType OVERWORLD_SKYBLOCK = register(
