Table of Contents
Подмена зависимостей
В загрузчике Fabric версии 0.11.1
была представлена новая возможность - “подмена зависимостей”.
Перед использованием: Эта возможность разработана в первую очередь для контроля зависимостей для разработчиков модов.
Как простой игрок, вам нет смысла от этого, но это будет полезно для разработчиков модов.
Требования
- Загрузчик Fabric
0.11.1
или новее - Знание принципа работы с
fabric.mod.json
и с пятью типами зависимостей (depends
,recommends
,suggests
,conflicts
,breaks
).
Начинаем
Для начала создайте файл fabric_loader_dependencies.json
в папке config
(которая находится в папке .minecraft
).
Далее напишите в файл следующее:
{ "version": 1, "overrides": { } }
Давайте построчно разберём что делает этот файл.
Первое - version
. Этот пункт указывает на “внутренюю” версию зависимости. На момент написания страницы актуальная версия это 1
.
Второе - overrides
(пока что пусто). Этот Json-объект будет хранить в себе все зависимости от нашего мода.
Как использовать?
Внутри объекта overrides
мы можем добавлять записи с ключом идентификатора загруженного мода и значением объекта Json. Например, если идентификатор загруженного мода равен mymod
, мы можем сделать следующее:
{ "version": 1, "overrides": { "mymod": {} } }
Как упоминалось выше, mymod
имеет значение объекта Json. Внутри этого объекта мы можем добавить подмену зависимостей.
Ключи внутри объекта мода могут быть одним из 5 типов зависимостей (depends
, recommends
, suggests
, conflicts
, breaks
).
Ключ может быть дополнительно снабжен префиксом +
или -
(например - “+depends”
, “-breaks”
).
Значение любого из этих ключей должно быть объектом Json. Этот объект Json имеет точно такую же структуру, что и объект зависимости fabric.mod.json
.
Если ключ имеет префикс +
, записи внутри этого объекта Json будут добавлены (или подменены, если уже существуют) в мод.
Если ключ имеет префикс -
, значение каждой записи полностью игнорируется, и Fabric Loader удалит эти записи из финальной карты зависимостей.
Если ключ не имеет префикса, объект зависимости будет полностью заменен. Будьте осторожны с префиксом ваших ключей!
Практический пример
Давайте предположим, что мод с идентификатором specificmod
зависит именно от версии Minecraft 1.16.4
, но мы хотим, чтобы он работал на других версиях 1.16. Давайте посмотрим, как мы можем это сделать:
{ "version": 1, "overrides": { "specificmod": { "+depends": { "minecraft": "1.16.x" } } } }
Зависимость “minecraft”
теперь будет заменена, если она указана (и мы знаем, что это так). Есть другой способ сделать это:
{ "version": 1, "overrides": { "specificmod": { "-depends": { "minecraft": "IGNORED" } } } }
Как указано выше, значение ключа “minecraft”
будет игнорироваться при удалении зависимостей. Если будет найдена зависимость с требованием идентификатора мода minecraft
, она будет удалена из нашего целевого мода specificmod
.
Мы также можем переопределить весь блок depends
, но с большой властью приходит большая ответственность. Будь осторожен.
Давайте предположим, что спецификация зависимостей specificmod
(внутри fabric.mod.json
) выглядит примерно так:
{ "depends": { "fabricloader": ">=0.11.1", "fabric": ">=0.28.0", "minecraft": "1.16.4" }, "breaks": { "optifabric": "*" }, "suggests": { "anothermod": "*", "flamingo": "*", "modupdater": "*" } }
Помимо изменения зависимости minecraft
, мы также хотим удалить все зависимости suggests
. Мы можем сделать это вот так:
{ "version": 1, "overrides": { "specificmod": { "-depends": { "minecraft": "" }, "suggests": {} } } }
Поскольку ключ suggests
не имел префикса, он был полностью заменен пустым объектом, по существу очистив его.