aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-30 19:26:03 +0800
committershedaniel <daniel@shedaniel.me>2021-06-30 19:26:03 +0800
commit9729933433beaec9d8f6eee4077e6b04a1410054 (patch)
tree6b3ac414c1914c1c4b1a8076247cc16fdc6ab8c6 /src/main/java/net/fabricmc/loom
parentf49f0201c37551023c0b05668aefe694b52c1948 (diff)
downloadarchitectury-loom-9729933433beaec9d8f6eee4077e6b04a1410054.tar.gz
architectury-loom-9729933433beaec9d8f6eee4077e6b04a1410054.tar.bz2
architectury-loom-9729933433beaec9d8f6eee4077e6b04a1410054.zip
Allow specifying multiple accesstransformers
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/net/fabricmc/loom')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java4
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java44
2 files changed, 29 insertions, 19 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index 9a35280c..0d1f0c20 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -87,7 +87,7 @@ public class LoomGradleExtension {
public boolean remapMod = true;
public String customManifest = null;
public File accessWidener = null;
- public File accessTransformer = null;
+ public Set<File> accessTransformers = new HashSet<>();
public Function<String, Object> intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar";
public boolean shareCaches = false;
public List<String> mixinConfigs = new ArrayList<>(); // FORGE: Passed to Minecraft
@@ -282,7 +282,7 @@ public class LoomGradleExtension {
}
public void accessTransformer(Object file) {
- this.accessTransformer = project.file(file);
+ this.accessTransformers.add(project.file(file));
}
public File getUserCache() {
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
index ede56f51..261fb481 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
@@ -43,9 +43,11 @@ import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -57,6 +59,8 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Predicates;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableMap;
+import com.google.common.hash.Hashing;
+import com.google.common.io.ByteSource;
import com.google.gson.JsonParser;
import de.oceanlabs.mcp.mcinjector.adaptors.ParameterAnnotationFixer;
import dev.architectury.tinyremapper.OutputConsumerPath;
@@ -70,7 +74,6 @@ import org.gradle.api.logging.LogLevel;
import org.gradle.api.logging.Logger;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
-import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -80,7 +83,6 @@ import org.zeroturnaround.zip.ZipUtil;
import net.fabricmc.loom.configuration.DependencyProvider;
import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
-import net.fabricmc.loom.util.Checksum;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DependencyDownloader;
import net.fabricmc.loom.util.FileSystemUtil;
@@ -111,8 +113,7 @@ public class MinecraftPatchedProvider extends DependencyProvider {
private File minecraftMergedPatchedJar;
private File projectAtHash;
- @Nullable
- private File projectAt = null;
+ private Set<File> projectAts = new HashSet<>();
private boolean atDirty = false;
private boolean filesDirty = false;
@@ -123,16 +124,16 @@ public class MinecraftPatchedProvider extends DependencyProvider {
public void initFiles() throws IOException {
filesDirty = false;
projectAtHash = new File(getExtension().getProjectPersistentCache(), "at.sha256");
- projectAt = getExtension().accessTransformer;
+ projectAts = getExtension().accessTransformers;
- if (projectAt == null) {
+ if (projectAts.isEmpty()) {
SourceSet main = getProject().getConvention().findPlugin(JavaPluginConvention.class).getSourceSets().getByName("main");
for (File srcDir : main.getResources().getSrcDirs()) {
File projectAt = new File(srcDir, "META-INF/accesstransformer.cfg");
if (projectAt.exists()) {
- this.projectAt = projectAt;
+ this.projectAts.add(projectAt);
break;
}
}
@@ -140,10 +141,10 @@ public class MinecraftPatchedProvider extends DependencyProvider {
if (isRefreshDeps() || !projectAtHash.exists()) {
writeAtHash();
- atDirty = projectAt != null;
+ atDirty = !projectAts.isEmpty();
} else {
byte[] expected = com.google.common.io.Files.asByteSource(projectAtHash).read();
- byte[] current = projectAt != null ? Checksum.sha256(projectAt) : Checksum.sha256("");
+ byte[] current = getProjectAtsHash();
boolean mismatched = !Arrays.equals(current, expected);
if (mismatched) {
@@ -187,6 +188,17 @@ public class MinecraftPatchedProvider extends DependencyProvider {
}
}
+ private byte[] getProjectAtsHash() throws IOException {
+ if (projectAts.isEmpty()) return ByteSource.empty().hash(Hashing.sha256()).asBytes();
+ List<ByteSource> currentBytes = new ArrayList<>();
+
+ for (File projectAt : projectAts) {
+ currentBytes.add(com.google.common.io.Files.asByteSource(projectAt));
+ }
+
+ return ByteSource.concat(currentBytes).hash(Hashing.sha256()).asBytes();
+ }
+
public void cleanAllCache() {
for (File file : getGlobalCaches()) {
file.delete();
@@ -263,11 +275,7 @@ public class MinecraftPatchedProvider extends DependencyProvider {
private void writeAtHash() throws IOException {
try (FileOutputStream out = new FileOutputStream(projectAtHash)) {
- if (projectAt != null) {
- out.write(Checksum.sha256(projectAt));
- } else {
- out.write(Checksum.sha256(""));
- }
+ out.write(getProjectAtsHash());
}
}
@@ -393,8 +401,10 @@ public class MinecraftPatchedProvider extends DependencyProvider {
args.add(at.getAbsolutePath());
if (usesProjectCache()) {
- args.add("--atFile");
- args.add(projectAt.getAbsolutePath());
+ for (File projectAt : projectAts) {
+ args.add("--atFile");
+ args.add(projectAt.getAbsolutePath());
+ }
}
getProject().javaexec(spec -> {
@@ -619,7 +629,7 @@ public class MinecraftPatchedProvider extends DependencyProvider {
}
public boolean usesProjectCache() {
- return projectAt != null;
+ return !projectAts.isEmpty();
}
public boolean isAtDirty() {