Minecraft But you can upgrade structures Mod download

Data packs can be used to add or modify functions, loot tables, world structures, advancements, recipes, tags, dimensions, predicates and world generation.

What not to do[]

There are some things that you should not do while creating a data pack. Here is a list of "don'ts":

  • Release Minecraft versions or modifications that allow players to play without having bought Minecraft from Mojang.
  • Release the decompiled source code of Minecraft in any way.

Creating a data pack[]

To create a data pack, start off by navigating to the datapacks folder inside the world folder.

To find the world folder, locate the saves folder inside your game directory, which is .minecraft by default.

  • In singleplayer, you can select your world, click on "Edit", then "Open world folder".
  • On a server, you can navigate to its root directory (where server.properties is located), then enter the
    {
      "type": "minecraft:entity",
      "pools": [
        {
          "rolls": 1,
          "entries": [
            {
              "type": "minecraft:item",
              "functions": [
                {
                  "function": "minecraft:set_count",
                  "count": {
                    "min": 0,
                    "max": 2,
                    "type": "minecraft:uniform"
                  }
                },
                {
                  "function": "minecraft:looting_enchant",
                  "count": {
                    "min": 0,
                    "max": 1
                  }
                }
              ],
              "name": "minecraft:leather"
            }
          ]
        },
        {
          "rolls": 1,
          "entries": [
            {
              "type": "minecraft:item",
              "functions": [
                {
                  "function": "minecraft:set_count",
                  "count": {
                    "min": 1,
                    "max": 3,
                    "type": "minecraft:uniform"
                  }
                },
                {
                  "function": "minecraft:furnace_smelt",
                  "conditions": [
                    {
                      "condition": "minecraft:entity_properties",
                      "predicate": {
                        "flags": {
                          "is_on_fire": true
                        }
                      },
                      "entity": "this"
                    }
                  ]
                },
                {
                  "function": "minecraft:looting_enchant",
                  "count": {
                    "min": 0,
                    "max": 1
                  }
                }
              ],
              "name": "minecraft:beef"
            }
          ]
        }
      ]
    }
    
    0 directory.

Once you are in the datapacks folder, create a folder with a name of your choice. It will be your data pack's name. Enter the data pack folder.

The first thing to do after you are in the folder is to create a

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 file. This lets Minecraft identify your data pack.

Creating an MCMETA file[]

See also: Data_pack § pack.mcmeta

To create an MCMETA file, right click within your data pack folder and create a new text document. Name this file "pack.mcmeta".

Note

Make sure the file extension is

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
3 and not
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
4 when you rename it! In other words, remove your old file extension. You may be warned that changing a file name extension could make the file unusable. However, this actually indicates that you have renamed the
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 file correctly.

If you are using Microsoft Windows and can't see file extensions, for Windows 10, you can turn them on by going to the View menu of the file explorer and checking the check box for file name extensions. For Windows beneath Windows 10, you can uncheck "hide extensions" in folder settings.

Minecraft But you can upgrade structures Mod download

Text editor[]

Any text editor should work. It is recommended that the chosen text editor supports JSON, which is the format used by files of

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
6 extension and most other files in a data pack. Note that most text editors do not recognize
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
6 extension as JSON. Thus, you need to configure the editors manually.

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 content
[]

Open

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 in your text editor and paste or type the following:

{
  "pack": {
    "pack_format": 10,
    "description": "Tutorial Data Pack"
  }
}

Note

This file is written in JSON! This tutorial does not go into specifics about the format now, but be aware about how things are laid out. Be very careful not to forget quotation marks, colons, and curly or square brackets. Make sure to not write trailing commas. Missing one of these can lead to your data pack not working correctly! To check your files you can use a JSON validator, such as the one found on JSONLint.

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "123",
    "231",
    "312"
  ],
  "key": {
    "1": {
      "item": "Resource location of the item"
    },
    "2": {
      "item": "Resource location of the item"
    },
    "3": {
      "item": "Resource location of the item"
    }
  },
  "result": {
    "item": "Resource location of the item",
    "count": Number of items produced
  }
}
0
[]

