translate items/nodes_items_crafting
This commit is contained in:
parent
25abb55ed3
commit
b36834d1dc
@ -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` позволяет указать, каким образом инструмент повреждает блок,
|
||||
это будет описано позже в главе "Объекты, Игроки и Сущности".
|
||||
|
Loading…
Reference in New Issue
Block a user