Table of Contents
Dependency Overrides
Fabric Loader version 0.11.1
introduced a feature named “Dependency Overrides”.
Before you use it: This feature is designed to give modpack developers more control over mod dependencies.
As a regular player, you shouldn't use this, but ask the mod developers to do whatever is that you want to change.
Requirements
- Fabric Loader
0.11.1
or later - Be familiar with the
fabric.mod.json
dependency syntax and the 5 types of dependencies (depends
,recommends
,suggests
,conflicts
,breaks
).
Starting
First, create a file named fabric_loader_dependencies.json
inside the config
folder (which should be inside your .minecraft
folder).
Next, we fill in the file with the following boilerplate content:
{ "version": 1, "overrides": { } }
Let's go over it line-by-line.
First, we have version
, which specifies the dependency override spec version we would like to use. At the time of writing this page, the latest version is version 1
.
Secondly, we have overrides
(which is currently empty). This Json object will contain all of our dependency overrides to various mods.
How to Override
Inside the overrides
object, we may add entries with a key of a loaded mod's ID and a value of a Json object. For example, if a loaded mod's ID is mymod
, We can do the following:
{ "version": 1, "overrides": { "mymod": {} } }
As mentioned above, mymod
has the value of a Json object. Inside that object, we can add dependency overrides.
Keys inside the mod object can be one of the 5 dependency types (depends
, recommends
, suggests
, conflicts
, breaks
).
The key may be optionally prefixed with +
or -
(e.g. “+depends”
, “-breaks”
).
The value of any one of those keys must be a Json object. This Json object follows the exact same structure as a fabric.mod.json
dependency object.
If the key is prefixed with +
, the entries inside that Json object will be added (or overridden if already exist) to the mod.
If the key is prefixed with -
, the value of each entry is ignored completely and Fabric Loader will remove those entries from the resulting dependency map.
If the key isn't prefixed, the dependency object will be replaced completely. Be careful to prefix your keys!
Practical Example
Let's assume that a mod with ID specificmod
depends on Minecraft version 1.16.4
exactly, but we want it to work on other 1.16 versions. Let's see how we can do that:
{ "version": 1, "overrides": { "specificmod": { "depends": { "minecraft": "1.16.x" } } } }
A “minecraft”
dependency will now be overridden if specified (and we know it is). There is another way to do this:
{ "version": 1, "overrides": { "specificmod": { "-depends": { "minecraft": "IGNORED" } } } }
As specified above, the value of key “minecraft”
will be ignored when removing dependencies. If a dependency with a mod ID requirement of minecraft
is found, it will be removed from our target mod specificmod
.
We can also override the entire depends
block, but with great power comes great responsibility. Be careful.
Let's assume that specificmod
's dependency specification (inside fabric.mod.json
) looks something like this:
{ "depends": { "fabricloader": ">=0.11.1", "fabric": ">=0.28.0", "minecraft": "1.16.4" }, "breaks": { "optifabric": "*" }, "suggests": { "anothermod": "*", "flamingo": "*", "modupdater": "*" } }
Aside from changing the minecraft
dependency, we also want to remove all suggests
dependencies. We can do that like so:
{ "version": 1, "overrides": { "specificmod": { "-depends": { "minecraft": "" }, "suggests": {} } } }
Because the suggests
key was not prefixed, it was completely replaced with an empty object, essentially clearing it.