fabric.mod.json 26.1.2
Руководству по структуре fabric.mod.json.
Файл fabric.mod.json это файл с метаданными, который использует загрузчик Fabric для загрузки мода. Он должен находиться в главной папке JAR файла мода, что бы мод смог загрузиться.
Обычно файл fabric.mod.json включен с шаблоном мода, или его можно сгенерировать с помощью Fabric Loom.
Также можно обратиться к исходному коду структуры fabric.mod.json. Вы найдёте файл fabric.mod.json используемый этим примером мода ниже.
fabric.mod.json из примера мода
json
{
"schemaVersion": 1,
"id": "example-mod",
"version": "1.0.0",
"name": "Example Mod",
"icon": "assets/example-mod/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"com.example.docs.ExampleMod",
"com.example.docs.event.ExampleModEvents",
"com.example.docs.command.ExampleModCommands",
"com.example.docs.effect.ExampleModEffects",
"com.example.docs.potion.ExampleModPotions",
"com.example.docs.sound.ExampleModSounds",
"com.example.docs.damage.ExampleModDamageTypes",
"com.example.docs.item.ExampleModItems",
"com.example.docs.enchantment.ExampleModEnchantments",
"com.example.docs.block.ExampleModBlocks",
"com.example.docs.block.entity.ExampleModBlockEntities",
"com.example.docs.menu.ExampleModMenuType",
"com.example.docs.component.ExampleModComponents",
"com.example.docs.advancement.ExampleModDatagenAdvancement",
"com.example.docs.networking.ExampleModNetworking",
"com.example.docs.networking.basic.ExampleModNetworkingBasic",
"com.example.docs.debug.ExampleModDebug",
"com.example.docs.saveddata.ExampleModSavedData",
"com.example.docs.entity.attribute.ExampleModAttributes",
"com.example.docs.recipe.ExampleModRecipes",
"com.example.docs.entity.ExampleModEntity",
"com.example.docs.gamerule.ExampleModGameRules"
],
"client": [
"com.example.docs.client.command.ExampleModClientCommands",
"com.example.docs.ExampleModBlockEntityRenderer",
"com.example.docs.ExampleModDynamicSound",
"com.example.docs.ExampleModClient",
"com.example.docs.ExampleModScreens",
"com.example.docs.rendering.CustomRenderPipeline",
"com.example.docs.rendering.HudRenderingEntrypoint",
"com.example.docs.rendering.RenderingConceptsEntrypoint",
"com.example.docs.network.basic.ExampleModNetworkingBasicClient",
"com.example.docs.appearance.ExampleModAppearanceClient",
"com.example.docs.keymapping.ExampleModKeyMappingsClient",
"com.example.docs.ExampleModRecipesClient",
"com.example.docs.entity.ExampleModCustomEntityClient"
],
"fabric-datagen": ["com.example.docs.datagen.ExampleModDataGenerator"]
},
"mixins": [
"example-mod.mixins.json",
{
"config": "example-mod.client.mixins.json",
"environment": "client"
}
],
"depends": {
"fabricloader": ">=0.19.0",
"minecraft": "~26.1",
"java": ">=25",
"fabric-api": "*"
},
"accessWidener": "example-mod.classtweaker"
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Обязательные поля
Следующие поля являются обязательными, что бы Fabric загрузил ваш мод.
schemaVersionДолжно быть первым элементом, и значение всегда должно быть1. Необходимо, что бы Fabric Loader правильно прочитал файл.idЗначение типа string, определяющее идентификатор мода. Должно начинаться с буквы. Может содержать только символы ASCIII, цифры, нижние подчёркивания или дефисы. От 2 до 64 символов.versionЗначение типа string, определяющее версию мода, должно соблюдать структуру Семантического Версионирования 2.0.0.
json
"schemaVersion": 1,
"id": "example-mod",
"version": "1.0.0"1
2
3
2
3
Метаданные
name: Строка, определяющая название мода, для пользователя. Если не указано, то является id.description: Строка, определяющая описание мода. Если не указано, то является пустой строкой.
json
"name": "Example Mod",
"description": "This is an example description! Tell everyone what your mod is about!",1
2
2
Контакты
contact: Словарь, определяющий всю контактную информацию проекта. Содержит немного общих полей:
email: Строка, определяющая электронную почту, для связи с разработчиком мода. Электронная почта должна быть действительной.homepage: Строка, определяющая страницу проекта или разработчика. Адрес HTTP/HTTPS должен быть действительным.irc: Строка, определяющая канал общения, относящийся к моду. Должно быть в правильном формате URL - например:irc://irc.esper.net:6667/charsetдля#charsetв EsperNet - этот порт необязательный, и если неуказан то будет 6667.issues: Строка, определяющая портал, относящийся к ошибкам проекта. Адрес HTTP/HTTPS должен быть действительным.sources: Строка, определяющая репозиторий исходного кода проекта. Должно быть действительным URL - он может быть специализированным для разных систем контроля версий (как Git или Mercurial).
Список может быть больше - моды так же могут добавлять необычные ключи, как discord, telegram, twitter... Если возможно, так же должно быть действительным URL.
json
"contact": {
"homepage": "https://fabricmc.net",
"sources": "https://github.com/FabricMC/fabric-example-mod"
}1
2
3
4
2
3
4
Авторы и Помощники
authorsМассив авторов мода. Элементы могут быть строкой или объектом с полями перечисленными ниже.contributorsМассив помощников мода. Элементы могут быть строкой или объектом с полями перечисленными ниже.
Поля:
nameОбязательная строка с настоящим именем человека, или его ника.contactНеобязательный объект с контактной информацией человека. То же самое, как и обычныйcontact.
json
"authors": [
"Me!",
{
"name": "Tiny Potato",
"contact": {
"homepage": "https://fabricmc.net",
"sources": "https://github.com/FabricMC/fabric-example-mod"
}
}
]1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Лицензия
licenseСтрока или массив, который определяет лицензионную информацию. Можно использовать Идентификаторы лицензий SPDX для автоматического поиска открытых исходных лицензий.
Это должно проводить минимальное количество лицензий, которые удовлетворяют пакет модов. То есть, те кто хотят использовать или распространять ваш мод, всего лишь то надо соблюдать перечисленные здесь лицензии. Если ваши части кода имеют две лицензии, выберите более важную лицензию. Этот список не обязательно запрещает вам предоставлять дополнительные права или применять разные лицензии для определённых людей в каждом случае.
json
"license": "CC0-1.0"1
Иконка
iconСтрока или словарь, которые определяют иконку вашего мода. Иконки это квадратные картинки PNG формата. Наборы ресурсов майнкрафта используют разрешение 128x128, но это не жёсткое требование, но желательно соблюдать. Может быть предоставлено в двух формах:- Путь к одному PNG файлу.
- Словарь ширины изображений к их файловым путям.
json
"icon": "assets/example-mod/icon.png"1
Загрузка мода
Среда
environment: Значение типа string, которое определяет в какой среде мод должен запущен:*: Запускается во всех средах. Стоит по умолчанию.client: Запускается на физической клиентской стороне. Если установить, то мод не будет загружен на выделенных серверах.server: Запускается на физической серверной стороне. Если установить, то мод не будет загружен на клиентах, включая одиночную игру и игру по сети.
json
"environment": "*"1
Точки входа
entrypointsОбъект, определяющий основные классы, из которых ваш мод будет загружен.mainString массив имен, которые имплементируютModInitializer.clientString массив имен, которые имплементируютClientModInitializer. Данная точка входа запускается послеосновной, и только на физической клиентской стороне.serverString массив имен, которые имплементируютDedicatedServerModInitializer. Данная точка входа запускается послеосновной, и только на физической серверной стороне.
Загрузчик Fabric поставляет эти три основных точки входа, но остальные моды могут добавлять свои. Например, Fabric API поставляет fabric-datagen для точек входа генератора данных.
Каждая точка входа может загружать множество классов, методов или статических полей. Например:
json
"main": [
"net.fabricmc.example.ExampleMod",
"net.fabricmc.example.ExampleMod::handle"
]1
2
3
4
2
3
4
TIP
Если вы не используете Java, то можете обратиться к документации адаптера языка. Для Kotlin находится в README файл в Fabric Language Kotlin.
JAR файлы
jars: Массив JAR файлов находящиеся внутри твоего мода. Используяincludeв блоке зависимостей, Loom автоматические заполнит это. Каждый элемент это объект содержащий ключfile, с путём к включённому JAR файлу в вашем моде. Например:
json
"jars": [
{
"file": "nested/vendor/dependency.jar"
}
]1
2
3
4
5
2
3
4
5
Адаптеры языков
languageAdapters: Словарь классов, которые имплементируютLanguageAdapter.
json
"languageAdapters": {
"kotlin": "net.fabricmc.language.kotlin.KotlinAdapter"
}1
2
3
2
3
Миксины
mixins: Список файлов с конфигом миксина. Каждый элемент это путь к файлу конфига миксина в JAR файле вашего мода или объект содержащий следующие поля:config: Путь к файлу конфига миксина внутри JAR файла вашего мода.environment: То же самое, что и поле environment* выше. Например:
json
"mixins": [
"example-mod.mixins.json",
{
"config": "example-mod.client-mixins.json",
"environment": "client"
}
]1
2
3
4
5
6
7
2
3
4
5
6
7
Расширители Доступа
accessWidener: Строка идентифицирующая как файл расширителя доступа или модификатора класса.
json
"accessWidener": "example-mod.classtweaker"1
Обеспечивает
provides: Массив идентификаторов модов, которые будут псевдонимами для этого мода. Загрузчик Fabric рассмотрит данные идентификатора, будто эти моды есть. Если другой мод использует какой-либо из них, то он не загрузится.
json
"provides": [
"example_mod"
]1
2
3
2
3
Разрешения Зависимостей
Эти ключи будут принимать словарь зависимостей. Для больших деталей структуры словаря смотрите ниже:
depends: Зависимости обязательные для запуска. Если какого либо не будет, то Загрузчик Fabric вызовет краш.recommends: Зависимости необязательные для запуска. Для каждой отсутствующей зависимости, Загрузчик Fabric предупредит в логах.suggests: Зависимости необязательные для запуска. Используйте это как метаданные.breaks: Для модов, которые вместе с вашим, будут вызывать краш игры. Если какой-либо будет, то Загрузчик Fabric вызовет краш.conflicts: Для модов, которые вместе с вашим, могут вызывать баги и прочее. Для каждого представленного конфликтующего мода, Загрузчик Fabric предупредит в логах.
Семантическое Версионирование
Ключ каждого элемента - это идентификатор мода зависимости.
Значения каждого ключа - это строка или массив строк, говорящих поддерживаемый диапазон версий зависимостей. Если это массив, для выполнения ограничения должен совпадать только один диапазон.
Здесь есть немного примеров диапазонов и что они показывают. Попробуйте использовать проверка Семантического Версионирования от jubianchi что бы протестировать, какие значения удовлетворят ограничение.
Примеры Семантического Версионирования
Заметка: Майнкрафт не следует семантическому версионированию. Если надо, Fabric переведёт версию Майнкрафта в эквивалент в виде семантического версионирования. Примеры включают 26.1->26.1.0, 26.1-snapshot-1->26.1-alpha.1, 26w14a->26.1.1-alpha.26.14.a.
| Диапазон | Описание | Совпадения | Конфликты |
|---|---|---|---|
* | Любая версия (не рекомендуется) | 26.1.2, 24w14potato... | нету |
26.1.2 | Только одна версия | 26.1.2 | 26.1, 26.1.1, 26.2... |
| <Range r="26.1.0 | 26.1.1" /> | Любой из диапазона | |
[26.1.0, 26.1.1] | Эквивалент 26.1.0 || 26.1.1 | 26.1, 26.1.1 | 26.1.2, 26.2... |
>26 | Версии выше (исключительно) | 26.1.2, 26.2... | 26, 25.x... |
>=26.1 | Эта версия или выше (включающее) | 26.1, 26.1.2, 26.2`... | 26.0, 25.x... |
<=26.1 | Эта версия или ниже (включающее) | 26.1, 26.0, 25.x... | 26.1.2, 26.2... |
>26 <26.2 | Между двумя версиями (оба исключительные) | 26.1, 26.1.2, снапшоты... | 26, 26.2... |
>=26.1 <26.2 | Между двумя версиями (включающее нижнюю границу) | 26.1, 26.1.2, снапшоты... | 26.0, 26.2... |
26.1.x | Любой патч минорной версии | 26.1, 26.1.2, снапшоты... | 26.2, 27.x`... |
~26.1 | То же самое, что и 26.1.x | 26.1, 26.1.2, снапшоты... | 26.2, 27.x`... |
^26.1 | Любая версия в том же мажоре | 26.1.2, 26.2, 26.3... | 25.x, 27.x... |
json
"depends": {
"example-mod": "*",
"minecraft": [
"26.1",
"26.1.1"
]
}
"suggests": {
"another-mod": ">1.0.0"
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Пользовательские Поля
Вы можете добавить любое поле внутри как кастомное поле. Загрузчик проигнорирует их. Однако, рекомендуется использовать пространство имен ваших полей, что бы избежать конфликты с другими модами.






