From 3180710e0b6551cd92a4f0b1cbb174deee16e79e Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 25 Aug 2016 18:03:21 +0100 Subject: [PATCH] Fix jar file not being public --- build.gradle | 3 +- .../net/fabricmc/loom/AbstractPlugin.java | 4 -- .../loom/task/GenIdeaProjectTask.java | 15 ----- .../net/fabricmc/loom/task/MapJarsTask.java | 64 ++++++++++++++++--- 4 files changed, 56 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 424deff..3ec78cd 100644 --- a/build.gradle +++ b/build.gradle @@ -47,8 +47,7 @@ dependencies { shade 'commons-io:commons-io:1.4' shade 'com.google.guava:guava:19.0' shade 'net.fabricmc:blending-jar:0.1.1.6' - - shade 'net.fabricmc:enigma:0.11.+' + shade 'net.fabricmc:enigma:0.11.0.35' shade 'org.javassist:javassist:3.+' shade 'org.bitbucket.mstrobel:procyon-compilertools:0.5.33.6-enigma' shade 'de.sciss:syntaxpane:1.1.+' diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index d6da82b..3b911e1 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -148,10 +148,6 @@ public class AbstractPlugin implements Plugin { project.afterEvaluate(project1 -> { LoomGradleExtension extension = project1.getExtensions().getByType(LoomGradleExtension.class); - project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> { - flatDirectoryArtifactRepository.dir(Constants.CACHE_FILES); - flatDirectoryArtifactRepository.setName("LoomCacheFiles"); - }); project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> { flatDirectoryArtifactRepository.dir(extension.getFabricUserCache()); diff --git a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java index cc78ea3..b388b40 100644 --- a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java @@ -123,21 +123,6 @@ public class GenIdeaProjectTask extends DefaultTask { } } - Element node = doc.createElement("orderEntry"); - node.setAttribute("type", "module-library"); - Element libraryElement = doc.createElement("library"); - Element classes = doc.createElement("CLASSES"); - Element javadoc = doc.createElement("JAVADOC"); - Element sources = doc.createElement("SOURCES"); - Element root = doc.createElement("root"); - root.setAttribute("url", "jar://" + Constants.MINECRAFT_MAPPED_JAR.get(extension).getAbsolutePath() + "!/"); - classes.appendChild(root); - libraryElement.appendChild(classes); - libraryElement.appendChild(javadoc); - libraryElement.appendChild(sources); - node.appendChild(libraryElement); - component.appendChild(node); - TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); diff --git a/src/main/java/net/fabricmc/loom/task/MapJarsTask.java b/src/main/java/net/fabricmc/loom/task/MapJarsTask.java index b76fddc..a5e74e6 100644 --- a/src/main/java/net/fabricmc/loom/task/MapJarsTask.java +++ b/src/main/java/net/fabricmc/loom/task/MapJarsTask.java @@ -25,8 +25,16 @@ package net.fabricmc.loom.task; import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.TranslatingTypeLoader; +import cuchaz.enigma.bytecode.ClassPublifier; import cuchaz.enigma.mapping.MappingsEnigmaReader; +import cuchaz.enigma.mapping.TranslationDirection; import cuchaz.enigma.throwables.MappingParseException; +import javassist.CtBehavior; +import javassist.CtClass; +import javassist.CtField; +import javassist.bytecode.AccessFlag; +import javassist.bytecode.InnerClassesAttribute; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.util.Constants; import org.apache.commons.io.FileUtils; @@ -54,19 +62,11 @@ public class MapJarsTask extends DefaultTask { } ZipUtil.unpack(Constants.MAPPINGS_ZIP, Constants.MAPPINGS_DIR); - File tempFile = new File(Constants.CACHE_FILES, "tempJar.jar"); - if (tempFile.exists()) { - //This should not happen, just want to be safe - tempFile.delete(); - } this.getLogger().lifecycle(":remapping jar"); deobfuscator = new Deobfuscator(new JarFile(Constants.MINECRAFT_MERGED_JAR.get(extension))); this.deobfuscator.setMappings(new MappingsEnigmaReader().read(new File(Constants.MAPPINGS_DIR, "pomf-" + extension.version + File.separator + "mappings"))); - this.deobfuscator.writeJar(tempFile, new ProgressListener()); - deobfuscator = new Deobfuscator(new JarFile(tempFile)); - deobfuscator.publifyJar(Constants.MINECRAFT_MAPPED_JAR.get(extension), new ProgressListener()); - tempFile.delete(); + writeJar(Constants.MINECRAFT_MAPPED_JAR.get(extension), new ProgressListener(), deobfuscator); File tempAssests = new File(Constants.CACHE_FILES, "tempAssets"); @@ -82,6 +82,52 @@ public class MapJarsTask extends DefaultTask { ZipUtil.pack(tempAssests, Constants.MINECRAFT_MAPPED_JAR.get(extension)); } + public void writeJar(File out, Deobfuscator.ProgressListener progress, Deobfuscator deobfuscator) { + TranslatingTypeLoader loader = new TranslatingTypeLoader(deobfuscator.getJar(), deobfuscator.getJarIndex(), deobfuscator.getTranslator(TranslationDirection.Obfuscating), deobfuscator.getTranslator(TranslationDirection.Deobfuscating)); + deobfuscator.transformJar(out, progress, new CustomClassTransformer(loader)); + } + + private class CustomClassTransformer implements Deobfuscator.ClassTransformer { + + TranslatingTypeLoader loader; + + public CustomClassTransformer(TranslatingTypeLoader loader) { + this.loader = loader; + } + + @Override + public CtClass transform(CtClass ctClass) throws Exception { + return publify(loader.transformClass(ctClass)); + } + } + + //Taken from enigma, anc changed a little + public static CtClass publify(CtClass c) { + + for (CtField field : c.getDeclaredFields()) { + field.setModifiers(publify(field.getModifiers())); + } + for (CtBehavior behavior : c.getDeclaredBehaviors()) { + behavior.setModifiers(publify(behavior.getModifiers())); + } + InnerClassesAttribute attr = (InnerClassesAttribute) c.getClassFile().getAttribute(InnerClassesAttribute.tag); + if (attr != null) { + for (int i = 0; i < attr.tableLength(); i++) { + attr.setAccessFlags(i, publify(attr.accessFlags(i))); + } + } + + return c; + } + + private static int publify(int flags) { + if (!AccessFlag.isPublic(flags)) { + flags = AccessFlag.setPublic(flags); + } + return flags; + } + + public static class ProgressListener implements Deobfuscator.ProgressListener { @Override public void init(int i, String s) {