mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 13:37:45 -05:00
Merge the Forge manifest with the Minecraft manifest, ignoring any class sections
This commit is contained in:
@@ -32,9 +32,11 @@ import org.gradle.api.Project;
|
||||
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.DependencyProvider;
|
||||
import net.fabricmc.loom.util.JarUtil;
|
||||
|
||||
public class ForgeUniversalProvider extends DependencyProvider {
|
||||
private File forge;
|
||||
private File forgeManifest;
|
||||
|
||||
public ForgeUniversalProvider(Project project) {
|
||||
super(project);
|
||||
@@ -43,17 +45,26 @@ public class ForgeUniversalProvider extends DependencyProvider {
|
||||
@Override
|
||||
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
|
||||
forge = new File(getExtension().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-universal.jar");
|
||||
forgeManifest = new File(getExtension().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-manifest.mf");
|
||||
|
||||
if (!forge.exists() || isRefreshDeps()) {
|
||||
File dep = dependency.resolveFile().orElseThrow(() -> new RuntimeException("Could not resolve Forge"));
|
||||
Files.copy(dep, forge);
|
||||
}
|
||||
|
||||
if (!forgeManifest.exists() || isRefreshDeps()) {
|
||||
JarUtil.extractFile(forge, "META-INF/MANIFEST.MF", forgeManifest);
|
||||
}
|
||||
}
|
||||
|
||||
public File getForge() {
|
||||
return forge;
|
||||
}
|
||||
|
||||
public File getForgeManifest() {
|
||||
return forgeManifest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTargetConfig() {
|
||||
return Constants.Configurations.FORGE_UNIVERSAL;
|
||||
|
||||
@@ -25,18 +25,21 @@
|
||||
package net.fabricmc.loom.providers;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
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;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.gradle.api.Project;
|
||||
@@ -145,17 +148,35 @@ public class MinecraftMappedProvider extends DependencyProvider {
|
||||
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));
|
||||
Manifest minecraftManifest;
|
||||
Manifest forgeManifest;
|
||||
|
||||
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());
|
||||
try (InputStream in = Files.newInputStream(manifestPath)) {
|
||||
minecraftManifest = new Manifest(in);
|
||||
}
|
||||
|
||||
try (InputStream in = new FileInputStream(getExtension().getForgeUniversalProvider().getForgeManifest())) {
|
||||
forgeManifest = new Manifest(in);
|
||||
}
|
||||
|
||||
for (Map.Entry<String, Attributes> forgeEntry : forgeManifest.getEntries().entrySet()) {
|
||||
if (!forgeEntry.getKey().endsWith(".class")) {
|
||||
minecraftManifest.getEntries().put(forgeEntry.getKey(), forgeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
Attributes javafmlmod = new Attributes();
|
||||
javafmlmod.put("Implementation-Version", version.getForgeVersion());
|
||||
Attributes mclanguageprovider = new Attributes();
|
||||
mclanguageprovider.put("Implementation-Version", version.getMinecraftVersion());
|
||||
minecraftManifest.getEntries().putIfAbsent("net/minecraftforge/fml/javafmlmod/", javafmlmod);
|
||||
minecraftManifest.getEntries().putIfAbsent("net/minecraftforge/fml/mclanguageprovider/", mclanguageprovider);
|
||||
|
||||
Files.delete(manifestPath);
|
||||
Files.write(manifestPath, lines);
|
||||
|
||||
try (OutputStream out = Files.newOutputStream(manifestPath)) {
|
||||
minecraftManifest.write(out);
|
||||
}
|
||||
}
|
||||
|
||||
TinyTree yarnWithSrg = getExtension().getMappingsProvider().getMappingsWithSrg();
|
||||
|
||||
Reference in New Issue
Block a user