Views
Actions
Difference between revisions of "Datageneration/Recipes"
(Inital Import dokuwiki) |
(No difference)
|
Revision as of 11:04, 25 October 2020
Recipes can be generated by creating an extension of Minecraft's RecipeProvider
class. From there, recipes can be registered by overriding RecipeProvider#registerRecipes
.
Info
super
call within the method. Otherwise, you will generate all recipes from Minecraft as well.Recipe Builders
All recipes need to be formatted as an IFinishedRecipe
. 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 #build
.
<block important>All recipes must have a different path. If two recipes have the same result, use #build(Consumer<IFinishedRecipe>, ResourceLocation)
instead. This will allow you to specify a different name for the recipe such that it will not override the other.</block>
There are six vanilla recipe builders: ShapedRecipeBuilder
for shaped recipes, ShapelessRecipeBuilder
for shapeless recipes, CookingRecipeBuilder
for furnace type recipes, CustomRecipeBuilder
for nondeterministic logic, SingleItemRecipeBuilder
for stonecutting recipes, and SmithingRecipeBuilder
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 #addCriterion
. The RecipeProvider
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.
ConditionalRecipe
To specify if a recipe should be loaded at runtime, a ConditionalRecipe
can be used in conjunction with a recipe builder. Conditions must be added before the recipe via ConditionalRecipe$Builder#addCondition
. 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 IConditionBuilder
.