Merge changes #3
@@ -47,12 +47,14 @@ public class JarMergeAction {
|
||||
|
||||
// File Inputs
|
||||
@Setter private File forgeInput;
|
||||
@Setter private File neoforgeInput;
|
||||
@Setter private File fabricInput;
|
||||
@Setter private File quiltInput;
|
||||
private final Map<FusionerExtension.CustomConfiguration, File> customInputs;
|
||||
|
||||
// Relocations
|
||||
@Setter private Map<String, String> forgeRelocations;
|
||||
@Setter private Map<String, String> neoforgeRelocations;
|
||||
@Setter private Map<String, String> fabricRelocations;
|
||||
@Setter private Map<String, String> quiltRelocations;
|
||||
|
||||
@@ -93,7 +95,7 @@ public class JarMergeAction {
|
||||
FileTools.createOrReCreate(tempDir);
|
||||
|
||||
// Check if the required input files exists
|
||||
if (forgeInput == null && fabricInput == null && quiltInput == null && customInputs.isEmpty()) {
|
||||
if (forgeInput == null && neoforgeInput == null && fabricInput == null && quiltInput == null && customInputs.isEmpty()) {
|
||||
throw new IllegalArgumentException("No input jars were provided.");
|
||||
}
|
||||
|
||||
@@ -101,6 +103,10 @@ public class JarMergeAction {
|
||||
logger.warn("Forge jar does not exist! You can ignore this warning if you are not using forge");
|
||||
}
|
||||
|
||||
if (modFusionerExtension.getNeoforgeConfiguration() != null && !FileTools.exists(neoforgeInput)) {
|
||||
logger.warn("NeoForge jar does not exist! You can ignore this warning if you are not using neoforge");
|
||||
}
|
||||
|
||||
if (modFusionerExtension.getFabricConfiguration() != null && !FileTools.exists(fabricInput)) {
|
||||
logger.warn("Fabric jar does not exist! You can ignore this warning if you are not using fabric");
|
||||
}
|
||||
@@ -121,6 +127,7 @@ public class JarMergeAction {
|
||||
// Create the temporary processing directories
|
||||
File fabricTemp = FileTools.getOrCreate(new File(tempDir, "fabric-temp"));
|
||||
File forgeTemp = FileTools.getOrCreate(new File(tempDir, "forge-temp"));
|
||||
File neoforgeTemp = FileTools.getOrCreate(new File(tempDir, "neoforge-temp"));
|
||||
File quiltTemp = FileTools.getOrCreate(new File(tempDir, "quilt-temp"));
|
||||
|
||||
customTemps = new HashMap<>();
|
||||
@@ -138,6 +145,9 @@ public class JarMergeAction {
|
||||
if (FileTools.exists(forgeInput)) {
|
||||
jarManager.unpackJar(forgeInput, forgeTemp);
|
||||
}
|
||||
if (FileTools.exists(neoforgeInput)) {
|
||||
jarManager.unpackJar(neoforgeInput, neoforgeTemp);
|
||||
}
|
||||
if (FileTools.exists(fabricInput)) {
|
||||
jarManager.unpackJar(fabricInput, fabricTemp);
|
||||
}
|
||||
@@ -156,9 +166,10 @@ public class JarMergeAction {
|
||||
}));
|
||||
|
||||
File mergedTemp = FileTools.getOrCreate(new File(tempDir, "merged-temp"));
|
||||
processManifests(mergedTemp, forgeTemp, fabricTemp, quiltTemp);
|
||||
processManifests(mergedTemp, forgeTemp, neoforgeTemp, fabricTemp, quiltTemp);
|
||||
|
||||
FileTools.moveDirectory(forgeTemp, mergedTemp);
|
||||
FileTools.moveDirectory(neoforgeTemp, mergedTemp);
|
||||
FileTools.moveDirectory(fabricTemp, mergedTemp);
|
||||
FileTools.moveDirectory(quiltTemp, mergedTemp);
|
||||
|
||||
@@ -211,6 +222,7 @@ public class JarMergeAction {
|
||||
logger.lifecycle("Start processing input jars");
|
||||
|
||||
remapJar(forgeInput, "forge", forgeRelocations);
|
||||
remapJar(neoforgeInput, "neoforge", neoforgeRelocations);
|
||||
remapJar(fabricInput, "fabric", fabricRelocations);
|
||||
remapJar(quiltInput, "quilt", quiltRelocations);
|
||||
|
||||
@@ -265,6 +277,9 @@ public class JarMergeAction {
|
||||
case "forge":
|
||||
forgeInput = remappedJar;
|
||||
break;
|
||||
case "neoforge":
|
||||
neoforgeInput = remappedJar;
|
||||
break;
|
||||
case "fabric":
|
||||
fabricInput = remappedJar;
|
||||
break;
|
||||
@@ -319,13 +334,15 @@ public class JarMergeAction {
|
||||
/**
|
||||
* Process resource files from unpacked jars to remap them to their new package names
|
||||
* @param forgeTemps - The forge processing directory
|
||||
* @param neoforgeTemps - The neoforge processing directory
|
||||
* @param fabricTemps - The fabric processing directory
|
||||
* @param quiltTemps - The quilt processing directory
|
||||
* @throws IOException - Thrown if an IO error occurs
|
||||
*/
|
||||
private void remapResources(File forgeTemps, File fabricTemps, File quiltTemps) throws IOException {
|
||||
private void remapResources(File forgeTemps, File neoforgeTemps, File fabricTemps, File quiltTemps) throws IOException {
|
||||
logger.lifecycle("Start Remapping Resources");
|
||||
remapJarResources(forgeInput, "forge", forgeTemps, forgeRelocations);
|
||||
remapJarResources(neoforgeInput, "neoforge", neoforgeTemps, neoforgeRelocations);
|
||||
remapJarResources(fabricInput, "fabric", fabricTemps, fabricRelocations);
|
||||
remapJarResources(quiltInput, "quilt", quiltTemps, quiltRelocations);
|
||||
|
||||
@@ -341,7 +358,7 @@ public class JarMergeAction {
|
||||
}
|
||||
|
||||
/**
|
||||
* Remap resource files from jar. Used to remove duplicate code from {@link JarMergeAction#remapResources(File, File, File)}
|
||||
* Remap resource files from jar. Used to remove duplicate code from {@link JarMergeAction#remapResources(File, File, File, File)}
|
||||
* @param jar - The jar file being processed
|
||||
* @param identifier - The group identifier of the packages
|
||||
* @param workingDir - The processing directory
|
||||
@@ -418,13 +435,15 @@ public class JarMergeAction {
|
||||
* Process the manifest files from all the input jars and combine them into one
|
||||
* @param mergedTemp - The processing directory
|
||||
* @param forgeTemp - The forge processing directory
|
||||
* @param neoforgeTemp - The neoforge processing directory
|
||||
* @param fabricTemp - The fabric processing directory
|
||||
* @param quiltTemp - The quilt processing directory
|
||||
* @throws IOException - Thrown if an IO error occurs
|
||||
*/
|
||||
public void processManifests(File mergedTemp, File forgeTemp, File fabricTemp, File quiltTemp) throws IOException {
|
||||
public void processManifests(File mergedTemp, File forgeTemp, File neoforgeTemp, File fabricTemp, File quiltTemp) throws IOException {
|
||||
Manifest mergedManifest = new Manifest();
|
||||
Manifest forgeManifest = new Manifest();
|
||||
Manifest neoforgeManifest = new Manifest();
|
||||
Manifest fabricManifest = new Manifest();
|
||||
Manifest quiltManifest = new Manifest();
|
||||
List<Manifest> customManifests = new ArrayList<>();
|
||||
@@ -432,6 +451,8 @@ public class JarMergeAction {
|
||||
FileInputStream fileInputStream = null;
|
||||
if (FileTools.exists(forgeInput)) forgeManifest.read(fileInputStream = new FileInputStream(new File(forgeTemp, "META-INF/MANIFEST.MF")));
|
||||
if (fileInputStream != null) fileInputStream.close();
|
||||
if (FileTools.exists(neoforgeInput)) neoforgeManifest.read(fileInputStream = new FileInputStream(new File(neoforgeTemp, "META-INF/MANIFEST.MF")));
|
||||
if (fileInputStream != null) fileInputStream.close();
|
||||
if (FileTools.exists(fabricInput)) fabricManifest.read(fileInputStream = new FileInputStream(new File(fabricTemp, "META-INF/MANIFEST.MF")));
|
||||
if (fileInputStream != null) fileInputStream.close();
|
||||
if (FileTools.exists(quiltInput)) quiltManifest.read(fileInputStream = new FileInputStream(new File(quiltTemp, "META-INF/MANIFEST.MF")));
|
||||
@@ -449,6 +470,7 @@ public class JarMergeAction {
|
||||
}
|
||||
|
||||
forgeManifest.getMainAttributes().forEach((key, value) -> mergedManifest.getMainAttributes().putValue(key.toString(), value.toString()));
|
||||
neoforgeManifest.getMainAttributes().forEach((key, value) -> mergedManifest.getMainAttributes().putValue(key.toString(), value.toString()));
|
||||
fabricManifest.getMainAttributes().forEach((key, value) -> mergedManifest.getMainAttributes().putValue(key.toString(), value.toString()));
|
||||
quiltManifest.getMainAttributes().forEach((key, value) -> mergedManifest.getMainAttributes().putValue(key.toString(), value.toString()));
|
||||
|
||||
@@ -483,7 +505,7 @@ public class JarMergeAction {
|
||||
if (!forgeMixins.isEmpty()) mergedManifest.getMainAttributes().putValue("MixinConfigs", String.join(",", this.forgeMixins));
|
||||
}
|
||||
|
||||
remapResources(forgeTemp, fabricTemp, quiltTemp);
|
||||
remapResources(forgeTemp, neoforgeTemp, fabricTemp, quiltTemp);
|
||||
|
||||
if (this.forgeMixins != null && mergedManifest.getMainAttributes().getValue("MixinConfigs") == null) {
|
||||
logger.debug("Couldn't detect forge mixins. You can ignore this if you are not using mixins with forge.\n" +
|
||||
@@ -499,6 +521,7 @@ public class JarMergeAction {
|
||||
//mergedManifest.getMainAttributes().putValue(manifestVersionKey, version);
|
||||
|
||||
if (FileTools.exists(forgeInput)) new File(forgeTemp, "META-INF/MANIFEST.MF").delete();
|
||||
if (FileTools.exists(neoforgeInput)) new File(neoforgeTemp, "META-INF/MANIFEST.MF").delete();
|
||||
if (FileTools.exists(fabricInput)) new File(fabricTemp, "META-INF/MANIFEST.MF").delete();
|
||||
if (FileTools.exists(quiltInput)) new File(quiltTemp, "META-INF/MANIFEST.MF").delete();
|
||||
|
||||
@@ -533,6 +556,11 @@ public class JarMergeAction {
|
||||
removeDuplicateRelocationResources.put("forge/" + duplicatePath, duplicatePath);
|
||||
}
|
||||
|
||||
if (FileTools.exists(neoforgeInput)) {
|
||||
ignoredDuplicateRelocations.put("neoforge." + duplicate, duplicate);
|
||||
removeDuplicateRelocationResources.put("neoforge/" + duplicatePath, duplicatePath);
|
||||
}
|
||||
|
||||
if (FileTools.exists(fabricInput)) {
|
||||
ignoredDuplicateRelocations.put("fabric." + duplicate, duplicate);
|
||||
removeDuplicateRelocationResources.put("fabric/" + duplicatePath, duplicatePath);
|
||||
|
@@ -12,9 +12,11 @@ package com.hypherionmc.modfusioner.plugin;
|
||||
import groovy.lang.Closure;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.gradle.api.Action;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class FusionerExtension {
|
||||
|
||||
// Group, or package names that will be used for the final jar
|
||||
@@ -42,6 +44,10 @@ public class FusionerExtension {
|
||||
@Getter @Setter
|
||||
FusionerExtension.ForgeConfiguration forgeConfiguration;
|
||||
|
||||
// Forge Project Configuration
|
||||
@Getter @Setter
|
||||
FusionerExtension.NeoForgeConfiguration neoforgeConfiguration;
|
||||
|
||||
// Fabric Project Configuration
|
||||
@Getter @Setter
|
||||
FusionerExtension.FabricConfiguration fabricConfiguration;
|
||||
@@ -109,6 +115,15 @@ public class FusionerExtension {
|
||||
return forgeConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the neoforge project configurations
|
||||
*/
|
||||
public FusionerExtension.NeoForgeConfiguration neoforge(Closure<NeoForgeConfiguration> closure) {
|
||||
neoforgeConfiguration = new FusionerExtension.NeoForgeConfiguration();
|
||||
ModFusionerPlugin.rootProject.configure(neoforgeConfiguration, closure);
|
||||
return neoforgeConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the fabric project configurations
|
||||
*/
|
||||
@@ -184,6 +199,37 @@ public class FusionerExtension {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* NeoForge Configuration Structure
|
||||
*/
|
||||
public static class NeoForgeConfiguration {
|
||||
|
||||
// The name of the gradle module that contains the fabric code
|
||||
@Getter @Setter
|
||||
String projectName = "neoforge";
|
||||
|
||||
// The file that will be used as the input
|
||||
@Getter @Setter
|
||||
String inputFile;
|
||||
|
||||
// The name of the task to run to get the input file
|
||||
@Getter @Setter
|
||||
String inputTaskName;
|
||||
|
||||
// Packages that should be relocated, instead of duplicated
|
||||
@Getter
|
||||
Map<String, String> relocations = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Add a package to relocate, instead of duplicating
|
||||
* @param from - The original name of the package. For example: com.google.gson
|
||||
* @param to - The new name of the package. For example: forge.com.google.gson
|
||||
*/
|
||||
public void addRelocate(String from, String to) {
|
||||
this.relocations.put(from, to);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fabric project configuration
|
||||
*/
|
||||
|
@@ -72,6 +72,7 @@ public class JarFuseTask extends Jar {
|
||||
|
||||
// Get settings from extension
|
||||
FusionerExtension.ForgeConfiguration forgeConfiguration = modFusionerExtension.getForgeConfiguration();
|
||||
FusionerExtension.NeoForgeConfiguration neoforgeConfiguration = modFusionerExtension.getNeoforgeConfiguration();
|
||||
FusionerExtension.FabricConfiguration fabricConfiguration = modFusionerExtension.getFabricConfiguration();
|
||||
FusionerExtension.QuiltConfiguration quiltConfiguration = modFusionerExtension.getQuiltConfiguration();
|
||||
|
||||
@@ -79,6 +80,7 @@ public class JarFuseTask extends Jar {
|
||||
|
||||
// Try to resolve the projects specific in the extension config
|
||||
Project forgeProject = null;
|
||||
Project neoforgeProject = null;
|
||||
Project fabricProject = null;
|
||||
Project quiltProject = null;
|
||||
Map<Project, FusionerExtension.CustomConfiguration> customProjects = new HashMap<>();
|
||||
@@ -91,6 +93,13 @@ public class JarFuseTask extends Jar {
|
||||
} catch (NoSuchElementException ignored) { }
|
||||
}
|
||||
|
||||
if (neoforgeConfiguration != null) {
|
||||
try {
|
||||
neoforgeProject = rootProject.getAllprojects().stream().filter(p -> !p.getName().equals(rootProject.getName())).filter(p -> p.getName().equalsIgnoreCase(neoforgeConfiguration.getProjectName())).findFirst().get();
|
||||
validation.add(true);
|
||||
} catch (NoSuchElementException ignored) { }
|
||||
}
|
||||
|
||||
if (fabricConfiguration != null) {
|
||||
try {
|
||||
fabricProject = rootProject.getAllprojects().stream().filter(p -> !p.getName().equals(rootProject.getName())).filter(p -> p.getName().equalsIgnoreCase(fabricConfiguration.getProjectName())).findFirst().get();
|
||||
@@ -124,6 +133,7 @@ public class JarFuseTask extends Jar {
|
||||
|
||||
// Try to automatically determine the input jar from the projects
|
||||
File forgeJar = null;
|
||||
File neoforgeJar = null;
|
||||
File fabricJar = null;
|
||||
File quiltJar = null;
|
||||
Map<FusionerExtension.CustomConfiguration, File> customJars = new HashMap<>();
|
||||
@@ -132,6 +142,10 @@ public class JarFuseTask extends Jar {
|
||||
forgeJar = getInputFile(forgeConfiguration.getInputFile(), forgeConfiguration.getInputTaskName(), forgeProject);
|
||||
}
|
||||
|
||||
if (neoforgeProject != null && neoforgeConfiguration != null) {
|
||||
neoforgeJar = getInputFile(neoforgeConfiguration.getInputFile(), neoforgeConfiguration.getInputTaskName(), neoforgeProject);
|
||||
}
|
||||
|
||||
if (fabricProject != null && fabricConfiguration != null) {
|
||||
fabricJar = getInputFile(fabricConfiguration.getInputFile(), fabricConfiguration.getInputTaskName(), fabricProject);
|
||||
}
|
||||
@@ -164,6 +178,10 @@ public class JarFuseTask extends Jar {
|
||||
mergeAction.setForgeRelocations(forgeConfiguration == null ? new HashMap<>() : forgeConfiguration.getRelocations());
|
||||
mergeAction.setForgeMixins(forgeConfiguration == null ? new ArrayList<>() : forgeConfiguration.getMixins());
|
||||
|
||||
// NeoForge
|
||||
mergeAction.setNeoforgeInput(neoforgeJar);
|
||||
mergeAction.setNeoforgeRelocations(neoforgeConfiguration == null ? new HashMap<>() : neoforgeConfiguration.getRelocations());
|
||||
|
||||
// Fabric
|
||||
mergeAction.setFabricInput(fabricJar);
|
||||
mergeAction.setFabricRelocations(fabricConfiguration == null ? new HashMap<>() : fabricConfiguration.getRelocations());
|
||||
|
Reference in New Issue
Block a user