Confirmedusers
536
edits
(Marked this version for translation) |
m (Added out-of-date notice.) |
||
(19 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> | |||
<translate> | <translate> | ||
<!--T:40--> | |||
{{GameVersion|1.19}} | |||
<!--T:1--> | <!--T:1--> | ||
__FORCETOC__ | __FORCETOC__ | ||
{{PageOutdated|lookat={{ll|Modding:Content_Tutorial_Simple_Recipe|the simple recipes tutorial|nsp=0}}}} | |||
Before creating recipes, we suggest you read [[Basic Item]] first in order to understand this tutorial. | Before creating recipes, we suggest you read [[Basic Item]] first in order to understand this tutorial. | ||
Line 8: | Line 13: | ||
<!--T:3--> | <!--T:3--> | ||
Let's create a recipe for our wand, which we added in [[Basic Item|basic items]] tutorial. | Let's create a recipe for our wand, which we added in [[Basic Item|basic items]] tutorial. Other recipes can be found in <code>assets/survival/recipes/</code> | ||
=== Ingredient Pattern === <!--T:4--> | === Ingredient Pattern === <!--T:4--> | ||
Line 21: | Line 26: | ||
which would look like this: | which would look like this: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
ingredientPattern: "P S S", | ingredientPattern: "P,S,S", | ||
width: 1, | width: 1, | ||
height: 3, | height: 3, | ||
Line 27: | Line 32: | ||
<!--T:8--> | <!--T:8--> | ||
<code>P</code> and <code>S</code> are identifiers which will be defined later. Every row is separated with | <code>P</code> and <code>S</code> are identifiers which will be defined later. Every row is separated with one comma or tab (no space!), while an empty cell is marked with an underscore <code>_</code>. The <code>width</code> of this recipe is <code>1</code> and it is <code>3</code> rows high. | ||
=== Ingredients === <!--T:9--> | === Ingredients === <!--T:9--> | ||
Line 99: | Line 104: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
ingredientPattern: "P S S", | ingredientPattern: "P,S,S", | ||
width: 1, | width: 1, | ||
height: 3, | height: 3, | ||
Line 114: | Line 119: | ||
<!--T:28--> | <!--T:28--> | ||
You can download the full mod including the items [[Media:MyWandRecipe.zip|here]]. | You can download the full mod including the items (Pre 1.15)[[Media:MyWandRecipe.zip|here]]. | ||
== Advanced == <!--T:29--> | == Advanced == <!--T:29--> | ||
Line 130: | Line 135: | ||
width: 1, | width: 1, | ||
height: 1, | height: 1, | ||
output: { type: "block", code: "planks-{wood}", quantity: 4 } | output: { type: "block", code: "planks-{wood}-hor", quantity: 4 } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 138: | Line 143: | ||
<!--T:33--> | <!--T:33--> | ||
For example if we would have a birch log block, its code would be <code>log-birch-ud</code>, so <code>*</code> would stand for <code>birch</code>, therefore the output will be converted from <code>code: "planks-{wood}"</code> to <code>code: "planks-birch"</code>. | For example if we would have a birch log block, its code would be <code>log-birch-ud</code>, so <code>*</code> would stand for <code>birch</code>, therefore the output will be converted from <code>code: "planks-{wood}-hor"</code> to <code>code: "planks-birch-hor"</code>. | ||
=== Converting an ingredient to another item upon crafting === <!--T:34--> | |||
Sometimes you want to keep one or more of the ingredients, but convert them to a different item after crafting. For example, when crafting a honey-sulfur poultice, the player needs a bowl filled with honey, but the bowl is not consumed to craft it. Instead the bowl of honey is turned into an empty bowl. This is accomplished by adding the <code>returnedStack</code> property to the ingredient. This property's value needs to contain a <code>type</code> and <code>code</code> just like the standard ingredient properties. This tells the recipe which item to give the player back. | |||
<!--T:41--> | |||
Continuing with the honey-sulfur poultice example, a bowl of honey as an ingredient looks like <code>"B": { type: "block", code: "bowl-honey" }</code>, but the player would lose the bowl if the recipe were written this way. We need to add <code>returnedStack</code> to the ingredient's properties and indicate which item to replace it with. In this case, the player should receive an empty bowl in place of the bowl of honey <code>returnedStack: { type: "block", code: "bowl-burned" }</code>. This property is placed alongside the <code>type</code> and <code>code</code> properties of an ingredient. Putting it all together: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "SBS,_L_", | |||
ingredients: { | |||
"L": { type: "block", code: "linen-*" }, | |||
"S": { type: "item", code: "powderedsulfur" }, | |||
"B": { | |||
type: "block", | |||
code: "bowl-honey", | |||
returnedStack: { type: "block", code: "bowl-burned" } | |||
} | |||
}, | |||
width: 3, | |||
height: 2, | |||
output: { type: "item", code: "poultice-linen-honey-sulfur", quantity: 4 } | |||
} | |||
</syntaxhighlight> | |||
=== Consuming more than one durability per tool === <!--T:35--> | |||
To balance durability consuming, it can be done by adding <code>toolDurabilityCost</code> and <code>isTool</code>. This is recipe for pulverizer pounder: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "HL_,CL_,_L_", | |||
ingredients: { | |||
"H": { type: "item", code: "hammer-*", isTool: true, toolDurabilityCost: 10 }, | |||
"C": { type: "item", code: "chisel-*", isTool: true, toolDurabilityCost: 10 }, | |||
"L": { type: "block", code: "log-placed-*-ud", name: "wood" } | |||
}, | |||
width: 3, | |||
height: 3, | |||
output: { type: "item", code: "pounder-oak", quantity: 1 } | |||
} | |||
</syntaxhighlight> | |||
=== Separating recipes on the same handbook page === <!--T:36--> | |||
Sometimes amount of recipes for one item can become overwhelming, to separate important ones, it can be done by adding <code>recipeGroup</code>. These are recipes for wooden ladder: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "S_S,SSS,S_S", | |||
ingredients: { | |||
"S": { type: "item", code: "stick" } | |||
}, | |||
width: 3, | |||
height: 3, | |||
recipeGroup: 1, | |||
output: { type: "block", code: "ladder-wood-north", quantity: 3 } | |||
}, | |||
{ | |||
ingredientPattern: "P_P,PSP,P_P", | |||
ingredients: { | |||
"P": { type: "item", code: "plank-*" }, | |||
"S": { type: "item", code: "stick" } | |||
}, | |||
width: 3, | |||
height: 3, | |||
output: { type: "block", code: "ladder-wood-north", quantity: 3 } | |||
} | |||
</syntaxhighlight> | |||
=== Restricting to a specific class === <!--T:37--> | |||
The recipe can be limited to a specific [[Classes|class]]. This can be done by adding <code>requiresTrait</code>. This is recipe for sewing kit: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "FFS,FF_", | |||
requiresTrait: "clothier", | |||
ingredients: { | |||
"F": { type: "item", code: "flaxtwine" }, | |||
"S": { type: "item", code: "stick" } | |||
}, | |||
width: 3, | |||
height: 2, | |||
output: { type: "item", code: "sewingkit" } | |||
} | |||
</syntaxhighlight> | |||
=== Copying attributes === <!--T:38--> | |||
Some recipes can require to copy attributes. This is can be done by adding <code>copyAttributesFrom</code>. This is recipe for labeled crate: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "S,C", | |||
ingredients: { | |||
"S": { type: "item", code: "paper-parchment" }, | |||
"C": { type: "block", code: "crate" } | |||
}, | |||
shapeless: true, | |||
copyAttributesFrom: 'C', | |||
width: 1, | |||
height: 2, | |||
output: { type: "block", code: "crate", attributes: { label: "paper-empty" } } | |||
} | |||
</syntaxhighlight> | |||
=== Hiding recipes from 'Created by' section from handbook === <!--T:39--> | |||
Some recipes are better hidden, it can be done by adding <code>showInCreatedBy</code>. | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "H", | |||
ingredients: { | |||
"H": { type: "block", code: "hay-normal-ud" } | |||
}, | |||
showInCreatedBy: false, | |||
width: 1, | |||
height: 1, | |||
output: { type: "item", code: "drygrass", quantity: 8 } | |||
} | |||
</syntaxhighlight> | |||
=== Using liquid container as ingredient === <!--T:40--> | |||
Some recipes use liquid containers, such as buckets, bowls or jugs. For single liquid container, it can be done by adding <code>liquidContainerProps</code> to recipe attributes. This is recipe for honey-sulfur poultice: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
ingredientPattern: "SBS,_L_", | |||
ingredients: { | |||
"L": { type: "block", code: "linen-*" }, | |||
"S": { type: "item", code: "powderedsulfur" }, | |||
"B": { type: "block", code: "bowl-fired" } | |||
}, | |||
attributes: { | |||
liquidContainerProps: { | |||
requiresContent: { type: "item", code: "honeyportion" }, | |||
requiresLitres: 0.25 | |||
} | |||
}, | |||
width: 3, | |||
height: 2, | |||
output: { type: "item", code: "poultice-linen-honey-sulfur", quantity: 4 } | |||
} | |||
</syntaxhighlight> | |||
<!--T: | <!--T:41--> | ||
{{Navbox/ | {{Navbox/contentmodding}} | ||
</translate> | </translate> |