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

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

API Minecraft Forge предлагает нам использовать следующую структуру проекта мода:

src
└── main
    ├── java
    └── resources
  • «src» содержит «наборы» для исходного кода и ресурсов. Это может пригодиться, чтобы, например, не смешивать код программы и код для её тестирования. Основой код размещается в модуле «main».
  • «java» содержит исходный код соответствующий своему названию языка программирования. Помимо Java, Minecraft Forge предоставляет из коробки возможностью написания модов на Scala (исходный код размещается в каталоге src/main/scala).
  • «resources» содержит ресурсы, а ими в свою очередь являются: текстуры, файлы локализации, звуки и так далее.

Обратите внимание!

Приведённые выше папки поставляются сразу с MDK и содержат официальный мод-пример, но мы их удалили на этапе подготовки, поэтому пересоздайте их. С данным учебником поставляемый мод-пример не нужен.

IDEA автоматически распределит значения источников кода и ресурсов папкам «src» и «resources» соответственно.

В случае Eclipse, выдайте им эти значения вручную: ПКМ по папке → Build Path → Use as Source Folder

Про наборы исходного кода

По умолчанию Gradle предоставляет наборы: «main» для кода программы и «test» для кода её тестирования (например, для unit-тестов). Minecraft Forge также предоставляет набор «api», файлы которого не будут добавляться в итоговый файл мода, но могут быть использованы во время сборки.

Подробно про наборы исходного кода вы можете прочесть на странице документации Gradle.

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

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

Для данного урока мы будем использовать пакет: ru.mcmodding.tutorial.

Теперь создадим в нем класс с названием вашего мода, для урока: McModding. Это и будет главным классом нашего мода.

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

package ru.mcmodding.tutorial;

import cpw.mods.fml.common.Mod;

@Mod(modid = "mcmodding")
public class McModding {
// ...
}

Аннотация имеет один единственный параметр modid – уникальный идентификатор мода. В ModID рекомендуется использовать только латиницу в нижнем регистре, никаких пробелов, подчеркиваний и прочего. Крайне не рекомендуется изменять ModID в дальнейшем, так как это приведёт к потере игровых данных, созданных модом.

Minecraft Forge допускает возможность наличия в проекте нескольких классов с аннотацией @Mod, каждый из которых должен иметь свой modid и будет считаться отдельным модом. Автор учебника не знает, зачем это может пригодиться, кроме как для накрутки счётчика загруженных модов.

Разбору полей аннотации @Mod посвящена отдельная статья. Если Вы не собираетесь использовать файл mcmod.info рекомендуется также заполнить такие поля аннотации как name и version.

Файл mcmod.info#

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

Файл mcmod.info является необязательным и в основном служит для оформления странички мода на экране «Mod List».

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

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

[{
  "modid": "mcmodding",
  "name": "McModding Mod"
}]

Где параметр modid — идентификатор мода, а name отвечает за красивое название вашего мода, которое видит пользователь.

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

Следует обратить внимание, что корневой элемент структуры файла является массивом. Это сделано для возможности описать все моды в одном файле, если проект содержит несколько классов, аннотированных @Mod.

Доступные параметры#

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

Пример заполненного файла:

[{
  "modid": "mcmodding",
  "name": "McModding Mod",
  "description": "Это мой первый и крутой мод!",
  "version": "1.0.0",
  "url": "mcmodding.ru",
  "authorList": ["Icosider", "CMTV", "TheAndrey"],
  "credits": "Спасибо, что читаете наш учебник."
}]

Итог#

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

src    
└── main
    ├── java
    │   └── ru.mcmodding.tutorial
    │       └── McModding.java
    └── resources
        └── mcmod.info