Перейти к содержанию

Структура мода#

Так как используемое нами Forge API использует автоматический сборщик Gradle, то мы должны придерживаться определенной структуры папок.

└── src    
    └── main
        ├── java
        └── resources

Создайте папку "src" и остальные в нашей рабочей директории, где мы ранее распаковывали архив MDK. Idea автоматически узнает названия папок и присвоит им нужное значение.

Для Eclipse#

Если вы используете Eclipse, то вам нужно пометить "src/main/java" и "src/main/resources" как "Source Folder" (папка исходников).

Это можно сделать двумя разными способами:

  1. Создать эти папки через ПКМ > New > Source Folder
  2. Выделить уже созданные папки "java" и "resources" и ПКМ > Build Path > Use as Source Folder

Смысл папок#

"src" в полном варианте пишется source и переводится как "Источники/Исходники".

Весь наш мод будет находиться внутри этой папки.

Далее идет "main", внутри которого находятся две папки: "java" и "resources".

  • В "java" хранится исходный код нашего мода
  • В "resources" хранятся все остальные доп. файлы: картинки, звуки, модели и так далее

mcmod.info#

Создадим в папке "resources" файл mcmod.info.

Этот файл определяет метаданные нашего мода: идентификатор, название, авторов, зависимости и так далее. Это обычный JSON файл, хотя он и имеет расширение .info.

Минимально правильный mcmod.info файл должен содержать следующее:

[{
  "modid": "tut",
  "name": "Tutorial mod"
}]

Где modid — идентификатор мода. Не используйте заглавные буквы, пробелы, подчеркивания и т.д. Только английские буквы в нижнем регистре.

Параметр name отвечает за красивое название вашего мода. Тут можно использовать все что угодно. Работать будут и коды форматирования текста.

Параметр Описание
modid Идентификатор мода
name Название мода
description Описание мода в 1-2 абзаца
version Версия мода
mcversion Версия Minecraft
url Ссылка на сайт мода
updateJSON Ссылка на JSON файл с данными обновлений мода
authorList Массив имен авторов
credits Строка с выражением благодарности кому-то
logoFile Путь к логотипу мода
screenshots Массив путей к скриншотам мода. В данный момент не поддерживается
parent modid родительского мода
useDependencyInformation Если true, то следующие три параметра будут учитываться
requiredMods Массив modid модов, которые требуются для работы данного мода. Если данные моды не установлены, то будет краш игры. Данный параметр не указывает порядок загрузки модов. Используйте для этой цели параметр dependencies
dependencies Массив modid модов, которые должны быть загружены до загрузки данного мода
dependants Массив modid модов, которые должны быть загружены после загрузки данного мода

Вот пример умеренно заполненного файла:

[{
  "modid": "tut",
  "name": "Tutorial Mod",
  "description": "This is my SUPER Test Mod. Like it!",
  "version": "1.0.0.0",
  "mcversion": "1.12+",
  "url": "mcmodding.ru/",
  "authorList": ["Ivasik", "Someone else"],
  "credits": "I'd like to thank my mother and father."
}]

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

Главный файл мода#

В предыдущем разделе мы создали файл mcmod.info. Но игра все еще не распознает мод, в чем можно убедиться, запустив клиент. Вы не найдете свой мод в списке установленных модов. Для того чтобы все заработало, нам нужно создать главный файл мода.

В папке "java" создайте базовый пакет вашего мода. Если у вас уже есть домен для вашего мода, то отличным названием для пакета будет что-то вроде ru.ivasik.tutorial. Если домена у вас нет, вполне подойдет использование вашего никнейма, как название пакета верхнего уровня: ivasik.tutorial.

В моем случае пакет будет называться так: ru.ivasik.tutorial.

Теперь создадим в нем файл TestMod.java. Это и будет главным файлом нашего мода.

Для того чтобы Forge понял, что данный файл действительно является главным, мы должны добавить к определению класса аннотацию @Mod:

// TestMod.java

package ru.mcmodding.testmod;

import net.minecraftforge.fml.common.Mod;

@Mod(modid = "tut")
public class Tutorial {}

Естественно, что поле modid в аннотации должно быть равно modid в mcmod.info. В противном случае мод будет распознан, но выведет сообщение о том, что mcmod.info не найден. Впрочем, на работу мода это никак не повлияет.

Разбору полей аннотации @Mod посвящена отдельная статья.

Итог#

Мы создали базовую структуру любого мода для Minecraft. Выглядит она следующим образом:

└── src    
    └── main
        ├── java
        │   └── пакет.мода
        │       └── ФайлМода.java
        └── resources
            └── mcmod.info