The value of

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "123",
    "231",
    "312"
  ],
  "key": {
    "1": {
      "item": "Resource location of the item"
    },
    "2": {
      "item": "Resource location of the item"
    },
    "3": {
      "item": "Resource location of the item"
    }
  },
  "result": {
    "item": "Resource location of the item",
    "count": Number of items produced
  }
}
0 tells Minecraft what release the data pack is designed for, and is different for certain versions. The following list shows what versions each value is associated with:

  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    2 for versions 1.13 – 1.14.4
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    3 for versions 1.15 – 1.16.1
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    4 for versions 1.16.2 – 1.16.5
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    5 for versions 1.17 - 1.17.1
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    6 for versions 1.18 - 1.18.1
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    7 for versions 1.18.2
  • {
      "type": "minecraft:crafting_shaped",
      "pattern": [
        "123",
        "231",
        "312"
      ],
      "key": {
        "1": {
          "item": "Resource location of the item"
        },
        "2": {
          "item": "Resource location of the item"
        },
        "3": {
          "item": "Resource location of the item"
        }
      },
      "result": {
        "item": "Resource location of the item",
        "count": Number of items produced
      }
    }
    
    8 for versions 1.19+

Note: As more updates are released, values may be changed or added.

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "123",
    "231",
    "312"
  ],
  "key": {
    "1": {
      "item": "Resource location of the item"
    },
    "2": {
      "item": "Resource location of the item"
    },
    "3": {
      "item": "Resource location of the item"
    }
  },
  "result": {
    "item": "Resource location of the item",
    "count": Number of items produced
  }
}
9
[]

The text following

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "123",
    "231",
    "312"
  ],
  "key": {
    "1": {
      "item": "Resource location of the item"
    },
    "2": {
      "item": "Resource location of the item"
    },
    "3": {
      "item": "Resource location of the item"
    }
  },
  "result": {
    "item": "Resource location of the item",
    "count": Number of items produced
  }
}
9 can be any string or a raw JSON text. It will show up when you hover over your data pack in the output from
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
1 and in the data pack UI when creating a world. In
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2, it is possible to use the § symbol (see Minecraft Formatting codes) in the description of
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 and the data pack name.

Testing your pack[]

Once you have created your

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2, try testing it out in-game! Open the world or, if you are already in the world, type
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
5, then type
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
1. It should list two entries. One should be
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
7, the second one should be named like
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
8, where your data pack's folder name goes at
{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}
9. When you hover over your data pack's entry, you should see the description of your data pack as you have written in  description of your
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2.

When your pack shows up, you are ready to move on.

Troubleshooting[]

If you don't see your pack in the list, make sure your

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 file is correct and saved. Look for any missing curly brackets
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
2, commas
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
3, colons
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
4, quotation marks
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
5, or square brackets
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
6. Remember that for each open brace, quotation, or square bracket, you must have a closing bracket, quotation, or square brackets. If you still don't see your pack, make sure it's in the right folder.

Naming[]

See also: Resource location

Make a folder called

{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
7 in your data pack folder, where you have placed the
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
2 file in. In this
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}
7 folder you have to create one or more folders which will act as your namespaces.

Entries in data packs have resource locations in a fashion of

{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:gunpowder"
    },
    {
      "item": "minecraft:blaze_powder"
    },
    [
      {
        "item": "minecraft:coal"
      },
      {
        "item": "minecraft:charcoal"
      }
    ]
  ],
  "result": {
    "item": "minecraft:fire_charge",
    "count": 3
  }
}
0. The corresponding file would be located at
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:gunpowder"
    },
    {
      "item": "minecraft:blaze_powder"
    },
    [
      {
        "item": "minecraft:coal"
      },
      {
        "item": "minecraft:charcoal"
      }
    ]
  ],
  "result": {
    "item": "minecraft:fire_charge",
    "count": 3
  }
}
1. Note that
{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:gunpowder"
    },
    {
      "item": "minecraft:blaze_powder"
    },
    [
      {
        "item": "minecraft:coal"
      },
      {
        "item": "minecraft:charcoal"
      }
    ]
  ],
  "result": {
    "item": "minecraft:fire_charge",
    "count": 3
  }
}
2 characters in the path will be translated into directory separators.

