mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 05:27:43 -05:00
Migrate ATs to JavaExec and make them quiet
This commit is contained in:
@@ -106,7 +106,6 @@ dependencies {
|
||||
implementation ('net.minecraftforge:binarypatcher:1.1.1')
|
||||
implementation ('org.cadixdev:lorenz:0.5.3')
|
||||
implementation ('org.cadixdev:lorenz-asm:0.5.3')
|
||||
implementation ('net.minecraftforge:accesstransformers:2.2.0')
|
||||
implementation ('de.oceanlabs.mcp:mcinjector:3.8.0')
|
||||
implementation ('com.opencsv:opencsv:5.4')
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -41,10 +40,11 @@ import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
@@ -57,14 +57,12 @@ import com.google.gson.JsonParser;
|
||||
import de.oceanlabs.mcp.mcinjector.adaptors.ParameterAnnotationFixer;
|
||||
import dev.architectury.tinyremapper.OutputConsumerPath;
|
||||
import dev.architectury.tinyremapper.TinyRemapper;
|
||||
import net.minecraftforge.accesstransformer.AccessTransformerEngine;
|
||||
import net.minecraftforge.accesstransformer.TransformerProcessor;
|
||||
import net.minecraftforge.accesstransformer.parser.AccessTransformerList;
|
||||
import net.minecraftforge.binarypatcher.ConsoleTool;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.io.output.NullOutputStream;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.logging.LogLevel;
|
||||
import org.gradle.api.logging.Logger;
|
||||
import org.gradle.api.plugins.JavaPluginConvention;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
@@ -80,6 +78,7 @@ import net.fabricmc.loom.configuration.providers.MinecraftProvider;
|
||||
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.DownloadUtil;
|
||||
import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.loom.util.JarUtil;
|
||||
@@ -360,6 +359,9 @@ public class MinecraftPatchedProvider extends DependencyProvider {
|
||||
}
|
||||
|
||||
private void accessTransformForge(Logger logger) throws Exception {
|
||||
var atDependency = Constants.Dependencies.ACCESS_TRANSFORMERS + Constants.Dependencies.Versions.ACCESS_TRANSFORMERS;
|
||||
var classpath = DependencyDownloader.download(getProject(), atDependency);
|
||||
|
||||
for (Environment environment : Environment.values()) {
|
||||
String side = environment.side();
|
||||
logger.lifecycle(":access transforming minecraft (" + side + ")");
|
||||
@@ -371,34 +373,34 @@ public class MinecraftPatchedProvider extends DependencyProvider {
|
||||
target.delete();
|
||||
File at = File.createTempFile("at" + side, ".cfg");
|
||||
JarUtil.extractFile(inputCopied, "META-INF/accesstransformer.cfg", at);
|
||||
String[] args = new String[] {
|
||||
"--inJar", inputCopied.getAbsolutePath(),
|
||||
"--outJar", target.getAbsolutePath(),
|
||||
"--atFile", at.getAbsolutePath()
|
||||
};
|
||||
|
||||
List<String> args = new ArrayList<>();
|
||||
args.add("--inJar");
|
||||
args.add(inputCopied.getAbsolutePath());
|
||||
args.add("--outJar");
|
||||
args.add(target.getAbsolutePath());
|
||||
args.add("--atFile");
|
||||
args.add(at.getAbsolutePath());
|
||||
|
||||
if (usesProjectCache()) {
|
||||
args = Arrays.copyOf(args, args.length + 2);
|
||||
args[args.length - 2] = "--atFile";
|
||||
args[args.length - 1] = projectAt.getAbsolutePath();
|
||||
args.add("--atFile");
|
||||
args.add(projectAt.getAbsolutePath());
|
||||
}
|
||||
|
||||
resetAccessTransformerEngine();
|
||||
TransformerProcessor.main(args);
|
||||
getProject().javaexec(spec -> {
|
||||
spec.setMain("net.minecraftforge.accesstransformer.TransformerProcessor");
|
||||
spec.setArgs(args);
|
||||
spec.setClasspath(classpath);
|
||||
|
||||
// if running with INFO or DEBUG logging
|
||||
if (getProject().getGradle().getStartParameter().getLogLevel().compareTo(LogLevel.LIFECYCLE) < 0) {
|
||||
spec.setStandardOutput(System.out);
|
||||
}
|
||||
}).rethrowFailure().assertNormalExitValue();
|
||||
inputCopied.delete();
|
||||
}
|
||||
}
|
||||
|
||||
private void resetAccessTransformerEngine() throws Exception {
|
||||
// Thank you Forge, I love you
|
||||
Field field = AccessTransformerEngine.class.getDeclaredField("masterList");
|
||||
field.setAccessible(true);
|
||||
AccessTransformerList list = (AccessTransformerList) field.get(AccessTransformerEngine.INSTANCE);
|
||||
field = AccessTransformerList.class.getDeclaredField("accessTransformers");
|
||||
field.setAccessible(true);
|
||||
((Map<?, ?>) field.get(list)).clear();
|
||||
}
|
||||
|
||||
public enum Environment {
|
||||
CLIENT(provider -> provider.minecraftClientSrgJar,
|
||||
provider -> provider.minecraftClientPatchedSrgJar,
|
||||
|
||||
@@ -91,6 +91,7 @@ public class Constants {
|
||||
public static final String TERMINAL_CONSOLE_APPENDER = "net.minecrell:terminalconsoleappender:";
|
||||
public static final String JETBRAINS_ANNOTATIONS = "org.jetbrains:annotations:";
|
||||
public static final String JAVAX_ANNOTATIONS = "com.google.code.findbugs:jsr305:"; // I hate that I have to add these.
|
||||
public static final String ACCESS_TRANSFORMERS = "net.minecraftforge:accesstransformers:";
|
||||
|
||||
private Dependencies() {
|
||||
}
|
||||
@@ -104,6 +105,7 @@ public class Constants {
|
||||
public static final String TERMINAL_CONSOLE_APPENDER = "1.2.0";
|
||||
public static final String JETBRAINS_ANNOTATIONS = "19.0.0";
|
||||
public static final String JAVAX_ANNOTATIONS = "3.0.2";
|
||||
public static final String ACCESS_TRANSFORMERS = "2.2.0";
|
||||
|
||||
private Versions() {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.fabricmc.loom.util;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
|
||||
/**
|
||||
* Simplified dependency downloading.
|
||||
*
|
||||
* @author Juuz
|
||||
*/
|
||||
public final class DependencyDownloader {
|
||||
/**
|
||||
* Resolves a dependency as well as its transitive dependencies into a {@link FileCollection}.
|
||||
*
|
||||
* @param project the project needing these files
|
||||
* @param dependencyNotation the dependency notation
|
||||
* @return the resolved files
|
||||
*/
|
||||
public static FileCollection download(Project project, String dependencyNotation) {
|
||||
var dependency = project.getDependencies().create(dependencyNotation);
|
||||
var config = project.getConfigurations().detachedConfiguration(dependency);
|
||||
return config.fileCollection(dep -> true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user