Скидки до 50% и курс по ИИ в подарок 2 дня 12 :27 :27 Выбрать курс
Геймдев
#статьи

Как создавать моды для Minecraft: руководство для начинающих

Добавляем кастомный меч и разбираемся с кодом на Java.

Иллюстрация: Оля Ежак для SKillbox Media

Minecraft — игра-песочница, в которой можно исследовать мир, выживать, сражаться с монстрами, вести дела на ферме, приручать животных или просто бесцельно бродить по бесконечным ландшафтам.

Контента в игре на сотни часов, но если этого окажется мало, то с помощью модов Minecraft можно изменить до неузнаваемости. Например, добавить новые виды оружия, транспорт, героев или полностью переписать сюжет. Готовые моды есть в интернете, но интереснее самостоятельно запрограммировать собственный мод.

В статье мы расскажем, как создать мод, какие программы для этого понадобятся, и попробуем добавить в Minecraft собственный меч.

Содержание


Устанавливаем JDK

Мы будем создавать моды для Java-версии Minecraft, поэтому нужно установить Java Development Kit (JDK) — набор инструментов для работы с кодом на Java. Для этого перейдите на официальный сайт Oracle, откройте раздел Java Archive и скачайте JDK версии 17 или выше:

Скриншот: Oracle / Skillbox Media

Для работы из списка выберем Java SE 17 (версию 17.0.13):

Скриншот: Oracle / Skillbox Media

В открывшейся таблице найдите пакет для вашей операционной системы. Убедитесь, что в названии есть слово Installer (для Windows и macOS) или Package (для Linux). После этого скачайте файл, дважды кликните по нему для запуска и следуйте подсказкам установщика.

Скриншот: Oracle / Skillbox Media

Чтобы проверить установку, запустите в терминале команду java --version. Если всё правильно, в выводе должна появиться версия JDK. В случае проблем попробуйте альтернативный способ установки Java.

Если вы ищете вариант попроще — попробуйте программу MCreator. Это бесплатный инструмент с графическим интерфейсом, который позволяет создавать моды без глубоких знаний Java. В нём есть визуальный язык программирования на основе блоков — его проще освоить новичкам. Программа также включает встроенный редактор текстур, интерфейсов и сценариев для сюжетных модов, так что другие приложения для создания графики или моделей вам не понадобятся.

Вариант с Java Development Kit подойдёт тем, кто хочет глубже разобраться в программировании, получить больше контроля над кодом и научиться создавать более сложные и функциональные моды.

Выбираем редактор кода

Код мода можно писать в любом текстовом редакторе, но удобнее использовать специальные среды разработки для программистов. Так как мы будем работать с Java, подойдут любые IDE для этого языка программирования. Рассмотрим несколько популярных вариантов.

IntelliJ IDEA. Среда разработки от компании JetBrains, в которой есть всё необходимое для редактирования, сборки и отладки кода на Java. Версия Community бесплатная, и её хватит для моддинга Minecraft.

Eclipse. Ещё одна IDE для Java. Она менее популярна, чем IntelliJ IDEA, но также включает все необходимые инструменты. Интерфейс Eclipse может показаться сложным для новичков, поэтому выбирайте эту среду, если у вас уже есть опыт и вы сможете разобраться с настройками.

Visual Studio Code. Это универсальный редактор кода для любых языков программирования. Для работы с Java установите плагин Extension Pack for Java. В VS Code нет встроенных инструментов и систем сборки, поэтому их нужно добавить отдельно. Этот редактор подойдёт тем, кто знаком с Java и умеет настраивать окружение.

Скачиваем шаблон кода

Мы будем разрабатывать мод с помощью Forge — платформы для модификации Minecraft, которая предоставляет интерфейс для доступа к внутренним функциям игры. С её помощью вы можете менять игровую механику и добавлять собственный контент: новые предметы и инструменты, мобов, биомы, блоки, рецепты крафта и многое другое.

Вместо Forge можно использовать Fabric — ещё одну платформу для модификации Minecraft, которая обновляется чаще и работает быстрее. Но преимущество Forge — в огромном сообществе и обилии гайдов.

Чтобы начать работу над модом, скачайте Forge MDK (Mod Development Kit — набор для разработки модов). Это шаблон проекта со всеми необходимыми файлами, базовыми функциями и заготовками кода.

Перейдите на официальный сайт Forge и в левом углу выберите версию Minecraft, которую будете модифицировать. У нас будет версия 1.19.

Скриншот: Forge / Skillbox Media

Нажмите на кнопку MDK:

Скриншот: Forge / Skillbox Media

На открывшейся странице нажмите на кнопку Skip, дождитесь завершения загрузки и распакуйте скачанный архив:

Скриншот: Forge / Skillbox Media

