aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/configuration/mods
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-01-21 19:43:32 +0800
committershedaniel <daniel@shedaniel.me>2021-01-21 19:43:32 +0800
commitd7ea6fc0d1842e561a26f9837adbf07fb0e20c75 (patch)
tree651f85c884095ad637d836036eac21cac8547fa2 /src/main/java/net/fabricmc/loom/configuration/mods
parent61ac660435da0fa12d9fa7c6f66fc654e2b9dc9d (diff)
downloadarchitectury-loom-d7ea6fc0d1842e561a26f9837adbf07fb0e20c75.tar.gz
architectury-loom-d7ea6fc0d1842e561a26f9837adbf07fb0e20c75.tar.bz2
architectury-loom-d7ea6fc0d1842e561a26f9837adbf07fb0e20c75.zip
Override minVersion for dependencies.
Diffstat (limited to 'src/main/java/net/fabricmc/loom/configuration/mods')
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
index 14f14e88..0dd84932 100644
--- a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
+++ b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
@@ -34,22 +34,29 @@ import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
import org.apache.commons.io.IOUtils;
import org.gradle.api.Project;
import org.objectweb.asm.commons.Remapper;
import org.zeroturnaround.zip.ZipUtil;
+import org.zeroturnaround.zip.transform.ByteArrayZipEntryTransformer;
import org.zeroturnaround.zip.transform.StringZipEntryTransformer;
import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry;
@@ -213,10 +220,19 @@ public class ModProcessor {
AtRemapper.remap(project.getLogger(), info.getRemappedOutput().toPath(), mappings);
CoreModClassRemapper.remapJar(info.getRemappedOutput().toPath(), mappings, project.getLogger());
+ Set<String> mixinConfigs = new HashSet<>();
+ Set<String> presentMixinConfigs = new HashSet<>();
+
if (ZipUtil.containsEntry(info.getRemappedOutput(), "META-INF/MANIFEST.MF")) {
ZipUtil.transformEntry(info.getRemappedOutput(), "META-INF/MANIFEST.MF", (in, zipEntry, out) -> {
Manifest manifest = new Manifest(in);
fixManifest(manifest);
+ String configs = manifest.getMainAttributes().getValue("MixinConfigs");
+
+ if (configs != null) {
+ mixinConfigs.addAll(Arrays.asList(configs.split(",")));
+ }
+
out.putNextEntry(new ZipEntry(zipEntry.getName()));
manifest.write(out);
out.closeEntry();
@@ -229,9 +245,27 @@ public class ModProcessor {
if (zipEntry.getName().startsWith("META-INF")) {
filesToRemove.add(zipEntry.getName());
}
+ } else if (mixinConfigs.contains(zipEntry.getName())) {
+ presentMixinConfigs.add(zipEntry.getName());
}
});
ZipUtil.removeEntries(info.getRemappedOutput(), filesToRemove.toArray(new String[0]));
+ Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
+ ZipUtil.transformEntries(info.getRemappedOutput(), presentMixinConfigs.stream()
+ .map(path -> new ZipEntryTransformerEntry(path, new ByteArrayZipEntryTransformer() {
+ @Override
+ protected byte[] transform(ZipEntry zipEntry, byte[] input) {
+ try (InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(input))) {
+ JsonObject object = JsonParser.parseReader(reader).getAsJsonObject();
+ object.remove("minVersion");
+ object.addProperty("minVersion", "0.8");
+ return gson.toJson(object).getBytes(StandardCharsets.UTF_8);
+ } catch (IOException exception) {
+ throw new RuntimeException(exception);
+ }
+ }
+ }))
+ .toArray(ZipEntryTransformerEntry[]::new));
}
info.finaliseRemapping();