Modding:Creating Recipes: Difference between revisions

From Vintage Story Wiki
m
Added out-of-date notice.
(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 a tab, 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 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:34-->
<!--T:41-->
{{Navbox/modding|Vintage Story}}
{{Navbox/contentmodding}}


</translate>
</translate>
Confirmedusers
536

edits