Привет! В прошлом гайде мы добавили каменную палку, но палкой сыт не будешь, так что сегодня мы займёмся новой едой.
Сегодня добавим простую еду, которую съел и забыл, а также простую еду с эффектами. Более крутую еду, с посудой там, многоразовую и т.д. добавим в другом гайде, который я так и назову – Продвинутая Еда. Или вроде того.
Чтобы не повторять практически полностью гайд по предмету (текстура, модель, вкладки) то настоятельно рекомендую перед началом этого закончить предыдущий.
А если вы уже, то погнали!
Рассмотрим еду из игры
Предмет делает едой одна простая функция в свойствах предмета. Вот вам пример обычного яблока:
1 |
new Item((new Item.Properties()).group(ItemGroup.FOOD).food(Foods.APPLE)) |
Уже знакомая нам вкладка Еда, но куда интереснее эта часть: .food(Foods.APPLE).
Находим файл Foods.java (он тоже в папке item) и видим статическую переменную Food с именем APPLE.
1 2 3 |
public static final Food APPLE = (new Food.Builder()) .hunger(4) .saturation(0.3F).build(); |
Из её значений можно узнать, что яблоко должно утолять два кусочка голода и давать небольшое насыщение (влияет на то, как скоро персонаж снова захочет есть).
У еды также может быть ещё несколько параметров:
.setAlwaysEdible() – позволяет есть еду даже когда персонаж не голоден. Этот параметр активен у золотых яблок, которые можно есть сколько хочешь и когда хочешь. А вот большинство еды нельзя применить при полной шкале сытости.
.meat() – позволяет лечить этим волков. Вся еда с этой функцией будет пригодна для питомца.
.fastToEat() – ускоряет приём пищи. Попробуйте съесть сушенную ламинарию и яблоко. Разница будет сразу заметна.
И самое интересное: effect. Вот пример сырой курицы:
1 2 3 4 5 |
public static final Food CHICKEN = (new Food.Builder()) .hunger(2) .saturation(0.3F) .effect(new EffectInstance(Effects.HUNGER, 600, 0), 0.3F) .meat().build(); |
600 – время действия эффекта, 0 – уровень, а 0.3f – шанс, где 1f будет равен 100%.
Если вы хотите добавить несколько эффектов, то никаких проблем. Пример с зачарованным золотым яблоком.
1 2 3 4 5 6 7 8 |
public static final Food ENCHANTED_GOLDEN_APPLE = (new Food.Builder()) .hunger(4) .saturation(1.2F) .effect(new EffectInstance(Effects.REGENERATION, 400, 1), 1.0F) .effect(new EffectInstance(Effects.RESISTANCE, 6000, 0), 1.0F) .effect(new EffectInstance(Effects.FIRE_RESISTANCE, 6000, 0), 1.0F) .effect(new EffectInstance(Effects.ABSORPTION, 2400, 3), 1.0F) .setAlwaysEdible().build(); |
Перечислять все не буду, как видно в этом примере – просто пишем effect столько раз, сколько нам нужно.
Все эффекты можно увидеть в файле Effects.java. Он находиться в: net/ minecraft/ potion.
Пишем свою еду
Теперь пора добавить нашу собственную еду, если нужно. Мы также можем использовать любую из уже существующей (именно свойства еды, а не сами предметы). Но так не интересно, а значит добавляем файл ModFoods.java в папку предметов. Предлагаю добавить сосиску обычную и зачарованную, и вот для каждой из них еда:
1 2 3 4 5 6 7 8 9 10 11 12 |
package mod.astler.tutorial_mod_gs.item; import net.minecraft.item.Food; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; public class ModFoods { public static Food SAUSAGE = (new Food.Builder()).hunger(5).saturation(0.5F).meat().build(); public static Food ENCHANTED_SAUSAGE = (new Food.Builder()).hunger(8).saturation(0.7F).meat().setAlwaysEdible().fastToEat() .effect(() -> new EffectInstance(Effects.HEALTH_BOOST, 600, 0), 1F) .effect(() -> new EffectInstance(Effects.INSTANT_HEALTH, 600, 0), 1F).build(); } |
И теперь добавляем сами предметы в наш ModItems.java:
1 2 3 4 5 6 7 |
public static final RegistryObject<Item> SAUSAGE = ITEMS.register("sausage", () -> new Item(new Item.Properties() .food(ModFoods.SAUSAGE) .group(ModItemGroups.MOD_ITEMS_ITEM_GROUP))); public static final RegistryObject<Item> ENCHANTED_SAUSAGE = ITEMS.register("enchanted_sausage", () -> new Item(new Item.Properties() .food(ModFoods.ENCHANTED_SAUSAGE) .group(ModItemGroups.MOD_ITEMS_ITEM_GROUP))); |
И никаких сложностей, правда нужно немного изменить класс Item для зачарованной сосиски. Как вы знаете, зачарованные предметы должны иметь характерный блеск, а у нас его пока нет. Для его появления нужно открыть класс Item для ENCHANTED_SAUSAGE и дописать туда это:
1 2 3 4 5 6 |
public static final RegistryObject<Item> ENCHANTED_SAUSAGE = ITEMS.register("enchanted_sausage", () -> new Item(new Item.Properties().food(ModFoods.ENCHANTED_SAUSAGE).group(ModItemGroups.MOD_ITEMS_ITEM_GROUP)) { @Override public boolean hasEffect(ItemStack stack) { return true; } }); |
Где мы буквально пишем, что эффект у нас есть. И никаких вариантов.
Теперь добавляем генерируемые модели, текстуры, у меня они такие:
Локализация тоже делается аналогично прошлой палке.
Единственное, что я заменил на новой вкладке иконку. Так как в этом гайде балка была совершенно не нужна – я её удалил, а указал вместо неё одну из сосисок.
Можно запускать!
На очереди создание нового набора инструментов! А пока у меня всё.
Пингбэк: Создание модов для Minecraft 1.15 – GeekStand