Modding:Creating Recipes: Difference between revisions

From Vintage Story Wiki
m
Added out-of-date notice.
No edit summary
m (Added out-of-date notice.)
 
(16 intermediate revisions by 6 users not shown)
Line 1: Line 1:
<languages/>
<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 9: 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 28: 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 a comma, 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. Don't put spaces between the cells for example <code>_ P _</code> is 5 not 3 cells.
<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 115: 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 131: 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 139: 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-->
=== 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.
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:
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">
<syntaxhighlight lang="json">
{
{
ingredientPattern: "SBS _L_",
ingredientPattern: "SBS,_L_",
ingredients: {
ingredients: {
"L": { type: "block", code: "linen-*" },
"L": { type: "block", code: "linen-*" },
Line 163: Line 168:
</syntaxhighlight>
</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:35-->
<!--T:41-->
{{Navbox/modding|Vintage Story}}
{{Navbox/contentmodding}}


</translate>
</translate>
Confirmedusers
536

edits