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 2e3339d3c..bbb0483c0 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
@@ -382,6 +382,8 @@ public final class BlockModelDispatcher
         addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_GLOOMSTONE, "minecraft:block/button/stone/gloomstone"));
         addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_SANDSTONE, "minecraft:block/button/stone/sandstone"));
         addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_BRIMSTONE, "minecraft:block/button/stone/brimstone"));
+        addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_MARBLE, "minecraft:block/button/stone/marble"));
+        addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_SLATE, "minecraft:block/button/stone/slate"));
         addDispatch(new BlockModelGenericButton<>(Blocks.BUTTON_PLANKS_OAK, "minecraft:block/button/planks/oak"));
         addDispatch(new BlockModelGenericButtonPainted<>(Blocks.BUTTON_PLANKS_PAINTED));
 
@@ -396,6 +398,8 @@ public final class BlockModelDispatcher
         addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_GLOOMSTONE, "minecraft:block/pressure_plate/stone/gloomstone"));
         addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_SANDSTONE, "minecraft:block/pressure_plate/stone/sandstone"));
         addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_BRIMSTONE, "minecraft:block/pressure_plate/stone/brimstone"));
+        addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_MARBLE, "minecraft:block/pressure_plate/stone/marble"));
+        addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_SLATE, "minecraft:block/pressure_plate/stone/slate"));
 
         addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_PLANKS_OAK, "minecraft:block/pressure_plate/planks/oak"));
         addDispatch(new BlockModelGenericPressurePlate<>(Blocks.PRESSURE_PLATE_COBBLE_STONE, "minecraft:block/pressure_plate/cobbled/stone"));
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericRubyglassGrowth.java b/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericRubyglassGrowth.java
index f0488a930..0889ec820 100644
--- a/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericRubyglassGrowth.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericRubyglassGrowth.java
@@ -30,17 +30,7 @@ public class BlockModelGenericRubyglassGrowth<T extends BlockLogic> extends Bloc
 
     @Override
     public boolean render(@NotNull TessellatorGeneral tessellator, @NotNull WorldSource worldSource, @NotNull TilePosc tilePos) {
-        int data = worldSource.getBlockData(tilePos);
-
-        int shape = data & SHAPE_MASK;
-
-        if (shape == STATE_TOP) {
-            return this.topModel.render(tessellator, worldSource, tilePos);
-        } else if (shape == STATE_BOTTOM) {
-            return this.bottomModel.render(tessellator, worldSource, tilePos);
-        } else {
-            return this.budModel.render(tessellator, worldSource, tilePos);
-        }
+        return this.modelForShape(worldSource, tilePos).render(tessellator, worldSource, tilePos);
     }
 
     @Override
