aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java38
-rw-r--r--src/main/java/net/fabricmc/loom/task/RemapJarTask.java2
2 files changed, 39 insertions, 1 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java
index 893a1611..5bc892e9 100644
--- a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java
+++ b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java
@@ -45,6 +45,44 @@ public record AccessWidenerFile(
* Reads the access-widener contained in a mod jar, or returns null if there is none.
*/
public static AccessWidenerFile fromModJar(Path modJarPath) {
+ if (ZipUtils.contains(modJarPath, "architectury.common.json")) {
+ String awPath = null;
+ byte[] commonJsonBytes;
+
+ try {
+ commonJsonBytes = ZipUtils.unpackNullable(modJarPath, "architectury.common.json");
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to read access-widener file from: " + modJarPath.toAbsolutePath(), e);
+ }
+
+ if (commonJsonBytes != null) {
+ JsonObject jsonObject = new Gson().fromJson(new String(commonJsonBytes, StandardCharsets.UTF_8), JsonObject.class);
+
+ if (jsonObject.has("accessWidener")) {
+ awPath = jsonObject.get("accessWidener").getAsString();
+ } else {
+ throw new IllegalArgumentException("The architectury.common.json file does not contain an accessWidener field.");
+ }
+ } else {
+ // ???????????
+ throw new IllegalArgumentException("The architectury.common.json file does not exist.");
+ }
+
+ byte[] content;
+
+ try {
+ content = ZipUtils.unpack(modJarPath, awPath);
+ } catch (IOException e) {
+ throw new UncheckedIOException("Could not find access widener file (%s) defined in the architectury.common.json file of %s".formatted(awPath, modJarPath.toAbsolutePath()), e);
+ }
+
+ return new AccessWidenerFile(
+ awPath,
+ modJarPath.getFileName().toString(),
+ content
+ );
+ }
+
byte[] modJsonBytes;
try {
diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
index 27dd39e6..1ced8299 100644
--- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
+++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java
@@ -198,7 +198,7 @@ public class RemapJarTask extends Jar {
}
AccessWidenerFile awFile = AccessWidenerFile.fromModJar(remapData.input);
- Preconditions.checkNotNull(awFile, "Failed to find accessWidener in fabric.mod.json: " + remapData.input);
+ Preconditions.checkNotNull(awFile, "Failed to find accessWidener in fabric.mod.json / architectury.common.json: " + remapData.input);
return Pair.of(awFile.name(), data);
}