Распакованную папку лучше сразу переименовать, чтобы не потерять. Среди содержимого архива много файлов, но нам понадобится только директория src. В ней две папки: java и resources. В первой хранится основной код мода, а во второй — прочие файлы: тексты локализаций для разных языков, текстуры блоков, 3D-модели и рецепты для крафта.

Скриншот: macOS / Skillbox Media

Пишем код мода

Перейдём к программированию мода. Мы будем показывать всё на примере IntelliJ IDEA от JetBrains. Если вы используете другой редактор кода, то процесс будет похожим, но интерфейс может отличаться.

Запустите IntelliJ IDEA и в открывшемся меню нажмите на кнопку Open:

Скриншот: IntelliJ IDEA / Skillbox Media

В файловом менеджере выберите папку с модом, которую мы скачали и распаковали на предыдущем шаге. После загрузки проекта слева от редактора появится панель с деревом проекта: в ней отображаются все папки и файлы мода, включая директории src, java и resources.

Скриншот: IntelliJ IDEA / Skillbox Media

Перейдите по пути src/main/java/com/example/examplemod и удалите файл Config.java. Затем полностью очистите ExampleMod.java. Это файлы-заглушки, вместо которых мы напишем собственную логику.

Начнём с добавления следующих строк:

package com.example.examplemod;

// Импорт библиотек Minecraft, которые мы используем
import com.mojang.logging.LogUtils;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.Tiers;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import org.slf4j.Logger;

Это импорты библиотек и модулей, которые мы будем использовать в моде. Например, import net.minecraft.world.item.SwordItem предоставляет доступ к функциям мечей. Поскольку мы создаём собственный меч, нам нужны базовые функции этого типа оружия.

Теперь напишем главный класс мода. В нём мы обработаем логику нового меча и настроим его параметры. Аннотация @Mod в начале класса сообщает Forge, что следующий код относится к моду:

@Mod(ExampleMod.MODID)
public class ExampleMod

Далее настроим служебные функции: зададим идентификатор мода, создадим контейнер для новых предметов и запустим логгер — он будет выводить в консоль все действия пользователя и ошибки. Вот наш код:

public static final String MODID = "examplemod";
    
    // Логгер — это инструмент для вывода сообщений в консоль
    private static final Logger LOGGER = LogUtils.getLogger();
    
    // ======================================
    // РЕГИСТРАЦИЯ ПРЕДМЕТОВ
    // ======================================
    
    // DeferredRegister — это специальная «коробка», в которую мы складываем все наши предметы
    // Forge потом автоматически добавит их в игру
    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);

Приступаем к созданию меча:

// ======================================
    // НАШ КАСТОМНЫЙ МЕЧ
    // ======================================
    
    // Создаём собственный меч с именем "custom_sword"
    public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword", 
        () -> new SwordItem(
            Tiers.DIAMOND,              // Материал
            5,                          // Урон
            -2.4F,                      // Скорость атаки
            new Item.Properties()
                .tab(CreativeModeTab.TAB_COMBAT)  // Помещаем меч во вкладку с оружием

Когда вы создаёте новые инструменты, им нужно задать три свойства: материал (Tier), урон (Attack Damage) и скорость атаки (Attack Speed).

Материал (Tier) определяет прочность предмета и количество использований до поломки. Незеритовые инструменты — самые прочные, деревянные — самые слабые. Мы выбрали для своего меча алмаз, однако вы можете использовать любые другие материалы:

  • Tiers.WOOD — дерево;
  • Tiers.STONE — камень;
  • Tiers.IRON — железо;
  • Tiers.GOLD — золото;
  • Tiers.DIAMOND — алмаз;
  • Tiers.NETHERITE — незерит.

Урон (Attack Damage) — количество здоровья, которое враг потеряет от удара. Мы указали значение 5, которое добавляется к базовому урону всех мечей (+4). Итого наш меч наносит 9 единиц урона за удар.

Скорость атаки (Attack Speed) показывает, как быстро можно наносить удары. Базовое значение для мечей — −2.4F. Чем ниже число, тем медленнее атака, и наоборот. Поэтому, чтобы увеличить скорость атаки, вам необходимо использовать значение ближе к нулю, например −1.0F. Чтобы замедлить — укажите более низкое значение, например −3.0F.

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

// ======================================
    // КОНСТРУКТОР — код, который запускается при загрузке мода
    // ======================================
    public ExampleMod()
    {
        // Получаем шину событий Forge
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();

        // Просим Forge запустить метод commonSetup, когда мод загрузится
        modEventBus.addListener(this::commonSetup);

        // Регистрируем наши предметы в Forge
        // Без этой строчки меч не появится в игре!
        ITEMS.register(modEventBus);

        // Регистрируем наш мод для получения игровых событий
        MinecraftForge.EVENT_BUS.register(this);
    }

    // ======================================
    // ОБЩАЯ НАСТРОЙКА — запускается один раз при загрузке
    // ======================================
    private void commonSetup(final FMLCommonSetupEvent event)
    {
        // Выводим в консоль сообщение о том, что наш мод загрузился
        LOGGER.info("Кастомный меч успешно загружен!");
    }

    // ======================================
    // СОБЫТИЕ ЗАПУСКА МИРА
    // ======================================
    // Этот метод запускается когда МИР начинает работу
    @SubscribeEvent
    public void onServerStarting(ServerStartingEvent event)
    {
        // Выводим сообщение
        LOGGER.info("Мир запущен с модом кастомного меча!");
    }

Полный код файла ExampleMod.java

package com.example.examplemod;

import com.mojang.logging.LogUtils;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.Tiers;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import org.slf4j.Logger;

@Mod(ExampleMod.MODID)
public class ExampleMod
{
    public static final String MODID = "examplemod";
    private static final Logger LOGGER = LogUtils.getLogger();
    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);

    public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword",
        () -> new SwordItem(
            Tiers.DIAMOND,
            5,
            -2.4F,
            new Item.Properties()
                .tab(CreativeModeTab.TAB_COMBAT)
        )
    );

    public ExampleMod()
    {
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        modEventBus.addListener(this::commonSetup);
        ITEMS.register(modEventBus);
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void commonSetup(final FMLCommonSetupEvent event)
    {
        LOGGER.info("Кастомный меч успешно загружен!");
    }

    @SubscribeEvent
    public void onServerStarting(ServerStartingEvent event)
    {
        LOGGER.info("Мир запущен с модом кастомного меча!");
    }
}

