Лекция 1: Настройка проекта на Forge
Установка IntelliJ IDEA, JDK 17, Forge MDK и первый запуск мода
Привет! Сейчас настроим проект на Forge 47.4.10 в IntelliJ IDEA с нуля и запустим Minecraft с нашим модом.
1. Установка среды разработки
Скачайте и установите IntelliJ IDEA Community Edition (бесплатная). Выберите версию для своей ОС:
Лично я использую версию 2023.1.7 (т.к. с годами привык к ней), выбирать версии можно через приложение Toolbox, от Jetbrains. Вы же можете выбрать версию какую хотите.

2. Установка JDK
Для Forge 1.20.1 нужен JDK 17 (Java Development Kit). Рекомендую Adoptium:
3. Загрузка Forge MDK
На странице Forge нажмите именно Mdk, не Installer. MDK — это шаблон проекта для разработчиков:

4. Открытие проекта в IntelliJ IDEA
Распакуйте архив в удобную папку.

Переименуйте папку в название вашего мода, в моём случае это будет "Rinova"
Откройте IntelliJ IDEA → File → Open

→ выберите распакованную папку:

Если IDEA предложит установить плагины (для Gradle и т.д.), соглашайтесь и дождитесь завершения.
IDEA распознает проект как Gradle-проект. Справа должна появиться панель Gradle:

Если панель не появилась: File → Settings → Build, Execution, Deployment → Build Tools → Gradle → выберите Use Gradle from: wrapper, затем Refresh.
5. Настройка проекта
5.1. Файл gradle.properties
Откройте gradle.properties в корне проекта:
Версии Minecraft и Forge уже прописаны в MDK. Прокрутите до раздела ## Mod Properties — там нужно заполнить данные о моде.
Дефолтные значения выглядят так:
mod_id=examplemod
mod_name=Example Mod
mod_license=All Rights Reserved
mod_version=1.0.0
mod_group_id=com.example.examplemod
mod_authors=YourNameHere, OtherNameHere
mod_description=Example mod description.
Заменяем на свои:
mod_id=rinova
mod_name=Rinova
mod_license=All Rights Reserved
mod_version=0.0.1
mod_group_id=com.ringo.rinova
mod_authors=Ringoway
mod_description=A cool demonstration mod that will have a little bit of everything.
Что значит каждый параметр:
-
mod_id — уникальный идентификатор мода. Только строчные латинские буквы, вместо пробелов
_. Пример:rinova -
mod_name — название мода, которое видно в списке модов Minecraft. Пример:
Rinova -
mod_version — версия мода.
0.0.1для начальной разработки,1.0.0для первого релиза. -
mod_group_id — путь к главному пакету мода. Должен совпадать со структурой папок в
src/main/java/. Если написатьcom.ringo.rinova, то в проекте нужна структураcom/ringo/rinova:
ringo — мой никнейм, rinova — ID мода.
Что такое пакеты и зачем нужна такая структура — в лекции Основы Java.
- mod_authors — авторы мода
- mod_description — описание, видно в списке модов
5.2. Файл build.gradle
build.gradle — конфигурация сборки. На старте менять его не нужно, параметры подтягиваются из gradle.properties:
version = mod_version
group = mod_group_id
Зависимость на Forge тоже собирается из переменных:
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
Наведите на переменную с зажатым Ctrl и кликните — IDEA перекинет в
gradle.properties.
Если хотите, чтобы в имени JAR-файла была версия игры (например, rinova-1.20.1-0.0.1.jar), замените строку version:
version = "${project.minecraft_version}-${project.mod_version}"
После всех изменений нажмите кнопку синхронизации Gradle. Это слоник справа сверху:
Ошибки при старте проекта? Смотрите Исправление ошибок старта проекта.
5.3. Главный класс мода
Главный класс — точка входа мода. Находится в src/main/java/com/example/examplemod/ExampleMod.java.
Для начала:
- Переименуйте пакет
com.example.examplemodвcom.ringo.rinova(или вашmod_group_id) - Переименуйте класс
ExampleModвRinovaMod(или название вашего мода) - Удалите класс
Config— он пока не нужен
Имена классов в Java пишутся в CamelCase. Подробнее: Основы Java.
Для переименования: выделите имя → Shift + F6. IDEA переименует по всему проекту.
Откройте переименованный класс и приведите к такому виду:
package com.ringo.rinova;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(RinovaMod.MOD_ID)
public class RinovaMod {
public static final String MOD_ID = "rinova";
public RinovaMod(FMLJavaModLoadingContext context) {
IEventBus modEventBus = context.getModEventBus();
modEventBus.addListener(this::commonSetup);
MinecraftForge.EVENT_BUS.register(this);
}
private void commonSetup(final FMLCommonSetupEvent event) {
}
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event) {
}
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public static class ClientModEvents {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
}
}
}
Что изменилось относительно шаблона:
MODIDпереименован вMOD_IDсо значением"rinova"- Удалён лишний код из шаблона (логирование, пример с блоками, Config)
- Остался каркас: конструктор,
commonSetup,onServerStarting,ClientModEvents
Ctrl + Alt + L— форматирование кода в IDEA. Расставит пробелы, скобки, удалит неиспользуемые импорты.
5.4. Запуск проекта
Откройте панель Gradle → Tasks → forgegradle runs → runClient. Дважды кликните:
Если всё сделано правильно, Minecraft запустится. Откройте Mods и найдите свой мод:
Весь код доступен на GitHub. Можете сравнить со своим или скопировать: