[Forge 1.17.1] Еда с эффектами и посудой

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

Я уже как-то писал о еде, даже не раз. И, если честно, выходило довольно просто и быстро. Так что для разнообразия я решил немного расширить урок о еде. Теперь мы не только добавим съедобный предмет, но и сделаем свой аналог миски. Так что нечего время терять, погнали!

Добавляем новые предметы

Для начала добавим три новых предмета:

Как вы могли заметить, пока что эти предметы не функциональнее палки. Но скоро мы это исправим.

Из названий понятно, что у нас: банка, конфета и банка с едой. Банка останется простым предметом, т.к. есть или как-то использовать в мире её не выйдет. Часто именно конфетки дают в играх какой-то эффект, так что и наша будет не совсем обычной, а с эффектом. Банка с едой — банка, в которой какая-то еда. Какая еда я не знаю, но она будет неплохо насыщать и оставлять банку после употребления.

План очертили, теперь добавим параметры еды.

Добавляем свойства еды

Для этого можно создать отдельный файлик рядом с предметами. Назовём его ModFood.java, и запишем туда следующее.

Для еды есть отдельный класс, FoodProperties. Он и определяет свойства еды. Насыщение, утоление голода, эффекты, мясо ли это (можно ли лечить волка), даст ли сьедение какой-то эффект и т.д. Разберем внимательнее.

Конфета. Восстанавливать она будет две единицы голода, и давать 0.1 насыщения. После съедения игрок 100% получит эффект увеличения скорости добычи второго уровня на 5 секунд. Есть ещё интересная часть: alwaysEat() и fast(). Первое определяет, можно ли есть нашу еду когда игрок не голоден. Т.к. это конфета, то можно, конечно. А fast, это скорость поедания еды. В игре есть два варианта: стандартный (едим мясо, супы) и быстрый (ягоды).

Банка еды не будет давать никаких эффектов, да и вообще будет практически обычной едой, которая восстановит голод на уровне приготовленной свинины. А ещё мы указали, что банка с едой — это мясо. Но не сама банка. А только содержимое.

Добавить предмету свойства еды очень просто. Подобно вкладке в творческом мы добавляем к Item.Properties() и еду: food(ModFood.CANDY), например.

Теперь докидываем текстуры и модели, как это делать я писал тут, а используемые мной спрайты ищите тут. Дописываем локализацию и запускаем.

Текстуры относительные. На самом деле я взял картинки 256х256 и ужал их до 16 😂. Так что сами понимаете.

Как и ожидалось, конфету кушать можно, эффект тоже есть:

Пустую банку кушать нельзя, а вот полную можно. Но после еды банку мы не получаем. Так что займёмся этим и напишем класс по аналогии с тарелкой.

Получаем посуду после еды

Повторить трюк с миской нам поможет класс BowlFoodItem.java.

Как видите, тут есть функция, которая срабатывает по завершению использования предмета. Т.е. когда мы съедаем еду, например. Теперь создадим свой класс CanFoodItem.java и напишем там всё то же самое, но заменив миску банкой.

И теперь создаём банку с едой не от обычного Item, а от нашего. И да. Обязательно ставим ограничение на количество предметов в стаке до 1 (.stacksTo(1)), как любой еды в тарелке. Иначе игра будет удалять весь стак еды и заменять его «тарелкой» банкой.

Вообще это можно починить, но оставим на второй гайд с едой, а пока запишем так:

Проверяем результат:

На этом пока всё, спасибо за внимание!

Список всех уроков: Создание модов для Minecraft 1.15-1.17 [Forge/Fabric]
Исходный код проекта на Github

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

Прокрутить наверх