Предметы и инструменты (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 штуки:

RON
ItemDef(
    id: "space_craft:titanium_ingot",
    name: "Титановый слиток",
    texture: "textures/items/iron_ingot.png",
    max_stack: 64,
    block_id: None,
)

2. Предмет, связываемый с блоком

Если блок не имеет отдельного файла в items/, Metron создаёт его автоматически. Но если вы хотите кастомное имя, особую иконку или размер стака (например, 16):

RON
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, определённый класс, запас прочности и бонус к скорости ломания:

RON
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 рассчитывает время разрушения блока по классической формуле:

  1. Если инструмент соответствует preferred_tool блока:
    • Базовая скорость умножается на mining_speed инструмента.
    • Затраты времени уменьшаются в разы.
  2. Если у блока стоит флаг requires_tool = true:
    • Дроп выпадет только в том случае, если harvest_level вашего инструмента больше либо равен harvest_level блока.
    • Если сломать алмазную руду рукой или деревянной киркой, блок разрушится, но дроп не выпадет!
  3. Каждый сломанный блок отнимает 1 единицу от шкалы прочности (durability). При достижении 0 инструмент ломается с характерным звуком.

Выдача предметов в игре

Вы можете выдать себе любой предмет мода через консоль или чат:

TEXT
/give plasma_pickaxe
/give titanium_ingot 32
/give space_craft:heavy_generator 4

Движок автоматически выполняет поиск как по полному неймспейсу (modid:item_name), так и по короткому имени.


Кастомные имена и NBT-метаданные в Lua

Через Lua API мода можно создавать уникальные предметы с индивидуальным отображаемым именем (Display Name):

LUA
-- Выдаем во 2-й слот хотбара легендарный инструмент
metron.inventory.set(1, 200, 1, "Священная плазменная кирка +5")

Такое имя сохраняется в NBT-структуре предмета и отображается золотистым цветом при наведении курсора в инвентаре!