diff --git a/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
index 180426e20..c1de94d76 100644
--- a/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
@@ -420,6 +420,8 @@ public class ItemModelDispatcher extends Dispatcher<Item, ItemModel> {
         addDispatch(new ItemModelStandard(Items.FOOD_VENISON_RAW, "minecraft"));
         addDispatch(new ItemModelStandard(Items.FOOD_VENISON_COOKED, "minecraft"));
 
+        addDispatch(new ItemModelStandard(Items.DOUGH, "minecraft"));
+
         for (int i = 0; i < Blocks.blocksList.length; i++) {
             if (Blocks.blocksList[i] == null) continue;
             Item item = Blocks.blocksList[i].asItem();
diff --git a/game/client/src/main/resources/assets/minecraft/textures/item/dough.png b/game/client/src/main/resources/assets/minecraft/textures/item/dough.png
new file mode 100644
index 000000000..6e9358c0a
Binary files /dev/null and b/game/client/src/main/resources/assets/minecraft/textures/item/dough.png differ
diff --git a/game/core/src/main/java/net/minecraft/core/item/Items.java b/game/core/src/main/java/net/minecraft/core/item/Items.java
index 51302a04e..2d7b24ffe 100644
--- a/game/core/src/main/java/net/minecraft/core/item/Items.java
+++ b/game/core/src/main/java/net/minecraft/core/item/Items.java
@@ -203,6 +203,7 @@ public final class Items {
     public static Item STATUE_MARBLE;
     public static Item STATUE_PIGMAN;
     public static Item SIGN_PAINTED;
+    public static Item DOUGH;
 
     private static boolean hasInit = false;
     public static void init(){
@@ -426,5 +427,6 @@ public final class Items {
         SIGN_PAINTED = (new ItemSignPainted("sign.painted", "minecraft:item/sign_painted", 16549));
         FOOD_VENISON_RAW = (new ItemFood("food.venison.raw", "minecraft:item/food_venison_raw", 16550, 3, 16, true, 4));
         FOOD_VENISON_COOKED = (new ItemFood("food.venison.cooked", "minecraft:item/food_venison_cooked", 16551, 12, 8, true, 4));
+        DOUGH = (new Item("dough", "minecraft:item/dough", 16552));
     }
 }
diff --git a/game/core/src/main/resources/lang/en_US/item.lang b/game/core/src/main/resources/lang/en_US/item.lang
index 4ddd2d9bf..42ce591a0 100644
--- a/game/core/src/main/resources/lang/en_US/item.lang
+++ b/game/core/src/main/resources/lang/en_US/item.lang
@@ -485,3 +485,6 @@ item.statue.marble.name=Marble Statue
 item.statue.marble.desc=A decorative marble statue for you to hang your armor.
 item.statue.pigman.name=Pigman Statue
 item.statue.pigman.desc=An ancient marble statue found in a long-forgotten place.
+
+item.dough.name=Dough
+item.dough.desc=Uncooked dough. Can be baked into bread.
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 1f471c10a..fda6420f2 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
@@ -27,6 +27,8 @@ public class SmeltingGenerator {
         sharedRecipe("raw_iron_to_iron_ingot", Items.ORE_RAW_IRON.getDefaultStack(), Items.INGOT_IRON.getDefaultStack());
         sharedRecipe("raw_gold_to_gold_ingot", Items.ORE_RAW_GOLD.getDefaultStack(), Items.INGOT_GOLD.getDefaultStack());
 
+        sharedRecipe("dough_to_bread", Items.DOUGH.getDefaultStack(), Items.FOOD_BREAD.getDefaultStack());
+
         furnaceRecipe("fish_raw_to_fish_cooked", Items.FOOD_FISH_RAW.getDefaultStack(), Items.FOOD_FISH_COOKED.getDefaultStack());
         furnaceRecipe("porkchop_raw_to_porkchop_cooked", Items.FOOD_PORKCHOP_RAW.getDefaultStack(), Items.FOOD_PORKCHOP_COOKED.getDefaultStack());
         furnaceRecipe("venison_raw_to_venison_cooked", Items.FOOD_VENISON_RAW.getDefaultStack(), Items.FOOD_VENISON_COOKED.getDefaultStack());
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 d9c3fbbea..d6238118b 100644
--- a/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
@@ -1037,12 +1037,12 @@ class WorkbenchGenerator {
         RecipeBuilder.Shaped(CORE_NAMESPACE)
             .setShape("XXX")
             .addInput('X', Items.WHEAT)
-            .create("bread", Items.FOOD_BREAD.getDefaultStack());
+            .create("dough", Items.DOUGH.getDefaultStack());
 
-        RecipeBuilder.Shaped(CORE_NAMESPACE)
-            .setShape("X#X")
-            .addInput('X', Items.WHEAT)
-            .addInput('#', new ItemStack(Items.DYE, 1, DyeColor.BROWN.itemMeta))
+        RecipeBuilder.Shapeless(CORE_NAMESPACE)
+            .addInput(Items.DOUGH)
+            .addInput(Items.DUST_SUGAR)
+            .addInput(new ItemStack(Items.DYE, 1, DyeColor.BROWN.itemMeta))
             .create("cookie", new ItemStack(Items.FOOD_COOKIE, 16));
 
         RecipeBuilderShaped cake = RecipeBuilder.Shaped(CORE_NAMESPACE)
@@ -1055,13 +1055,13 @@ class WorkbenchGenerator {
         cake.addInput('A', Items.BUCKET_MILK)
             .addInput('B', Items.DUST_SUGAR)
             .addInput('E', Items.EGG_CHICKEN)
-            .addInput('C', Items.WHEAT)
+            .addInput('C', Items.DOUGH)
             .create("cake", Items.FOOD_CAKE.getDefaultStack());
 
         cake.addInput('A', Items.BUCKET_MILK)
             .addInput('B', Items.DUST_SUGAR)
             .addInput('E', Blocks.PUMPKIN)
-            .addInput('C', Items.WHEAT)
+            .addInput('C', Items.DOUGH)
             .create("pumpkin_pie", Items.FOOD_PUMPKIN_PIE.getDefaultStack());
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
