Создание рецептов
Эта страница проверялась в последний раз для версии 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 • Entity Behaviors • Block • Block Behaviors • Block Classes • Block Entities • Block Entity Behaviors • Collectible 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 |