Предметы и инструменты (ItemDef)
Создание предметов, слитков и инструментов: шкала прочности, классы инструментов, скорость добычи блоков и команда /give.
Предметы и инструменты (ItemDef)
Предметы в Metron описываются в файлах datapacks/<pack>/items/<name>.ron.
Предмет может быть как простым ресурсом (слиток, драгоценный камень), так и полноценным инструментом с запасом прочности, либо связываться со ставимым блоком.
Схема полей ItemDef
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
id |
string |
(обязательно) | Уникальный ID в формате modid:item_name. |
name |
string |
id |
Отображаемое имя в интерфейсе и всплывающей подсказке (tooltip). |
texture |
string |
"" |
Путь к 2D-иконке предмета в ресурспаке (PNG). |
max_stack |
u32 |
64 |
Максимальный размер стака в ячейке инвентаря (1 для инструментов, 16 или 64 для ресурсов). |
block_id |
Option<u16> |
None |
Если предмет устанавливает блок в мир, здесь указывается числовой ID блока. |
max_durability |
Option<u16> |
None |
Запас прочности инструмента. Если указан, в интерфейсе отображается полоса износа. |
tool |
Option<string> |
None |
Класс инструмента: pickaxe, axe, shovel, hoe, shears, sword. |
harvest_level |
u8 |
0 |
Уровень инструмента: 0 (дерево/золото), 1 (камень), 2 (железо), 3 (алмаз). |
mining_speed |
Option<u32> |
None |
Множитель скорости разрушения подходящих блоков (у деревянной кирки = 2, у алмазной = 8). |
Три вида предметов
1. Простой предмет-ресурс (слиток, кристалл)
Обычный предмет без прочности, собирающийся в стаки по 64 штуки:
ItemDef(
id: "space_craft:titanium_ingot",
name: "Титановый слиток",
texture: "textures/items/iron_ingot.png",
max_stack: 64,
block_id: None,
)
2. Предмет, связываемый с блоком
Если блок не имеет отдельного файла в items/, Metron создаёт его автоматически. Но если вы хотите кастомное имя, особую иконку или размер стака (например, 16):
ItemDef(
id: "space_craft:heavy_generator",
name: "Тяжёлый генератор",
texture: "textures/blocks/furnace_front.png",
max_stack: 16,
block_id: Some(256), // Числовой ID блока в таблице
)
3. Инструмент со шкалой прочности
Инструмент имеет max_stack: 1, определённый класс, запас прочности и бонус к скорости ломания:
ItemDef(
id: "space_craft:plasma_pickaxe",
name: "Плазменная кирка",
texture: "textures/items/diamond_pickaxe.png",
max_stack: 1,
max_durability: Some(2048), // 2048 использований
tool: Some("pickaxe"),
harvest_level: 3, // Добывает даже обсидиан
mining_speed: Some(12), // В 12 раз быстрее руки!
)
Формула добычи блоков
Движок Metron рассчитывает время разрушения блока по классической формуле:
- Если инструмент соответствует
preferred_toolблока:- Базовая скорость умножается на
mining_speedинструмента. - Затраты времени уменьшаются в разы.
- Базовая скорость умножается на
- Если у блока стоит флаг
requires_tool = true:- Дроп выпадет только в том случае, если
harvest_levelвашего инструмента больше либо равенharvest_levelблока. - Если сломать алмазную руду рукой или деревянной киркой, блок разрушится, но дроп не выпадет!
- Дроп выпадет только в том случае, если
- Каждый сломанный блок отнимает 1 единицу от шкалы прочности (
durability). При достижении 0 инструмент ломается с характерным звуком.
Выдача предметов в игре
Вы можете выдать себе любой предмет мода через консоль или чат:
/give plasma_pickaxe
/give titanium_ingot 32
/give space_craft:heavy_generator 4
Движок автоматически выполняет поиск как по полному неймспейсу (modid:item_name), так и по короткому имени.
Кастомные имена и NBT-метаданные в Lua
Через Lua API мода можно создавать уникальные предметы с индивидуальным отображаемым именем (Display Name):
-- Выдаем во 2-й слот хотбара легендарный инструмент
metron.inventory.set(1, 200, 1, "Священная плазменная кирка +5")
Такое имя сохраняется в NBT-структуре предмета и отображается золотистым цветом при наведении курсора в инвентаре!