Создаём рецепт крафта

Чтобы получить предмет в Minecraft, его нужно скрафтить. Рецепт крафта — это схема, которая определяет, какие ресурсы и в каком порядке разместить на верстаке для создания нужного предмета.

Для нашего меча создадим рецепт из алмаза, слитка железа и палки. Игроки смогут получить меч с характеристиками алмазного, но с меньшими затратами ресурсов. Вот как это выглядит на верстаке:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Чтобы это запрограммировать, создайте файл custom_sword.json в папке src/main/resources/data/examplemod/recipes и добавьте код:

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    " D ",
    " I ",
    " S "
  ],
  "key": {
    "D": {
      "item": "minecraft:diamond"
    },
    "I": {
      "item": "minecraft:iron_ingot"
    },
    "S": {
      "item": "minecraft:stick"
    }
  },
  "result": {
    "item": "examplemod:custom_sword",
    "count": 1
  }
}

Что означают элементы кода:

  • "type": "minecraft: crafting_shaped" — тип крафта, где важно расположение ресурсов на верстаке;
  • "pattern": [" D " , " I ", " S "] — схема расположения ресурсов;
  • "D": {"item": "minecraft: diamond"}, "I": {"item": "minecraft: iron_ingot"}, "S": {"item": "minecraft: stick"} — расшифровка символов: D — алмаз, I — слиток железа, S — палка;
  • "result": {"item": "examplemod: custom_sword", "count": 1} — результат крафта и его количество.

Локализируем мод

Нашим модом могут пользоваться игроки из разных стран. Чтобы всем было удобно, добавим переводы на русский и английский. Создайте папку src/main/resources/assets/examplemod/lang и поместите в неё два файла: en_us.json и ru_ru.json. В первом файле укажите следующее:

{
  "item.examplemod.custom_sword": "Custom Sword"
}

Вот запись для второго файла:

{
  "item.examplemod.custom_sword": "Кастомный Меч"
}

Если у игрока установлена русскоязычная версия Minecraft, он увидит название «Кастомный Меч». Если англоязычная — Custom Sword.

Ещё нашему моду нужна конфигурация с описанием — игроки увидят её в меню установленных модов. Для этого отредактируйте файл mods.toml в папке src/main/resources/META-INF и укажите следующее:

modLoader="javafml"
loaderVersion="[41,)"
license="All rights reserved"

[[mods]]
modId="examplemod"
version="${file.jarVersion}"

# Название мода (это видят игроки)
displayName="Мод с Кастомным Мечом"

# Описание мода
description='''
Простой мод для Minecraft 1.19, который добавляет кастомный меч.
'''

# Авторы мода
authors="Начинающий моддер"

# Благодарности
credits="Спасибо Forge и сообществу Minecraft!"

# Эти моды и библиотеки нужны для работы нашего мода

# Зависимость от Forge
[[dependencies.examplemod]]
    modId="forge"
    mandatory=true
    versionRange="[41,)"
    ordering="NONE"
    side="BOTH"

