Структура мода#
Так как используемое нами Forge API использует автоматический сборщик Gradle, то мы должны придерживаться определенной структуры папок.
└── src
└── main
├── java
└── resources
Создайте папку "src" и остальные в нашей рабочей директории, где мы ранее распаковывали архив MDK. Idea автоматически узнает названия папок и присвоит им нужное значение.
Для Eclipse#
Если вы используете Eclipse, то вам нужно пометить "src/main/java" и "src/main/resources" как "Source Folder" (папка исходников).
Это можно сделать двумя разными способами:
- Создать эти папки через ПКМ > New > Source Folder
- Выделить уже созданные папки "java" и "resources" и ПКМ > Build Path > Use as Source Folder
Смысл папок#
"src" в полном варианте пишется source и переводится как "Источники/Исходники".
Весь наш мод будет находиться внутри этой папки.
Далее идет "main", внутри которого находятся две папки: "java" и "resources".
- В "java" хранится исходный код нашего мода
- В "resources" хранятся все остальные доп. файлы: картинки, звуки, модели и так далее
mods.toml#
Создадим в папке "resources/META-INF" файл mods.toml
.
Этот файл определяет метаданные нашего мода: идентификатор, название, авторов, зависимости и так далее.
Минимально правильный mods.toml файл должен содержать следующее:
modLoader="javafml"
loaderVersion="[31,)"
[[mods]]
modId="tut"
version="${file.jarVersion}"
displayName="Tut Example Mod"
Где modid
— идентификатор мода. Не используйте заглавные буквы, пробелы, подчеркивания и т.д. Только английские буквы
в нижнем регистре.
Параметр displayName
отвечает за красивое название вашего мода. Тут можно использовать все что угодно. Работать будут и коды
форматирования текста.
Параметр | Описание | Обязательность |
---|---|---|
modLoader | Загрузчик модов. Всегда "javafml" | Обязательно |
loaderVersion | Версия загрузчика. Лучше не трогать | Обязательно |
[[mods]] | Список модов - сколько разрешено здесь, определяется отдельным загрузчиком модов(перевод комментария. Лучше этого не трогать) | Обязательно |
issueTrackerURL | Куда идти людям у которых случился краш. | Опционально |
modid | Идентификатор мода | Обязательно |
displayName | Название мода | Обязательно |
description | Описание мода в 1-2 абзаца | Обязательно хоть пустой |
version | Версия мода | Обязательно |
displayURL | Ссылка на сайт мода | Опционально |
updateJSONURL | Ссылка на JSON файл с данными обновлений мода | Опционально |
authors | Массив имен авторов | Опционально |
credits | Строка с выражением благодарности кому-то | Опционально |
logoFile | Путь к логотипу мода | Опционально |
[[dependencies.modid]] | Одна зависимость далее идут подпараметры: | Опционально |
modId | modid зависимости | Обязательно |
mandatory | Если true то при отсутсвии зависимости игра не загрузится | Обязательно |
versionRange | Диапоон поддерживаемых версий | Обязательно |
ordering | Мремя загрузки относительно зависимости: NONE\BEFORE\AFTER | Обязательно |
side | Сторона зависимости: BOTH\CLIENT bSERVER | Опционально |
Вот пример умеренно заполненного файла:
modLoader="javafml"
loaderVersion="[31,)"
[[mods]]
modId="tut"
version="${file.jarVersion}"
displayName="Tut Mod"
credits="Ivasik"
authors="WildTan"
description='''
Test description for test mod
'''
[[dependencies.tut]]
modId="forge"
mandatory=true
versionRange="[31,)"
ordering="NONE"
side="BOTH"
[[dependencies.tut]]
modId="minecraft"
mandatory=true
versionRange="[1.15.2]"
ordering="NONE"
side="BOTH"
Более подробно о настройке этого файла вы можете прочитать в отдельной статье. Рекомендую обязательно выделить время для этого, так как там есть несколько полезных хитростей.
Главный файл мода#
В предыдущем разделе мы заполнили файл mods.toml
. Но игра все еще не распознает мод, в чем можно убедиться, запустив
клиент. Вы не найдете свой мод в списке установленных модов. Для того чтобы все заработало, нам нужно создать главный файл мода.
В папке "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(TestMod.MOD_ID)
public class TestMod {
public static final String MOD_ID = "tut";
}
Естественно, что передано в аннотацию должно быть тоже что и в mods.toml
. В противном случае игра не запустится.
Итог#
Мы создали базовую структуру любого мода для Minecraft. Выглядит она следующим образом:
└── src
└── main
├── java
│ └── пакет.мода
│ └── ФайлМода.java
└── resources
└── META-INF
└──mods.toml