diff --git a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java index 2c7e0928c..dacfaeea0 100644 --- a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java +++ b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -128,7 +129,7 @@ public void setGameProvider(GameProvider provider) { private void setGameDir(Path gameDir) { this.gameDir = gameDir; - this.configDir = gameDir.resolve("config"); + this.configDir = this.resolveFabricDirectory("config"); } @Override @@ -194,6 +195,12 @@ public void load() { } } + private Path resolveFabricDirectory(String directoryName) { + String propertyName = "fabric.dir." + directoryName; + Path directory = Paths.get(System.getProperty(propertyName, directoryName)); + return directory.isAbsolute() ? directory : getGameDir().resolve(directory); + } + private void setup() throws ModResolutionException { boolean remapRegularMods = isDevelopmentEnvironment(); VersionOverrides versionOverrides = new VersionOverrides(); @@ -203,7 +210,7 @@ private void setup() throws ModResolutionException { ModDiscoverer discoverer = new ModDiscoverer(versionOverrides, depOverrides); discoverer.addCandidateFinder(new ClasspathModCandidateFinder()); - discoverer.addCandidateFinder(new DirectoryModCandidateFinder(gameDir.resolve("mods"), remapRegularMods)); + discoverer.addCandidateFinder(new DirectoryModCandidateFinder(resolveFabricDirectory("mods"), remapRegularMods)); discoverer.addCandidateFinder(new ArgumentModCandidateFinder(remapRegularMods)); Map> envDisabledMods = new HashMap<>();