Forge Моддинг 1.20.1 — Лекция 6: Как настроить дроп и добычу блока
Приветствую, друзья!
Предыдущая лекция
Сегодня мы научимся управлять тем, что выпадает из блока и как его можно добыть. Вы узнаете, как:
• Настроить дроп (лут-таблицы),
• Указать тип инструмента (кирка, топор и т.д.),
• Задать минимальный уровень инструмента (камень, железо, алмаз).
1. Организация папок
Перед началом создайте структуру папок в директории resources:
• mineable - Теги для типа инструмента
• loot_tables - Лут-таблица (blocks - для блоков)
Замените мой mod_id = rinova, на ваш айди мода
1. Создание JSON-файлов
1.1. Теги для типа инструмента
Начнем с базовых тегов для типа инструмента.
Теги в папке mineable указывают, каким инструментом можно добывать блок.
Всего в майнкрафте по типу инструментов существует 4 основных тега:
Все эти файлы создаются в папке mineable, который мы до этого создали:
Содержание всех файлов (тегов) в принципе одинаково, это запись values:
Далее в этот блок values мы пишем айди нашего блока, в моем случае я буду работать с тегом pickaxe, так как создавал блок кристаллов и он будет копаться киркой.
Что это даёт:
Блок можно добыть любой киркой, но быстрее — инструментом правильного уровня.
Например:
• Деревянная кирка: медленно,
• Алмазная кирка: быстро.
1.2 Теги для уровня добычи
Теги в папке blocks указывают минимальный уровень инструмента.
Всего в майнкрафте по уровню инструментов существует 3 основных тега:
(Помимо этих трёх, Forge так же добавляет netherite уровень, но об этом в следующем уроке)
Как выглядят файлы в папке blocks:
К примеру я хочу чтобы мой блок кристаллов копался минимум киркой уровня железа, для этого я написал соответствующую запись в файле pickaxe, теперь указываю уровень в файле needs_iron_tool.json:
Что это даёт:
• Блок можно добыть только железным инструментом или выше.
• Если попытаться добыть деревянной/каменной киркой — блок не дропнется.
Внимание!
.requiresCorrectToolForDrops() который мы ставили при создании блока - обязателен, чтобы работали теги! Без него блок добывается чем угодно. А так же при его наличии блок будет дропаться только если есть соответствующий инструмент.
Но если вы хотите сделать так, что поведение блока будет как у дерева к примеру - блок добывается чем угодно, но быстрее топором, то этот метод при создании блока не нужен.
1.3 Лут-таблица блока
Лут-таблица (loot table) — JSON-файл, который определяет, что выпадает при разрушении блока.
Файл создаётся уже в другой структуре папок, в папке loot_tables/blocks/
Название файла должно точно соответствовать айди блока. В моем случае это pinkylite_crystal_block.json:
Вот так выглядит содержание файла, это самая простейшая лут таблица. В данном случае при добыче выпадает просто блок:
Разбор по ключам:
"type": "minecraft:block"
• Этот ключ указывает тип лут-таблицы. В данном случае это block, что означает, что таблица используется для определения дропа при разрушении блока.
• Другие возможные типы: entity (для мобов), chest (для сундуков), fishing (для рыбалки) и т.д.
"pools": [...]
• pools — это массив, который содержит один или несколько "пулов". Каждый пул представляет собой набор предметов, которые могут выпасть.
• Внутри каждого пула можно указать, сколько раз "крутится" пул (сколько предметов выпадет), и какие предметы могут выпасть.
"rolls": 1
• rolls определяет, сколько раз будет "крутиться" этот пул. В данном случае 1 означает, что пул будет использован один раз.
• Если бы значение было больше, например 2, то пул был бы использован дважды, и выпало бы два предмета (или больше, в зависимости от других параметров).
"entries": [...]
• entries — это массив, который содержит список предметов, которые могут выпасть из этого пула.
• В данном случае в массиве только один элемент, но их может быть несколько.
"type": "minecraft:item"
• Внутри entries указывается тип элемента. В данном случае это item, что означает, что выпадет предмет.
• Другие возможные типы: loot_table (ссылка на другую лут-таблицу), empty (ничего не выпадет), alternatives (используется при разных условиях добычи, чаще всего при шёлковом касании) и т.д.
"name": "rinova:pinkylite_crystal_block"
• name указывает, какой именно предмет выпадет. В данном случае это pinkylite_crystal_block мода rinova
• можно указать хоть майнкрафт предмет, хоть из другого мода (если он стоит на сборке) например minecraft:diamond, minecraft:iron_ingot и т.д.
Как это работает в игре:
Когда игрок разрушает блок, к которому привязана эта лут-таблица, игра "крутит" пул один раз ("rolls": 1).
Из пула выбирается один предмет ("entries": [...]), в данном случае это pinkylite_crystal_block.
Игрок получает этот предмет в инвентарь.
Для удобного создания лут таблицы можно воспользоваться этим сайтом - https://misode.github.io/loot-table/
Пример создания:
Этот JSON-файл — простой пример лут-таблицы для блока, который всегда выдает один предмет. Вы можете усложнять таблицу, добавляя больше пулов, предметов, условий и функций. Лут-таблицы — мощный инструмент для настройки дропа в Minecraft, и их можно адаптировать под любые нужды.
2. Тестирование
Теперь запускаем игру как обычно через runClient
Как добывается блок в игре:
Можете заметить, что разными инструментами и киркой уровнем ниже блок не добывается.
В следующем посте будет написана лекция как создать руду из которой будет дропаться ресурсы и опыт!
Весь написанный код:
Следующая лекция:
майнкрафт моды
на forge
версия 1.20.1
лекции/гайды