Новая руда. Часть 1

Привет! Руда — незаменимый аттрибут песочниц. Должна же быть у нас адекватная мотивация лезть в подземные дебри? В майнкрафте это у нас уголь, железо, золото, алмаз, изумруд, лазурит, редстоун, кварц (а сейчас еще и незерит). И чаще всего именно руды играют ключевую роль в игре.

Понятное дело, что и моды без новых руд далеко не так прекрасны (ладно, это не обязательно, но вспомнить крупные моды без новых руд я не смог). В любом случае самое время и нам создать свою руду!

Список уроков

Привычное дело

В который раз нужно создать новый блок и новый предмет (+ предмет для блока). Блок и будет новой рудой, а предмет будет результатом переплавки этой руды.

Не забываем добавить все необходимые ресурсы (для блока: blockstate, модель, текстуру. Для предмета: модель и текстуру). Не забывайте так же о локализации.

Всё готово?

Хорошо, будем считать, что у вас уже есть некий Block, который назван как-то _ore. К примеру sun_ore. Есть предмет «руды», так же есть предмет «блока». Вот, как это всё выглядит у меня.

Бледная текстурка золотой руды — солнечная руда. Почему она такая бледная станет ясно позже. А предмет это солнечный элемент. Его текстуру я взял из своего старого мода.

Итак. Теперь немного теории и план. В игре есть два типа руды. Первый тип дропает при добыче блок, который нужно плавить в печи, а второй тип дропает какие-то предметы. Примером будет всё то же золото и лазурит. Сегодня мы рассмотрим оба случая.

Дроп самого себя для обычного блока я уже показывал в статье о дропе и рецептах. И этот же рецепт дропа мы будем использовать для первого типа руды. Далее добавим рецепт плавки в печи (а так же для новой плавильной печи) и будем таковы.

Дроп предметов так же вынесен в отдельный файл. Просто он будет немного сложнее. Стоит отметить, что для второго типа руды так же нужен рецепт плавки в печи, т.к. есть шёлковое касание, которое позволит получить сам блок (этого можно избежать, но не будем перечить игровой логике).

Дроп блока руды и получение руды при помощи печи

Если вы проходили упомянутый урок о дропе, то папка для файлов дропа с блоков у вас уже должна быть. Если же нет, то нужно её создать. Полный путь из папки resources будет приблизительно таким: data\tutorial_mod_gs\loot_tables\blocks\вашфайл.json.

Сюда добавляем json файл с именем вашего блока (конечно же лучше это делать через IDE, чтобы не получились нерабочие sun_ore.json.txt) и пишем туда следующий текст.

Кратко основное: type, pools — тип (дроп с блока) и пул дропа, не трогаем. rolls — количество, но будет странно, если из одного блока выпадет 50. entries — что именно упадёт, conditions — условие дропа. Тут условие буквально гласит «выжил при взрыве». Есть и другие, к примеру для растений это возраст растения, в зависимости от которого дополнительный дроп может выпасть, а может и не выпадать.

Блок теперь выпадает, пора добавить рецепт. Для этого в папке recipes (всё в той же data: data\tutorial_mod_gs\recipes) добавляем сразу два json файла. Назвать их можно как угодно, но во избежание путаницы советую сохранять имена блоков для одиночных, а так же указывать тип прямо в имени для множественных рецептов. В данном случае у нас рецепт не один. Руду можно переплавить или в печи, или в плавильной печи, а значит рецепта два. Поэтому создаю два файлика:

Их содержимое будет иметь пару отличий, но суть одна. Так что сначала код, а потом обсуждение.

Так вот. Как известно, плавильная печь плавит всё в два раза быстрее. Как можно увидеть в рецептах, обычная плавка занимает 10 секунд (200 тиков, видимо), а для плавильной печи (blasting) всего 5, т.е. в два раза меньше (параметр cookingtime).

Из остального вроде всё очевидно. Тип указывает тип рецепта, т.е. для верстака, печи, костра и т.д. Ингридиент и результат так же то и значат. Experience — получаемый опыт.

Запускаем и тестируем.

Добыли
Спекли

Окей. Всё работает. Скоро напишем генерацию и запилим свои инструменты, а пока переходим ко второй части.

Дроп руды сразу из блока

Тот же блок, та же руда (хотя логичнее было бы сделать какую-то пыль по типу редстоуна). Меняем содержимое одного только файла:

И вместо старого дропа блока вставляем вот тукаю конструкцию:

Рецепт полностью и бессовестно стянул с алмазов. Но согласитесь, этот пример куда интереснее предыдущего! Теперь entries имеет тип альтернативы и предлагает целых два варинта дропа, которые зависят от условий. Если есть подходящий инструмент с шёлковым касанием — выпадает блок. Если же ничего такого нет, то выбрасываем алмаз. Но и тут не так просто, ведь вписаны функции расчёта количества алмазов при зачаровании на удачу.

Как видите, для шёлкового касания работает очень простой алгоритм сравнения. Подобным образом и мы можем создать своё, ну, к примеру, теневое касание. В результате при помощи предмета с ним мы сможем получить какой-либо новый дроп. Звучит перспективно!

Запускаем!

Обычная кирка
С шёлковым касанием
С удачей

На этом сегодня всё. Ничего особо нового, просто систематизация пройденного перед новым. До скорого! Спасибо за время 😀

Оставьте комментарий