From 3f428c23dafb09cc5efe4f30d4d67b5a881d91bd Mon Sep 17 00:00:00 2001 From: joe Date: Thu, 21 Aug 2025 21:29:52 +0100 Subject: Add more utility methods --- .../src/main/java/cuchaz/enigma/gui/GuiController.java | 6 ++++++ enigma/src/main/java/cuchaz/enigma/Enigma.java | 2 +- enigma/src/main/java/cuchaz/enigma/EnigmaProject.java | 16 +++++++++++++++- enigma/src/main/java/cuchaz/enigma/api/view/GuiView.java | 4 ++++ .../main/java/cuchaz/enigma/api/view/ProjectView.java | 6 ++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java index 9faa0d0..1c4549d 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -27,6 +27,7 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -126,6 +127,11 @@ public class GuiController implements ClientPacketHandler, GuiView, DataInvalida return project; } + @Override + public JFrame getFrame() { + return gui.getFrame(); + } + public boolean isDirty() { return project != null && project.getMapper().isDirty(); } diff --git a/enigma/src/main/java/cuchaz/enigma/Enigma.java b/enigma/src/main/java/cuchaz/enigma/Enigma.java index 13640bc..4483ab7 100644 --- a/enigma/src/main/java/cuchaz/enigma/Enigma.java +++ b/enigma/src/main/java/cuchaz/enigma/Enigma.java @@ -84,7 +84,7 @@ public class Enigma { ClassProvider classProviderWithFrames = index.indexJar(scope, classProvider, progress); services.get(JarIndexerService.TYPE).forEach(indexer -> indexer.acceptJar(scope, classProviderWithFrames, index)); - EnigmaProject project = new EnigmaProject(this, paths, classProvider, index, Utils.zipSha1(paths.toArray(new Path[0]))); + EnigmaProject project = new EnigmaProject(this, paths, classProvider, scope, index, Utils.zipSha1(paths.toArray(new Path[0]))); if (callServices) { for (ProjectService projectService : services.get(ProjectService.TYPE)) { diff --git a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java index 1e4afa2..3f4a067 100644 --- a/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java +++ b/enigma/src/main/java/cuchaz/enigma/EnigmaProject.java @@ -11,6 +11,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.jar.JarEntry; @@ -58,12 +59,13 @@ public class EnigmaProject implements ProjectView { private final ClassProvider classProvider; private final JarIndex jarIndex; private final byte[] jarChecksum; + private final Set projectClasses; private EntryRemapper mapper; private final List dataInvalidationListeners = new ArrayList<>(); - public EnigmaProject(Enigma enigma, List jarPaths, ClassProvider classProvider, JarIndex jarIndex, byte[] jarChecksum) { + public EnigmaProject(Enigma enigma, List jarPaths, ClassProvider classProvider, Set projectClasses, JarIndex jarIndex, byte[] jarChecksum) { if (jarChecksum.length != 20) { throw new IllegalArgumentException(); } @@ -73,6 +75,7 @@ public class EnigmaProject implements ProjectView { this.classProvider = classProvider; this.jarIndex = jarIndex; this.jarChecksum = jarChecksum; + this.projectClasses = projectClasses; this.mapper = EntryRemapper.empty(jarIndex); } @@ -340,6 +343,17 @@ public class EnigmaProject implements ProjectView { return (T) mapper.extendedDeobfuscate((Translatable) entry).getValue(); } + @Override + public Collection getProjectClasses() { + return projectClasses; + } + + @Override + @Nullable + public ClassNode getBytecode(String className) { + return classProvider.get(className); + } + @Override public void addDataInvalidationListener(DataInvalidationListener listener) { dataInvalidationListeners.add(listener); diff --git a/enigma/src/main/java/cuchaz/enigma/api/view/GuiView.java b/enigma/src/main/java/cuchaz/enigma/api/view/GuiView.java index 15c2dc6..519a8ce 100644 --- a/enigma/src/main/java/cuchaz/enigma/api/view/GuiView.java +++ b/enigma/src/main/java/cuchaz/enigma/api/view/GuiView.java @@ -1,5 +1,7 @@ package cuchaz.enigma.api.view; +import javax.swing.JFrame; + import org.jetbrains.annotations.Nullable; import cuchaz.enigma.api.view.entry.EntryReferenceView; @@ -10,4 +12,6 @@ public interface GuiView { @Nullable EntryReferenceView getCursorReference(); + + JFrame getFrame(); } diff --git a/enigma/src/main/java/cuchaz/enigma/api/view/ProjectView.java b/enigma/src/main/java/cuchaz/enigma/api/view/ProjectView.java index eae776b..b8760e2 100644 --- a/enigma/src/main/java/cuchaz/enigma/api/view/ProjectView.java +++ b/enigma/src/main/java/cuchaz/enigma/api/view/ProjectView.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; import org.jetbrains.annotations.Nullable; +import org.objectweb.asm.tree.ClassNode; import cuchaz.enigma.api.DataInvalidationEvent; import cuchaz.enigma.api.DataInvalidationListener; @@ -12,6 +13,11 @@ import cuchaz.enigma.api.view.entry.EntryView; public interface ProjectView { T deobfuscate(T entry); + Collection getProjectClasses(); + + @Nullable + ClassNode getBytecode(String className); + void addDataInvalidationListener(DataInvalidationListener listener); default void invalidateData(DataInvalidationEvent.InvalidationType type) { -- cgit v1.2.3