diff options
author | modmuss50 <modmuss50@gmail.com> | 2020-12-21 19:33:23 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-21 19:33:23 +0000 |
commit | 78c934aed58e28b2128ef8969d74110e8050fa84 (patch) | |
tree | 0800043017b2e13e8d4c8b685de459e86197bd63 /src/main/java/net/fabricmc/loom | |
parent | 3ab757363cb11807a3551d0f7396c4564d00bcc9 (diff) | |
download | architectury-loom-78c934aed58e28b2128ef8969d74110e8050fa84.tar.gz architectury-loom-78c934aed58e28b2128ef8969d74110e8050fa84.tar.bz2 architectury-loom-78c934aed58e28b2128ef8969d74110e8050fa84.zip |
Move remapped mods into a full local maven repo (#300)
Diffstat (limited to 'src/main/java/net/fabricmc/loom')
6 files changed, 68 insertions, 14 deletions
diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index 82d164e8..3aa6f285 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -207,9 +207,9 @@ public class AbstractPlugin implements Plugin<Project> { flatDirectoryArtifactRepository.setName("UserLocalCacheFiles"); }); - project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> { - flatDirectoryArtifactRepository.dir(extension.getRemappedModCache()); - flatDirectoryArtifactRepository.setName("UserLocalRemappedMods"); + project1.getRepositories().maven(mavenArtifactRepository -> { + mavenArtifactRepository.setUrl(extension.getRemappedModCache()); + mavenArtifactRepository.setName("UserLocalRemappedMods"); }); project1.getRepositories().maven(mavenArtifactRepository -> { diff --git a/src/main/java/net/fabricmc/loom/processors/dependency/ModDependencyInfo.java b/src/main/java/net/fabricmc/loom/processors/dependency/ModDependencyInfo.java index 19658457..fa488411 100644 --- a/src/main/java/net/fabricmc/loom/processors/dependency/ModDependencyInfo.java +++ b/src/main/java/net/fabricmc/loom/processors/dependency/ModDependencyInfo.java @@ -28,16 +28,19 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.jar.JarEntry; import java.util.jar.JarFile; import com.google.gson.JsonObject; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.gradle.api.artifacts.Configuration; import net.fabricmc.loom.util.ModProcessor; public class ModDependencyInfo { - public final String group; + private final String group; public final String name; public final String version; public final String classifier; @@ -61,15 +64,39 @@ public class ModDependencyInfo { } public String getRemappedNotation() { - return String.format("%s:%s:%s@%s%s", group, name, version, remapData.mappingsSuffix, classifier); + if (classifier == null || classifier.isEmpty()) { + return String.format("%s:%s:%s", getGroup(), name, version); + } + + return String.format("%s:%s:%s:%s", getGroup(), name, version, classifier); + } + + private String getRemappedFilename() { + if (classifier == null || classifier.isEmpty()) { + return String.format("%s-%s", name, version); + } + + return String.format("%s-%s@%s", name, version, classifier.replace(':', '-')); } - public String getRemappedFilename() { - return String.format("%s-%s@%s", name, version, remapData.mappingsSuffix + classifier.replace(':', '-')); + private File getRemappedDir() { + return new File(remapData.modStore, String.format("%s/%s/%s", getGroup().replace(".", "/"), name, version)); } public File getRemappedOutput() { - return new File(remapData.modStore, getRemappedFilename() + ".jar"); + return new File(getRemappedDir(), getRemappedFilename() + ".jar"); + } + + private File getRemappedPom() { + return new File(getRemappedOutput().getAbsolutePath().replace(".jar", ".pom")); + } + + private String getGroup() { + return getMappingsPrefix(remapData.mappingsSuffix) + "." + group; + } + + public static String getMappingsPrefix(String mappings) { + return mappings.replace(".", "_").replace("-", "_").replace("+", "_"); } public File getInputFile() { @@ -77,11 +104,31 @@ public class ModDependencyInfo { } public boolean requiresRemapping() { - return !getRemappedOutput().exists() || inputFile.lastModified() <= 0 || inputFile.lastModified() > getRemappedOutput().lastModified() || forceRemap; + return !getRemappedOutput().exists() || inputFile.lastModified() <= 0 || inputFile.lastModified() > getRemappedOutput().lastModified() || forceRemap || !getRemappedPom().exists(); } public void finaliseRemapping() { getRemappedOutput().setLastModified(inputFile.lastModified()); + savePom(); + } + + private void savePom() { + try { + String pomTemplate; + + try (InputStream input = ModDependencyInfo.class.getClassLoader().getResourceAsStream("mod_compile_template.pom")) { + pomTemplate = IOUtils.toString(input, StandardCharsets.UTF_8); + } + + pomTemplate = pomTemplate + .replace("%GROUP%", getGroup()) + .replace("%NAME%", name) + .replace("%VERSION%", version); + + FileUtils.writeStringToFile(getRemappedPom(), pomTemplate, StandardCharsets.UTF_8); + } catch (IOException e) { + throw new RuntimeException("Failed to write mod pom", e); + } } public void forceRemap() { diff --git a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java index 1de20456..3330b862 100644 --- a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java @@ -331,4 +331,8 @@ public class MappingsProvider extends DependencyProvider { return intermediaryTiny; } + + public String getMappingsKey() { + return mappingsName + "." + minecraftVersion.replace(' ', '_').replace('.', '_').replace('-', '_') + "." + mappingsVersion; + } } diff --git a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java index e5ec0578..b365ba15 100644 --- a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java +++ b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java @@ -54,7 +54,7 @@ public class LoomDependencyManager { private final List<DependencyProvider> dependencyProviderList = new ArrayList<>(); - public void addProvider(DependencyProvider provider) { + public <T extends DependencyProvider> T addProvider(T provider) { if (dependencyProviderList.contains(provider)) { throw new RuntimeException("Provider is already registered"); } @@ -65,6 +65,7 @@ public class LoomDependencyManager { provider.register(this); dependencyProviderList.add(provider); + return provider; } public <T> T getProvider(Class<T> clazz) { @@ -132,7 +133,7 @@ public class LoomDependencyManager { } SourceRemapper sourceRemapper = new SourceRemapper(project, true); - String mappingsKey = mappingsProvider.mappingsName + "." + mappingsProvider.minecraftVersion.replace(' ', '_').replace('.', '_').replace('-', '_') + "." + mappingsProvider.mappingsVersion; + String mappingsKey = mappingsProvider.getMappingsKey(); ModCompileRemapper.remapDependencies(project, mappingsKey, extension, sourceRemapper); diff --git a/src/main/java/net/fabricmc/loom/util/ModCompileRemapper.java b/src/main/java/net/fabricmc/loom/util/ModCompileRemapper.java index 640dd459..aa02c6d5 100644 --- a/src/main/java/net/fabricmc/loom/util/ModCompileRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/ModCompileRemapper.java @@ -92,7 +92,7 @@ public class ModCompileRemapper { project.getLogger().info(":providing " + remappedLog); if (sources != null) { - scheduleSourcesRemapping(project, sourceRemapper, info.sourcesFile, info.getRemappedNotation(), info.getRemappedFilename(), modStore); + scheduleSourcesRemapping(project, sourceRemapper, info.sourcesFile, info.getRemappedNotation(), info.getRemappedOutput(), modStore); } } @@ -156,10 +156,10 @@ public class ModCompileRemapper { return null; } - private static void scheduleSourcesRemapping(Project project, SourceRemapper sourceRemapper, File sources, String remappedLog, String remappedFilename, File modStore) { + private static void scheduleSourcesRemapping(Project project, SourceRemapper sourceRemapper, File sources, String remappedLog, File remappedJar, File modStore) { project.getLogger().debug(":providing " + remappedLog + " sources"); - File remappedSources = new File(modStore, remappedFilename + "-sources.jar"); + File remappedSources = new File(remappedJar.getAbsolutePath().replace(".jar", "-sources.jar")); boolean refreshDeps = project.getGradle().getStartParameter().isRefreshDependencies(); if (!remappedSources.exists() || sources.lastModified() <= 0 || sources.lastModified() > remappedSources.lastModified() || refreshDeps) { diff --git a/src/main/java/net/fabricmc/loom/util/ModProcessor.java b/src/main/java/net/fabricmc/loom/util/ModProcessor.java index 1932f21f..01be5a15 100644 --- a/src/main/java/net/fabricmc/loom/util/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/util/ModProcessor.java @@ -196,6 +196,8 @@ public class ModProcessor { if (accessWidener != null) { ZipUtil.replaceEntry(info.getRemappedOutput(), info.getAccessWidener(), accessWidener); } + + info.finaliseRemapping(); } } |