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 не имел префикса, он был полностью заменен пустым объектом, по существу очистив его.