mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-03-28 04:07:01 -05:00
Fix Forge setup ordering, centralise Forge cache code
The setup of dependency providers must happen after the custom repositories added by Loom are finalised, but they're modified by the library processor system. Therefore, we need to 1. Initialise dependency providers later. 2. Replace usages of specific dependency providers with (potentially slower) alternatives that don't resolve any dependencies.
This commit is contained in:
@@ -194,10 +194,6 @@ public abstract class CompileConfiguration implements Runnable {
|
||||
extension.setMinecraftProvider(minecraftProvider);
|
||||
minecraftProvider.provideFirst();
|
||||
|
||||
// This needs to run after MinecraftProvider.initFiles
|
||||
// but before MinecraftPatchedProvider.provide.
|
||||
setupDependencyProviders(project, extension);
|
||||
|
||||
if (!extension.isForge()) {
|
||||
minecraftProvider.provide();
|
||||
}
|
||||
@@ -207,10 +203,18 @@ public abstract class CompileConfiguration implements Runnable {
|
||||
extension.setMappingConfiguration(mappingConfiguration);
|
||||
|
||||
if (extension.isForge()) {
|
||||
ForgeLibrariesProvider.provide(mappingConfiguration, project);
|
||||
minecraftProvider.provide();
|
||||
}
|
||||
|
||||
// This needs to run after MinecraftProvider.initFiles and MinecraftLibraryProvider.provide
|
||||
// but before MinecraftPatchedProvider.provide.
|
||||
setupDependencyProviders(project, extension);
|
||||
|
||||
if (extension.isForge()) {
|
||||
ForgeLibrariesProvider.provide(mappingConfiguration, project);
|
||||
((ForgeMinecraftProvider) minecraftProvider).getPatchedProvider().provide();
|
||||
}
|
||||
|
||||
mappingConfiguration.setupPost(project);
|
||||
mappingConfiguration.applyToProject(getProject(), mappingsDep);
|
||||
|
||||
|
||||
@@ -77,9 +77,9 @@ public final class FieldMigratedMappingConfiguration extends MappingConfiguratio
|
||||
|
||||
@Override
|
||||
protected void setup(Project project, SharedServiceManager serviceManager, MinecraftProvider minecraftProvider, Path inputJar) throws IOException {
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
PatchProvider patchProvider = extension.getPatchProvider();
|
||||
migratedFieldsCache = patchProvider.getProjectCacheFolder().resolve("migrated-fields.json");
|
||||
final Path forgeCache = ForgeProvider.getCurrentForgeCache(project);
|
||||
Files.createDirectories(forgeCache);
|
||||
migratedFieldsCache = forgeCache.resolve("migrated-fields.json");
|
||||
migratedFields.clear();
|
||||
|
||||
if (minecraftProvider.refreshDeps()) {
|
||||
@@ -99,8 +99,8 @@ public final class FieldMigratedMappingConfiguration extends MappingConfiguratio
|
||||
super.setup(project, serviceManager, minecraftProvider, inputJar);
|
||||
}
|
||||
|
||||
public static String createForgeMappingsIdentifier(LoomGradleExtension extension, String mappingsName, String version, String classifier, String minecraftVersion) {
|
||||
return FieldMigratedMappingConfiguration.createMappingsIdentifier(mappingsName, version, classifier, minecraftVersion) + "-forge-" + extension.getForgeProvider().getVersion().getCombined();
|
||||
public static String createForgeMappingsIdentifier(Project project, String mappingsName, String version, String classifier, String minecraftVersion) {
|
||||
return FieldMigratedMappingConfiguration.createMappingsIdentifier(mappingsName, version, classifier, minecraftVersion) + "-forge-" + ForgeProvider.getCombinedForgeVersion(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2020-2021 FabricMC
|
||||
* Copyright (c) 2020-2023 FabricMC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -25,9 +25,13 @@
|
||||
package net.fabricmc.loom.configuration.providers.forge;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.DependencyInfo;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
|
||||
@@ -74,6 +78,53 @@ public class ForgeProvider extends DependencyProvider {
|
||||
return Constants.Configurations.FORGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the full/combined Forge version <em>without</em> resolving dependencies
|
||||
* that haven't been resolved yet.
|
||||
*
|
||||
* @param project the Gradle project
|
||||
* @return the Forge version
|
||||
*/
|
||||
public static String getCombinedForgeVersion(Project project) {
|
||||
final LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
if (extension.getDependencyProviders() != null) {
|
||||
return extension.getForgeProvider().getVersion().getCombined();
|
||||
}
|
||||
|
||||
final Configuration configuration = project.getConfigurations().getByName(Constants.Configurations.FORGE);
|
||||
|
||||
for (Dependency dependency : configuration.getDependencies()) {
|
||||
if (dependency.getVersion() != null) {
|
||||
return dependency.getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException("Could not find Forge version. Searched " + configuration.getDependencies().size() + " dependencies");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the Forge cache directory}
|
||||
*
|
||||
* @param project the project
|
||||
* @param version the Forge version
|
||||
*/
|
||||
public static Path getForgeCache(Project project, String version) {
|
||||
return LoomGradleExtension.get(project).getMinecraftProvider()
|
||||
.dir("forge/" + version).toPath();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the cache directory for the current Forge version}
|
||||
*
|
||||
* <p>This method is slower than {@link #getForgeCache} if you already know the Forge version.
|
||||
*
|
||||
* @param project the project
|
||||
*/
|
||||
public static Path getCurrentForgeCache(Project project) {
|
||||
return getForgeCache(project, getCombinedForgeVersion(project));
|
||||
}
|
||||
|
||||
public static final class ForgeVersion {
|
||||
private final String combined;
|
||||
private final String minecraftVersion;
|
||||
|
||||
@@ -135,7 +135,7 @@ public class MinecraftPatchedProvider {
|
||||
|
||||
private void initPatchedFiles() {
|
||||
String forgeVersion = getExtension().getForgeProvider().getVersion().getCombined();
|
||||
Path forgeWorkingDir = minecraftProvider.dir("forge/" + forgeVersion).toPath();
|
||||
Path forgeWorkingDir = ForgeProvider.getForgeCache(project, forgeVersion);
|
||||
String patchId = "forge-" + forgeVersion + "-";
|
||||
|
||||
minecraftProvider.setJarPrefix(patchId);
|
||||
|
||||
@@ -39,7 +39,6 @@ import net.fabricmc.loom.util.FileSystemUtil;
|
||||
public class PatchProvider extends DependencyProvider {
|
||||
public Path clientPatches;
|
||||
public Path serverPatches;
|
||||
public Path projectCacheFolder;
|
||||
|
||||
public PatchProvider(Project project) {
|
||||
super(project);
|
||||
@@ -62,7 +61,7 @@ public class PatchProvider extends DependencyProvider {
|
||||
}
|
||||
|
||||
private void init(String forgeVersion) {
|
||||
projectCacheFolder = getMinecraftProvider().dir("forge/" + forgeVersion).toPath();
|
||||
final Path projectCacheFolder = ForgeProvider.getForgeCache(getProject(), forgeVersion);
|
||||
clientPatches = projectCacheFolder.resolve("patches-client.lzma");
|
||||
serverPatches = projectCacheFolder.resolve("patches-server.lzma");
|
||||
|
||||
@@ -73,10 +72,6 @@ public class PatchProvider extends DependencyProvider {
|
||||
}
|
||||
}
|
||||
|
||||
public Path getProjectCacheFolder() {
|
||||
return projectCacheFolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTargetConfig() {
|
||||
return Constants.Configurations.FORGE_INSTALLER;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2022 FabricMC
|
||||
* Copyright (c) 2022-2023 FabricMC
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -40,12 +40,6 @@ public final class MergedForgeMinecraftProvider extends MergedMinecraftProvider
|
||||
this.patchedProvider = new MinecraftPatchedProvider(configContext.project(), this, MinecraftPatchedProvider.Type.MERGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void provide() throws Exception {
|
||||
super.provide();
|
||||
patchedProvider.provide();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mergeJars() throws IOException {
|
||||
// Don't merge jars in the superclass
|
||||
|
||||
@@ -125,7 +125,7 @@ public class MappingConfiguration {
|
||||
String mappingsIdentifier;
|
||||
|
||||
if (extension.isForge()) {
|
||||
mappingsIdentifier = FieldMigratedMappingConfiguration.createForgeMappingsIdentifier(extension, mappingsName, version, getMappingsClassifier(dependency, jarInfo.v2()), minecraftProvider.minecraftVersion());
|
||||
mappingsIdentifier = FieldMigratedMappingConfiguration.createForgeMappingsIdentifier(project, mappingsName, version, getMappingsClassifier(dependency, jarInfo.v2()), minecraftProvider.minecraftVersion());
|
||||
} else {
|
||||
mappingsIdentifier = createMappingsIdentifier(mappingsName, version, getMappingsClassifier(dependency, jarInfo.v2()), minecraftProvider.minecraftVersion());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user