Recipes can be generated by creating an extension of Minecraft's <code>RecipeProvider</code> class. From there, recipes can be registered by overriding <code>RecipeProvider#registerRecipes</code>.
{{Colored box|title=Info|content=Remove the <code>super</code> call within the method. Otherwise, you will generate all recipes from Minecraft as well.}}
== Recipe Builders ==
All recipes need to be formatted as an <code>IFinishedRecipe</code>. Each vanilla recipe has a static constructor builder that can be used to create a finished recipe. These can be built by passing the required parameters and then calling <code><nowiki>#build</nowiki></code>.
{{Colored box|title=important|content=All recipes must have a different path. If two recipes have the same result, use <code><nowiki>#build(Consumer<IFinishedRecipe>, ResourceLocation)</nowiki></code> instead. This will allow you to specify a different name for the recipe such that it will not override the other.}}
There are six vanilla recipe builders: <code>ShapedRecipeBuilder</code> for shaped recipes, <code>ShapelessRecipeBuilder</code> for shapeless recipes, <code>CookingRecipeBuilder</code> for furnace type recipes, <code>CustomRecipeBuilder</code> for nondeterministic logic, <code>SingleItemRecipeBuilder</code> for stonecutting recipes, and <code>SmithingRecipeBuilder</code> for smithing recipes.
For any recipe to be valid, a criterion must be met to obtain the recipe within the recipe book. This can be attached via <code><nowiki>#addCriterion</nowiki></code>. The <code>RecipeProvider</code> class has some basic criteria creators to check whether a player's inventory has a certain item or whether a player has entered into a specific block.
== <code>ConditionalRecipe</code> ==
To specify if a recipe should be loaded at runtime, a <code>ConditionalRecipe</code> can be used in conjunction with a recipe builder. Conditions must be added before the recipe via <code>ConditionalRecipe$Builder#addCondition</code>. Then, once a recipe is added, all previous conditions are cleared for the next to be added. There are a few helper methods for conditions that can be implemented via <code>IConditionBuilder</code>.