@@ -50,7 +40,19 @@ public class BlockModelGenericRubyglassGrowth<T extends BlockLogic> extends Bloc
 
     @Override
     public boolean renderWithOverrideTexture(@NotNull TessellatorGeneral tessellator, @NotNull WorldSource worldSource, @NotNull TilePosc tilePos, IconCoordinate overrideTexture) {
-        return false;
+        return this.modelForShape(worldSource, tilePos).renderWithOverrideTexture(tessellator, worldSource, tilePos, overrideTexture);
+    }
+
+    private @NotNull BlockModelGenericFullyRotatable<T> modelForShape(@NotNull WorldSource worldSource, @NotNull TilePosc tilePos) {
+        int shape = worldSource.getBlockData(tilePos) & SHAPE_MASK;
+
+        if (shape == STATE_TOP) {
+            return this.topModel;
+        } else if (shape == STATE_BOTTOM) {
+            return this.bottomModel;
+        } else {
+            return this.budModel;
+        }
     }
 
     @Override
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/active.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/active.json
new file mode 100644
index 000000000..af5362c74
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/active",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/idle.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/idle.json
new file mode 100644
index 000000000..bde60656d
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/idle.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/idle",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/inventory.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/inventory.json
new file mode 100644
index 000000000..3072d4ad1
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/marble/inventory.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/inventory",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/active.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/active.json
new file mode 100644
index 000000000..9cbeabc08
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/active",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/idle.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/idle.json
new file mode 100644
index 000000000..e52603977
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/idle.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/idle",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/inventory.json b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/inventory.json
new file mode 100644
index 000000000..1c497de11
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/button/stone/slate/inventory.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/button/inventory",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/active.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/active.json
new file mode 100644
index 000000000..b8f3d13ea
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/active",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/idle.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/idle.json
new file mode 100644
index 000000000..3519acf93
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/idle.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/idle",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/inventory.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/inventory.json
new file mode 100644
index 000000000..d8cde04b9
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/marble/inventory.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/inventory",
+  "textures": {
+    "texture": "minecraft:block/marble"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/active.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/active.json
new file mode 100644
index 000000000..ffd3ccf37
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/active.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/active",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/idle.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/idle.json
new file mode 100644
index 000000000..06eb7165d
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/idle.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/idle",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/inventory.json b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/inventory.json
new file mode 100644
index 000000000..922efc953
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/pressure_plate/stone/slate/inventory.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:block/pressure_plate/inventory",
+  "textures": {
+    "texture": "minecraft:block/slate_top"
+  }
+}
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap.json
index 04f04c2a6..05bd270f6 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap.json
@@ -1,40 +1,25 @@
 {
-  "format_version": "1.21.6",
-  "credit": "Made with Blockbench",
-  "textures": {
-    "closed": "minecraft:block/rubyglass/conduit/closed/closed",
-    "closed_overlay": "minecraft:block/rubyglass/conduit/closed/closed_overlay",
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "plug": "minecraft:block/rubyglass/conduit/plug/plug",
-    "plug_overlay": "minecraft:block/rubyglass/conduit/plug/plug_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
-  },
-  "elements": [
-    {
-      "name": "Conduit Casing",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "north"},
-        "east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "east"},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "south"},
-        "west": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "west"},
-        "up": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "up"},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down"}
-      }
-    },
-    {
-      "name": "Redstone Overlay",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug_overlay", "cullface": "north", "tintindex": 0, "shade": false},
-        "east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug_overlay", "cullface": "east", "tintindex": 0, "shade": false},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug_overlay", "cullface": "south", "tintindex": 0, "shade": false},
-        "west": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug_overlay", "cullface": "west", "tintindex": 0, "shade": false},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open_overlay", "cullface": "down", "tintindex": 0, "shade": false}
-      }
-    }
-  ]
+	"format_version": "1.21.6",
+	"credit": "Made with Blockbench",
+	"textures": {
+		"particle": "block/rubyglass/conduit/closed/active",
+		"closed": "block/rubyglass/conduit/closed/active",
+		"open": "block/rubyglass/conduit/open/active",
+		"plug": "block/rubyglass/conduit/plug/active"
+	},
+	"elements": [
+		{
+			"name": "Conduit Casing",
+			"from": [0, 0, 0],
+			"to": [16, 16, 16],
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "north", "tintindex": 0},
+				"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "east", "tintindex": 0},
+				"south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "south", "tintindex": 0},
+				"west": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "west", "tintindex": 0},
+				"up": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "up", "tintindex": 0},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down", "tintindex": 0}
+			}
+		}
+	]
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap_off.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap_off.json
index c823c86d8..207ff6daa 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap_off.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_cap_off.json
@@ -2,12 +2,10 @@
   "format_version": "1.21.6",
   "credit": "Made with Blockbench",
   "textures": {
-    "closed": "minecraft:block/rubyglass/conduit/closed/closed",
-    "closed_overlay": "minecraft:block/rubyglass/conduit/closed/closed_overlay",
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "plug": "minecraft:block/rubyglass/conduit/plug/plug",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
+    "closed": "minecraft:block/rubyglass/conduit/closed/idle",
+    "open": "minecraft:block/rubyglass/conduit/open/idle",
+    "plug": "minecraft:block/rubyglass/conduit/plug/idle",
+    "particle": "minecraft:block/rubyglass/conduit/closed/idle"
   },
   "elements": [
     {
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core.json
index b3b4a9ed0..f6d5b10ad 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core.json
@@ -1,44 +1,45 @@
 {
-  "format_version": "1.21.6",
-  "credit": "Made with Blockbench",
-  "display": {
-    "gui": { "rotation": [ 30, 225, 0 ], "translation": [ 0, 0, 0 ], "scale": [ 0.625, 0.625, 0.625 ] },
-    "ground": { "rotation": [ 0, 0, 0 ], "translation": [ 0, 3, 0 ], "scale": [ 0.25, 0.25, 0.25 ] },
-    "fixed": { "rotation": [ 0, 0, 0 ], "translation": [ 0, 0, 0 ], "scale": [ 0.5, 0.5, 0.5 ] },
-    "thirdperson_righthand": { "rotation": [ 75, 45, 0 ], "translation": [ 0, 2.5, 0 ], "scale": [ 0.375, 0.375, 0.375 ] },
-    "firstperson_righthand": { "rotation": [ 0, 45, 0 ], "translation": [ 0, 0, 0 ], "scale": [ 0.4, 0.4, 0.4 ] }
-  },
-  "textures": {
-    "closed": "minecraft:block/rubyglass/conduit/closed/closed",
-    "closed_overlay": "minecraft:block/rubyglass/conduit/closed/closed_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
-  },
-  "elements": [
-    {
-      "name": "Conduit Casing",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "north"},
-        "east": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "east"},
-        "south": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "south"},
-        "west": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "west"},
-        "up": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "up"},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "down"}
-      }
-    },
-    {
-      "name": "Redstone Overlay",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "north", "tintindex": 0, "shade": false},
-        "east": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "east", "tintindex": 0, "shade": false},
-        "south": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "south", "tintindex": 0, "shade": false},
-        "west": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "west", "tintindex": 0, "shade": false},
-        "up": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "up", "tintindex": 0, "shade": false},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#closed_overlay", "cullface": "down", "tintindex": 0, "shade": false}
-      }
-    }
-  ]
+	"format_version": "1.21.6",
+	"credit": "Made with Blockbench",
+	"textures": {
+		"particle": "block/rubyglass/conduit/closed/active",
+		"closed": "block/rubyglass/conduit/closed/active"
+	},
+	"elements": [
+		{
+			"name": "Conduit Casing",
+			"from": [0, 0, 0],
+			"to": [16, 16, 16],
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "north", "tintindex": 0},
+				"east": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "east", "tintindex": 0},
+				"south": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "south", "tintindex": 0},
+				"west": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "west", "tintindex": 0},
+				"up": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "up", "tintindex": 0},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#closed", "cullface": "down", "tintindex": 0}
+			}
+		}
+	],
+	"display": {
+		"thirdperson_righthand": {
+			"rotation": [75, 45, 0],
+			"translation": [0, 2.5, 0],
+			"scale": [0.375, 0.375, 0.375]
+		},
+		"firstperson_righthand": {
+			"rotation": [0, 45, 0],
+			"scale": [0.4, 0.4, 0.4]
+		},
+		"ground": {
+			"translation": [0, 3, 0],
+			"scale": [0.25, 0.25, 0.25]
+		},
+		"gui": {
+			"rotation": [30, -135, 0],
+			"scale": [0.625, 0.625, 0.625]
+		},
+		"fixed": {
+			"scale": [0.5, 0.5, 0.5]
+		}
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core_off.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core_off.json
index b84b0ad51..a64bd0b5a 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core_off.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_core_off.json
@@ -9,9 +9,8 @@
     "firstperson_righthand": { "rotation": [ 0, 45, 0 ], "translation": [ 0, 0, 0 ], "scale": [ 0.4, 0.4, 0.4 ] }
   },
   "textures": {
-    "closed": "minecraft:block/rubyglass/conduit/closed/closed",
-    "closed_overlay": "minecraft:block/rubyglass/conduit/closed/closed_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
+    "closed": "minecraft:block/rubyglass/conduit/closed/idle",
+    "particle": "minecraft:block/rubyglass/conduit/closed/idle"
   },
   "elements": [
     {
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner.json
index 70b5cc7bd..22ca11293 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner.json
@@ -1,41 +1,25 @@
 {
-  "format_version": "1.21.6",
-  "credit": "Made with Blockbench",
-  "textures": {
-    "corner": "minecraft:block/rubyglass/conduit/corner/corner",
-    "corner_overlay": "minecraft:block/rubyglass/conduit/corner/corner_overlay",
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "plug": "minecraft:block/rubyglass/conduit/plug/plug",
-    "plug_overlay": "minecraft:block/rubyglass/conduit/plug/plug_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
-  },
-  "elements": [
-    {
-      "name": "Conduit Casing",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "north"},
-        "east": {"uv": [0, 0, 16, 16], "texture": "#corner", "cullface": "east"},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "south"},
-        "west": {"uv": [16, 0, 0, 16], "texture": "#corner", "cullface": "west"},
-        "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#plug", "cullface": "up"},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down"}
-      }
-    },
-    {
-      "name": "Redstone Overlay",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "texture": "#open_overlay", "cullface": "north", "tintindex": 0, "shade": false},
-        "east": {"uv": [0, 0, 16, 16], "texture": "#corner_overlay", "cullface": "east", "tintindex": 0, "shade": false},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug_overlay", "cullface": "south", "tintindex": 0, "shade": false},
-        "west": {"uv": [16, 0, 0, 16], "texture": "#corner_overlay", "cullface": "west", "tintindex": 0, "shade": false},
-        "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#plug_overlay", "cullface": "up", "tintindex": 0, "shade": false},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open_overlay", "cullface": "down", "tintindex": 0, "shade": false}
-      }
-    }
-  ]
+	"format_version": "1.21.6",
+	"credit": "Made with Blockbench",
+	"textures": {
+		"corner": "block/rubyglass/conduit/corner/active",
+		"open": "block/rubyglass/conduit/open/active",
+		"plug": "block/rubyglass/conduit/plug/active",
+		"particle": "block/rubyglass/conduit/closed/active"
+	},
+	"elements": [
+		{
+			"name": "Conduit Casing",
+			"from": [0, 0, 0],
+			"to": [16, 16, 16],
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "north", "tintindex": 0},
+				"east": {"uv": [0, 0, 16, 16], "texture": "#corner", "cullface": "east", "tintindex": 0},
+				"south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#plug", "cullface": "south", "tintindex": 0},
+				"west": {"uv": [16, 0, 0, 16], "texture": "#corner", "cullface": "west", "tintindex": 0},
+				"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#plug", "cullface": "up", "tintindex": 0},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down", "tintindex": 0}
+			}
+		}
+	]
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner_off.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner_off.json
index 2c6590b5b..99bf063fd 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner_off.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_corner_off.json
@@ -2,13 +2,10 @@
   "format_version": "1.21.6",
   "credit": "Made with Blockbench",
   "textures": {
-    "corner": "minecraft:block/rubyglass/conduit/corner/corner",
-    "corner_overlay": "minecraft:block/rubyglass/conduit/corner/corner_overlay",
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "plug": "minecraft:block/rubyglass/conduit/plug/plug",
-    "plug_overlay": "minecraft:block/rubyglass/conduit/plug/plug_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
+    "corner": "minecraft:block/rubyglass/conduit/corner/idle",
+    "open": "minecraft:block/rubyglass/conduit/open/idle",
+    "plug": "minecraft:block/rubyglass/conduit/plug/idle",
+    "particle": "minecraft:block/rubyglass/conduit/closed/idle"
   },
   "elements": [
     {
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight.json
index b10f4b890..d8d676caa 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight.json
@@ -1,39 +1,24 @@
 {
-  "format_version": "1.21.6",
-  "credit": "Made with Blockbench",
-  "textures": {
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "straight": "minecraft:block/rubyglass/conduit/straight/straight",
-    "straight_overlay": "minecraft:block/rubyglass/conduit/straight/straight_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
-  },
-  "elements": [
-    {
-      "name": "Conduit Casing",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "north"},
-        "east": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "east"},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "south"},
-        "west": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "west"},
-        "up": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "up"},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down"}
-      }
-    },
-    {
-      "name": "Redstone Overlay",
-      "from": [0, 0, 0],
-      "to": [16, 16, 16],
-      "faces": {
-        "north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight_overlay", "cullface": "north", "tintindex": 0, "shade": false},
-        "east": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight_overlay", "cullface": "east", "tintindex": 0, "shade": false},
-        "south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight_overlay", "cullface": "south", "tintindex": 0, "shade": false},
-        "west": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight_overlay", "cullface": "west", "tintindex": 0, "shade": false},
-        "up": {"uv": [0, 0, 16, 16], "texture": "#open_overlay", "cullface": "up", "tintindex": 0, "shade": false},
-        "down": {"uv": [0, 0, 16, 16], "texture": "#open_overlay", "cullface": "down", "tintindex": 0, "shade": false}
-      }
-    }
-  ]
+	"format_version": "1.21.6",
+	"credit": "Made with Blockbench",
+	"textures": {
+		"open": "block/rubyglass/conduit/open/active",
+		"straight": "block/rubyglass/conduit/straight/active",
+		"particle": "block/rubyglass/conduit/closed/active"
+	},
+	"elements": [
+		{
+			"name": "Conduit Casing",
+			"from": [0, 0, 0],
+			"to": [16, 16, 16],
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "north", "tintindex": 0},
+				"east": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "east", "tintindex": 0},
+				"south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "south", "tintindex": 0},
+				"west": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#straight", "cullface": "west", "tintindex": 0},
+				"up": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "up", "tintindex": 0},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#open", "cullface": "down", "tintindex": 0}
+			}
+		}
+	]
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight_off.json b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight_off.json
index f2cd1b03d..aec76f56c 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight_off.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/rubyglass/conduit/conduit_straight_off.json
@@ -2,11 +2,9 @@
   "format_version": "1.21.6",
   "credit": "Made with Blockbench",
   "textures": {
-    "open": "minecraft:block/rubyglass/conduit/open/open",
-    "open_overlay": "minecraft:block/rubyglass/conduit/open/open_overlay",
-    "straight": "minecraft:block/rubyglass/conduit/straight/straight",
-    "straight_overlay": "minecraft:block/rubyglass/conduit/straight/straight_overlay",
-    "particle": "minecraft:block/rubyglass/conduit/closed/closed"
+    "open": "minecraft:block/rubyglass/conduit/open/idle",
+    "straight": "minecraft:block/rubyglass/conduit/straight/idle",
+    "particle": "minecraft:block/rubyglass/conduit/closed/idle"
   },
   "elements": [
     {
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.emiss.png.mcmeta
index b20a20474..57ab1b345 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.emiss.png.mcmeta
@@ -1,17 +1,5 @@
 {
-  "animation": {
-    "interpolate": false,
-    "random": false,
-    "frametime": 7,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"frametime": 7
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.png.mcmeta
index b20a20474..57ab1b345 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/flowing.png.mcmeta
@@ -1,17 +1,5 @@
 {
-  "animation": {
-    "interpolate": false,
-    "random": false,
-    "frametime": 7,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"frametime": 7
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.emiss.png.mcmeta
index e0fcfa6e6..82bde58cf 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.emiss.png.mcmeta
@@ -1,12 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 30,
-    "frames": [
-      0,
-      1,
-      2,
-      3
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 30
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.png.mcmeta
index 781fd9305..82bde58cf 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/fluid/acid/still.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 30,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      0,
-      3,
-      2,
-      1
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 30
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png
index 8e5dad90c..37a42fc94 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png.mcmeta
index 6c67b115b..631c360b1 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 80
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 80
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png
index c8359ceb0..9d7940b0a 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png.mcmeta
index 6c67b115b..631c360b1 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front0.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 80
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 80
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png
index a3627c320..37a42fc94 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png.mcmeta
index fe63ba1cc..6e5692009 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 90
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 90
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png
index ae6babd8e..9d7940b0a 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png.mcmeta
index fe63ba1cc..6e5692009 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front1.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 90
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 90
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png
index 077b7fabc..37a42fc94 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png.mcmeta
index 0c408636c..69042ce2b 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 60
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 60
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png
index 4e9f25c1e..9d7940b0a 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png.mcmeta
index 0c408636c..69042ce2b 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front2.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 60
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 60
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png
index 8e980e188..37a42fc94 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png.mcmeta
index 893e25fb8..d4c5c151d 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 100
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 100
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png
index 7eb1cdce0..9d7940b0a 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png.mcmeta
index 893e25fb8..d4c5c151d 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front3.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 100
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 100
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png
index 44dc4abff..c78595758 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png.mcmeta
index 6c67b115b..631c360b1 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 80
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 80
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png
index 672cfd148..21e6777fb 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png.mcmeta
index 6c67b115b..631c360b1 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active0.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 80
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 80
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png
index 923aa551d..c78595758 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png.mcmeta
index fe63ba1cc..6e5692009 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 90
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 90
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png
index f95722d49..21e6777fb 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png.mcmeta
index fe63ba1cc..6e5692009 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active1.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 90
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 90
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png
index 50f5502b4..c78595758 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png.mcmeta
index 0c408636c..69042ce2b 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 60
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 60
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png
index bf9c77c46..21e6777fb 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png.mcmeta
index 0c408636c..69042ce2b 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active2.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 60
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 60
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png
index d93e1b4b3..c78595758 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png.mcmeta
index 893e25fb8..d4c5c151d 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.emiss.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 100
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 100
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png
index 041ee079c..21e6777fb 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png and b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png.mcmeta
index 893e25fb8..d4c5c151d 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/matcher/front_active3.png.mcmeta
@@ -1,16 +1,16 @@
 {
-    "animation": {
-        "frametime": 2,
-        "frames": [
-            0,
-            1,
-            2,
-            3,
-            4,
-            {
-                "index": 5,
-                "time": 100
-            }
-        ]
-    }
+	"animation": {
+		"frametime": 2,
+		"frames": [
+			0,
+			1,
+			2,
+			3,
+			2,
+			{
+				"index": 1,
+				"time": 100
+			}
+		]
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png
index a230152c3..cbd486a48 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.emiss.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png
index 6f6baa4a7..0349def78 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/block.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png
index a230152c3..cbd486a48 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.emiss.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png
index 2b5326feb..4a3d30885 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/brick.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.cmask.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.cmask.png
new file mode 100644
index 000000000..4998f8d0d
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.cmask.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed_overlay.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.emiss.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed_overlay.emiss.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.emiss.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.png
new file mode 100644
index 000000000..526e4bc8e
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/active.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed_overlay.png
deleted file mode 100644
index 21861dd34..000000000
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed_overlay.png and /dev/null differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/idle.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/closed.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/closed/idle.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.cmask.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.cmask.png
new file mode 100644
index 000000000..7f9bcd34d
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.cmask.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner_overlay.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.emiss.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner_overlay.emiss.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.emiss.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.png
new file mode 100644
index 000000000..e093a9b38
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/active.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner_overlay.png
deleted file mode 100644
index 9c26af9cc..000000000
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner_overlay.png and /dev/null differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/idle.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/corner.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/corner/idle.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.cmask.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.cmask.png
new file mode 100644
index 000000000..812e6982d
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.cmask.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open_overlay.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.emiss.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open_overlay.emiss.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.emiss.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.png
new file mode 100644
index 000000000..512e03575
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/active.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/idle.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/idle.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open_overlay.png
deleted file mode 100644
index 4558bfef0..000000000
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/open/open_overlay.png and /dev/null differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.cmask.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.cmask.png
new file mode 100644
index 000000000..db2999e7b
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.cmask.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug_overlay.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.emiss.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug_overlay.emiss.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.emiss.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.png
new file mode 100644
index 000000000..42fe64aab
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/active.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/idle.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/idle.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug_overlay.png
deleted file mode 100644
index 63f0acae3..000000000
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/plug/plug_overlay.png and /dev/null differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.cmask.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.cmask.png
new file mode 100644
index 000000000..51d6120d7
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.cmask.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight_overlay.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.emiss.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight_overlay.emiss.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.emiss.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.png
new file mode 100644
index 000000000..6da26a92d
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/active.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/idle.png
similarity index 100%
rename from game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/idle.png
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight_overlay.png
deleted file mode 100644
index a072df79a..000000000
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/conduit/straight/straight_overlay.png and /dev/null differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png
index a230152c3..cbd486a48 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.emiss.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png
index 961512bbb..610cd3b7c 100644
Binary files a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png and b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png.mcmeta
index b13a44198..657147540 100644
--- a/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png.mcmeta
+++ b/game/client/src/main/resources/assets/minecraft/textures/block/rubyglass/node.png.mcmeta
@@ -1,16 +1,6 @@
 {
-  "animation": {
-    "interpolate": true,
-    "frametime": 16,
-    "frames": [
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7
-    ]
-  }
+	"animation": {
+		"interpolate": true,
+		"frametime": 80
+	}
 }
\ No newline at end of file
diff --git a/game/client/src/main/resources/shaders/clouds.vsh b/game/client/src/main/resources/shaders/clouds.vsh
index 04756272e..16e6bfa08 100644
--- a/game/client/src/main/resources/shaders/clouds.vsh
+++ b/game/client/src/main/resources/shaders/clouds.vsh
@@ -28,8 +28,8 @@ void main() {
     float zFrac = fract(zOffset);
 
     TexCoord = aUV + vec2(
-        xInt * 1/256f,
-        zInt * 1/256f
+        xInt * 1/256.0,
+        zInt * 1/256.0
     );
 
     vec3 pos = aPos;
diff --git a/game/core/build.gradle.kts b/game/core/build.gradle.kts
index 2933056c4..26db79f9b 100644
--- a/game/core/build.gradle.kts
+++ b/game/core/build.gradle.kts
@@ -82,10 +82,10 @@ val versionGenerator by tasks.registering {
 // 2nd nibble: Minor version
 // 3rd nibble: 0 if release, 1 if prerelease, 2 if nightly/dev release
 // 4th nibble: Prerelease version or patch version
-// For example, 7.1_01 would be encoded as 0x7101
-// 7.1 prerelease 1 would be encoded as 0x7111
+// For example, 8.0.1 would be encoded as 0x8001
+// 8.1-pre1 would be encoded as 0x8111
 fun genProtocol(version: String, channel: String): String {
-    val parts = version.split(".") // 7.3_01
+    val parts = version.split(".") // 8.0.1
     var major = 0;
     var minor = 0;
     var patch = 0;
@@ -106,17 +106,17 @@ fun genProtocol(version: String, channel: String): String {
     } else if (parts.isNotEmpty()) {
         major = parts[0].trim().toInt()
         if (parts.size > 1) {
-            if (parts[1].contains("_")) {
-                val parts2 = parts[1].split("_")
-                minor = parts2[0].trim().toInt()
-                patch = parts2[1].trim().toInt()
-            } else if (parts[1].contains("-pre", true)) {
+            if (parts[1].contains("-pre", true)) {
                 val parts2 = parts[1].lowercase().split("-pre")
                 minor = parts2[0].trim().toInt()
                 patch = parts2[1].trim().toInt()
             } else {
                 minor = parts[1].trim().toInt()
             }
+
+            if (parts.size > 2) {
+                patch = parts[2].trim().toInt()
+            }
         }
     }
 
diff --git a/game/core/src/main/java/net/minecraft/core/Global.java b/game/core/src/main/java/net/minecraft/core/Global.java
index 3a4249ab4..b31db96e5 100644
--- a/game/core/src/main/java/net/minecraft/core/Global.java
+++ b/game/core/src/main/java/net/minecraft/core/Global.java
@@ -31,9 +31,9 @@ public class Global
 	// 2 byte value
 	// 1st nibble: Major version
 	// 2nd nibble: Minor version
-	// 3rd nibble: 0 if release, 1 if prerelease, 2 if nightly release
+	// 3rd nibble: 0 if release, 1 if prerelease, 2 if nightly/dev release
 	// 4th nibble: Prerelease version or patch version
-	// For example, 7.1_01 would be encoded as 0x7101
-	// 7.1 prerelease 1 would be encoded as 0x7111
+	// For example, 8.0.1 would be encoded as 0x8001
+	// 8.1-pre1 would be encoded as 0x8111
 	public static final int MP_PROTOCOL_VERSION = Version.MP_PROTOCOL_VERSION;
 }
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrowthRubyglass.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrowthRubyglass.java
index ea739bee2..06934a60f 100644
--- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrowthRubyglass.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicGrowthRubyglass.java
@@ -2,8 +2,13 @@ package net.minecraft.core.block;
 
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.material.Material;
+import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumDropCause;
+import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.item.tool.ItemToolPickaxe;
+import net.minecraft.core.item.tool.ItemToolShears;
+import net.minecraft.core.achievement.stat.StatList;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.LevelListener;
@@ -16,6 +21,8 @@ import org.jetbrains.annotations.Nullable;
 import org.joml.primitives.AABBd;
 import org.joml.primitives.AABBdc;
 
+import java.util.Random;
+
 public class BlockLogicGrowthRubyglass extends BlockLogic implements BlockLogic.MatcherDataEquivalency.Masked {
 
 	public static final int DIRECTION_MASK = 0b0000_0111;
@@ -25,6 +32,8 @@ public class BlockLogicGrowthRubyglass extends BlockLogic implements BlockLogic.
 	public static final int STATE_BOTTOM = 0b0000_1000;
 	public static final int STATE_TOP = 0b0001_0000;
 
+	public static final int GROWTH_CHANCE = 16;
+
 	public BlockLogicGrowthRubyglass(final @NotNull Block<?> block, final @NotNull Material material) {
 		super(block, material);
 	}
@@ -69,6 +78,26 @@ public class BlockLogicGrowthRubyglass extends BlockLogic implements BlockLogic.
 		}
 	}
 
+	@Override
+	public void updateTick(final @NotNull World world, final @NotNull TilePosc tilePos, final @NotNull Random rand, final boolean isRandomTick) {
+		if (world.isClientSide || !isRandomTick) return;
+		if (rand.nextInt(GROWTH_CHANCE) != 0) return;
+
+		int data = world.getBlockData(tilePos);
+		if ((data & SHAPE_MASK) != STATE_BUD) return;
+
+		Direction dir = Direction.fromId(data & DIRECTION_MASK);
+
+		TilePos anchorPos = tilePos.add(dir.opposite(), new TilePos());
+		if (world.getBlockType(anchorPos) != Blocks.RUBYGLASS_NODE) return;
+
+		TilePos growthPos = tilePos.add(dir, new TilePos());
+		if (world.getBlockType(growthPos) != Blocks.AIR) return;
+
+		world.setBlockTypeDataNotify(growthPos, this.block, STATE_TOP | dir.id);
+		world.setBlockDataNotify(tilePos, STATE_BOTTOM | dir.id);
+	}
+
 	@Override
 	public boolean canPlaceOnSide(final @NotNull World world, final @NotNull TilePosc tilePos, final @NotNull Side side) {
 		TilePos anchorPos = tilePos.add(side.direction().opposite(), new TilePos());
@@ -209,11 +238,26 @@ public class BlockLogicGrowthRubyglass extends BlockLogic implements BlockLogic.
         };
 	}
 
+	@Override
+	public void onHarvest(final @NotNull World world, final @NotNull Player player, final @NotNull TilePosc tilePos, final int data, final @Nullable TileEntity tileEntity) {
+		final @Nullable ItemStack heldStack = player.inventory.getCurrentItem();
+		final @Nullable Item heldItem = heldStack != null ? heldStack.getItem() : null;
+
+		if (heldItem instanceof ItemToolPickaxe || heldItem instanceof ItemToolShears || (heldItem != null && heldItem.isSilkTouch())) {
+			super.onHarvest(world, player, tilePos, data, tileEntity);
+			return;
+		}
+
+		player.addStat(this.block.getStat(StatList.STAT_MINED), 1);
+		this.dropWithCause(world, EnumDropCause.IMPROPER_TOOL, tilePos, data, tileEntity, player);
+	}
+
 	@Override
 	public ItemStack @Nullable [] getBreakResult(@NotNull World world, @NotNull EnumDropCause dropCause, int data, @Nullable TileEntity tileEntity) {
         if (dropCause == EnumDropCause.PICK_BLOCK) {
             return new ItemStack[]{this.block.getDefaultStack()};
-        } else if (dropCause == EnumDropCause.SILK_TOUCH) {
+        } else if (dropCause == EnumDropCause.SILK_TOUCH || dropCause == EnumDropCause.PROPER_TOOL
+            || dropCause == EnumDropCause.WORLD || dropCause == EnumDropCause.PISTON_CRUSH) {
             int shape = data & SHAPE_MASK;
 
             if (shape == STATE_BOTTOM) {
diff --git a/game/core/src/main/java/net/minecraft/core/block/Blocks.java b/game/core/src/main/java/net/minecraft/core/block/Blocks.java
index 2ec2342a0..228e9804a 100644
--- a/game/core/src/main/java/net/minecraft/core/block/Blocks.java
+++ b/game/core/src/main/java/net/minecraft/core/block/Blocks.java
@@ -1159,8 +1159,9 @@ public final class Blocks {
         .withSound(BlockSounds.STONE).withHardness(1.5F).withOverrideColor(MaterialColor.rubyglass)
         .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.CHAINLINK_FENCES_CONNECT, BlockTags.PREVENT_MOB_SPAWNS);
     public static final @NotNull Block<?> RUBYGLASS_GROWTH = register("rubyglass.growth", "minecraft:block/rubyglass_growth", 825, block -> new BlockLogicGrowthRubyglass(block, Materials.PLANT))
-        .withSound(BlockSounds.CRYSTAL).withOverrideColor(MaterialColor.rubyglass)
-        .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.SHEARS_DO_SILK_TOUCH);
+        .withSound(BlockSounds.CRYSTAL).withHardness(1F).withOverrideColor(MaterialColor.rubyglass)
+        .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.SHEARS_DO_SILK_TOUCH)
+        .setTicking(true);
     public static final @NotNull Block<?> RUBYGLASS_NODE = register("rubyglass.node", "minecraft:block/rubyglass_node", 826, (b) -> new BlockLogicNodeRubyglass(b))
         .withSound(BlockSounds.CRYSTAL).withHardness(3F)
         .withTags(BlockTags.MINEABLE_BY_PICKAXE)
@@ -1554,6 +1555,12 @@ public final class Blocks {
     public static final @NotNull Block<?> PRESSURE_PLATE_BRIMSTONE = register("pressureplate.brimstone", "minecraft:block/pressure_plate_brimstone", 1117, (b) -> new BlockLogicPressurePlate<>(b, Mob.class, Materials.STONE))
         .withSound(BlockSounds.STONE).withHardness(0.9F)
         .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
+    public static final @NotNull Block<?> PRESSURE_PLATE_MARBLE = register("pressureplate.marble", "minecraft:block/pressure_plate_marble", 1118, (b) -> new BlockLogicPressurePlate<>(b, Mob.class, Materials.MARBLE))
+        .withSound(BlockSounds.STONE).withHardness(0.5F)
+        .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
+    public static final @NotNull Block<?> PRESSURE_PLATE_SLATE = register("pressureplate.slate", "minecraft:block/pressure_plate_slate", 1119, (b) -> new BlockLogicPressurePlate<>(b, Mob.class, Materials.SLATE))
+        .withSound(BlockSounds.STONE).withHardness(0.5F)
+        .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
 
     public static final @NotNull Block<?> BUTTON_BASALT = register("button.basalt", "minecraft:block/button_basalt", 1120, BlockLogicButton::new)
         .withSound(BlockSounds.STONE).withHardness(0.5F)
@@ -1579,6 +1586,12 @@ public final class Blocks {
     public static final @NotNull Block<?> BUTTON_BRIMSTONE = register("button.brimstone", "minecraft:block/button_brimstone", 1127, BlockLogicButton::new)
         .withSound(BlockSounds.STONE).withHardness(0.9F)
         .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
+    public static final @NotNull Block<?> BUTTON_MARBLE = register("button.marble", "minecraft:block/button_marble", 1128, BlockLogicButton::new)
+        .withSound(BlockSounds.STONE).withHardness(0.5F)
+        .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
+    public static final @NotNull Block<?> BUTTON_SLATE = register("button.slate", "minecraft:block/button_slate", 1129, BlockLogicButton::new)
+        .withSound(BlockSounds.STONE).withHardness(0.5F)
+        .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.MINEABLE_BY_PICKAXE, BlockTags.PREVENT_MOB_SPAWNS);
 
     public static <T extends BlockLogic> Block<T> register(String key, String namespaceId, int id, BlockLogicSupplier<T> logicSupplier) {
         Block<T> container = new Block<>(id, key, namespaceId, logicSupplier);
diff --git a/game/core/src/main/java/net/minecraft/core/data/registry/Registries.java b/game/core/src/main/java/net/minecraft/core/data/registry/Registries.java
index 1a2e889c2..63d7186fb 100644
--- a/game/core/src/main/java/net/minecraft/core/data/registry/Registries.java
+++ b/game/core/src/main/java/net/minecraft/core/data/registry/Registries.java
@@ -82,6 +82,7 @@ public class Registries extends Registry<Registry<?>> {
 
         ITEM_GROUPS.register("minecraft:stones", stackListOf(Blocks.STONE, Blocks.BASALT, Blocks.LIMESTONE, Blocks.GRANITE, Blocks.PERMAFROST, Blocks.NETHERRACK, Blocks.GLOOMSTONE));
         ITEM_GROUPS.register("minecraft:cobblestones", stackListOf(Blocks.COBBLE_STONE, Blocks.COBBLE_BASALT, Blocks.COBBLE_LIMESTONE, Blocks.COBBLE_GRANITE, Blocks.COBBLE_PERMAFROST, Blocks.COBBLE_NETHERRACK, Blocks.COBBLE_GLOOMSTONE));
+        ITEM_GROUPS.register("minecraft:mossy_cobblestones", stackListOf(Blocks.COBBLE_STONE_MOSSY, Blocks.COBBLE_BASALT_MOSSY, Blocks.COBBLE_LIMESTONE_MOSSY, Blocks.COBBLE_GRANITE_MOSSY));
         ITEM_GROUPS.register("minecraft:grasses", stackListOf(Blocks.GRASS, Blocks.GRASS_RETRO));
         ITEM_GROUPS.register("minecraft:dirt", stackListOf(Blocks.DIRT, Blocks.DIRT_SCORCHED));
         ITEM_GROUPS.register("minecraft:trommel_dirt", stackListOf(Blocks.DIRT, Blocks.DIRT_SCORCHED, Blocks.GRASS, Blocks.GRASS_RETRO, Blocks.GRASS_SCORCHED, Blocks.PATH_DIRT, Blocks.FARMLAND_DIRT));
@@ -133,6 +134,8 @@ public class Registries extends Registry<Registry<?>> {
             buttonsList.add(Blocks.BUTTON_GLOOMSTONE.getDefaultStack());
             buttonsList.add(Blocks.BUTTON_SANDSTONE.getDefaultStack());
             buttonsList.add(Blocks.BUTTON_BRIMSTONE.getDefaultStack());
+            buttonsList.add(Blocks.BUTTON_MARBLE.getDefaultStack());
+            buttonsList.add(Blocks.BUTTON_SLATE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_STONE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_BASALT.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_LIMESTONE.getDefaultStack());
@@ -142,6 +145,8 @@ public class Registries extends Registry<Registry<?>> {
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_GLOOMSTONE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_SANDSTONE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_BRIMSTONE.getDefaultStack());
+            pressurePlatesList.add(Blocks.PRESSURE_PLATE_MARBLE.getDefaultStack());
+            pressurePlatesList.add(Blocks.PRESSURE_PLATE_SLATE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_COBBLE_STONE.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_COBBLE_BASALT.getDefaultStack());
             pressurePlatesList.add(Blocks.PRESSURE_PLATE_COBBLE_LIMESTONE.getDefaultStack());
diff --git a/game/core/src/main/java/net/minecraft/core/player/inventory/CreativeMenuContents.java b/game/core/src/main/java/net/minecraft/core/player/inventory/CreativeMenuContents.java
index ee8b0f514..88a17f3af 100644
--- a/game/core/src/main/java/net/minecraft/core/player/inventory/CreativeMenuContents.java
+++ b/game/core/src/main/java/net/minecraft/core/player/inventory/CreativeMenuContents.java
@@ -247,6 +247,9 @@ public final class CreativeMenuContents {
 		addBlock(list, Blocks.SLATE_POLISHED);
 		addBlock(list, Blocks.SLAB_SLATE_POLISHED);
 		list.add(new ItemStack(Items.STATUE_SLATE));
+
+		addBlock(list, Blocks.BUTTON_SLATE);
+		addBlock(list, Blocks.PRESSURE_PLATE_SLATE);
 		newPage(list);
 
 
@@ -397,6 +400,9 @@ public final class CreativeMenuContents {
 		list.add(new ItemStack(Items.STATUE_MARBLE));
 		list.add(new ItemStack(Items.STATUE_PIGMAN));
 
+		addBlock(list, Blocks.BUTTON_MARBLE);
+		addBlock(list, Blocks.PRESSURE_PLATE_MARBLE);
+
 
 		newPage(list);
 	}
diff --git a/game/core/src/main/resources/assets/minecraft/lang/en_US/tile.lang b/game/core/src/main/resources/assets/minecraft/lang/en_US/tile.lang
index 87c96be42..b0ad03edd 100644
--- a/game/core/src/main/resources/assets/minecraft/lang/en_US/tile.lang
+++ b/game/core/src/main/resources/assets/minecraft/lang/en_US/tile.lang
@@ -737,6 +737,10 @@ tile.button.sandstone.name=Sandstone Button
 tile.button.sandstone.desc=Emits a brief redstone signal when pressed.
 tile.button.brimstone.name=Brimstone Button
 tile.button.brimstone.desc=Emits a brief redstone signal when pressed.
+tile.button.marble.name=Marble Button
+tile.button.marble.desc=Emits a brief redstone signal when pressed.
+tile.button.slate.name=Slate Button
+tile.button.slate.desc=Emits a brief redstone signal when pressed.
 
 tile.button.planks.name=Wooden Button
 tile.button.planks.desc=Emits a brief redstone signal when pressed.
@@ -797,6 +801,10 @@ tile.pressureplate.sandstone.name=Sandstone Pressure Plate
 tile.pressureplate.sandstone.desc=Emits a redstone signal when living creatures step on it.
 tile.pressureplate.brimstone.name=Brimstone Pressure Plate
 tile.pressureplate.brimstone.desc=Emits a redstone signal when living creatures step on it.
+tile.pressureplate.marble.name=Marble Pressure Plate
+tile.pressureplate.marble.desc=Emits a redstone signal when living creatures step on it.
+tile.pressureplate.slate.name=Slate Pressure Plate
+tile.pressureplate.slate.desc=Emits a redstone signal when living creatures step on it.
 
 tile.pressureplate.planks.oak.name=Wooden Pressure Plate
 tile.pressureplate.planks.oak.desc=Emits a redstone signal when anything steps on it.
diff --git a/gradle.properties b/gradle.properties
index 7b5e78a90..1b34def90 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,6 +3,6 @@ org.gradle.daemon = true
 org.gradle.caching = true
 
 bta.group = net.minecraft
-bta.version = 8.0
+bta.version = 8.0.1
 bta.assetPackFormat = 4
 bta.buildChannel = BuildChannel.DEVELOPMENT
\ No newline at end of file
diff --git a/util/datagen/build.gradle.kts b/util/datagen/build.gradle.kts
index e416c8b22..573986482 100644
--- a/util/datagen/build.gradle.kts
+++ b/util/datagen/build.gradle.kts
@@ -32,6 +32,16 @@ val runDatagen by tasks.registering(JavaExec::class) {
     args = listOf("--output", recipesDir.toString())
 }
 
+val runTrommelReport by tasks.registering(JavaExec::class) {
+    group = "bta.generator"
+    description = "Sieves stacks of input through every trommel recipe and prints their loot distribution"
+
+    outputs.upToDateWhen { false }
+
+    mainClass.set("net.minecraft.datagen.TrommelYieldReport")
+    classpath = sourceSets["main"].runtimeClasspath
+}
+
 tasks.named("jar", Jar::class) {
     duplicatesStrategy = DuplicatesStrategy.INCLUDE;
     from(sourceSets["generated"].resources)
diff --git a/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
index 81de6c796..45b93b3d5 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
@@ -31,7 +31,7 @@ public class TrommelGenerator {
         RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.MUD)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.BONE)), 4)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.STRING), 1, 3), 2)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.STRING), 1, 3), 5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.SLIMEBALL), 1, 4), 0.5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLOTH), 1, 2), 0.5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CHAINLINK), 1), 0.25)
@@ -46,17 +46,18 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 4), 15)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_IRON), 1, 2), 5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DYE,1, DyeColor.BLUE.itemMeta), 2, 6), 5)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DUST_REDSTONE), 2, 4), 4)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1), 0.5)
             .create("gravel");
 
         RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.DIRT_SCORCHED_RICH)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1, 2), 10)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_IRON), 1, 2), 15)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1, 4), 25)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.OLIVINE), 1, 4), 25)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DYE,1, DyeColor.BLUE.itemMeta), 2, 4), 20)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 4, 8), 10)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1, 2), 17)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_IRON), 1, 2), 17)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1, 4), 24)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.OLIVINE), 1, 4), 24)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DYE,1, DyeColor.BLUE.itemMeta), 1, 4), 17)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 4, 8), 8)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 5), 5)
             .create("rich_dirt");
 
