diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 064065d5..0a21c707 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -393,7 +393,7 @@ public class LoomGradleExtension { return shareCaches; } - public boolean isProjectBasedJarStorageForced() { - return true; + public boolean isForge() { + return true; // TODO } } diff --git a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java index 140c72a2..f0eb7688 100644 --- a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java @@ -143,7 +143,7 @@ public class MappingsProvider extends DependencyProvider { JarProcessorManager processorManager = new JarProcessorManager(getProject()); getExtension().setJarProcessorManager(processorManager); - if (processorManager.active() || getExtension().isProjectBasedJarStorageForced()) { + if (processorManager.active()) { mappedProvider = new MinecraftProcessedProvider(getProject(), processorManager); getProject().getLogger().lifecycle("Using project based jar storage"); } else { diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java index be494082..140859e2 100644 --- a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java @@ -147,8 +147,8 @@ public class MinecraftMappedProvider extends DependencyProvider { public void initFiles(MinecraftProvider minecraftProvider, MappingsProvider mappingsProvider) { this.minecraftProvider = minecraftProvider; - minecraftIntermediaryJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar"); - minecraftMappedJar = new File(getJarDirectory(getExtension().getProjectPersistentCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar"); + minecraftIntermediaryJar = new File(getExtension().getUserCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar"); + minecraftMappedJar = new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar"); } protected File getJarDirectory(File parentDirectory, String type) { @@ -156,7 +156,7 @@ public class MinecraftMappedProvider extends DependencyProvider { } protected String getJarVersionString(String type) { - return String.format("%s-%s-%s-%s-patched-%s", minecraftProvider.getMinecraftVersion(), type, getExtension().getMappingsProvider().mappingsName, getExtension().getMappingsProvider().mappingsVersion, getExtension().getPatchProvider().forgeVersion); + return String.format("%s-%s-%s-%s%s", minecraftProvider.getMinecraftVersion(), type, getExtension().getMappingsProvider().mappingsName, getExtension().getMappingsProvider().mappingsVersion, minecraftProvider.getJarSuffix()); } public Collection getMapperPaths() { diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java index b217bccb..51ea579d 100644 --- a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java @@ -67,6 +67,7 @@ import net.fabricmc.loom.util.IoConsumer; import net.fabricmc.loom.util.ManifestVersion; import net.fabricmc.loom.util.MinecraftVersionInfo; import net.fabricmc.loom.util.StaticPathWatcher; +import net.fabricmc.stitch.merge.JarMerger; public class MinecraftProvider extends DependencyProvider { private String minecraftVersion; @@ -84,6 +85,7 @@ public class MinecraftProvider extends DependencyProvider { private File minecraftClientPatchedJar; private File minecraftServerPatchedJar; private File minecraftMergedJar; + private String jarSuffix = ""; Gson gson = new Gson(); @@ -124,7 +126,7 @@ public class MinecraftProvider extends DependencyProvider { libraryProvider = new MinecraftLibraryProvider(); libraryProvider.provide(this, getProject()); - if (!minecraftClientPatchedJar.exists() || !minecraftServerPatchedJar.exists()) { + if (getExtension().isForge() && (!minecraftClientPatchedJar.exists() || !minecraftServerPatchedJar.exists())) { if (!minecraftClientSrgJar.exists() || !minecraftServerSrgJar.exists()) { createSrgJars(getProject().getLogger()); } @@ -143,12 +145,15 @@ public class MinecraftProvider extends DependencyProvider { } catch (ZipError e) { DownloadUtil.delete(minecraftClientJar); DownloadUtil.delete(minecraftServerJar); - DownloadUtil.delete(minecraftClientPatchedJar); - DownloadUtil.delete(minecraftServerPatchedJar); - DownloadUtil.delete(minecraftClientSrgJar); - DownloadUtil.delete(minecraftServerSrgJar); - DownloadUtil.delete(minecraftClientPatchedSrgJar); - DownloadUtil.delete(minecraftServerPatchedSrgJar); + + if (getExtension().isForge()) { + DownloadUtil.delete(minecraftClientPatchedJar); + DownloadUtil.delete(minecraftServerPatchedJar); + DownloadUtil.delete(minecraftClientSrgJar); + DownloadUtil.delete(minecraftServerSrgJar); + DownloadUtil.delete(minecraftClientPatchedSrgJar); + DownloadUtil.delete(minecraftServerPatchedSrgJar); + } getProject().getLogger().error("Could not merge JARs! Deleting source JARs - please re-run the command and move on.", e); throw new RuntimeException(); @@ -160,14 +165,21 @@ public class MinecraftProvider extends DependencyProvider { minecraftJson = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-info.json"); minecraftClientJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client.jar"); minecraftServerJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server.jar"); - PatchProvider patchProvider = getExtension().getPatchProvider(); - minecraftClientPatchedJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + minecraftVersion + "-client-patched-" + patchProvider.forgeVersion + ".jar"); - minecraftServerPatchedJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + minecraftVersion + "-server-patched-" + patchProvider.forgeVersion + ".jar"); - minecraftClientSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client-srg.jar"); - minecraftServerSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server-srg.jar"); - minecraftClientPatchedSrgJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + minecraftVersion + "-client-patched-srg-" + patchProvider.forgeVersion + ".jar"); - minecraftServerPatchedSrgJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + minecraftVersion + "-server-patched-srg-" + patchProvider.forgeVersion + ".jar"); - minecraftMergedJar = new File(getExtension().getProjectPersistentCache(), "minecraft-" + minecraftVersion + "-merged-patched-" + patchProvider.forgeVersion + ".jar"); + + if (getExtension().isForge()) { + // Forge-related JARs + PatchProvider patchProvider = getExtension().getPatchProvider(); + jarSuffix = "-patched-forge-" + patchProvider.forgeVersion; + + minecraftClientPatchedJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client" + jarSuffix + ".jar"); + minecraftServerPatchedJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server" + jarSuffix + ".jar"); + minecraftClientSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client-srg.jar"); + minecraftServerSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server-srg.jar"); + minecraftClientPatchedSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-client-srg" + jarSuffix + ".jar"); + minecraftServerPatchedSrgJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-server-srg" + jarSuffix + ".jar"); + } + + minecraftMergedJar = new File(getExtension().getUserCache(), "minecraft-" + minecraftVersion + "-merged" + jarSuffix + ".jar"); } private void downloadMcJson(boolean offline) throws IOException { @@ -313,21 +325,23 @@ public class MinecraftProvider extends DependencyProvider { } private void mergeJars(Logger logger) throws IOException { - logger.lifecycle(":merging jars"); + if (getExtension().isForge()) { + // FIXME: Hack here: There are no server-only classes so we can just copy the client JAR. + Files.copy(minecraftClientPatchedJar, minecraftMergedJar); - // FIXME: Hack here: There are no server-only classes so we can just copy the client JAR. - Files.copy(minecraftClientPatchedJar, minecraftMergedJar); + logger.lifecycle(":copying resources"); - logger.lifecycle(":copying resources"); + // Copy resources + copyNonClassFiles(minecraftClientJar, minecraftMergedJar); + copyNonClassFiles(minecraftServerJar, minecraftMergedJar); + } else { + logger.lifecycle(":merging jars"); - // Copy resources - copyNonClassFiles(minecraftClientJar, minecraftMergedJar); - copyNonClassFiles(minecraftServerJar, minecraftMergedJar); - - /*try (JarMerger jarMerger = new JarMerger(minecraftClientPatchedJar, minecraftServerPatchedJar, minecraftMergedJar)) { - jarMerger.enableSyntheticParamsOffset(); - jarMerger.merge(); - }*/ + try (JarMerger jarMerger = new JarMerger(minecraftClientJar, minecraftServerJar, minecraftMergedJar)) { + jarMerger.enableSyntheticParamsOffset(); + jarMerger.merge(); + } + } } private void walkFileSystems(File source, File target, Predicate filter, FsPathConsumer action) throws IOException { @@ -400,6 +414,10 @@ public class MinecraftProvider extends DependencyProvider { return libraryProvider; } + public String getJarSuffix() { + return jarSuffix; + } + @Override public String getTargetConfig() { return Constants.MINECRAFT;