[1.15.2] Дроп при добыче блоков

Всем привет! И хоть я пишу дроп после гайда по созданию рецептов, все-равно возьму за базу урок с одним блоком. Не хочу загружать исходники кучей лишнего.

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

Что вообще за дроп? Это то, что падает с нашего блока при добыче в выживании. Если попробовать добыть любой из добавленных нами блоков сейчас – не выпадет ничего. Независимо от инструментов и условий. И сегодня мы это изменим!

Подробнее о дропах

Я уверен, что вы все получали дерево при добыче дерева. Получали булыжник при добыче камня, а также получали уголь при добыче угольной руды. А если в руках была кирка с подходящим зачаровыванием, то количество угля увеличивалось или падал сам блок руды.

Все три упомянутых рецепта имеют несколько отличий. В первом случае мы просто получаем тот же блок, самый простой вариант. Во втором мы получаем блок, который не соответствует изначальному. Сперва можно подумать, что всё так же, ведь просто выпадает блок, но есть важное но! Если мы будем добывать камень с эффектом Шёлкового касания – то получим-таки камень. А это  уже сложнее 😀 Третий случай ещё лучше, ведь в зависимости от зачарований мы можем получить, как и сам блок, так и разное количество угля.

Как видите, рецепты штука интересная, а есть ведь ещё всякие листья, с которых может упасть и саженец, и палка, и яблоко, а могут и листья (если знать как).

Ну хорошо, подобных примеров в игре реально много, так давайте парочку создадим.

Погнали!

Пишем дроп

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

Наш блок
Хм…Ничего?

Ни-че-го.

Теперь нам нужна новая папка, в которой и будут собраны файлы дропа бля блоков:

Тут и будут таблицы дропа

Учтите, что если рецепты могли иметь разные имена, в т.ч. отличные от блоков, то один и тот же блок не может иметь несколько таблиц, а потому имя тут так же должно в точности соответствовать имени в регистре. К примеру, для нашего stone_stick_block мы создадим stone_stick_block.json и запишем туда:

С рецептом вышло лучше 😀
Вот и он

Обсудим что там в коде. Тип — это понятно, блок. Далее следует своего рода массив-пул для дропа, куда мы записываем интересующий нас вариант дропа — этот же блок с базовыми условиями. Rolls – количество, entries – тоже массив из возможных блоков с их условиями (в данном случае их нет, но в следующем примере они будут). Conditions – условия дропа. Тут оно общее для любых вариантов, да и вариант у нас только один.

Если описать всё это словами, то будет как-то так: Таблица дропа для блока, состоящая из одного варианта дропа, который включает один возможный блок, который выпадет при условии, что блок переживёт взрыв.

Как я понимаю, это условие в зависимости от силы взрыва определяет будет ли дроп, или блок будет уничтожен «полностью». В любом случае оно будет встречаться довольно часто.

Дроп с условиями

Такс. Теперь сложнее. Пускай теперь выпадает булыжник при добыче обычной киркой, а наш блок только при добыче с Шёлковым касанием.

Снова тут…
Уже вижу булыжник!
Yaaay
Сразу же второй блок
Отлично

Работает! Ну, технически оно и не могло не работать, ведь я взял рецепт дропа камня и заменил блок, но в любом случае теперь это рецепт наш.

Разберём чуть подробнее и этот:

Как видите, теперь у нас нет общего условия в конце, а есть частное для каждого отдельного блока. Первое говорит, что если блок добывают подходящим инструментом, у которого есть еще и шёлковое касание первого уровня (оно имеет только один уровень), то всё хорошо и дропаем блок. А если это условие не выполнено и блок пережил взрыв – дропаем булыжник.

При этом чем-угодно добыть всяк не выйдет, ведь в нашем случае сам рецепт дропа будет выполнен только при добыче киркой.

Дропаем кучу предметов

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

Смотрим:

Теперь палки
И тут всё ок, хорошо

Разбираем. В этот раз я пропустил условие с шёлковым касанием, так как оно полностью повторяет прошлый рецепт. Куда интереснее вторая часть, в которой, я, если честно, не особо разбирался. Помимо уже знакомых частей там добавлено несколько функций functions, которые не только указывают количество дропа по умолчанию, а также проводит пересчёт количества для эффекта Удача. И в зависимости от уровня зачарования — будет больше дропа. Ну, позже посмотрю код подробнее, но пока просто смиримся с фактом, что это должно быть именно так.

Или или?

И еще рассмотрим дроп от гравия. Вернее, создадим аналогичный для себя 😀

С 5 попытки вышло!

Тут снова есть часть с шелковым касанием, это же работает и для обычного гравия. Но если касания таки нет и блок пережил взрыв, то мы (в зависимости от наличия зачарования на удачу) решаем, упадёт палочка или блок. Если зачарования нет, то шанс падения палки – 10%, а если он на 3 уровне, то 100%. При этом, если палка таки не упала, то получаем сам блок.

На этом, пожалуй, всё. Интересующие вас рецепты из игры смотрите в ресурсах, там много интересного. Буквально если не одно, то другое, всё зависит от условий. Код смотрите тут.

One thought on “[1.15.2] Дроп при добыче блоков

Добавить комментарий