Fix jar file not being public
parent
53752d098c
commit
3180710e0b
|
@ -47,8 +47,7 @@ dependencies {
|
||||||
shade 'commons-io:commons-io:1.4'
|
shade 'commons-io:commons-io:1.4'
|
||||||
shade 'com.google.guava:guava:19.0'
|
shade 'com.google.guava:guava:19.0'
|
||||||
shade 'net.fabricmc:blending-jar:0.1.1.6'
|
shade 'net.fabricmc:blending-jar:0.1.1.6'
|
||||||
|
shade 'net.fabricmc:enigma:0.11.0.35'
|
||||||
shade 'net.fabricmc:enigma:0.11.+'
|
|
||||||
shade 'org.javassist:javassist:3.+'
|
shade 'org.javassist:javassist:3.+'
|
||||||
shade 'org.bitbucket.mstrobel:procyon-compilertools:0.5.33.6-enigma'
|
shade 'org.bitbucket.mstrobel:procyon-compilertools:0.5.33.6-enigma'
|
||||||
shade 'de.sciss:syntaxpane:1.1.+'
|
shade 'de.sciss:syntaxpane:1.1.+'
|
||||||
|
|
|
@ -148,10 +148,6 @@ public class AbstractPlugin implements Plugin<Project> {
|
||||||
|
|
||||||
project.afterEvaluate(project1 -> {
|
project.afterEvaluate(project1 -> {
|
||||||
LoomGradleExtension extension = project1.getExtensions().getByType(LoomGradleExtension.class);
|
LoomGradleExtension extension = project1.getExtensions().getByType(LoomGradleExtension.class);
|
||||||
project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> {
|
|
||||||
flatDirectoryArtifactRepository.dir(Constants.CACHE_FILES);
|
|
||||||
flatDirectoryArtifactRepository.setName("LoomCacheFiles");
|
|
||||||
});
|
|
||||||
|
|
||||||
project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> {
|
project1.getRepositories().flatDir(flatDirectoryArtifactRepository -> {
|
||||||
flatDirectoryArtifactRepository.dir(extension.getFabricUserCache());
|
flatDirectoryArtifactRepository.dir(extension.getFabricUserCache());
|
||||||
|
|
|
@ -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();
|
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||||
Transformer transformer = transformerFactory.newTransformer();
|
Transformer transformer = transformerFactory.newTransformer();
|
||||||
DOMSource source = new DOMSource(doc);
|
DOMSource source = new DOMSource(doc);
|
||||||
|
|
|
@ -25,8 +25,16 @@
|
||||||
package net.fabricmc.loom.task;
|
package net.fabricmc.loom.task;
|
||||||
|
|
||||||
import cuchaz.enigma.Deobfuscator;
|
import cuchaz.enigma.Deobfuscator;
|
||||||
|
import cuchaz.enigma.TranslatingTypeLoader;
|
||||||
|
import cuchaz.enigma.bytecode.ClassPublifier;
|
||||||
import cuchaz.enigma.mapping.MappingsEnigmaReader;
|
import cuchaz.enigma.mapping.MappingsEnigmaReader;
|
||||||
|
import cuchaz.enigma.mapping.TranslationDirection;
|
||||||
import cuchaz.enigma.throwables.MappingParseException;
|
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.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.util.Constants;
|
import net.fabricmc.loom.util.Constants;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
@ -54,19 +62,11 @@ public class MapJarsTask extends DefaultTask {
|
||||||
}
|
}
|
||||||
ZipUtil.unpack(Constants.MAPPINGS_ZIP, Constants.MAPPINGS_DIR);
|
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");
|
this.getLogger().lifecycle(":remapping jar");
|
||||||
deobfuscator = new Deobfuscator(new JarFile(Constants.MINECRAFT_MERGED_JAR.get(extension)));
|
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.setMappings(new MappingsEnigmaReader().read(new File(Constants.MAPPINGS_DIR, "pomf-" + extension.version + File.separator + "mappings")));
|
||||||
this.deobfuscator.writeJar(tempFile, new ProgressListener());
|
writeJar(Constants.MINECRAFT_MAPPED_JAR.get(extension), new ProgressListener(), deobfuscator);
|
||||||
deobfuscator = new Deobfuscator(new JarFile(tempFile));
|
|
||||||
deobfuscator.publifyJar(Constants.MINECRAFT_MAPPED_JAR.get(extension), new ProgressListener());
|
|
||||||
tempFile.delete();
|
|
||||||
|
|
||||||
File tempAssests = new File(Constants.CACHE_FILES, "tempAssets");
|
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));
|
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 {
|
public static class ProgressListener implements Deobfuscator.ProgressListener {
|
||||||
@Override
|
@Override
|
||||||
public void init(int i, String s) {
|
public void init(int i, String s) {
|
||||||
|
|
Loading…
Reference in New Issue