diff --git a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java index b229c9418..c77b2689c 100644 --- a/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java +++ b/src/main/java/net/fabricmc/loader/impl/FabricLoaderImpl.java @@ -35,6 +35,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.VisibleForTesting; import org.objectweb.asm.Opcodes; @@ -135,7 +136,7 @@ public void setGameProvider(GameProvider provider) { private void setGameDir(Path gameDir) { this.gameDir = gameDir.toAbsolutePath().normalize(); - this.configDir = gameDir.resolve("config"); + this.configDir = getConfigDirectory0(); } @Override @@ -617,9 +618,17 @@ public String[] getLaunchArguments(boolean sanitize) { @Override protected Path getModsDirectory0() { - String directory = System.getProperty(SystemProperties.MODS_FOLDER); + return getConfiguredOrRelativeDirectory(SystemProperties.MODS_FOLDER, "mods"); + } + + private Path getConfigDirectory0() { + return getConfiguredOrRelativeDirectory(SystemProperties.CONFIG_FOLDER, "config"); + } + + private @NotNull Path getConfiguredOrRelativeDirectory(String systemProperty, String fallbackName) { + String directory = System.getProperty(systemProperty); - return directory != null ? Paths.get(directory) : gameDir.resolve("mods"); + return directory != null ? Paths.get(directory) : gameDir.resolve(fallbackName); } /** diff --git a/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java b/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java index dce2e1cb7..d0ea0ce09 100644 --- a/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java +++ b/src/main/java/net/fabricmc/loader/impl/util/SystemProperties.java @@ -49,6 +49,8 @@ public final class SystemProperties { public static final String ADD_MODS = "fabric.addMods"; // a comma-separated list of mod ids to disable, even if they're discovered. mostly useful for unit testing. public static final String DISABLE_MOD_IDS = "fabric.debug.disableModIds"; + // a path to a directory to replace the default mod config directory + public static final String CONFIG_FOLDER = "fabric.configFolder"; // file containing the class path for in-dev runtime mod remapping public static final String REMAP_CLASSPATH_FILE = "fabric.remapClasspathFile"; // class path groups to map multiple class path entries to a mod (paths separated by path separator, groups by double path separator)