From 47cbcbcd36ea48d71afe2ae075fab1a252fdfb0e Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Wed, 19 Jan 2022 17:02:55 +0200 Subject: [PATCH] This should be done now --- build.gradle | 3 +- .../fabricmc/loom/LoomGradleExtension.java | 8 +- .../configuration/CompileConfiguration.java | 70 ++++++++---- .../configuration/LoomDependencyManager.java | 8 +- .../AccessTransformerJarProcessor.java | 4 +- .../loom/configuration/mods/ModProcessor.java | 8 +- .../providers/forge/DependencyProvider.java | 3 +- .../providers/forge/DependencyProviders.java | 26 ++++- .../providers/forge/ForgeProvider.java | 3 +- .../forge/ForgeUniversalProvider.java | 3 +- .../providers/forge/ForgeUserdevProvider.java | 2 +- .../providers/forge/McpConfigProvider.java | 3 +- .../forge/MinecraftPatchedProvider.java | 49 +++++++-- .../providers/forge/PatchProvider.java | 3 +- .../providers/forge/SrgProvider.java | 3 +- .../mappings/MappingsProviderImpl.java | 4 +- .../minecraft/MinecraftJarConfiguration.java | 11 ++ .../minecraft/MinecraftProvider.java | 9 +- .../AbstractMappedMinecraftProvider.java | 4 +- .../mapped/SrgMinecraftProvider.java | 101 ++++++++++++++++++ .../sources/ForgeSourcesRemapper.java | 24 +++-- .../extension/LoomGradleExtensionImpl.java | 18 +++- .../fabricmc/loom/task/DecompilationTask.java | 24 +++++ .../loom/task/GenerateSourcesTask.java | 6 +- .../loom/task/MigrateMappingsTask.java | 16 +-- .../net/fabricmc/loom/task/RemapJarTask.java | 17 ++- .../launch/GenerateRemapClasspathTask.java | 4 - .../loom/util/FunnyTodoException.java | 12 --- .../fabricmc/loom/util/SourceRemapper.java | 9 +- 29 files changed, 339 insertions(+), 116 deletions(-) create mode 100644 src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/SrgMinecraftProvider.java delete mode 100644 src/main/java/net/fabricmc/loom/util/FunnyTodoException.java diff --git a/build.gradle b/build.gradle index 821af0c8..da04f85c 100644 --- a/build.gradle +++ b/build.gradle @@ -42,6 +42,8 @@ if (!isSnapshot) { version = baseVersion + "-PR." + System.getenv("PR_NUM") + "." + runNumber } +version = '0.11.0-juuz.2' + logger.lifecycle(":building plugin v${version}") repositories { @@ -244,7 +246,6 @@ publishing { from components.java artifact downgradeJava - artifact sourcesJar } maven(MavenPublication) { publication -> diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 553b43c5..d9fe4b8e 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -54,9 +54,9 @@ import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider; import net.fabricmc.loom.extension.LoomFiles; import net.fabricmc.loom.extension.MixinExtension; -import net.fabricmc.loom.util.FunnyTodoException; public interface LoomGradleExtension extends LoomGradleExtensionAPI { static LoomGradleExtension get(Project project) { @@ -108,12 +108,16 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI { void setIntermediaryMinecraftProvider(IntermediaryMinecraftProvider intermediaryMinecraftProvider); + SrgMinecraftProvider getSrgMinecraftProvider(); + + void setSrgMinecraftProvider(SrgMinecraftProvider srgMinecraftProvider); + default List getMinecraftJars(MappingsNamespace mappingsNamespace) { return switch (mappingsNamespace) { case NAMED -> getNamedMinecraftProvider().getMinecraftJars(); case INTERMEDIARY -> getIntermediaryMinecraftProvider().getMinecraftJars(); case OFFICIAL -> getMinecraftProvider().getMinecraftJars(); - case SRG -> throw new FunnyTodoException("SRG minecraft jars"); + case SRG -> getSrgMinecraftProvider().getMinecraftJars(); }; } diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index ac42cece..b7c4d3f3 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.configuration; import java.io.File; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Set; @@ -32,7 +33,6 @@ import org.gradle.api.NamedDomainObjectProvider; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.plugins.JavaPlugin; -import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.AbstractCopyTask; import org.gradle.api.tasks.SourceSet; @@ -61,8 +61,11 @@ import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJarConfigura import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider; +import net.fabricmc.loom.configuration.sources.ForgeSourcesRemapper; import net.fabricmc.loom.extension.MixinExtension; import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.OperatingSystem; public final class CompileConfiguration { private CompileConfiguration() { @@ -77,7 +80,7 @@ public final class CompileConfiguration { } if (extension.isDataGenEnabled()) { - project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName("main").resources(files -> { + project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().getByName("main").resources(files -> { files.srcDir(project.file("src/generated/resources")); }); } @@ -192,8 +195,8 @@ public final class CompileConfiguration { project.getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Dependencies.JETBRAINS_ANNOTATIONS + Constants.Dependencies.Versions.JETBRAINS_ANNOTATIONS); if (extension.isForge()) { - project.getDependencies().add(Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME, Constants.Configurations.FORGE_EXTRA); - project.getDependencies().add(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); + project.getDependencies().add(Constants.Configurations.FORGE_EXTRA, Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME); + project.getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS); } } @@ -213,27 +216,8 @@ public final class CompileConfiguration { throw new RuntimeException("Failed to setup minecraft", e); } - DependencyProviders dependencyProviders = new DependencyProviders(); LoomDependencyManager dependencyManager = new LoomDependencyManager(); - extension.setDependencyProviders(dependencyProviders); extension.setDependencyManager(dependencyManager); - - if (extension.isForge()) { - dependencyProviders.addProvider(new ForgeProvider(project)); - dependencyProviders.addProvider(new ForgeUserdevProvider(project)); - } - - if (extension.shouldGenerateSrgTiny()) { - dependencyProviders.addProvider(new SrgProvider(project)); - } - - if (extension.isForge()) { - dependencyProviders.addProvider(new McpConfigProvider(project)); - dependencyProviders.addProvider(new PatchProvider(project)); - dependencyProviders.addProvider(new ForgeUniversalProvider(project)); - } - - dependencyProviders.handleDependencies(project); dependencyManager.handleDependencies(project); extension.getRemapArchives().finalizeValue(); @@ -286,6 +270,10 @@ public final class CompileConfiguration { extension.setMappingsProvider(mappingsProvider); mappingsProvider.applyToProject(project, mappingsDep); + if (minecraftProvider instanceof MinecraftPatchedProvider patched) { + patched.remapJar(); + } + // Provide the remapped mc jars final IntermediaryMinecraftProvider intermediaryMinecraftProvider = jarConfiguration.getIntermediaryMinecraftProviderBiFunction().apply(project, minecraftProvider); NamedMinecraftProvider namedMinecraftProvider = jarConfiguration.getNamedMinecraftProviderBiFunction().apply(project, minecraftProvider); @@ -302,6 +290,20 @@ public final class CompileConfiguration { extension.setNamedMinecraftProvider(namedMinecraftProvider); namedMinecraftProvider.provide(true); + + if (extension.isForge()) { + final SrgMinecraftProvider srgMinecraftProvider = jarConfiguration.getSrgMinecraftProviderBiFunction().apply(project, minecraftProvider); + extension.setSrgMinecraftProvider(srgMinecraftProvider); + + // TODO: Find a better place for this? + if (!OperatingSystem.isCIBuild()) { + try { + ForgeSourcesRemapper.addBaseForgeSources(project); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } private static JarProcessorManager createJarProcessorManager(Project project) { @@ -379,4 +381,26 @@ public final class CompileConfiguration { private static void finalizedBy(Project project, String a, String b) { project.getTasks().named(a).configure(task -> task.finalizedBy(project.getTasks().named(b))); } + + public static void setupDependencyProviders(Project project, LoomGradleExtension extension) { + DependencyProviders dependencyProviders = new DependencyProviders(); + extension.setDependencyProviders(dependencyProviders); + + if (extension.isForge()) { + dependencyProviders.addProvider(new ForgeProvider(project)); + dependencyProviders.addProvider(new ForgeUserdevProvider(project)); + } + + if (extension.shouldGenerateSrgTiny()) { + dependencyProviders.addProvider(new SrgProvider(project)); + } + + if (extension.isForge()) { + dependencyProviders.addProvider(new McpConfigProvider(project)); + dependencyProviders.addProvider(new PatchProvider(project)); + dependencyProviders.addProvider(new ForgeUniversalProvider(project)); + } + + dependencyProviders.handleDependencies(project); + } } diff --git a/src/main/java/net/fabricmc/loom/configuration/LoomDependencyManager.java b/src/main/java/net/fabricmc/loom/configuration/LoomDependencyManager.java index 523b6bad..6e6e629e 100644 --- a/src/main/java/net/fabricmc/loom/configuration/LoomDependencyManager.java +++ b/src/main/java/net/fabricmc/loom/configuration/LoomDependencyManager.java @@ -75,6 +75,10 @@ public class LoomDependencyManager { } } } + + if (extension.getInstallerData() == null) { + project.getLogger().warn("fabric-installer.json not found in classpath!"); + } } SourceRemapper sourceRemapper = new SourceRemapper(project, true); @@ -85,10 +89,6 @@ public class LoomDependencyManager { sourceRemapper.remapAll(); - if (extension.getInstallerData() == null) { - project.getLogger().warn("fabric-installer.json not found in classpath!"); - } - for (Runnable runnable : afterTasks) { runnable.run(); } diff --git a/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java b/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java index 1e5bd80f..0c9e5efc 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java @@ -112,7 +112,8 @@ public final class AccessTransformerJarProcessor implements JarProcessor { @Override public void process(File file) { try { - Path tempInput = Files.createTempFile(null, "loom-at.jar"); + Path tempDir = Files.createTempDirectory("loom-access-transforming"); + Path tempInput = tempDir.resolve("input.jar"); Files.copy(file.toPath(), tempInput); executeAt(project, tempInput, file.toPath(), args -> { @@ -123,6 +124,7 @@ public final class AccessTransformerJarProcessor implements JarProcessor { }); Files.delete(tempInput); + Files.delete(tempDir); } catch (IOException e) { throw new UncheckedIOException("Could not access transform " + file.getAbsolutePath(), e); } diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java index c3b32c2f..d4144459 100644 --- a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java @@ -174,16 +174,10 @@ public class ModProcessor { final TinyRemapper remapper = builder.build(); - for (Path minecraftJar : extension.getMinecraftJars(MappingsNamespace.INTERMEDIARY)) { + for (Path minecraftJar : extension.getMinecraftJars(extension.isForge() ? MappingsNamespace.SRG : MappingsNamespace.INTERMEDIARY)) { remapper.readClassPathAsync(minecraftJar); } - remapper.readClassPathAsync(intermediaryJar); - - if (extension.isForgeAndNotOfficial()) { - remapper.readClassPathAsync(mappedProvider.getForgeSrgJar().toPath()); - } - remapper.readClassPathAsync(mcDeps); final Map tagMap = new HashMap<>(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProvider.java index 28913658..52eed4fc 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProvider.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.configuration.providers.forge; import java.io.File; +import java.util.function.Consumer; import org.gradle.api.Project; import org.gradle.api.artifacts.Dependency; @@ -44,7 +45,7 @@ public abstract class DependencyProvider { this.extension = LoomGradleExtension.get(project); } - public abstract void provide(DependencyInfo dependency) throws Exception; + public abstract void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception; public abstract String getTargetConfig(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProviders.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProviders.java index d321f42c..771c31d9 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProviders.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/DependencyProviders.java @@ -1,3 +1,27 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package net.fabricmc.loom.configuration.providers.forge; import java.util.ArrayList; @@ -82,7 +106,7 @@ public class DependencyProviders { DependencyInfo info = DependencyInfo.create(project, dependency, configuration); try { - provider.provide(info); + provider.provide(info, afterTasks::add); } catch (Exception e) { throw new RuntimeException("Failed to provide " + dependency.getGroup() + ":" + dependency.getName() + ":" + dependency.getVersion() + " : " + e.toString(), e); } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java index 78728f02..31f97d46 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.configuration.providers.forge; import java.io.File; +import java.util.function.Consumer; import org.gradle.api.Project; @@ -41,7 +42,7 @@ public class ForgeProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { version = new ForgeVersion(dependency.getResolvedVersion()); addDependency(dependency.getDepString() + ":userdev", Constants.Configurations.FORGE_USERDEV); addDependency(dependency.getDepString() + ":installer", Constants.Configurations.FORGE_INSTALLER); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUniversalProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUniversalProvider.java index 3cf742a3..6abc7c8f 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUniversalProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUniversalProvider.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.configuration.providers.forge; import java.io.File; +import java.util.function.Consumer; import org.apache.commons.io.FileUtils; import org.gradle.api.Project; @@ -40,7 +41,7 @@ public class ForgeUniversalProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { forge = new File(getExtension().getForgeProvider().getGlobalCache(), "forge-universal.jar"); if (!forge.exists() || isRefreshDeps()) { 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 9da9d09b..63063123 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 @@ -78,7 +78,7 @@ public class ForgeUserdevProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { this.postPopulationScheduler = postPopulationScheduler; Attribute transformed = Attribute.of("architectury-loom-forge-dependencies-transformed", Boolean.class); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/McpConfigProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/McpConfigProvider.java index eb399914..40d100b3 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/McpConfigProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/McpConfigProvider.java @@ -33,6 +33,7 @@ import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.List; +import java.util.function.Consumer; import java.util.jar.Attributes; import java.util.jar.Manifest; import java.util.stream.Collectors; @@ -62,7 +63,7 @@ public class McpConfigProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { init(dependency.getDependency().getVersion()); Path mcpZip = dependency.resolveFile().orElseThrow(() -> new RuntimeException("Could not resolve MCPConfig")).toPath(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 69e3a0b9..0a554789 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -1,3 +1,27 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2020-2022 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package net.fabricmc.loom.configuration.providers.forge; import java.io.ByteArrayInputStream; @@ -30,7 +54,6 @@ import java.util.jar.Manifest; import java.util.regex.Pattern; import java.util.stream.Stream; -import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; @@ -86,7 +109,8 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { // Step 5: Remap Patched AT & Forge to Official private File minecraftMergedPatchedJar; @Nullable - private File forgeMergedJar; + @Deprecated + private final File forgeMergedJar = null; // TODO: Remove private File minecraftClientExtra; private boolean dirty; @@ -109,10 +133,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { super(project); } - @Override - protected void initFiles() { - super.initFiles(); - + private void initPatchedFiles() { String patchId = "forge-" + getExtension().getForgeProvider().getVersion().getCombined() + "-"; if (getExtension().isForgeAndOfficial()) { @@ -124,12 +145,19 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { minecraftClientPatchedSrgJar = file("client-srg-patched.jar"); minecraftServerPatchedSrgJar = file("server-srg-patched.jar"); minecraftMergedPatchedSrgJar = file("merged-srg-patched.jar"); - forgeMergedJar = getExtension().isForgeAndOfficial() ? null : file("forge-official.jar"); minecraftMergedPatchedSrgAtJar = file("merged-srg-at-patched.jar"); minecraftMergedPatchedJar = file("merged-patched.jar"); minecraftClientExtra = file("forge-client-extra.jar"); } + private File getEffectiveServerJar() { + if (getServerBundleMetadata() != null) { + return getMinecraftExtractedServerJar(); + } else { + return getMinecraftServerJar(); + } + } + public void cleanAllCache() { for (File file : getGlobalCaches()) { file.delete(); @@ -166,6 +194,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { @Override public void provide() throws Exception { super.provide(); + initPatchedFiles(); checkCache(); this.dirty = false; @@ -193,7 +222,9 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { if (forgeMergedJar != null && !forgeMergedJar.exists()) { this.dirty = true; } + } + public void remapJar() throws Exception { if (dirty) { remapPatchedJar(getProject().getLogger()); @@ -245,7 +276,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { } private void createSrgJars(Logger logger) throws Exception { - produceSrgJar(getExtension().isForgeAndOfficial(), super.getMinecraftClientJar().toPath(), MoreObjects.firstNonNull(super.getMinecraftExtractedServerJar(), super.getMinecraftServerJar()).toPath()); + produceSrgJar(getExtension().isForgeAndOfficial(), super.getMinecraftClientJar().toPath(), getEffectiveServerJar().toPath()); } private void produceSrgJar(boolean official, Path clientJar, Path serverJar) throws IOException { @@ -529,7 +560,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider { if (getExtension().isForgeAndNotOfficial()) { // Copy resources copyNonClassFiles(super.getMinecraftClientJar(), minecraftMergedPatchedSrgJar); - copyNonClassFiles(MoreObjects.firstNonNull(super.getMinecraftExtractedServerJar(), super.getMinecraftServerJar()), minecraftMergedPatchedSrgJar); + copyNonClassFiles(getEffectiveServerJar(), minecraftMergedPatchedSrgJar); } } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/PatchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/PatchProvider.java index 5a918d12..52eda3bd 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/PatchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/PatchProvider.java @@ -32,6 +32,7 @@ import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.function.Consumer; import com.google.common.collect.ImmutableMap; import org.gradle.api.Project; @@ -49,7 +50,7 @@ public class PatchProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { init(dependency.getDependency().getVersion()); if (Files.notExists(clientPatches) || Files.notExists(serverPatches) || isRefreshDeps()) { 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 f895caed..2c048e93 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 @@ -41,6 +41,7 @@ import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableMap; @@ -79,7 +80,7 @@ public class SrgProvider extends DependencyProvider { } @Override - public void provide(DependencyInfo dependency) throws Exception { + public void provide(DependencyInfo dependency, Consumer postPopulationScheduler) throws Exception { init(dependency.getDependency().getVersion()); if (!Files.exists(srg) || isRefreshDeps()) { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java index f3e13573..efd219e7 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java @@ -333,7 +333,9 @@ public class MappingsProviderImpl implements MappingsProvider, SharedService { provider = new SrgProvider(project); project.getDependencies().add(provider.getTargetConfig(), "de.oceanlabs.mcp:mcp_config:" + extension.getMinecraftProvider().minecraftVersion()); Configuration configuration = project.getConfigurations().getByName(provider.getTargetConfig()); - provider.provide(DependencyInfo.create(project, configuration.getDependencies().iterator().next(), configuration)); + provider.provide(DependencyInfo.create(project, configuration.getDependencies().iterator().next(), configuration), runnable -> { + throw new UnsupportedOperationException("No postPopulationScheduler available"); + }); } Path srgPath = getRawSrgFile(project); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java index f1a1dcff..9ea8b4aa 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java @@ -39,12 +39,14 @@ import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMi import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.ProcessedNamedMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider; public enum MinecraftJarConfiguration { MERGED( MinecraftPatchedProvider::createMergedMinecraftProvider, IntermediaryMinecraftProvider.MergedImpl::new, NamedMinecraftProvider.MergedImpl::new, + SrgMinecraftProvider.MergedImpl::new, ProcessedNamedMinecraftProvider.MergedImpl::new, SingleJarDecompileConfiguration::new, List.of("client", "server") @@ -53,6 +55,7 @@ public enum MinecraftJarConfiguration { ServerOnlyMinecraftProvider::new, IntermediaryMinecraftProvider.ServerOnlyImpl::new, NamedMinecraftProvider.ServerOnlyImpl::new, + SrgMinecraftProvider.ServerOnlyImpl::new, ProcessedNamedMinecraftProvider.ServerOnlyImpl::new, SingleJarDecompileConfiguration::new, List.of("server") @@ -61,6 +64,7 @@ public enum MinecraftJarConfiguration { SplitMinecraftProvider::new, IntermediaryMinecraftProvider.SplitImpl::new, NamedMinecraftProvider.SplitImpl::new, + SrgMinecraftProvider.SplitImpl::new, ProcessedNamedMinecraftProvider.SplitImpl::new, SplitDecompileConfiguration::new, List.of("client", "server") @@ -69,6 +73,7 @@ public enum MinecraftJarConfiguration { private final Function minecraftProviderFunction; private final BiFunction> intermediaryMinecraftProviderBiFunction; private final BiFunction> namedMinecraftProviderBiFunction; + private final BiFunction> srgMinecraftProviderBiFunction; private final BiFunction, JarProcessorManager, ProcessedNamedMinecraftProvider> processedNamedMinecraftProviderBiFunction; private final BiFunction> decompileConfigurationBiFunction; private final List supportedEnvironments; @@ -78,6 +83,7 @@ public enum MinecraftJarConfiguration { Function minecraftProviderFunction, BiFunction> intermediaryMinecraftProviderBiFunction, BiFunction namedMinecraftProviderBiFunction, + BiFunction> srgMinecraftProviderBiFunction, BiFunction> processedNamedMinecraftProviderBiFunction, BiFunction> decompileConfigurationBiFunction, List supportedEnvironments @@ -85,6 +91,7 @@ public enum MinecraftJarConfiguration { this.minecraftProviderFunction = (Function) minecraftProviderFunction; this.intermediaryMinecraftProviderBiFunction = (BiFunction>) (Object) intermediaryMinecraftProviderBiFunction; this.namedMinecraftProviderBiFunction = (BiFunction>) namedMinecraftProviderBiFunction; + this.srgMinecraftProviderBiFunction = (BiFunction>) (Object) srgMinecraftProviderBiFunction; this.processedNamedMinecraftProviderBiFunction = (BiFunction, JarProcessorManager, ProcessedNamedMinecraftProvider>) (Object) processedNamedMinecraftProviderBiFunction; this.decompileConfigurationBiFunction = (BiFunction>) decompileConfigurationBiFunction; this.supportedEnvironments = supportedEnvironments; @@ -110,6 +117,10 @@ public enum MinecraftJarConfiguration { return decompileConfigurationBiFunction; } + public BiFunction> getSrgMinecraftProviderBiFunction() { + return srgMinecraftProviderBiFunction; + } + public List getSupportedEnvironments() { return supportedEnvironments; } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java index df4191b3..f66925e8 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java @@ -42,6 +42,7 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.LoomGradlePlugin; +import net.fabricmc.loom.configuration.CompileConfiguration; import net.fabricmc.loom.configuration.DependencyInfo; import net.fabricmc.loom.configuration.providers.BundleMetadata; import net.fabricmc.loom.util.Constants; @@ -79,7 +80,7 @@ public abstract class MinecraftProvider { minecraftVersion = dependency.getDependency().getVersion(); if (getExtension().shouldGenerateSrgTiny() && !getExtension().isForge()) { - getProject().getDependencies().add("de.oceanlabs.mcp:mcp_config:" + minecraftVersion, Constants.Configurations.SRG); + getProject().getDependencies().add(Constants.Configurations.SRG, "de.oceanlabs.mcp:mcp_config:" + minecraftVersion); } boolean offline = getProject().getGradle().getStartParameter().isOffline(); @@ -106,6 +107,12 @@ public abstract class MinecraftProvider { libraryProvider = new MinecraftLibraryProvider(); libraryProvider.provide(this, getProject()); + + // TODO: Find a better place for this. This needs to run after MinecraftProvider.initFiles + // but before MinecraftPatchedProvider.provide, so it's a bit tough. + // Honestly, the ForgeProvider stuff that uses the results of initFiles could be moved to + // MinecraftPatchedProvider. + CompileConfiguration.setupDependencyProviders(getProject(), getExtension()); } protected void initFiles() { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java index 06a7ebe7..0fa27d15 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java @@ -89,11 +89,11 @@ public abstract class AbstractMappedMinecraftProvider remappedJars) { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/SrgMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/SrgMinecraftProvider.java new file mode 100644 index 00000000..bd65dc5a --- /dev/null +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/SrgMinecraftProvider.java @@ -0,0 +1,101 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.configuration.providers.minecraft.mapped; + +import java.nio.file.Path; +import java.util.List; + +import dev.architectury.tinyremapper.TinyRemapper; +import org.gradle.api.Project; + +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.configuration.providers.minecraft.MergedMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.ServerOnlyMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.SplitMinecraftProvider; +import net.fabricmc.loom.util.SidedClassVisitor; + +public abstract sealed class SrgMinecraftProvider extends AbstractMappedMinecraftProvider permits SrgMinecraftProvider.MergedImpl, SrgMinecraftProvider.ServerOnlyImpl, SrgMinecraftProvider.SplitImpl { + public SrgMinecraftProvider(Project project, M minecraftProvider) { + super(project, minecraftProvider); + } + + @Override + protected Path getDirectory() { + return extension.getMinecraftProvider().workingDir().toPath(); + } + + @Override + public final MappingsNamespace getTargetNamespace() { + return MappingsNamespace.SRG; + } + + public static final class MergedImpl extends SrgMinecraftProvider implements Merged { + public MergedImpl(Project project, MergedMinecraftProvider minecraftProvider) { + super(project, minecraftProvider); + } + + @Override + public List getRemappedJars() { + return List.of( + new RemappedJars(minecraftProvider.getMergedJar(), getMergedJar(), MappingsNamespace.OFFICIAL) + ); + } + } + + public static final class SplitImpl extends SrgMinecraftProvider implements Split { + public SplitImpl(Project project, SplitMinecraftProvider minecraftProvider) { + super(project, minecraftProvider); + } + + @Override + public List getRemappedJars() { + return List.of( + new RemappedJars(minecraftProvider.getMinecraftCommonJar(), getCommonJar(), MappingsNamespace.OFFICIAL), + new RemappedJars(minecraftProvider.getMinecraftClientOnlyJar(), getClientOnlyJar(), MappingsNamespace.OFFICIAL, minecraftProvider.getMinecraftCommonJar()) + ); + } + + @Override + protected void configureRemapper(RemappedJars remappedJars, TinyRemapper.Builder tinyRemapperBuilder) { + if (remappedJars.outputJar().equals(getClientOnlyJar())) { + tinyRemapperBuilder.extraPostApplyVisitor(SidedClassVisitor.CLIENT); + } + } + } + + public static final class ServerOnlyImpl extends SrgMinecraftProvider implements ServerOnly { + public ServerOnlyImpl(Project project, ServerOnlyMinecraftProvider minecraftProvider) { + super(project, minecraftProvider); + } + + @Override + public List getRemappedJars() { + return List.of( + new RemappedJars(minecraftProvider.getMinecraftServerOnlyJar(), getServerOnlyJar(), MappingsNamespace.OFFICIAL) + ); + } + } +} diff --git a/src/main/java/net/fabricmc/loom/configuration/sources/ForgeSourcesRemapper.java b/src/main/java/net/fabricmc/loom/configuration/sources/ForgeSourcesRemapper.java index 5b523153..fb9cbd93 100644 --- a/src/main/java/net/fabricmc/loom/configuration/sources/ForgeSourcesRemapper.java +++ b/src/main/java/net/fabricmc/loom/configuration/sources/ForgeSourcesRemapper.java @@ -50,6 +50,7 @@ import org.gradle.api.logging.LogLevel; import org.gradle.api.logging.configuration.ShowStacktrace; import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.build.ModCompileRemapper; import net.fabricmc.loom.task.GenerateSourcesTask; import net.fabricmc.loom.util.Constants; @@ -62,8 +63,21 @@ import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.lorenztiny.TinyMappingsReader; public class ForgeSourcesRemapper { - public static void addBaseForgeSources(Project project, boolean isOfficial) throws IOException { - Path sourcesJar = GenerateSourcesTask.getMappedJarFileWithSuffix(project, "-sources.jar", !isOfficial).toPath(); + public static void addBaseForgeSources(Project project) throws IOException { + List minecraftJars = LoomGradleExtension.get(project).getMinecraftJars(MappingsNamespace.NAMED); + Path minecraftJar; + + if (minecraftJars.isEmpty()) { + // ??? + throw new IllegalStateException("Could not find Minecraft jar for Forge sources"); + } else if (minecraftJars.size() > 1) { + // Cannot add Forge sources to split jars + return; + } else { + minecraftJar = minecraftJars.get(0); + } + + Path sourcesJar = GenerateSourcesTask.getMappedJarFileWithSuffix(minecraftJar.toFile(), "-sources.jar").toPath(); if (!Files.exists(sourcesJar)) { addForgeSources(project, sourcesJar); @@ -202,11 +216,7 @@ public class ForgeSourcesRemapper { } // Distinct and add the srg jar at the top, so it gets prioritized - mercury.getClassPath().add(0, extension.getMinecraftMappedProvider().getSrgJar().toPath()); - - if (extension.isForgeAndNotOfficial()) { - mercury.getClassPath().add(0, extension.getMinecraftMappedProvider().getForgeSrgJar().toPath()); - } + mercury.getClassPath().addAll(0, extension.getMinecraftJars(MappingsNamespace.SRG)); List newClassPath = mercury.getClassPath().stream() .distinct() diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java index de448481..f00f1918 100644 --- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java @@ -33,9 +33,6 @@ import java.util.Objects; import java.util.function.Supplier; import com.google.common.base.Suppliers; - -import net.fabricmc.loom.configuration.providers.forge.DependencyProviders; - import org.cadixdev.lorenz.MappingSet; import org.cadixdev.mercury.Mercury; import org.gradle.api.Action; @@ -46,16 +43,18 @@ import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.FileCollection; import net.fabricmc.loom.LoomGradleExtension; -import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.api.ForgeExtensionAPI; +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.configuration.InstallerData; import net.fabricmc.loom.configuration.LoomDependencyManager; import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile; import net.fabricmc.loom.configuration.processors.JarProcessorManager; +import net.fabricmc.loom.configuration.providers.forge.DependencyProviders; import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider; +import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider; import net.fabricmc.loom.util.ModPlatform; import net.fabricmc.loom.util.function.LazyBool; @@ -77,6 +76,7 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen private MappingsProviderImpl mappingsProvider; private NamedMinecraftProvider namedMinecraftProvider; private IntermediaryMinecraftProvider intermediaryMinecraftProvider; + private SrgMinecraftProvider srgMinecraftProvider; private InstallerData installerData; // +-------------------+ @@ -167,6 +167,16 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen this.intermediaryMinecraftProvider = intermediaryMinecraftProvider; } + @Override + public SrgMinecraftProvider getSrgMinecraftProvider() { + return Objects.requireNonNull(srgMinecraftProvider, "Cannot get SrgMinecraftProvider before it has been setup"); + } + + @Override + public void setSrgMinecraftProvider(SrgMinecraftProvider srgMinecraftProvider) { + this.srgMinecraftProvider = srgMinecraftProvider; + } + @Override public FileCollection getMinecraftJarsCollection(MappingsNamespace mappingsNamespace) { return getProject().files( diff --git a/src/main/java/net/fabricmc/loom/task/DecompilationTask.java b/src/main/java/net/fabricmc/loom/task/DecompilationTask.java index 0eded5b2..cd75d40d 100644 --- a/src/main/java/net/fabricmc/loom/task/DecompilationTask.java +++ b/src/main/java/net/fabricmc/loom/task/DecompilationTask.java @@ -1,3 +1,27 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package net.fabricmc.loom.task; import org.gradle.api.Task; diff --git a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java index 165307c3..2c3e2e6a 100644 --- a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java @@ -295,7 +295,11 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask implements De } static File getMappedJarFileWithSuffix(RegularFileProperty runtimeJar, String suffix) { - String path = runtimeJar.get().getAsFile().getAbsolutePath(); + return getMappedJarFileWithSuffix(runtimeJar.get().getAsFile(), suffix); + } + + public static File getMappedJarFileWithSuffix(File runtimeJar, String suffix) { + String path = runtimeJar.getAbsolutePath(); if (!path.toLowerCase(Locale.ROOT).endsWith(".jar")) { throw new RuntimeException("Invalid mapped JAR path: " + path); diff --git a/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java b/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java index e0d3690f..1866a83e 100644 --- a/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java +++ b/src/main/java/net/fabricmc/loom/task/MigrateMappingsTask.java @@ -34,9 +34,6 @@ import java.util.Set; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; - -import net.fabricmc.loom.util.FunnyTodoException; - import org.cadixdev.lorenz.MappingSet; import org.cadixdev.mercury.Mercury; import org.cadixdev.mercury.remapper.MercuryRemapper; @@ -184,16 +181,9 @@ public class MigrateMappingsTask extends AbstractLoomTask { mercury.getClassPath().add(intermediaryJar); } - FunnyTodoException.yes("Forge jars"); - /*if (extension.isForge()) { - mercury.getClassPath().add(minecraftMappedProvider.getSrgJar().toPath()); - - if (extension.isForgeAndNotOfficial()) { - mercury.getClassPath().add(minecraftMappedProvider.getForgeMappedJar().toPath()); - mercury.getClassPath().add(minecraftMappedProvider.getForgeIntermediaryJar().toPath()); - mercury.getClassPath().add(minecraftMappedProvider.getForgeSrgJar().toPath()); - } - }*/ + for (Path srgJar : extension.getMinecraftJars(MappingsNamespace.SRG)) { + mercury.getClassPath().add(srgJar); + } mercury.getProcessors().add(MercuryRemapper.create(mappingSet)); diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index deda98c8..e9916b14 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -41,8 +41,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.function.Supplier; import java.util.Set; +import java.util.function.Supplier; import java.util.jar.Manifest; import java.util.stream.Collectors; @@ -53,11 +53,6 @@ import com.google.common.base.Suppliers; import com.google.gson.JsonObject; import dev.architectury.tinyremapper.OutputConsumerPath; import dev.architectury.tinyremapper.TinyRemapper; - -import net.fabricmc.loom.task.service.MappingsService; - -import net.fabricmc.loom.util.FunnyTodoException; - import org.cadixdev.at.AccessTransformSet; import org.cadixdev.at.io.AccessTransformFormats; import org.cadixdev.lorenz.MappingSet; @@ -67,7 +62,6 @@ import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; @@ -87,14 +81,15 @@ import net.fabricmc.loom.build.nesting.JarNester; import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile; import net.fabricmc.loom.extension.MixinExtension; import net.fabricmc.loom.task.service.JarManifestService; +import net.fabricmc.loom.task.service.MappingsService; import net.fabricmc.loom.task.service.TinyRemapperService; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.FileSystemUtil; import net.fabricmc.loom.util.LfWriter; import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.loom.util.aw2at.Aw2At; -import net.fabricmc.lorenztiny.TinyMappingsReader; import net.fabricmc.loom.util.service.UnsafeWorkQueueHelper; +import net.fabricmc.lorenztiny.TinyMappingsReader; public abstract class RemapJarTask extends AbstractRemapJarTask { private static final String MANIFEST_PATH = "META-INF/MANIFEST.MF"; @@ -125,8 +120,10 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { getClasspath().from(getProject().getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME)); getAddNestedDependencies().convention(true).finalizeValueOnRead(); - Configuration includeConfiguration = getProject().getConfigurations().getByName(Constants.Configurations.INCLUDE); - getNestedJars().from(new IncludedJarFactory(getProject()).getNestedJars(includeConfiguration)); + if (LoomGradleExtension.get(getProject()).supportsInclude()) { + Configuration includeConfiguration = getProject().getConfigurations().getByName(Constants.Configurations.INCLUDE); + getNestedJars().from(new IncludedJarFactory(getProject()).getNestedJars(includeConfiguration)); + } setupPreparationTask(); } diff --git a/src/main/java/net/fabricmc/loom/task/launch/GenerateRemapClasspathTask.java b/src/main/java/net/fabricmc/loom/task/launch/GenerateRemapClasspathTask.java index f0dfa4da..d97b5ab9 100644 --- a/src/main/java/net/fabricmc/loom/task/launch/GenerateRemapClasspathTask.java +++ b/src/main/java/net/fabricmc/loom/task/launch/GenerateRemapClasspathTask.java @@ -56,10 +56,6 @@ public abstract class GenerateRemapClasspathTask extends AbstractLoomTask { remapClasspath.add(minecraftJar.toFile()); } - if (getExtension().isForgeAndNotOfficial()) { - remapClasspath.add(getExtension().getMinecraftMappedProvider().getForgeIntermediaryJar()); - } - String str = remapClasspath.stream() .map(File::getAbsolutePath) .collect(Collectors.joining(File.pathSeparator)); diff --git a/src/main/java/net/fabricmc/loom/util/FunnyTodoException.java b/src/main/java/net/fabricmc/loom/util/FunnyTodoException.java deleted file mode 100644 index 24c6300c..00000000 --- a/src/main/java/net/fabricmc/loom/util/FunnyTodoException.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.fabricmc.loom.util; - -@Deprecated -public class FunnyTodoException extends UnsupportedOperationException { - public FunnyTodoException(String message) { - super("TODO: " + message); - } - - public static void yes(String message) { - throw new FunnyTodoException(message); - } -} diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index 998f190d..4db661aa 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -40,6 +40,7 @@ import org.gradle.api.Project; import org.slf4j.Logger; import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.configuration.RemappedConfigurationEntry; import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.util.gradle.ProgressLoggerHelper; @@ -211,12 +212,8 @@ public class SourceRemapper { } if (extension.isForge()) { - m.getClassPath().add(extension.getMinecraftMappedProvider().getSrgJar().toPath()); - - if (extension.isForgeAndNotOfficial()) { - m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeMappedJar().toPath()); - m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeIntermediaryJar().toPath()); - m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeSrgJar().toPath()); + for (Path srgJar : extension.getMinecraftJars(MappingsNamespace.SRG)) { + m.getClassPath().add(srgJar); } }