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

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

Так как используемое нами 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" хранятся все остальные доп. файлы: картинки, звуки, модели и так далее

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