translate items/nodes_items_crafting

This commit is contained in:
Andrey Stepanov 2024-11-29 09:58:25 +05:00
parent 25abb55ed3
commit b36834d1dc
Signed by: Koldun
GPG Key ID: 53DE683337F5D25F

View File

@ -1,51 +1,52 @@
---
title: Nodes, Items, and Crafting
title: Блоки, предметы и крафт
layout: default
root: ../..
idx: 2.1
description: Learn how to register node, items, and craft recipes using register_node, register_item, and register_craft.
redirect_from: /en/chapters/nodes_items_crafting.html
description: Вы узнаете как зарегистрировать новый блок, предмет или рецепт с помощью register_node, register_item и register_craft.
redirect_from: /ru/chapters/nodes_items_crafting.html
---
## Introduction <!-- omit in toc -->
## Введение <!-- omit in toc -->
Registering new nodes and craftitems, and creating craft recipes, are
basic requirements for many mods.
Регистрация новых блоков, ингредиентов и рецептов встречается практически
во всех модах.
- [What are Nodes and Items?](#what-are-nodes-and-items)
- [Registering Items](#registering-items)
- [Item Names](#item-names)
- [Item Aliases](#item-aliases)
- [Textures](#textures)
- [Registering a basic node](#registering-a-basic-node)
- [Crafting](#crafting)
- [Что такое Блоки и Предметы?](#what-are-nodes-and-items)
- [Регистрация предметов](#registering-items)
- [Названия предметов](#item-names)
- [Псевдонимы](#item-aliases)
- [Текстуры](#textures)
- [Регистрация простого блока](#registering-a-basic-node)
- [Рецепты](#crafting)
- [Shaped](#shaped)
- [Shapeless](#shapeless)
- [Cooking and Fuel](#cooking-and-fuel)
- [Groups](#groups)
- [Tools, Capabilities, and Dig Types](#tools-capabilities-and-dig-types)
- [Cooking и Fuel](#cooking-and-fuel)
- [Группы](#groups)
- [Инструменты, Возможности, and Способы ломания](#tools-capabilities-and-dig-types)
## What are Nodes and Items?
## Что такое Блоки и Предметы?
Nodes, craftitems, and tools are all Items. An item is something that could be
found in an inventory - even if it isn't possible through normal gameplay.
Все блоки и инструменты также являются Предметами. Предмет — это то,
что может лежать в инвентаре (даже если правила игры это запрещают).
A node is an item that can be placed or be found in the world. Every position
in the world must be occupied with one and only one node - seemingly blank
positions are usually air nodes.
Блок — это Предмет, который может быть поставлен или найден в мире. В каждом
вокселе мира всегда находится один и только один блок (пустое место — это,
обычно, блок воздуха).
A craftitem can't be placed and is only found in inventories or as a dropped item
in the world.
Обычные предметы (не блоки) не могут быть поставлены в мире, а могут только
находиться в инвентаре или выпадать в мир.
A tool is like a craftitem but has the ability to wear. As you use the tool, the
wear bar goes down until the tool breaks. Tools can also never be stacked. In
the future, it's likely that craftitems and tools will merge into one type of
item, as the distinction between them is rather artificial.
Инструмент похож на обычный предмет, но его можно использовать. Когда вы
используете инструмент, шкала его прочности уменьшается до тех пор, пока он
не сломается. Инструменты не могут быть сгруппированы в стак. В будущем,
возможно, Инструменты не будут выделяться в отдельный тип, поскольку различие
между ними и обычными предметами довольно условное.
## Registering Items
## Регистрация предметов
Item definitions consist of an *item name* and a *definition table*.
The definition table contains attributes that affect the behaviour of the item.
Объявление предмета состоит из *названия* и *аттрибутов*.
В аттрибутах записаны различные параметры, влияющие на поведение предмета.
```lua
core.register_craftitem("modname:itemname", {
@ -54,63 +55,60 @@ core.register_craftitem("modname:itemname", {
})
```
### Item Names
### Названия предметов
Every item has an item name used to refer to it, which should be in the
following format:
У каждого предмета есть название для обращения к нему, которое должно иметь
следующий формат:
modname:itemname
The modname is the name of the mod in which the item is registered, and the item
name is the name of the item itself. The item name should be relevant to what
the item is and can't already be registered.
`modname` — это имя мода, в котором предмет зарегистрирован, а `itemname` — это
название самого предмета. Название предмета должно быть уникальным и должно
отражать его суть.
Both `modname` and `itemname` should only contain lowercase letters, numbers,
and underscores.
Для написания `modname` и `itemname` используются только строчные буквы
английского алфавита, цифры и подчёркивания.
### Item Aliases
### Псевдонимы
Items can also have *aliases* pointing to their name. An *alias* is a
pseudo-item name that results in the engine treating any occurrences of the
alias as if it were the item name. There are two main common uses of this:
У предметов могут быть *псевдонимы*. Игровой движок работает с псевдонимами
предметов как будто это сами предметы. Псевдонимы используются в двух случаях:
* Renaming removed items to something else.
There may be unknown nodes in the world and in inventories if an item is
removed from a mod without any corrective code.
* Adding a shortcut. `/giveme dirt` is easier than `/giveme default:dirt`.
* Чтобы переименовать удалённые предметы на что нибудь другое. На карте или
в инвентаре могут появится *неизвестные блоки* (unknown nodes), если
просто удалить предмет из мода без исправления кода.
* Для сокращения названий. Команда `/giveme dirt` получается короче,
чем `/giveme default:dirt`.
Registering an alias is pretty simple. A good way to remember the order of the
arguments is `from → to` where *from* is the alias and *to* is the target.
Зарегистрировать псевдоним очень просто. Нужно запомнить правильный порядок
аргументов `from → to`, гле *from* — это псевдоним, а *to* — это сам предмет.
```lua
core.register_alias("dirt", "default:dirt")
```
Mods need to make sure to resolve aliases before dealing directly with item names,
as the engine won't do this.
This is pretty simple though:
Моды должны всегд разименовывать псевдонимы перед тем как работать с именем
предмета, потому что движок сам этого не делает. Но это довольно просто:
```lua
itemname = core.registered_aliases[itemname] or itemname
```
### Textures
### Текстуры
Textures should be placed in the textures/ folder with names in the format
`modname_itemname.png`.\\
JPEG textures are supported, but they do not support transparency and are generally
bad quality at low resolutions.
It is often better to use the PNG format.
Файлы текстур нужно класть в папку textures/ и давать имена в следующем
формате: `modname_itemname.png`.\\
Можно использовать текстуры в формате JPEG, но они не поддерживают прозрачность
и, обычно, плохо выглядят при низком разрешении. Лучше использовать формат PNG.
Textures in Minetest are usually 16 by 16 pixels. They can be any resolution,
but it is recommended that they are in the order of 2, for example, 16, 32, 64,
or 128. This is because other resolutions may not be supported correctly on
older devices, especially phones, resulting in degraded performance.
Обычно, текстуры в Minetest имеют размер 16 на 16 пикселей. Вообще, разрешение
может быть любым, но рекомендуется использовать значения степени двойки,
например 16, 32, 64 или 128. В противном случае они могут вызвать проблемы
с производительностью на старых компьютерах и особенно телефонах.
## Registering a basic node
## Регистрация простого блока
Registering nodes is similar to registering items, just with a different
function:
Блоки регистрируются так же, как и предметы, только другой функцией:
```lua
core.register_node("mymod:diamond", {
@ -121,18 +119,18 @@ core.register_node("mymod:diamond", {
})
```
Node definitions can contain any property in an item definition, and also
contain additional properties specific to nodes.
При объявлении блока в список аттрибутов добавляются дополнительные свойства,
характерные для блоков.
The `tiles` property is a table of texture names the node will use.
When there is only one texture, this texture is used on every side.
To give a different texture per-side, supply the names of 6 textures in this order:
Свойство `tiles` — это таблица с именами текстур этого блока.
Если указана только одна текстура, она используется для всех сторон блока.
Если нужно указать разные текстуры для сторон, то они должны быть перечислены
в следующем порядке:
up (+Y), down (-Y), right (+X), left (-X), back (+Z), front (-Z).
сверху (+Y), снизу (-Y), справа (+X), слева (-X), сзади (+Z), спереди (-Z).
(+Y, -Y, +X, -X, +Z, -Z)
Remember that +Y is upwards in Minetest, as is the convention with
most 3D computer games.
Запомните, что +Y это верх в Minetest, как и в большинстве других игр.
```lua
core.register_node("mymod:diamond", {
@ -148,34 +146,33 @@ core.register_node("mymod:diamond", {
is_ground_content = true,
groups = {cracky = 3},
drop = "mymod:diamond_fragments"
-- ^ Rather than dropping diamond, drop mymod:diamond_fragments
-- ^ Выпадает не сам алмаз, а mymod:diamond_framgents
})
```
The `is_ground_content` attribute allows caves to be generated over the stone.
This is essential for any node which may be placed during map generation underground.
Caves are cut out of the world after all the other nodes in an area have generated.
Свойство `is_ground_content` позволяет генерировать пещеры в каменной толще.
Это важно для всех блоков, которые должны появляться под землёй в процессе
генерации карты. Пещеры прорезаются после того, как будут сгенерированы все
остальные блоки в данной области.
## Crafting
## Рецепты
There are several types of crafting recipe available, indicated by the `type`
property.
Существует несколько типов рецептов, которые указываются через свойство `type`.
* shaped - Ingredients must be in the correct position.
* shapeless - It doesn't matter where the ingredients are,
just that there is the right amount.
* cooking - Recipes for the furnace to use.
* fuel - Defines items which can be burned in furnaces.
* tool_repair - Defines items which can be tool repaired.
* shaped — Ингредиенты должны быть сложены в правильном порядке.
* shapeless — Порядок ингредиентов не важен, важно лишь их наличие
и количество.
* cooking — Можно приготовить в печи.
* fuel — Может быть топливом для печи.
* tool_repair — Можно отремонтировать инструментом.
Craft recipes are not items, so they do not use Item Names to uniquely
identify themselves.
Рецепты крфта — это не предметы, и поэтому им не нужно указывать имя.
### Shaped
Shaped recipes are when the ingredients need to be in the right shape or
pattern to work. In the example below, the fragments need to be in a
chair-like pattern for the craft to work.
Для рецептов `shaped` важно расположение ингредиентов в сетке крафта.
В примере ниже фрагменты нужно расположить в форме стула, чтобы рецепт
сработал:
```lua
core.register_craft({
@ -189,11 +186,10 @@ core.register_craft({
})
```
One thing to note is the blank column on the right-hand side.
This means that there *must* be an empty column to the right of the shape, otherwise
this won't work.
If this empty column shouldn't be required, then the empty strings can be left
out like so:
Обратите внимание на пустую колонку в правой части.
Так обозначается, что *должна* быть пустая колонка справа, иначе рецепт
не будет работать.
Если пустая колонка не требуется, постые строки можно не указывать:
```lua
core.register_craft({
@ -206,13 +202,13 @@ core.register_craft({
})
```
The type field isn't actually needed for shaped crafts, as shaped is the
default craft type.
Свойство type можно не указывать, потому что все рецепты по умолчанию
считаются shaped.
### Shapeless
Shapeless recipes are a type of recipe which is used when it doesn't matter
where the ingredients are placed, just that they're there.
В рецептах `shapeless` не важно расположение ингредиентов, они просто должны
быть.
```lua
core.register_craft({
@ -226,10 +222,10 @@ core.register_craft({
})
```
### Cooking and Fuel
### Cooking и Fuel
Recipes with the type "cooking" are not made in the crafting grid,
but are cooked in furnaces, or other cooking tools that might be found in mods.
Рецепты типа `cooking` предназначены не для сетки крафта, а для приготовления
в различных типах печей.
```lua
core.register_craft({
@ -240,18 +236,17 @@ core.register_craft({
})
```
The only real difference in the code is that the recipe is just a single item,
compared to being in a table (between braces).
They also have an optional "cooktime" parameter which
defines how long the item takes to cook.
If this is not set, it defaults to 3.
Единственное отличие в коде такого рецепта заключается в том, что поле recipe —
это просто одно свойство, а не таблица. Кроме того, в таких рецептах можно
указывать свойство "cooktime", в котором задаётся время приготовления.
По умоланию, оно равно 3.
The recipe above works when the coal block is in the input slot,
with some form of fuel below it.
It creates diamond fragments after 10 seconds!
Указанный выше рецепт работает, когда во входной слот печи кладут блок угля,
а в слот топлива — какое-нибудь топливо. Через 10 секунд на выходе получается
кусочек алмаза.
This type is an accompaniment to the cooking type, as it defines
what can be burned in furnaces and other cooking tools from mods.
Рецепты типа `fuel` дополняют рецепты типа `cooking`. Они указывают, что
можно использовать в качестве топлива в печах.
```lua
core.register_craft({
@ -261,24 +256,25 @@ core.register_craft({
})
```
They don't have an output like other recipes, but they have a burn time
which defines how long they will last as fuel in seconds.
So, the diamond is good as fuel for 300 seconds!
У таких рецептов нет свойства output, но есть свойство burntime, определяющее
время горения предмета в печи (в секнудах). В данном примере алмаз получается
хорошим топливом, потому что он горит целых 300 секунд!
## Groups
## Группы
Items can be members of many groups and groups can have many members.
Groups are defined using the `groups` property in the definition table
and have an associated value.
Предметы можно объединять в группы, и в группах может быть множество предметов.
Принадлежность к группе указывается с помощью аттрибута `groups` в таблице
аттрибутов.
```lua
groups = {cracky = 3, wood = 1}
```
There are several reasons you use groups.
Firstly, groups are used to describe properties such as dig types and flammability.
Secondly, groups can be used in a craft recipe instead of an item name to allow
any item in the group to be used.
Есть несколько причин указывать группы.
Во первых, группы позволяют указать такие свойства, как способ ломания блока
и его горючесть.
Во вторых, в рецептах крафта в качестве ингредиентов можно указывать группы
вместо конкретных предметов.
```lua
core.register_craft({
@ -289,37 +285,36 @@ core.register_craft({
```
## Tools, Capabilities, and Dig Types
## Инструменты, Возможности, и Способы ломания
Dig types are groups which are used to define how strong a node is when dug
with different tools.
A dig type group with a higher associated value means the node is easier
and quicker to cut.
It's possible to combine multiple dig types to allow the more efficient use
of multiple types of tools.
A node with no dig types cannot be dug by any tools.
Способы ломания — это группы, которые обозначают, насколько блок устойчив
к разным типам инструментов.
Чем большее значение задано группе, тем проще сломать блок данным видом
инструмента.
Можно комбинировать несколько способов ломания, чтобы позволить игрокам
эффективнее использовать разные виды инструментов.
Если не указать никакой из способов ломания, блок нельзя будет сломать.
| Group | Best Tool | Description |
|--------|-----------|-------------|
| crumbly | spade | Dirt, sand |
| cracky | pickaxe | Tough (but brittle) stuff like stone |
| snappy | *any* | Can be cut using fine tools;<br>e.g. leaves, smallplants, wire, sheets of metal |
| choppy | axe | Can be cut using a sharp force; e.g. trees, wooden planks |
| fleshy | sword | Living things like animals and the player.<br>This could imply some blood effects when hitting. |
| explody | ? | Especially prone to explosions |
| oddly_breakable_by_hand | *any* | Torches and such - very quick to dig |
| Группа | Инструмент | Описание |
|-------------------------|------------|--------------------------------------------------------------------------------------|
| crumbly | лопата | Земля, песок |
| cracky | кирка | Твердый (но хрупкий) материал. Например, камень. |
| snappy | *любой* | Можно сломать чем угодно. Например, листья, неболшие растения, проволока. |
| choppy | топор | Можно разрубить. Например, деревья, доски. |
| fleshy | меч | Живые объекты, такие как животные или игроки.<br>Могут быть эффекты крови при ударе. |
| explody | ? | Может взрываться |
| oddly_breakable_by_hand | *любой* | Факелы и подобные быстро ломаемые вещи |
Every tool has a tool capability.
A capability includes a list of supported dig types, and associated properties
for each type such as dig times and the amount of wear.
Tools can also have a maximum supported hardness for each type, which makes
it possible to prevent weaker tools from digging harder nodes.
It's very common for tools to include all dig types in their capabilities,
with the less suitable ones having very inefficient properties.
If the item a player is currently wielding doesn't have an explicit tool
capability, then the capability of the current hand is used instead.
У каждого инструмента есть Возможности — это список типов ломания
с соответствующими свойствами, такими как время ломания и степень износа.
Кроме того, можно указывать максимально допустимую прочность блоков, которые
можно ломать данным инструментом. Таким образом можно запретить ломать твёрдые
блоки слишком простыми инструментами. Обычно, всем инструментам указывают все
возможные способы ломания, делая неподходящие способы сильно неэффективными.
Если игрок пытается сломать блок инструментом, не поддерживающим такой тип
блоков, то будет применяться свойство рук, а не инструмента.
```lua
core.register_tool("mymod:tool", {
@ -340,6 +335,6 @@ core.register_tool("mymod:tool", {
})
```
Groupcaps is the list of supported dig types for digging nodes.
Damage groups are for controlling how tools damage objects, which will be
discussed later in the Objects, Players, and Entities chapter.
`groupcaps` — это список поддерживаемых Способов ломания.
`damage_groups` позволяет указать, каким образом инструмент повреждает блок,
это будет описано позже в главе "Объекты, Игроки и Сущности".