@@ -66,6 +67,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 2, 5), 20)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 3), 15)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.BONE), 1, 2), 10)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DUST_REDSTONE), 2, 4), 4)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.FLINT), 1, 2), 5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.OLIVINE), 1), 5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 0.5)
@@ -78,7 +80,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 2)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_IRON), 1), 1)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DUST_GLOWSTONE), 1, 6), 5)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.NETHERCOAL), 1), 2)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.NETHERCOAL), 1), 3)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 2), 15)
             .create("soulsand");
 
@@ -90,8 +92,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.DUST_GLOWSTONE), 1, 2), 10)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.FLINT), 1, 2), 5)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.SULFUR), 1, 2), 10)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.NETHERCOAL), 1), 5)
-            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 0.5)
+            .addEntry(new WeightedRandomLootObject(new ItemStack(Items.RUBYGLASS), 1), 2.5)
             .create("brimsand");
 
         RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
diff --git a/util/datagen/src/main/java/net/minecraft/datagen/TrommelYieldReport.java b/util/datagen/src/main/java/net/minecraft/datagen/TrommelYieldReport.java
new file mode 100644
index 000000000..610d91241
--- /dev/null
+++ b/util/datagen/src/main/java/net/minecraft/datagen/TrommelYieldReport.java
@@ -0,0 +1,213 @@
+package net.minecraft.datagen;
+
+import net.minecraft.core.WeightedRandomBag;
+import net.minecraft.core.WeightedRandomLootObject;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.data.registry.recipe.RecipeGroup;
+import net.minecraft.core.data.registry.recipe.RecipeSymbol;
+import net.minecraft.core.data.registry.recipe.entry.RecipeEntryTrommel;
+import net.minecraft.core.item.Item;
+import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.item.Items;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Sieves a number of stacks of input through every trommel recipe declared by {@link TrommelGenerator}
+ * and prints the resulting loot distribution.
+ */
+public class TrommelYieldReport {
+    private static final int STACK_SIZE = 64;
+    private static final int STACKS_SIEVED = 27;
+
+    private final int stacksSieved;
+    private final int passes;
+    private final long seed;
+
+    public TrommelYieldReport(int stacksSieved, long seed) {
+        this.stacksSieved = stacksSieved;
+        this.passes = stacksSieved * STACK_SIZE;
+        this.seed = seed;
+    }
+
+    public static void main(String @NotNull [] args) {
+        int stacksSieved = STACKS_SIEVED;
+        long seed = new Random().nextLong();
+
+        int pointer = 0;
+        while (pointer < args.length) {
+            switch (args[pointer]) {
+                case "--stacks": {
+                    stacksSieved = Integer.parseInt(args[pointer + 1]);
+                    pointer++;
+                    pointer++;
+                    break;
+                }
+                case "--seed": {
+                    seed = Long.parseLong(args[pointer + 1]);
+                    pointer++;
+                    pointer++;
+                    break;
+                }
+                default:
+                    pointer++;
+            }
+        }
+
+        Blocks.init();
+        Items.init();
+        new Registries();
+
+        TrommelGenerator.generate();
+
+        new TrommelYieldReport(stacksSieved, seed).run();
+    }
+
+    public void run() {
+        RecipeGroup<RecipeEntryTrommel> trommelRecipes = Registries.RECIPES.TROMMEL;
+        check(!trommelRecipes.getAllRecipes().isEmpty(), "No trommel recipes were generated!");
+
+        System.out.printf("Sieving %s stacks through every trommel recipe with seed %s%n", this.stacksSieved, this.seed);
+
+        Random random = new Random(this.seed);
+
+        for (RecipeEntryTrommel recipe : trommelRecipes) {
+            sieve(trommelRecipes.getKey(recipe), recipe, random);
+        }
+    }
+
+    private void sieve(String recipeId, RecipeEntryTrommel recipe, Random random) {
+        WeightedRandomBag<WeightedRandomLootObject> bag = recipe.getOutput();
+
+        List<Result> results = new ArrayList<>();
+        double totalWeight = 0;
+
+        for (WeightedRandomBag<WeightedRandomLootObject>.Entry entry : bag.getEntriesWithWeights()) {
+
+            results.add(new Result(entry.getObject(), entry.getWeight()));
+            totalWeight += entry.getWeight();
+
+        }
+
+        check(!results.isEmpty(), "Trommel recipe '" + recipeId + "' has no entries!");
+
+        for (int pass = 0; pass < this.passes; pass++) {
+
+            WeightedRandomLootObject loot = bag.getRandom(random);
+            check(loot != null, "Trommel recipe '" + recipeId + "' rolled no loot object!");
+
+            ItemStack stack = loot.getItemStack(random);
+            check(stack != null, "Trommel recipe '" + recipeId + "' rolled a null stack!");
+
+            Result result = find(results, stack);
+            check(result != null, "Trommel recipe '" + recipeId + "' rolled undeclared output " + describe(stack) + "!");
+
+            result.record(recipeId, stack);
+        }
+
+        print(recipeId, recipe, results, totalWeight);
+    }
+
+    private Result find(List<Result> results, ItemStack stack) {
+        for (Result result : results) {
+            if (result.matches(stack)) return result;
+        }
+
+        return null;
+    }
+
+    private void print(String recipeId, RecipeEntryTrommel recipe, List<Result> results, double totalWeight) {
+        System.out.println();
+
+        System.out.printf("=== trommel/%s - input %s - %s items sieved (%s stacks) ===%n",
+            recipeId, describe(recipe.getInput()), this.passes, this.stacksSieved);
+
+        int totalRolls = 0;
+        int totalItems = 0;
+
+        for (Result result : results) {
+            printRow(result.name(),
+                String.format("weight %6.2f (%6.2f%%)", result.weight, (result.weight / totalWeight) * 100),
+                result.rolls,
+                result.items);
+            totalRolls += result.rolls;
+            totalItems += result.items;
+        }
+
+        printRow("TOTAL", "", totalRolls, totalItems);
+
+        check(totalRolls == this.passes, "Trommel recipe '" + recipeId + "' did not sieve every input item!");
+    }
+
+    private void printRow(String name, String weight, int rolls, int items) {
+        System.out.printf("\t%-30s %-22s rolled %4sx (%6.2f%%) - %5s items (%5.2f stacks)%n",
+            name, weight, rolls, (rolls / (float) this.passes) * 100, items, items / (float) STACK_SIZE);
+    }
+
+    private static void check(boolean condition, String message) {
+        if (!condition) throw new IllegalStateException(message);
+    }
+
+    private static String describe(RecipeSymbol input) {
+        if (input.getStack() != null) return describe(input.getStack());
+        return input.getItemGroup();
+    }
+
+    private static String describe(ItemStack stack) {
+        Item item = stack.getItem();
+        String name = item.namespaceID.toString();
+        return stack.getMetadata() != 0 ? name + "@" + stack.getMetadata() : name;
+    }
+
+    private static class Result {
+
+        private final WeightedRandomLootObject loot;
+        private final double weight;
+        private int rolls;
+        private int items;
+
+        public Result(WeightedRandomLootObject loot, double weight) {
+            this.loot = loot;
+            this.weight = weight;
+        }
+
+        public boolean matches(ItemStack stack) {
+
+            ItemStack declared = this.loot.getDefinedItemStack();
+
+            if (declared == null || declared.itemID != stack.itemID) return false;
+
+            if (this.loot.isRandomMeta()) {
+                return stack.getMetadata() >= this.loot.getMinMeta() && stack.getMetadata() <= this.loot.getMaxMeta();
+            }
+
+            return declared.getMetadata() == stack.getMetadata();
+        }
+
+        public void record(String recipeId, ItemStack stack) {
+
+            if (this.loot.isRandomYield()) {
+                check(stack.stackSize >= this.loot.getMinYield() && stack.stackSize <= this.loot.getMaxYield(),
+                    "Trommel recipe '" + recipeId + "' rolled " + stack.stackSize + " " + name() + ", outside of its declared yield of "
+                        + this.loot.getMinYield() + "-" + this.loot.getMaxYield() + "!");
+            }
+
+            else {
+                check(stack.stackSize == this.loot.getFixedYield(),
+                    "Trommel recipe '" + recipeId + "' rolled the wrong amount of " + name() + "!");
+            }
+
+            this.rolls++;
+            this.items += stack.stackSize;
+        }
+
+        public String name() {
+            ItemStack declared = this.loot.getDefinedItemStack();
+            return declared == null ? "NULL" : describe(declared);
+        }
+    }
+}
diff --git a/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
index 828a9b86e..f46c93caa 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
@@ -98,7 +98,6 @@ class WorkbenchGenerator {
             .addInput(Items.PAPER)
             .addInput(Items.PAPER)
             .addInput(Items.PAPER)
-            .addInput(Items.LEATHER)
             .create("book", Items.BOOK.getDefaultStack());
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
@@ -304,7 +303,7 @@ class WorkbenchGenerator {
                     "#X",
                     "X#")
                 .addInput('#', Items.AMMO_PEBBLE)
-                .addInput('X', Blocks.OBSIDIAN)
+                .addInput('X', Blocks.SOULSAND)
                 .create("pebbles_to_gloomstone", new ItemStack(Blocks.COBBLE_GLOOMSTONE, 2));
         });
 
