From f9094e3f85c51cd8882ae2f366e60daf3f1b74a4 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 2 Mar 2013 01:49:45 -0500 Subject: [PATCH] Tweaks to runtime deobf --- .../asm/transformers/AccessTransformer.java | 27 +++++++++++++++++-- .../deobf/FMLDeobfuscatingRemapper.java | 6 +++++ .../mods/fml/relauncher/FMLCorePlugin.java | 1 - .../relauncher/RelaunchLibraryManager.java | 2 ++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/fml/common/cpw/mods/fml/common/asm/transformers/AccessTransformer.java b/fml/common/cpw/mods/fml/common/asm/transformers/AccessTransformer.java index 2d4944313..079fc7195 100644 --- a/fml/common/cpw/mods/fml/common/asm/transformers/AccessTransformer.java +++ b/fml/common/cpw/mods/fml/common/asm/transformers/AccessTransformer.java @@ -35,6 +35,7 @@ import com.google.common.collect.Multimap; import com.google.common.io.LineProcessor; import com.google.common.io.Resources; +import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; import cpw.mods.fml.relauncher.IClassTransformer; public class AccessTransformer implements IClassTransformer @@ -145,13 +146,35 @@ public class AccessTransformer implements IClassTransformer @Override public byte[] transform(String name, String transformedName, byte[] bytes) { - if (bytes == null) { return null; } - if (!modifiers.containsKey(name)) { return bytes; } + if (bytes == null) { return null; } + boolean makeAllPublic = FMLDeobfuscatingRemapper.INSTANCE.isRemappedClass(name); + + if (!makeAllPublic && !modifiers.containsKey(name)) { return bytes; } ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); + if (makeAllPublic) + { + // class + Modifier m = new Modifier(); + m.targetAccess = ACC_PUBLIC; + m.modifyClassVisibility = true; + modifiers.put(name,m); + // fields + m = new Modifier(); + m.targetAccess = ACC_PUBLIC; + m.name = "*"; + modifiers.put(name,m); + // methods + m = new Modifier(); + m.targetAccess = ACC_PUBLIC; + m.name = "*"; + m.desc = ""; + modifiers.put(name,m); + } + Collection mods = modifiers.get(name); for (Modifier m : mods) { diff --git a/fml/common/cpw/mods/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.java b/fml/common/cpw/mods/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.java index 8eb2c23cb..68bb2bf2d 100644 --- a/fml/common/cpw/mods/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.java +++ b/fml/common/cpw/mods/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.java @@ -96,6 +96,12 @@ public class FMLDeobfuscatingRemapper extends Remapper { methodNameMaps = Maps.newHashMapWithExpectedSize(rawMethodMaps.size()); fieldNameMaps = Maps.newHashMapWithExpectedSize(rawFieldMaps.size()); } + + public boolean isRemappedClass(String className) + { + return classNameBiMap.containsKey(className); + } + private void parseField(String[] parts) { String oldSrg = parts[1]; diff --git a/fml/common/cpw/mods/fml/relauncher/FMLCorePlugin.java b/fml/common/cpw/mods/fml/relauncher/FMLCorePlugin.java index b188e993d..231cebe47 100644 --- a/fml/common/cpw/mods/fml/relauncher/FMLCorePlugin.java +++ b/fml/common/cpw/mods/fml/relauncher/FMLCorePlugin.java @@ -17,7 +17,6 @@ public class FMLCorePlugin implements IFMLLoadingPlugin "cpw.mods.fml.common.asm.transformers.AccessTransformer", "cpw.mods.fml.common.asm.transformers.MarkerTransformer", "cpw.mods.fml.common.asm.transformers.SideTransformer", - "cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer", }; } diff --git a/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java b/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java index a5f7d32aa..1532af995 100644 --- a/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java +++ b/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java @@ -239,6 +239,8 @@ public class RelaunchLibraryManager } } } + // Deobfuscation transformer, always last + actualClassLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer"); downloadMonitor.updateProgressString("Running coremod plugins"); Map data = new HashMap();