Modding:Creating Recipes/ru: Difference between revisions
Mirotworez (talk | contribs) No edit summary |
No edit summary |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 6: | Line 6: | ||
== Основы == | == Основы == | ||
Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве | Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве {{ll|Modding:Basic Item|nsp=1}}. Другие рецепты можно найти в <code>assets/survival/recipes/</code>. | ||
=== Шаблон ингредиентов === | === Шаблон ингредиентов === | ||
Line 76: | Line 76: | ||
Вот как выглядит наш последний рецепт: | Вот как выглядит наш последний рецепт: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Line 89: | Line 88: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве <code>assets/myadvancedwand/recipes/grid/</code> и скопировать туда файлы. | Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве <code>assets/myadvancedwand/recipes/grid/</code> и скопировать туда файлы. | ||
Вы можете скачать полный мод, включая предметы (Pre 1.15)[[Media:MyWandRecipe.zip|здесь]]. | |||
Вы можете скачать полный мод, включая предметы [[Media:MyWandRecipe.zip|здесь]]. | |||
== Продвинутые рецепты == | == Продвинутые рецепты == | ||
Line 101: | Line 97: | ||
=== Типовые рецепты === | === Типовые рецепты === | ||
Есть более сложные вещи, которые вы можете сделать с рецептами. Это рецепт для деревянных досок, которые сделаны из бревен: | Есть более сложные вещи, которые вы можете сделать с рецептами. Это рецепт для деревянных досок, которые сделаны из бревен: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Line 111: | Line 106: | ||
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> | ||
Вместо того, чтобы иметь рецепт для каждого типа древесины, вы можете назначить имя ингредиенту (в данном случае это <code>name: "wood"</code>), и все обозначенное <code>*</code>, позже будет заменено на выходе. Значение <code>{wood}</code> будет заменено типом используемого дерева. | Вместо того, чтобы иметь рецепт для каждого типа древесины, вы можете назначить имя ингредиенту (в данном случае это <code>name: "wood"</code>), и все обозначенное <code>*</code>, позже будет заменено на выходе. Значение <code>{wood}</code> будет заменено типом используемого дерева. | ||
Например, если бы у нас был блок бревна березы, его код был бы <code>log-birch-ud</code>, поэтому <code>*</code> будет означать <code>birch</code>, поэтому выходные данные будут преобразованы из <code>code: "planks-{wood}-hor"</code> в <code>code: "planks-birch-hor"</code>. | |||
Например, если бы у нас был блок бревна березы, его код был бы <code>log-birch-ud</code>, поэтому <code>*</code> будет означать <code>birch</code>, поэтому выходные данные будут преобразованы из <code>code: "planks-{wood}"</code> в <code>code: "planks-birch"</code>. | |||
=== Преобразование ингредиента в другой предмет при создании === | |||
Иногда вы хотите сохранить один или несколько ингредиентов, но преобразовать их в другой предмет после создания. Например, при изготовлении медово-серной припарки игроку нужна чаша, наполненная медом, но чаша не расходуется для ее изготовления. Вместо этого чаша с медом превращается в пустую чашу. Для этого к ингредиенту добавляется свойство <code>returnedStack</code>. Значение этого свойства должно содержать <code>type</code> и <code>code</code>, как и стандартные свойства ингредиента. Это говорит рецепту, какой предмет вернуть игроку. | |||
</ | |||
Продолжая пример медово-серной припарки, чаша меда в качестве ингредиента выглядит как <code>"B": { type: "block", code: "bowl-honey" }</code>, но игрок проиграет чаша, если рецепт был написан таким образом. Нам нужно добавить <code>returnedStack</code> в свойства ингредиента и указать, каким элементом его заменить. В этом случае игрок должен получить пустую миску вместо миски с медом <code>returnedStack: { type: "block", code: "bowl-burned" }</code>. Это свойство размещается рядом со свойствами <code>type</code> и <code>code</code> ингредиента. Собираем все вместе: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Line 145: | Line 136: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Расходует более одной прочности на инструмент === | ||
Чтобы сбалансировать потребление долговечности, это можно сделать, добавив <code>toolDurabilityCost</code> и <code>isTool</code>. Это рецепт измельчителя: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Line 161: | Line 152: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Разделение рецептов на одной странице справочника === | ||
Иногда количество рецептов для одного предмета может стать огромным, чтобы отделить важные, это можно сделать, добавив <code>recipeGroup</code>. Это рецепты деревянной лестницы: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Line 186: | Line 177: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Ограничение определенным классом === | ||
Рецепт может быть ограничен определенным [[Classes/ru|классом]]. Это можно сделать, добавив <code>requiresTrait</code>. Это рецепт набора для шитья: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Line 202: | Line 193: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Копирование атрибутов === | ||
Некоторые рецепты могут потребовать копирования атрибутов. Это можно сделать, добавив <code>copyAttributesFrom</code>. Это рецепт для ящика с надписью: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { |
Latest revision as of 15:35, 22 November 2023
Эта страница проверялась в последний раз для версии Vintage Story 1.16.
Прежде чем создавать рецепты, рекомендуем сначала прочитать Основа предмета, чтобы понять это руководство.
Основы
Давайте создадим рецепт для нашей палочки, который мы добавили в руководстве Простой предмет . Другие рецепты можно найти в assets/survival/recipes/
.
Шаблон ингредиентов
Давайте начнем с объявления шаблона или макета рецепта, в нашем примере мы хотим, чтобы игрок поместил кирку поверх двух палочек.
который будет выглядеть так:
ingredientPattern: "P,S,S",
width: 1,
height: 3,
P
и S
являются идентификаторами, которые будут определены позже. Каждая строка разделена одной запятой или ТАБом (не пробелом!), а пустая ячейка помечена подчеркиванием _
. Ширина
этого рецепта 1
и в нем 3
строки.
Ингредиенты
Все, что нам нужно сделать сейчас, это определить идентификаторы, которые мы использовали ранее. В нашем примере P
обозначает медную кирку, а S
- обычную палку.
ingredients: {
"P": { type: "item", code: "game:pickaxe-copper"},
"S": { type: "item", code: "game:stick"}
},
Type
является либо block
, либо item
, в зависимости от того, является ли он предметом или блоком.
Когда в рецептах есть ванильные предметы, им нужно game:
перед названием предмета. Когда они из вашего собственного мода, вы можете просто поставить название предмета.
Чтобы узнать code
каждого предмета (или блока), вы можете ввести .edi
в консоль, которая добавит свойство code в всплывающую подсказку:
Кроме того, мы могли бы добавить необходимое количество к нашим ингредиентам, поэтому вместо одной палки на слот мы могли бы потребовать больше:
ingredients: {
"P": { type: "item", code: "game:pickaxe-copper"},
"S": { type: "item", code: "game:stick", quantity: 2}
},
Еще одна вещь, которую мы могли бы сделать - вместо того, чтобы потреблять кирку, мы могли бы использовать ее как инструмент:
ingredients: {
"P": { type: "item", code: "game:pickaxe-copper", isTool: true},
"S": { type: "item", code: "game:stick"}
},
Это может привести к тому, что кирка потеряет одну прочность во время крафта, вместо того, чтобы потреблять всю кирку сразу.
Возврат (выход)
Нам все еще нужно определить результат, который довольно похож на определение ингредиентов:
output: { type: "item", code: "wand-pickaxe"}
Теоретически, мы могли бы также добавить свойство quantity
(количество) здесь.
Распространение
Вот как выглядит наш последний рецепт:
{
ingredientPattern: "P,S,S",
width: 1,
height: 3,
ingredients: {
"P": { type: "item", code: "game:pickaxe-copper"},
"S": { type: "item", code: "game:stick"}
},
output: { type: "item", code: "wand-pickaxe"}
}
Чтобы добавить эти рецепты для крафта в ваш мод, вам нужно создать еще одну папку в вашем рабочем пространстве assets/myadvancedwand/recipes/grid/
и скопировать туда файлы.
Вы можете скачать полный мод, включая предметы (Pre 1.15)здесь.
Продвинутые рецепты
Типовые рецепты
Есть более сложные вещи, которые вы можете сделать с рецептами. Это рецепт для деревянных досок, которые сделаны из бревен:
{
ingredientPattern: "L",
ingredients: {
"L": { type: "block", code: "game:log-*-ud", name: "wood" }
},
width: 1,
height: 1,
output: { type: "block", code: "planks-{wood}-hor", quantity: 4 }
}
Вместо того, чтобы иметь рецепт для каждого типа древесины, вы можете назначить имя ингредиенту (в данном случае это name: "wood"
), и все обозначенное *
, позже будет заменено на выходе. Значение {wood}
будет заменено типом используемого дерева.
Например, если бы у нас был блок бревна березы, его код был бы log-birch-ud
, поэтому *
будет означать birch
, поэтому выходные данные будут преобразованы из code: "planks-{wood}-hor"
в code: "planks-birch-hor"
.
Преобразование ингредиента в другой предмет при создании
Иногда вы хотите сохранить один или несколько ингредиентов, но преобразовать их в другой предмет после создания. Например, при изготовлении медово-серной припарки игроку нужна чаша, наполненная медом, но чаша не расходуется для ее изготовления. Вместо этого чаша с медом превращается в пустую чашу. Для этого к ингредиенту добавляется свойство returnedStack
. Значение этого свойства должно содержать type
и code
, как и стандартные свойства ингредиента. Это говорит рецепту, какой предмет вернуть игроку.
Продолжая пример медово-серной припарки, чаша меда в качестве ингредиента выглядит как "B": { type: "block", code: "bowl-honey" }
, но игрок проиграет чаша, если рецепт был написан таким образом. Нам нужно добавить returnedStack
в свойства ингредиента и указать, каким элементом его заменить. В этом случае игрок должен получить пустую миску вместо миски с медом returnedStack: { type: "block", code: "bowl-burned" }
. Это свойство размещается рядом со свойствами type
и code
ингредиента. Собираем все вместе:
{
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 }
}
Расходует более одной прочности на инструмент
Чтобы сбалансировать потребление долговечности, это можно сделать, добавив toolDurabilityCost
и isTool
. Это рецепт измельчителя:
{
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 }
}
Разделение рецептов на одной странице справочника
Иногда количество рецептов для одного предмета может стать огромным, чтобы отделить важные, это можно сделать, добавив recipeGroup
. Это рецепты деревянной лестницы:
{
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 }
}
Ограничение определенным классом
Рецепт может быть ограничен определенным классом. Это можно сделать, добавив requiresTrait
. Это рецепт набора для шитья:
{
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" }
}
Копирование атрибутов
Некоторые рецепты могут потребовать копирования атрибутов. Это можно сделать, добавив copyAttributesFrom
. Это рецепт для ящика с надписью:
{
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" } }
}
Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.
Modding | |
---|---|
Modding Introduction | Getting Started • Пакет тем |
Content Modding | Content Mods • Developing a Content Mod • Basic Tutorials • Intermediate Tutorials • Advanced Tutorials • Content Mod Concepts |
Code Modding | Code Mods • Setting up your Development Environment |
Property Overview | Item • Entity • Block • Block Behaviors • Block Classes • Block Entities • Block Entity Behaviors • World properties |
Workflows & Infrastructure | Modding Efficiency Tips • Mod-engine compatibility • Mod Extensibility • VS Engine |
Additional Resources | Community Resources • Modding API Updates • Programming Languages • List of server commands • List of client commands • Client startup parameters • Server startup parameters Example Mods • API Docs • GitHub Repository |