@@ -316,13 +315,48 @@ class WorkbenchGenerator {
             .addInput('X', Blocks.ICE)
             .create("perma_ice", new ItemStack(Blocks.PERMAICE, 2));
 
-        RecipeBuilder.Shaped(CORE_NAMESPACE)
-            .setShape(
-                "#X",
-                "X#")
-            .addInput('#', Items.AMMO_PEBBLE)
-            .addInput('X', Items.FLINT)
-            .create("gravel_from_flint_and_pebbles", Blocks.GRAVEL.getDefaultStack());
+        RecipeBuilder.consolidationGroup("aggregates", () -> {
+            RecipeBuilder.Shaped(CORE_NAMESPACE)
+                .setShape(
+                    "#X",
+                    "X#")
+                .addInput('#', Items.AMMO_PEBBLE)
+                .addInput('X', Items.FLINT)
+                .create("gravel_from_flint_and_pebbles", Blocks.GRAVEL.getDefaultStack());
+
+            RecipeBuilder.Shaped(CORE_NAMESPACE)
+                .setShape(
+                    "#X",
+                    "X#")
+                .addInput('#', Items.QUARTZ)
+                .addInput('X', Items.FLINT)
+                .create("sand_from_flint_and_quartz", Blocks.SAND.getDefaultStack());
+
+            RecipeBuilder.Shaped(CORE_NAMESPACE)
+                .setShape(
+                    "#X",
+                    "X#")
+                .addInput('#', Blocks.COBBLE_NETHERRACK)
+                .addInput('X', Items.FLINT)
+                .create("soulsand_from_flint_and_cobble_netherrack", Blocks.SOULSAND.getDefaultStack());
+
+            RecipeBuilder.Shaped(CORE_NAMESPACE)
+                .setShape(
+                    "#X",
+                    "X#")
+                .addInput('#', Items.COAL, 0)
+                .addInput('X', Items.FLINT)
+                .create("brimsand_from_flint_and_coal", Blocks.BRIMSAND.getDefaultStack());
+
+            RecipeBuilder.Shaped(CORE_NAMESPACE)
+                .setShape(
+                    "#X",
+                    "X#")
+                .addInput('#', Items.COAL, 1)
+                .addInput('X', Items.FLINT)
+                .create("brimsand_from_flint_and_charcoal", Blocks.BRIMSAND.getDefaultStack());
+        });
+
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
             .setShape(
@@ -1329,6 +1363,8 @@ class WorkbenchGenerator {
         plate.addInput('#', Blocks.GLOOMSTONE).create("gloomstone_pressure_plate", Blocks.PRESSURE_PLATE_GLOOMSTONE.getDefaultStack());
         plate.addInput('#', Blocks.SANDSTONE).create("sandstone_pressure_plate", Blocks.PRESSURE_PLATE_SANDSTONE.getDefaultStack());
         plate.addInput('#', Blocks.BRIMSTONE).create("brimstone_pressure_plate", Blocks.PRESSURE_PLATE_BRIMSTONE.getDefaultStack());
+        plate.addInput('#', Blocks.MARBLE).create("marble_pressure_plate", Blocks.PRESSURE_PLATE_MARBLE.getDefaultStack());
+        plate.addInput('#', Blocks.SLATE).create("slate_pressure_plate", Blocks.PRESSURE_PLATE_SLATE.getDefaultStack());
 
         plate.addInput('#', Blocks.COBBLE_STONE).create("cobble_stone_pressure_plate", Blocks.PRESSURE_PLATE_COBBLE_STONE.getDefaultStack());
         plate.addInput('#', Blocks.COBBLE_BASALT).create("cobble_basalt_pressure_plate", Blocks.PRESSURE_PLATE_COBBLE_BASALT.getDefaultStack());
@@ -1374,12 +1410,9 @@ class WorkbenchGenerator {
             .addInput('R', Items.DUST_REDSTONE)
             .create("steel_piston", Blocks.PISTON_BASE_STEEL.getDefaultStack());
 
-        RecipeBuilder.Shaped(CORE_NAMESPACE)
-            .setShape(
-                "S",
-                "P")
-            .addInput('S', Items.SLIMEBALL)
-            .addInput('P', Blocks.PISTON_BASE)
+        RecipeBuilder.Shapeless(CORE_NAMESPACE)
+            .addInput(Items.SLIMEBALL)
+            .addInput(Blocks.PISTON_BASE)
             .create("sticky_piston", Blocks.PISTON_BASE_STICKY.getDefaultStack());
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
@@ -1401,6 +1434,8 @@ class WorkbenchGenerator {
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.GLOOMSTONE).create("gloomstone_button", new ItemStack(Blocks.BUTTON_GLOOMSTONE, buttonYield));
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.SANDSTONE).create("sandstone_button", new ItemStack(Blocks.BUTTON_SANDSTONE, buttonYield));
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.BRIMSTONE).create("brimstone_button", new ItemStack(Blocks.BUTTON_BRIMSTONE, buttonYield));
+        RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.MARBLE).create("marble_button", new ItemStack(Blocks.BUTTON_MARBLE, buttonYield));
+        RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.SLATE).create("slate_button", new ItemStack(Blocks.BUTTON_SLATE, buttonYield));
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.PLANKS_OAK).create("wooden_button", new ItemStack(Blocks.BUTTON_PLANKS_OAK, buttonYield));
         for (DyeColor color : DyeColor.values()) {
             RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.PLANKS_OAK_PAINTED, color.blockMeta).create(color.colorID + "_wooden_button", new ItemStack(Blocks.BUTTON_PLANKS_PAINTED, buttonYield, color.blockMeta << 4));
@@ -1515,7 +1550,7 @@ class WorkbenchGenerator {
                         "###",
                         "CQB",
                         "###")
-                .addInput('#', Blocks.COBBLE_STONE_MOSSY)
+                .addInput('#', "minecraft:mossy_cobblestones")
                 .addInput('C', Blocks.CONDUIT)
                 .addInput('Q', Items.QUARTZ)
                 .addInput('B', Items.BONE)