A few examples:

  • an item tag of ID
    {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    3 would be located at
    {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    4
  • a function of ID
    {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    5 would be located at
    {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    6

Legal characters[]

Namespaces, paths and other folder and file names in the data pack should only contain the following symbols:

  • {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    7 Numbers
  • {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    8 Lowercase letters
  • {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    9 Underscore
  • {
      "type": "smelting",
      "ingredient": {
        "item": "<item ID>"
      },
      "result": "<item ID>",
      "experience": 0.35,
      "cookingtime": 200
    }
    
    0 Hyphen/minus
  • {
      "type": "crafting_shapeless",
      "ingredients": [
        {
          "item": "minecraft:gunpowder"
        },
        {
          "item": "minecraft:blaze_powder"
        },
        [
          {
            "item": "minecraft:coal"
          },
          {
            "item": "minecraft:charcoal"
          }
        ]
      ],
      "result": {
        "item": "minecraft:fire_charge",
        "count": 3
      }
    }
    
    2 Forward Slash/Directory separator (Can't be used in namespace)
  • {
      "type": "smelting",
      "ingredient": {
        "item": "<item ID>"
      },
      "result": "<item ID>",
      "experience": 0.35,
      "cookingtime": 200
    }
    
    2 Period

The preferred naming convention is

{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
3, called lower snake case.

Namespace[]

Most objects in the game use namespaced resource locations to prevent potential content conflicts or unintentional overrides.

For example, if two data packs add two new minigame mechanisms to Minecraft and both have a function named

{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
4. Without namespaces, these two functions would clash and the minigames would be broken. But if they have different namespaces of
{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
5 and
{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
6, the functions would become
{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
7 and
{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
8, which no longer conflict.

Most of the time when Minecraft requires an ID, such as for

{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}
9, you should provide the namespace in addition to the path. If you don't specify the namespace, it will fallback to
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
0.

Make sure to always use your own namespace for anything new that you add, and only use other namespaces if you're explicitly overriding something else, or, in the case of tags, appending to something else.

For example, Minecraft uses the

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
0 namespace, which means that this namespace should only be used when the data pack needs to overwrite existing Minecraft data or to add its entries to vanilla tags.

Functions[]

Main article: Function (Java Edition)

See also: Tutorials/Command blocks and functions

Functions are a set of commands that can be run in order.

To add functions, first create a folder named

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
2 inside the namespace folder. Then, create a file named
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
3 in this folder or in any of its subfolders. This will be your function file. Your function will be named in the game as
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 when the function file is located in a subfolder.

Loot tables[]

Main article: Loot table

Loot tables will tell Minecraft what should be dropped when a mob dies or what should be generated inside containers, like chests, when opened for the first time, they can also be called by the /loot command.

To add loot tables, first create a folder named

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
6 inside the namespace folder. Then, create a file named
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
7 in this folder or in any of its subfolders. This will be your loot table file. Your loot table will be named in the game as
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder. All the vanilla loot tables are in the minecraft namespace.

Here is an example of a cow's loot table, it can be used as a reference:

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}

To learn what each tag means, see Loot tables. There is also a list of vanilla loot tables on that page.

Structures[]

Structures can be used with structure blocks and jigsaw blocks and/or can overwrite how certain vanilla structures look in Minecraft. It is saved in an NBT format. You can create an NBT file by using a structure block or by exporting a build using a third party program like MCEdit.

To add structures to a data pack, first create a folder named datapacks0 inside the namespace folder. Then, put your structure file in this folder or in any of its subfolders. Your structure will be named in the game as

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

World generation[]

Main article: Custom world generation

Custom world generation allows data packs to change how the world generates. This is particularly useful in conjunction with custom worlds.

To change world generation, first create a folder named datapacks3 inside the namespace folder. Then, put your noise_settings file in this folder or in any of its subfolders. Your changes will be named in the game as

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

Advancements[]

Main article: Advancements

Advancements can be completed by players and give various rewards.

To add advancements, first create a folder named datapacks6 inside the namespace folder. Then, create a file named datapacks7 (You can't put spaces in the file name. Use lowercase letters in the file name). in this folder or in any of its subfolders. This will be your advancement file. Your advancement will be named in the game as

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

Recipes[]

Main article: Recipe

Recipes are used to let players craft items.

To add recipes, first create a folder named saves0 inside the namespace folder. Then, create a file named saves1 in this folder or in any of its subfolders. This will be your recipe file. Your recipe will be named in the game as

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

Shaped crafting[]

See also: Recipe § minecraft:crafting_shaped

The first common type of crafting is shaped crafting.

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "123",
    "231",
    "312"
  ],
  "key": {
    "1": {
      "item": "Resource location of the item"
    },
    "2": {
      "item": "Resource location of the item"
    },
    "3": {
      "item": "Resource location of the item"
    }
  },
  "result": {
    "item": "Resource location of the item",
    "count": Number of items produced
  }
}

This is a rough example of a shaped crafting recipe, as specified by the saves4 type. saves5 is a list used to specify the shape of the crafting recipe. It contains a maximum of 3 strings, each string standing for one row in the crafting grid. These strings then contain a maximum of 3 single characters next to each other, each character standing for one spot in the crafting grid. You don't need all 3 strings, nor do you need to have 3 characters in each string. But each string should contain the same amount of characters. You can use spaces to indicate empty spots.

saves6 is a compound used to specify what item should be used for which character in saves5. This can either be specified using saves8 followed by an item ID or saves9 followed by an item data pack tag.

The

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
00 compound speaks for itself, it specified what the resulting item should be.
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
01 is used to specify how many of the item should be given.

This is the original recipe for a piston (can be used as a reference):

{
  "type": "crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}

Shapeless crafting[]

See also: Recipe § minecraft:crafting_shapeless

There's another common type of recipes, a shapeless recipe. The list with multiple items allows alternatives for the given slot such as Oak Plank and Birch Plank.

{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "<item ID>"
    },
    {
      "item": "<item ID>"
    },
    [
      {
        "item": "<item ID>"
      },
      {
        "item": "<item ID>"
      }
    ]
  ],
  "result": {
    "item": "<item ID>",
    "count": 5
  }
}

As specified by the

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
02 type, this is a recipe without a saves5. The
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
04 can be put in the crafting grid in any shape or form. In the example, there's a list inside the
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
04 compound. This means any of the items in this list can be used.

This is the original recipe for Fire Charge (can be used as a reference):

{
  "type": "crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:gunpowder"
    },
    {
      "item": "minecraft:blaze_powder"
    },
    [
      {
        "item": "minecraft:coal"
      },
      {
        "item": "minecraft:charcoal"
      }
    ]
  ],
  "result": {
    "item": "minecraft:fire_charge",
    "count": 3
  }
}

It is also possible to create new smelting recipes.

{
  "type": "smelting",
  "ingredient": {
    "item": "<item ID>"
  },
  "result": "<item ID>",
  "experience": 0.35,
  "cookingtime": 200
}

This is a rough example of a smelting recipe. "ingredient" is used to specify the item you are going to smelt. "result" is going to specify the result. In "experience", you are able to choose the amount of xp gained for smelting, and in "cookingtime" the amount of time that it will take for the item to smelt, which in this case is 10 seconds (200 ticks = 10 seconds).

This is the default smelting recipe for a diamond ore:

{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}

Tags[]

Main article: tag

Tags are used to group blocks, items, entities, or functions together. Additionally, the

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
06 function tag is used to run functions every tick and the
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
07 function tag is used to run functions every time the world is (re)loaded.

To add tags, first create a folder named

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
08 inside the namespace folder. Inside this folder, create folders named
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
09,
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
10 and
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
2. Then, create a file named
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
12 in one of these folders or in any of their subfolders. This will be your tag file. Your tag will be named in the game as
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

Predicates[]

Main article: Predicate

Predicates are technical JSON files that represent the conditions for loot tables,

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
15 command, or
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
16 target selector argument.

To add predicates, first create a folder named

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
17 inside the namespace folder. Then, create a file named
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
18 (You can't put spaces in the file name. Use lowercase letters in the file name). in this folder or in any of its subfolders. This will be your predicate file. Your predicate will be named in the game as
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
4 or
{
  "type": "smelting",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1,
  "cookingtime": 200
}
5 if the file is located in a subfolder.

Dimensions[]

Main article: Custom dimension

Dimensions are JSON file used to specify all the dimensions a world contains.

To add dimensions, first create a folder named

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
21 inside the namespace folder. Then, create a file named
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
22 (You can't put spaces in the file name. Use lowercase letters in the file name). in this folder. This will be your dimension file.

Custom dimensions can be accessed in game using

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 0,
                "max": 2,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "min": 1,
                "max": 3,
                "type": "minecraft:uniform"
              }
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "min": 0,
                "max": 1
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}
23

Utilities[]

Minecraft But you can upgrade structures Mod download

This list is incomplete; you can help by expanding it.

Many utilities have been created in order to make programming in mcfunction easier. This is a reference list for utilities such as transpilers or syntax highlighting plugins. Please apply reasonable caution when downloading software onto your computer, as the creators are responsible for the content provided.

Compiler/Transpilers and FrameworksNameHostingDescriptionLinkMinecraft ScriptGitHubA language based on JavaScript that can be compiled into a working data pack using a Node.js compiler.https://mcscript.stevertus.com/MinityGitHubAnother scripting language that compiles into data packs using a Node.js compiler.https://github.com/minity-script/minityTMS TranspilerGitHubA python tool that can assemble indented mcfunction code into valid files. Great if you don't want to learn a new language.https://github.com/davidkowalk/advanced_minecraft_scriptingObjDPubA dart framework for creating data packs to minimize the repetitive work to be done.https://objd.stevertus.com/

Another option is to use a visual interface to create the framework or the content for your project.

Visual GeneratorsNameHostingDescriptionLinkDatapack CreatorPlanet MinecraftAn IDE for creating data packs with some useful toolshttps://www.planetminecraft.com/mod/datapack-creator-ide/NBTData Pack Generatornbt-data.comAn online generator for a raw data pack framework without any functions.https://www.nbt-data.com/datapack-generatorRecipe Generatorthedestruc7i0n.caAn Online Generator to generate the JSON files required for crafting.https://crafting.thedestruc7i0n.ca/Minecraft Tools Recipe Generatorminecraft.toolsAn Online Generator to generate the JSON files required for crafting.https://minecraft.tools/en/custom-crafting.phpMisode's Data Pack GeneratorGitHubJSON Generator for Minecraft Data Packshttps://misode.github.io/MCStacker for MC 1.19mcstacker.net/A collection of command generators.https://mcstacker.net/Origin CreatorGitHubA fully featured webtool for creating data packs.https://xmgzx.github.io/apps/origin-creator/MCreatormcreator.netA easy-to-use, fully featured graphical tool for creating data packs.https://mcreator.net/

If you use an IDE you might want syntax highlighting for the mcfunction syntax. Depending on your IDE or your text editor extra steps may have to be taken to install it in your environment.