Add Forge implementation data to MANIFEST.MF

This commit is contained in:
Juuxel
2020-11-30 16:13:26 +02:00
parent 8c2b2033d9
commit f8a7654348
3 changed files with 61 additions and 5 deletions

View File

@@ -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;
}
}
}

View File

@@ -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")

View File

@@ -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);
}
}
}
}