diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index afa5992d..eaac38ad 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -89,9 +89,19 @@ public final class CompileConfiguration { extension.createLazyConfiguration(Constants.Configurations.FORGE_NAMED).configure(configuration -> configuration.setTransitive(false)); extension.createLazyConfiguration(Constants.Configurations.FORGE_EXTRA).configure(configuration -> configuration.setTransitive(false)); extension.createLazyConfiguration(Constants.Configurations.MCP_CONFIG).configure(configuration -> configuration.setTransitive(false)); + extension.createLazyConfiguration(Constants.Configurations.FORGE_RUNTIME_LIBRARY); extendsFrom(Constants.Configurations.MINECRAFT_DEPENDENCIES, Constants.Configurations.FORGE_DEPENDENCIES, project); + extendsFrom(Constants.Configurations.FORGE_RUNTIME_LIBRARY, Constants.Configurations.FORGE_DEPENDENCIES, project); + extendsFrom(Constants.Configurations.FORGE_RUNTIME_LIBRARY, Constants.Configurations.MINECRAFT_DEPENDENCIES, project); + extendsFrom(Constants.Configurations.FORGE_RUNTIME_LIBRARY, Constants.Configurations.FORGE_EXTRA, project); + extendsFrom(Constants.Configurations.FORGE_RUNTIME_LIBRARY, Constants.Configurations.MINECRAFT_NAMED, project); + extendsFrom(Constants.Configurations.FORGE_RUNTIME_LIBRARY, Constants.Configurations.FORGE_NAMED, project); + // Include any user-defined libraries on the runtime CP. + // (All the other superconfigurations are already on there.) + extendsFrom(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_RUNTIME_LIBRARY, project); + extendsFrom(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_NAMED, project); extendsFrom(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_NAMED, project); extendsFrom(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_NAMED, project); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index 4ce6fb6a..2ea5c812 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -61,6 +61,7 @@ public class LaunchProvider extends DependencyProvider { .property("fabric.development", "true") .property("fabric.remapClasspathFile", getRemapClasspathFile().getAbsolutePath()) .property("log4j.configurationFile", getAllLog4JConfigFiles()) + .property("log4j2.formatMsgNoLookups", "true") .property("client", "java.library.path", getExtension().getMinecraftProvider().nativesDir().getAbsolutePath()) .property("client", "org.lwjgl.librarypath", getExtension().getMinecraftProvider().nativesDir().getAbsolutePath()); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java index fecfa4d3..358fd110 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java @@ -299,21 +299,11 @@ public class ForgeUserdevProvider extends DependencyProvider { private Set runtimeClasspath() { // Should we actually include the runtime classpath here? Forge doesn't seem to be using this property anyways - Set mcLibs = DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_DEPENDENCIES), true); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_DEPENDENCIES), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_EXTRA), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_NAMED), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_NAMED), false)); - return mcLibs; + return minecraftClasspath(); } private Set minecraftClasspath() { - Set mcLibs = DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_DEPENDENCIES), true); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_DEPENDENCIES), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_EXTRA), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.MINECRAFT_NAMED), false)); - mcLibs.addAll(DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_NAMED), false)); - return mcLibs; + return DependencyDownloader.resolveFiles(getProject().getConfigurations().getByName(Constants.Configurations.FORGE_RUNTIME_LIBRARY), true); } public File getUserdevJar() { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/SrgProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/SrgProvider.java index 32a12dc6..55a19fd6 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/SrgProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/SrgProvider.java @@ -72,8 +72,8 @@ public class SrgProvider extends DependencyProvider { private Path mergedMojangRaw; private Path mergedMojang; private Path mergedMojangTrimmed; - private static Path mojmapTsrg; - private static Path mojmapTsrg2; + private static Map mojmapTsrgMap = new HashMap<>(); + private static Map mojmapTsrg2Map = new HashMap<>(); public SrgProvider(Project project) { super(project); @@ -218,9 +218,10 @@ public class SrgProvider extends DependencyProvider { } public static Path getMojmapTsrg(Project project, LoomGradleExtension extension) throws IOException { - if (mojmapTsrg != null) return mojmapTsrg; + String minecraftVersion = extension.getMinecraftProvider().minecraftVersion(); + if (mojmapTsrgMap.containsKey(minecraftVersion)) return mojmapTsrgMap.get(minecraftVersion); - mojmapTsrg = extension.getMinecraftProvider().dir("forge").toPath().resolve("mojmap.tsrg"); + Path mojmapTsrg = extension.getMinecraftProvider().dir("forge").toPath().resolve("mojmap.tsrg"); if (Files.notExists(mojmapTsrg) || LoomGradlePlugin.refreshDeps) { try (BufferedWriter writer = Files.newBufferedWriter(mojmapTsrg, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { @@ -229,13 +230,15 @@ public class SrgProvider extends DependencyProvider { } } + mojmapTsrgMap.put(minecraftVersion, mojmapTsrg); return mojmapTsrg; } public static Path getMojmapTsrg2(Project project, LoomGradleExtension extension) throws IOException { - if (mojmapTsrg2 != null) return mojmapTsrg2; + String minecraftVersion = extension.getMinecraftProvider().minecraftVersion(); + if (mojmapTsrg2Map.containsKey(minecraftVersion)) return mojmapTsrg2Map.get(minecraftVersion); - mojmapTsrg2 = extension.getMinecraftProvider().dir("forge").toPath().resolve("mojmap.tsrg2"); + Path mojmapTsrg2 = extension.getMinecraftProvider().dir("forge").toPath().resolve("mojmap.tsrg2"); if (Files.notExists(mojmapTsrg2) || LoomGradlePlugin.refreshDeps) { try (BufferedWriter writer = Files.newBufferedWriter(mojmapTsrg2, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { @@ -245,6 +248,7 @@ public class SrgProvider extends DependencyProvider { } } + mojmapTsrg2Map.put(minecraftVersion, mojmapTsrg2); return mojmapTsrg2; } diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index eee920b2..76e1ea3c 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -78,9 +78,24 @@ public class Constants { public static final String FORGE_USERDEV = "forgeUserdev"; public static final String FORGE_INSTALLER = "forgeInstaller"; public static final String FORGE_UNIVERSAL = "forgeUniversal"; + /** + * Forge's own dependencies. Not intended to be used by users, + * {@link #FORGE_RUNTIME_LIBRARY forgeRuntimeLibrary} is for that instead. + */ public static final String FORGE_DEPENDENCIES = "forgeDependencies"; public static final String FORGE_NAMED = "forgeNamed"; + /** + * "Extra" runtime dependencies on Forge. Contains the Minecraft resources + * and {@linkplain Dependencies#FORGE_RUNTIME the Architectury Loom runtime}. + */ public static final String FORGE_EXTRA = "forgeExtra"; + /** + * The configuration used to create the Forge runtime classpath file list. + * Users can also directly add files to this config. + * + * @see net.fabricmc.loom.configuration.providers.forge.ForgeUserdevProvider + */ + public static final String FORGE_RUNTIME_LIBRARY = "forgeRuntimeLibrary"; public static final String MAPPING_CONSTANTS = "mappingsConstants"; public static final String UNPICK_CLASSPATH = "unpick"; /** diff --git a/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java b/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java index 85bcbe00..329d88bf 100644 --- a/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java +++ b/src/main/java/net/fabricmc/loom/util/DependencyDownloader.java @@ -81,6 +81,16 @@ public final class DependencyDownloader { return files; } + /** + * Resolves a configuration and its superconfigurations. + * + *

Note that unlike resolving a {@linkplain Configuration#copyRecursive() recursive copy} of the configuration, + * this method overrides the transitivity of all superconfigurations as well. + * + * @param configuration the configuration to resolve + * @param transitive true if transitive dependencies should be included, false otherwise + * @return a mutable set containing the resolved files of the configuration + */ public static Set resolveFiles(Configuration configuration, boolean transitive) { return resolve(configuration, transitive); } diff --git a/src/main/resources/log4j2.fabric.xml b/src/main/resources/log4j2.fabric.xml index 1feeddd6..c009f9fb 100644 --- a/src/main/resources/log4j2.fabric.xml +++ b/src/main/resources/log4j2.fabric.xml @@ -7,7 +7,7 @@ - + @@ -15,9 +15,9 @@ - + - + @@ -25,9 +25,9 @@ - + - + @@ -38,7 +38,7 @@ - +