Table of Contents

Подмена зависимостей

В загрузчике Fabric версии 0.11.1 была представлена новая возможность - “подмена зависимостей”.

Перед использованием: Эта возможность разработана в первую очередь для контроля зависимостей для разработчиков модов.

Как простой игрок, вам нет смысла от этого, но это будет полезно для разработчиков модов.

Требования

Начинаем

Для начала создайте файл fabric_loader_dependencies.json в папке config (которая находится в папке .minecraft).

Далее напишите в файл следующее:

  1. {
  2. "version": 1,
  3. "overrides": {
  4.  
  5. }
  6. }

Давайте построчно разберём что делает этот файл.

Первое - version. Этот пункт указывает на “внутренюю” версию зависимости. На момент написания страницы актуальная версия это 1.

Второе - overrides (пока что пусто). Этот Json-объект будет хранить в себе все зависимости от нашего мода.

Как использовать?

Внутри объекта overrides мы можем добавлять записи с ключом идентификатора загруженного мода и значением объекта Json. Например, если идентификатор загруженного мода равен mymod, мы можем сделать следующее:

  1. {
  2. "version": 1,
  3. "overrides": {
  4. "mymod": {}
  5. }
  6. }

Как упоминалось выше, 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. Давайте посмотрим, как мы можем это сделать:

  1. {
  2. "version": 1,
  3. "overrides": {
  4. "specificmod": {
  5. "+depends": {
  6. "minecraft": "1.16.x"
  7. }
  8. }
  9. }
  10. }

Зависимость “minecraft” теперь будет заменена, если она указана (и мы знаем, что это так). Есть другой способ сделать это:

  1. {
  2. "version": 1,
  3. "overrides": {
  4. "specificmod": {
  5. "-depends": {
  6. "minecraft": "IGNORED"
  7. }
  8. }
  9. }
  10. }

Как указано выше, значение ключа “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. Мы можем сделать это вот так:

  1. {
  2. "version": 1,
  3. "overrides": {
  4. "specificmod": {
  5. "-depends": {
  6. "minecraft": ""
  7. },
  8. "suggests": {}
  9. }
  10. }
  11. }

Поскольку ключ suggests не имел префикса, он был полностью заменен пустым объектом, по существу очистив его.