diff options
| author | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-11-30 16:13:26 +0200 |
|---|---|---|
| committer | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-11-30 16:13:26 +0200 |
| commit | f8a765434878cae99224adb5c97109bb18ea03f6 (patch) | |
| tree | 970303203f9699252136ffaca5aa09bff7243057 /src/main | |
| parent | 8c2b2033d9306327cf3119785ce040defefaab07 (diff) | |
| download | architectury-loom-f8a765434878cae99224adb5c97109bb18ea03f6.tar.gz architectury-loom-f8a765434878cae99224adb5c97109bb18ea03f6.tar.bz2 architectury-loom-f8a765434878cae99224adb5c97109bb18ea03f6.zip | |
Add Forge implementation data to MANIFEST.MF
Diffstat (limited to 'src/main')
3 files changed, 61 insertions, 5 deletions
diff --git a/src/main/java/net/fabricmc/loom/providers/ForgeProvider.java b/src/main/java/net/fabricmc/loom/providers/ForgeProvider.java index 19829e31..57e93483 100644 --- a/src/main/java/net/fabricmc/loom/providers/ForgeProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/ForgeProvider.java @@ -32,7 +32,7 @@ import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DependencyProvider; public class ForgeProvider extends DependencyProvider { - private String forgeVersion = "NO_VERSION"; + private ForgeVersion version = new ForgeVersion(null); public ForgeProvider(Project project) { super(project); @@ -40,17 +40,48 @@ public class ForgeProvider extends DependencyProvider { @Override public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception { - forgeVersion = dependency.getDependency().getVersion(); + version = new ForgeVersion(dependency.getDependency().getVersion()); addDependency(dependency.getDepString() + ":userdev", Constants.Configurations.FORGE_USERDEV); addDependency(dependency.getDepString() + ":installer", Constants.Configurations.FORGE_INSTALLER); } - public String getForgeVersion() { - return forgeVersion; + public ForgeVersion getVersion() { + return version; } @Override public String getTargetConfig() { return Constants.Configurations.FORGE; } + + public static final class ForgeVersion { + private final String minecraftVersion; + private final String forgeVersion; + + public ForgeVersion(String combined) { + if (combined == null) { + this.minecraftVersion = "NO_VERSION"; + this.forgeVersion = "NO_VERSION"; + return; + } + + int hyphenIndex = combined.indexOf('-'); + + if (hyphenIndex != -1) { + this.minecraftVersion = combined.substring(0, hyphenIndex); + this.forgeVersion = combined.substring(hyphenIndex + 1); + } else { + this.minecraftVersion = "NO_VERSION"; + this.forgeVersion = combined; + } + } + + public String getMinecraftVersion() { + return minecraftVersion; + } + + public String getForgeVersion() { + return forgeVersion; + } + } } diff --git a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java index 7f8db002..3cfa4321 100644 --- a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java @@ -73,7 +73,7 @@ public class LaunchProvider extends DependencyProvider { .argument("--fml.mcVersion") .argument(getExtension().getMinecraftProvider().getMinecraftVersion()) .argument("--fml.forgeVersion") - .argument(getExtension().getForgeProvider().getForgeVersion()) + .argument(getExtension().getForgeProvider().getVersion().getForgeVersion()) .argument("client", "--launchTarget") .argument("client", "fmluserdevclient") diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java index 21e53a2f..b3928d70 100644 --- a/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MinecraftMappedProvider.java @@ -26,9 +26,15 @@ package net.fabricmc.loom.providers; import java.io.File; import java.io.IOException; +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.function.Consumer; @@ -128,6 +134,25 @@ public class MinecraftMappedProvider extends DependencyProvider { } finally { remapper.finish(); } + + if (getExtension().isForge()) { + getProject().getLogger().lifecycle(":adding forge manifest data"); + + try (FileSystem fs = FileSystems.newFileSystem(URI.create("jar:" + output.toUri()), ImmutableMap.of("create", false))) { + Path manifestPath = fs.getPath("META-INF", "MANIFEST.MF"); + ForgeProvider.ForgeVersion version = getExtension().getForgeProvider().getVersion(); + List<String> lines = new ArrayList<>(Files.readAllLines(manifestPath)); + + lines.add(""); + lines.add("Name: net/minecraftforge/fml/javafmlmod/"); + lines.add("Implementation-Version: " + version.getForgeVersion()); + lines.add(""); + lines.add("Name: net/minecraftforge/fml/mclanguageprovider/"); + lines.add("Implementation-Version: " + version.getMinecraftVersion()); + + Files.write(manifestPath, lines); + } + } } } |
