Переопределение зависимостей 26.1.2
Руководство по переопределению зависимостей, указанных в fabric.mod.json мода.
WARNING
Переопределения зависимостей используются для того, чтобы дать разработчикам модпаков больше контроля над их модами. Обычным игрокам использовать это не рекомендуется.
Перед продолжением рекомендуется разобраться, как устроены поля зависимостей модов.
Иногда при сборке модпака можно столкнуться с модами, у которых заданы неудобные требования к зависимостям — например, мод может быть слишком строгим и требовать Minecraft 26.1, хотя он также работает на 26.1.2.
Чтобы обойти это, Fabric Loader позволяет переопределять требования зависимостей, благодаря чему можно попытаться запустить мод на версии Minecraft, для которой он официально не предназначен.
TIP
Переопределение зависимостей по возможности должно использоваться только как временное решение. Если мод активно поддерживается, стоит сообщить об этой несовместимости в трекере ошибок, чтобы разработчики могли исправить проблему на своей стороне.
Настройка
INFO
Для целей этого примера мы будем использовать следующий fabric.mod.json для мода с ID example-mod. В любой момент вы можете переключаться между вкладками в блоке кода, чтобы увидеть, как переопределение зависимостей влияет на этот fabric.mod.json.
fabric.mod.json
json
{
"depends": {
"fabricloader": ">=0.11.1",
"fabric-api": ">=0.28.0",
"minecraft": "26.1"
},
"breaks": {
"optifabric": "*"
},
"suggests": {
"anothermod": "*",
"flamingo": "*",
"modupdater": "*"
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Сначала создайте файл с именем fabric_loader_dependencies.json в папке .minecraft/config.
Затем заполните файл следующим шаблонным содержимым:
json
{
"version": 1,
"overrides": {
"example-mod": {}
}
}1
2
3
4
5
6
2
3
4
5
6
json
{
"depends": {
"fabricloader": ">=0.11.1",
"fabric-api": ">=0.28.0",
"minecraft": "26.1"
},
"breaks": {
"optifabric": "*"
},
"suggests": {
"anothermod": "*",
"flamingo": "*",
"modupdater": "*"
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Давайте разберём это построчно.
Сначала идёт version, который указывает версию спецификации переопределения зависимостей, которую мы хотим использовать. На момент написания этой страницы последней версией является версия 1.
Во-вторых, у нас есть объект overrides, который будет содержать все переопределения зависимостей для различных модов. Для начала он содержит пустую запись для example-mod, в которую мы можем добавлять переопределения зависимостей.
Ключи внутри объекта мода могут соответствовать одному из пяти типов зависимостей (depends, recommends, suggests, conflicts, breaks). Значением любого из этих ключей должен быть JSON-объект. Этот JSON-объект имеет ту же структуру, что и объект зависимостей в fabric.mod.json.
Ключ может опционально начинаться с префикса + или - (например, "+depends", "-breaks").
Если ключ имеет префикс +, записи внутри этого JSON-объекта будут добавлены (или переопределены, если уже существуют) в мод.
json
{
"version": 1,
"overrides": {
"example-mod": {
"+depends": {
"minecraft": ""
}
}
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Переопределение зависимостей
Предположим, что мод с ID example-mod требует точную версию Minecraft 26.1, но мы хотим, чтобы он работал и на других версиях 26.1. Посмотрим, как это можно сделать:
json
{
"version": 1,
"overrides": {
"example-mod": {
"depends": {
"minecraft": "26.1.x"
}
}
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
json
{
"depends": {
"fabricloader": ">=0.11.1",
"fabric-api": ">=0.28.0",
"minecraft": "26.1.x"
},
"breaks": {
"optifabric": "*"
},
"suggests": {
"anothermod": "*",
"flamingo": "*",
"modupdater": "*"
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Теперь зависимость "minecraft" будет переопределена, если она указана (а мы знаем, что она указана). Есть и другой способ сделать это:
json
{
"version": 1,
"overrides": {
"example-mod": {
"-depends": {
"minecraft": "IGNORED"
}
}
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
json
{
"depends": {
"fabricloader": ">=0.11.1",
"fabric-api": ">=0.28.0",
"minecraft": "26.1.x"
},
"breaks": {
"optifabric": "*"
},
"suggests": {
"anothermod": "*",
"flamingo": "*",
"modupdater": "*"
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Как указано выше, значение ключа "minecraft" будет проигнорировано при удалении зависимостей. Если будет найдено требование зависимости с ID мода minecraft, оно будет удалено из нашего целевого мода example-mod.
Мы также можем переопределить весь блок depends, но с большой силой приходит большая ответственность. Будьте осторожны.
Помимо изменения зависимости minecraft, мы также хотим удалить все зависимости типа suggests. Мы можем сделать это, убрав префикс у ключа suggests, что заменит его пустым объектом и фактически очистит его. Это будет выглядеть следующим образом:
json
{
"version": 1,
"overrides": {
"example-mod": {
"-depends": {
"minecraft": ""
},
"suggests": {}
}
}
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
json
{
"depends": {
"fabricloader": ">=0.11.1",
"fabric-api": ">=0.28.0",
"minecraft": "26.1"
},
"breaks": {
"optifabric": "*"
},
"suggests": {}
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11




