From f8c7b8497e9687e15123caca7d4fde54f5bf067a Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 11 Sep 2025 17:35:30 +0100 Subject: Allow you to specify the libraries in the program args rather than always using the runtime classpath --- .../cuchaz/enigma/command/CheckMappingsCommand.java | 7 ++++--- .../src/main/java/cuchaz/enigma/command/Command.java | 17 ++++++++++++++--- .../java/cuchaz/enigma/command/DecompileCommand.java | 6 ++++-- .../java/cuchaz/enigma/command/DeobfuscateCommand.java | 4 +++- 4 files changed, 25 insertions(+), 9 deletions(-) (limited to 'enigma-cli') diff --git a/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java index 5e64b2c..fc187f1 100644 --- a/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java @@ -1,6 +1,7 @@ package cuchaz.enigma.command; import java.nio.file.Path; +import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -8,7 +9,6 @@ import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; @@ -21,7 +21,7 @@ public class CheckMappingsCommand extends Command { @Override public String getUsage() { - return " "; + return " [ ...]"; } @Override @@ -33,11 +33,12 @@ public class CheckMappingsCommand extends Command { public void run(String... args) throws Exception { Path fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 1, "mappings file", true)); + List libraries = getReadablePaths(args, 2); Enigma enigma = Enigma.create(); System.out.println("Reading JAR..."); - EnigmaProject project = enigma.openJar(fileJarIn, new ClasspathClassProvider(), ProgressListener.none()); + EnigmaProject project = enigma.openJar(fileJarIn, libraries, ProgressListener.none()); System.out.println("Reading mappings..."); MappingSaveParameters saveParameters = enigma.getProfile().getMappingSaveParameters(); diff --git a/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java b/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java index 53b277f..7f42f3a 100644 --- a/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/Command.java @@ -5,6 +5,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import net.fabricmc.mappingio.MappingReader; @@ -14,7 +16,6 @@ import net.fabricmc.mappingio.tree.VisitableMappingTree; import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.serde.MappingFormat; import cuchaz.enigma.translation.mapping.serde.MappingIoConverter; @@ -35,13 +36,13 @@ public abstract class Command { public abstract void run(String... args) throws Exception; - protected static EnigmaProject openProject(Path fileJarIn, Path fileMappings) throws Exception { + protected static EnigmaProject openProject(Path fileJarIn, Path fileMappings, List libraries) throws Exception { ProgressListener progress = new ConsoleProgressListener(); Enigma enigma = Enigma.create(); System.out.println("Reading jar..."); - EnigmaProject project = enigma.openJar(fileJarIn, new ClasspathClassProvider(), progress); + EnigmaProject project = enigma.openJar(fileJarIn, libraries, progress); if (fileMappings != null) { System.out.println("Reading mappings..."); @@ -143,6 +144,16 @@ public abstract class Command { return args[i]; } + protected static List getReadablePaths(String[] args, int startingFrom) { + List paths = new ArrayList<>(); + + for (int i = startingFrom; i < args.length; i++) { + paths.add(getReadablePath(args[i])); + } + + return paths; + } + public static class ConsoleProgressListener implements ProgressListener { private static final int ReportTime = 5000; // 5s diff --git a/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java index baed29a..b1c5498 100644 --- a/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/DecompileCommand.java @@ -2,6 +2,7 @@ package cuchaz.enigma.command; import java.lang.reflect.Field; import java.nio.file.Path; +import java.util.List; import java.util.Locale; import cuchaz.enigma.EnigmaProject; @@ -17,7 +18,7 @@ public class DecompileCommand extends Command { @Override public String getUsage() { - return " []"; + return " [] [ ...]"; } @Override @@ -31,6 +32,7 @@ public class DecompileCommand extends Command { Path fileJarIn = getReadableFile(getArg(args, 1, "in jar", true)).toPath(); Path fileJarOut = getWritableFolder(getArg(args, 2, "out folder", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 3, "mappings file", false)); + List libraries = getReadablePaths(args, 4); DecompilerService decompilerService; @@ -42,7 +44,7 @@ public class DecompileCommand extends Command { return; } - EnigmaProject project = openProject(fileJarIn, fileMappings); + EnigmaProject project = openProject(fileJarIn, fileMappings, libraries); ProgressListener progress = new ConsoleProgressListener(); diff --git a/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java b/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java index c8e6200..1ea13b5 100644 --- a/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java +++ b/enigma-cli/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java @@ -1,6 +1,7 @@ package cuchaz.enigma.command; import java.nio.file.Path; +import java.util.List; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; @@ -25,8 +26,9 @@ public class DeobfuscateCommand extends Command { Path fileJarIn = getReadablePath(getArg(args, 0, "in jar", true)); Path fileJarOut = getWritableFile(getArg(args, 1, "out jar", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 2, "mappings file", false)); + List libraries = getReadablePaths(args, 3); - EnigmaProject project = openProject(fileJarIn, fileMappings); + EnigmaProject project = openProject(fileJarIn, fileMappings, libraries); ProgressListener progress = new ConsoleProgressListener(); -- cgit v1.2.3