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 9b15b77c5..c4ca43fcd 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
@@ -251,6 +251,7 @@ public final class BlockModelDispatcher
         addDispatch(new BlockModelGenericAxis<>(Blocks.LOG_OAK_MOSSY, loadDataModel("minecraft:block/log/oak_mossy")));
         addDispatch(new BlockModelGenericAxis<>(Blocks.LOG_THORN, loadDataModel("minecraft:block/log/thorn")));
         addDispatch(new BlockModelGenericAxis<>(Blocks.LOG_PALM, loadDataModel("minecraft:block/log/palm")));
+        addDispatch(new BlockModelGenericAxis<>(Blocks.LOG_PETRIFIED, loadDataModel("minecraft:block/log/petrified")));
 
         addDispatch(new BlockModelGenericLeaves<>(Blocks.LEAVES_OAK, "minecraft:block/leaves/oak"));
         addDispatch(new BlockModelGenericLeaves<>(Blocks.LEAVES_OAK_RETRO, "minecraft:block/leaves/oak_retro"));
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/log/petrified.json b/game/client/src/main/resources/assets/minecraft/models/block/log/petrified.json
new file mode 100644
index 000000000..5d543cf3e
--- /dev/null
+++ b/game/client/src/main/resources/assets/minecraft/models/block/log/petrified.json
@@ -0,0 +1,7 @@
+{
+	"parent": "minecraft:block/cube_column",
+	"textures": {
+		"end": "minecraft:block/log/petrified_top",
+		"side": "minecraft:block/log/petrified_side"
+	}
+}
\ No newline at end of file
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_side.png
new file mode 100644
index 000000000..bbe705fc6
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_side.png differ
diff --git a/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_top.png
new file mode 100644
index 000000000..5340a5731
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/block/log/petrified_top.png differ
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 17940f66e..8f1aca48e 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
@@ -459,6 +459,9 @@ public final class Blocks {
     public static final @NotNull Block<?> LOG_PALM = register("log.palm", "minecraft:block/log_palm", 287, BlockLogicLog::new)
         .withSound(BlockSounds.WOOD).withHardness(2.0F).withDisabledNeighborNotifyOnMetadataChange()
         .withTags(BlockTags.FENCES_CONNECT, BlockTags.MINEABLE_BY_AXE);
+    public static final @NotNull Block<?> LOG_PETRIFIED = register("log.petrified", "minecraft:block/log_petrified", 288, b -> new BlockLogicAxisAligned(b, Materials.STONE))
+            .withSound(BlockSounds.STONE).withHardness(8.0F).withDisabledNeighborNotifyOnMetadataChange()
+            .withTags(BlockTags.FENCES_CONNECT, BlockTags.CHAINLINK_FENCES_CONNECT, BlockTags.MINEABLE_BY_PICKAXE);
 
     public static final @NotNull Block<?> LEAVES_OAK = register("leaves.oak", "minecraft:block/leaves_oak", 290, BlockLogicLeavesOak::new)
         .withSound(BlockSounds.GRASS).withHardness(0.2F).withLightBlock(1).withDisabledNeighborNotifyOnMetadataChange()
diff --git a/game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java b/game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java
index 7bcd0ea07..2a8d1432f 100644
--- a/game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java
+++ b/game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java
@@ -35,6 +35,7 @@ import java.util.List;
 public abstract class BlockTags
 {
     private static final Logger LOGGER = LogUtils.getLogger();
+
     /**
      * block can be mined by {@link ItemToolPickaxe ItemToolPickaxe}.
      */
diff --git a/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
index a280356e6..6965a15c4 100644
--- a/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
@@ -16,6 +16,7 @@ public class ItemToolPickaxe extends ItemTool {
 	
 	static {
 		miningLevels.put(Blocks.OBSIDIAN, 3);
+		miningLevels.put(Blocks.LOG_PETRIFIED, 3);
 		
 		miningLevels.put(Blocks.BLOCK_DIAMOND, 2);
 		miningLevels.put(Blocks.ORE_DIAMOND_STONE, 2);
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
index 6fec006f3..2d09346c8 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
@@ -199,7 +199,7 @@ public class ChunkDecoratorNether
         this.register("minecraft:decoration/nether/default/boneshale_tree",
                 new ChunkDecorationBuilder(((world, random, tilePos) -> {
                     //todo refactor how spooner trees are instantiated
-                    WorldFeature wf = new WorldFeatureBoneshaleTree(0, Blocks.BONESHALE.id());
+                    WorldFeature wf = new WorldFeatureBoneshaleTree(0, Blocks.LOG_PETRIFIED.id());
                     wf.init(1.0D, 1.0D, 1.0D);
                     return wf.place(world, random, tilePos);
                 }))
diff --git a/game/core/src/main/resources/lang/en_US/tile.lang b/game/core/src/main/resources/lang/en_US/tile.lang
index 99b9945ec..7afe2806f 100644
--- a/game/core/src/main/resources/lang/en_US/tile.lang
+++ b/game/core/src/main/resources/lang/en_US/tile.lang
@@ -496,6 +496,8 @@ tile.log.thorn.name=Thorn Log
 tile.log.thorn.desc=A log from a thorn tree.
 tile.log.palm.name=Palm Log
 tile.log.palm.desc=A log from a palm tree.
+tile.log.petrified.name=Petrified Pillar
+tile.log.petrified.desc=A pillar of carbon, encased in hardened ash.
 
 tile.leaves.oak.name=Oak Leaves
 tile.leaves.oak.desc=Leaves from an oak tree.
diff --git a/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
index 22cb2c065..659bd230e 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
@@ -1,5 +1,7 @@
 package net.minecraft.datagen;
 
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.data.registry.recipe.RecipeSymbol;
 import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.ItemStack;
@@ -47,6 +49,8 @@ public class SmeltingGenerator {
         blastRecipe("iron_ingot_and_coal_to_crude_steel", Items.INGOT_IRON.getDefaultStack(), Items.COAL.getDefaultStack(), Items.INGOT_STEEL_CRUDE.getDefaultStack());
         blastRecipe("iron_ingot_and_charcoal_to_crude_steel", Items.INGOT_IRON.getDefaultStack(), new ItemStack(Items.COAL, 1, 1), Items.INGOT_STEEL_CRUDE.getDefaultStack());
         blastRecipe("cobble_netherrack_to_magma", Blocks.COBBLE_NETHERRACK.getDefaultStack(), Blocks.MAGMA.getDefaultStack());
+        blastRecipe("logs_to_petrified_pillar", "minecraft:logs", Blocks.BLOCK_ASH.getDefaultStack(), Blocks.LOG_PETRIFIED.getDefaultStack());
+
     }
 
     private static void furnaceRecipe(String id, ItemStack input, ItemStack output) {
@@ -69,8 +73,8 @@ public class SmeltingGenerator {
         RecipeBuilder.BlastFurnace(RecipesGenerator.CORE_NAMESPACE).setInput(inputA, inputB).create(id, output);
     }
 
-    private static void blastRecipe(String id, String inputGroupA, String inputGroupB, ItemStack output) {
-        RecipeBuilder.BlastFurnace(RecipesGenerator.CORE_NAMESPACE).setInput(inputGroupA, inputGroupB).create(id, output);
+    private static void blastRecipe(String id, String inputGroup, ItemStack inputStack, ItemStack output) {
+        RecipeBuilder.BlastFurnace(RecipesGenerator.CORE_NAMESPACE).setInput(new RecipeSymbol(inputGroup), new RecipeSymbol(inputStack)).create(id, output);
     }
 
     private static void sharedRecipe(String id, ItemStack input, ItemStack output) {
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 85daba5cd..dc58f9edd 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
@@ -960,6 +960,7 @@ class WorkbenchGenerator {
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.LOG_PALM).create(String.format(format, "palm", "yellow"), new ItemStack(Blocks.PLANKS_OAK_PAINTED, stackSize, DyeColor.YELLOW.blockMeta));
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.LOG_THORN).create(String.format(format, "thorn", "red"), new ItemStack(Blocks.PLANKS_OAK_PAINTED, stackSize, DyeColor.RED.blockMeta));
         RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.LOG_PINE).create(String.format(format, "pine", "brown"), new ItemStack(Blocks.PLANKS_OAK_PAINTED, stackSize, DyeColor.BROWN.blockMeta));
+        RecipeBuilder.Shapeless(CORE_NAMESPACE).addInput(Blocks.LOG_PETRIFIED).create(String.format(format, "petrified", "gray"), new ItemStack(Blocks.PLANKS_OAK_PAINTED, 2, DyeColor.SILVER.blockMeta));
     }
 
     private static void generatePolishedStones() {