# Зависимость от Minecraft
[[dependencies.examplemod]]
    modId="minecraft"
    mandatory=true
    versionRange="[1.19,1.20)"
    ordering="NONE"
    side="BOTH"

В меню установленных модов описание отображается так:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Ещё в папке src/main/resources должен находиться файл pack.mcmeta — в нём хранятся метаданные ресурспака, без которых мод не запустится. Если файла нет, создайте его и добавьте следующий код:

{
"pack": {
"description": "examplemod resources",
"pack_format": 9,
"forge:resource_pack_format": 9,
"forge:data_pack_format": 10
}
}

Добавляем текстуры

Наш меч может наносить урон, и его можно скрафтить, но в игре он выглядит как странный фиолетово-чёрный набор пикселей. Это стандартная заглушка Minecraft для отсутствующих текстур:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Вот как он выглядит в инвентаре:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Чтобы исправить ситуацию, нам нужно добавить текстуру. Можно нарисовать её самому или найти готовую. Размер файла текстуры должен быть 16 × 16 пикселей; формат — PNG. Редактировать дизайн предметов для Minecraft удобнее всего в программах Pinta и Photoshop.

Для примера возьмём готовый меч из текстурпака Squid Game Pack:

Скриншот: Forge / Skillbox Media

Сохраните файл с текстурой меча под именем custom_sword.png и переместите его в папку src/main/resources/assets/examplemod/textures/item. Название файла должно совпадать с ID предмета в коде (custom_sword), иначе игра не сможет связать текстуру с предметом и будет отображать заглушку.

Теперь нужно описать текстуру, чтобы игровой движок понимал, как её использовать. Создайте файл custom_sword.json в папке src/main/resources/assets/examplemod/models/item и добавьте код:

{
  "parent": "item/handheld",
  "textures": {
    "layer0": "examplemod:item/custom_sword"
  }
}

В этом фрагменте строка "parent": "item/handheld" сообщает, что для предмета используется стандартная модель инструмента: так персонаж сможет держать его в руке. Эту модель используют для всех мечей, лопат и кирок в Minecraft. Параметр "layer0": "examplemod:item/custom_sword" указывает путь к текстуре предмета, которую мы добавили ранее.

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

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

А вот как он выглядит в руках персонажа:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Тестируем мод

Если вы используете IntelliJ IDEA, откройте встроенный терминал и выполните команду gradlew.bat runClient для Windows или ./gradlew runClient для Linux и macOS. Сборщик проектов Gradle скомпилирует код и запустит Minecraft с вашим модом в режиме разработки:

Скриншот: IntelliJ IDEA / Skillbox Media

Перейдите в главное меню, откройте раздел Mods и убедитесь, что ваш мод отображается в списке установленных модификаций. После этого выберите режим Game Mode: Creative и запустите новый мир:

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

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

Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios

Чтобы поделиться модом с друзьями, его нужно собрать. Для этого выполните в терминале IntelliJ IDEA команду gradlew.bat build для Windows или ./gradlew build для Linux и macOS. Дождитесь завершения сборки и перейдите в папку build/libs. Там вы найдёте файл modid-1.0.jar — это ваш мод. Чтобы установить его в игру, найдите директорию minecraft и скопируйте файл в папку mods.

Скриншот: Mac OS / Skillbox Media

Если на каком-то этапе у вас возникли трудности, вы можете скачать готовый мод с нашего диска и протестировать JAR-файл на своём компьютере. Но для корректной работы мода нужен Minecraft 1.19 с установленным Forge. В других версиях игры мод может не запускаться или работать с ошибками из-за несовместимости API.

Что дальше

Чтобы глубже разобраться в теме, рекомендуем следующие ресурсы:

  • Официальная документация Forge — сайт с описанием всех функций платформы. Здесь вы можете научиться добавлять новые предметы, мобов, биомы и даже менять механику игры.
  • Forge Modding Tutorials — плейлист на YouTube с гайдами по работе с Forge. В нём более 60 видео, которые научат создавать моды любой сложности. Минус — видео на английском языке.
  • Учебник по созданию модов на русском языке — сборник руководств по работе со старыми версиями Minecraft. Эти материалы помогут вам освоить базовые концепции моддинга: события, регистрацию предметов и работу с API. После вы сможете перейти к программированию для новых версий игры.

Больше интересного про код — в нашем телеграм-канале.  Подписывайтесь!




Развивайте таланты ребёнка в Skillbox Kids

Программирование, разработка игр, дизайн и нейросети для детей от 7 до 17 лет. Запишите ребёнка на бесплатный урок, чтобы подобрать курс по его увлечениям.

Записаться
IT-курсы для детей от 7 до 17 лет в Skillbox Kids
Программирование, разработка игр, дизайн и нейросети. Бесплатный подбор курса по увлечениям ребёнка.
Записаться
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована