====== fabric.mod.json ======
Файл **fabric.mod.json** - это файл метаданных мода, используемый Fabric Loader для загрузки модов. Для загрузки мод должен иметь этот файл с точным именем, размещенный в корневом каталоге JAR мода.
===== Обязательные поля =====
* **schemaVersion** Необходим для внутренних механизмов. Всегда должно быть ''1''.
* **id** Определяет идентификатор мода - строку из латинских букв, цифр, знаков подчеркивания длиной от 1 до 63.
* **version** Определяет версию мода - строковое значение, необязательно соответствующее c спецификацией [[https://semver.org/lang/ru/|Семантического Версионирования 2.0.0]].
===== Необязательные поля =====
==== Загрузка мода ====
* **environment**: Определяет, где запускается мод: только на стороне клиента (клиентский мод), только на стороне сервера (плагин) или с обеих сторон (обычный мод). Содержит идентификатор среды:
* **''*''** Работает везде. По умолчанию.
* **client** Работает на стороне клиента.
* **server** Работает на стороне сервера.
* **entrypoints** Определяют основные классы вашего мода, которые будут загружены.
* Для вашего мода есть 3 точки входа по умолчанию:
* **main** Будет запущен первым. Для классов, реализующих ''ModInitializer''.
* **client** Будет запущен вторым и только на стороне клиента. Для классов, реализующих ''ClientModInitializer''.
* **server** Будет запущен вторым и только на стороне сервера. Для классов, реализующих ''DedicatedServerModInitializer''.
* Каждая точка входа может содержать любое количество загружаемых классов. Классы (или методы, или статические поля) могут быть определены двумя способами:
* Если вы используете Java, то просто перечислите классы (или другие) с полными именами. Например:
"main": [
"net.fabricmc.example.ExampleMod",
"net.fabricmc.example.ExampleMod::handle"
]
* Если вы используете какой-либо другой язык, обратитесь к документации языкового адаптера. Котлинский находится [[https://github.com/FabricMC/fabric-language-kotlin/blob/master/README.md|здесь (англ.)]].
* **jars** Список вложенных JARs внутри JAR вашего мода для загрузки. Перед использованием поля ознакомьтесь с [[ru:tutorial:loader04x#nested_jars|руководство по использованию вложенных JARs]]. Каждая запись представляет собой объект, содержащий ключ ''file''. Это должен быть путь внутри JAR вашего мода к вложенному JAR. Например:
"jars": [
{
"file": "nested/vendor/dependency.jar"
}
]
* **languageAdapters** Словарь адаптеров для используемых языков с указанием полных имен их классов адаптеров. Например:
"languageAdapters": {
"kotlin": "net.fabricmc.language.kotlin.KotlinAdapter"
}
* **mixins** Список файлов конфигурации миксина. Каждая запись - это путь к файлу конфигурации миксина внутри JAR вашего мода или объекту, содержащему следующие поля:
* **config** Путь к файлу конфигурации миксина внутри JAR вашего мода.
* **environment** То же самое, что и поле верхнего уровня **environment**. Смотрите выше. Например:
"mixins": [
"modid.mixins.json",
{
"config": "modid.client-mixins.json",
"environment": "client"
}
]
==== Разрешение зависимостей ====
Ключом каждой записи приведенных ниже объектов является идентификатор модуля зависимости.
Значение каждого ключа представляет собой строку или массив строк, объявляющих поддерживаемые диапазоны версий. В случае массива предполагается связь "ИЛИ", то есть только один диапазон должен совпадать, чтобы коллективный диапазон был удовлетворен.
В случае всех версий ''*'' - это специальная строка, объявляющая, что любая версия соответствует диапазону. Кроме того, точное совпадение строк должно быть возможно независимо от типа версии.
* **depends** Для зависимостей, необходимых для запуска. Без них игра не запустится.
* **recommends** Для зависимостей, которые не требуются для запуска. Без них игра будет выдавать предупреждение.
* **suggests** Для зависимостей, которые не требуются для запуска. Используйте это как своего рода метаданные.
* **breaks** Для модов, которые вместе с вашими могут привести к сбою игры. С ними игра не запустится.
* **conflicts** Для модов, которые вместе с вашими вызывают какие-то ошибки и т.д. С их помощью игра будет выдавать предупреждение.
==== Метаданные ====
* **name** Определяет удобное для пользователя название мода. Если его нет, соответствует **id**.
* **description** Определяет описание мода. Если нет, строка пуста.
* **contact** Определяет контактную информацию для проекта. Это объект из следующих полей:
* **email** Контактный адрес электронной почты, относящийся к моду. Должен быть действительный адрес электронной почты.
* **irc** Канал IRC, относящийся к моду. Должен иметь допустимый формат URL-адреса - например: ''irc://irc.esper.net:6667/charset'' для ''#charset'' в EsperNet - порт необязателен и предполагается, что он равен 6667, если отсутствует.
* **homepage** Домашняя страница проекта или пользователя. Должен быть действительный адрес HTTP/HTTPS.
* **issues** Репорт ошибок проекта. Должен быть действительный адрес HTTP/HTTPS.
* **sources** Репозиторий исходного кода проекта. Должен быть действительный URL-адрес - однако он может быть специализированным URL-адресом для данного VCS (например, Git или Mercurial).
* Список не является исчерпывающим - моды могут предоставлять дополнительные, нестандартные ключи (такие как **discord**, **slack**, **twitter** и т.д.) - если возможно, они должны быть действительными URL-адресами.
* **authors** Список авторов мода. Каждая запись представляет собой одно имя или объект, содержащий следующие поля:
* **name** Настоящее имя или ник этого человека. Обязательно.
* **contact** Контактная информация лица. То же самое, что и верхний уровень **contact**. Смотрите выше. Необязательно.
* **contributors** Список участников мода. Каждая запись такая же, как и в поле **author**. Смотрите выше.
* **license** Определяет информацию о лицензировании. Может быть либо одной строкой лицензии, либо их списком.
* Это должно обеспечить полный набор привилегированных лицензий, передающих весь пакет модов. Другими словами, соответствие всем перечисленным лицензиям должно быть достаточным для использования, распространения и т.д. пакета модов в целом.
* В случаях, когда часть кода имеет двойную лицензию, выберите предпочитаемую лицензию. Список не является исчерпывающим, служит в первую очередь своего рода подсказкой и не мешает вам предоставлять дополнительные права/лицензии в каждом конкретном случае.
* Чтобы помочь автоматизированным инструментам, рекомендуется использовать [[https://spdx.org/licenses/|SPDX Идентификаторы лицензий]] для лицензий с открытым исходным кодом.
* **icon** Определяет значок мода. Значки представляют собой квадратные файлы в формате PNG. (Пакеты ресурсов Minecraft используют 128 × 128, но это не является жестким требованием - однако рекомендуется использовать степень двойки.) Может быть предоставлен в одной из двух форм:
* Путь к одному файлу PNG.
* Словарь ширины изображений в соответствии с путями к их файлам.
===== Пользовательские поля =====
Вы можете добавить любое поле, которое хотите добавить внутри поля ''custom''. Загрузчик проигнорировал бы их. Однако //настоятельно рекомендуется использовать пространство имен для ваших полей//, чтобы избежать конфликтов, если ваши поля (имена) будут добавлены в стандартную спецификацию.