diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/GraphicsObjectTransformer.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/GraphicsObjectTransformer.java new file mode 100644 index 0000000000..264707886d --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/GraphicsObjectTransformer.java @@ -0,0 +1,41 @@ +package net.runelite.deob.deobfuscators.transformers; + +import net.runelite.asm.ClassFile; +import net.runelite.asm.ClassGroup; +import net.runelite.asm.Method; +import net.runelite.asm.attributes.Code; +import net.runelite.asm.attributes.code.Instructions; +import net.runelite.asm.attributes.code.instructions.ALoad; +import net.runelite.asm.attributes.code.instructions.InvokeSpecial; +import net.runelite.asm.attributes.code.instructions.VReturn; +import net.runelite.asm.signature.Signature; +import net.runelite.deob.Transformer; + +public class GraphicsObjectTransformer implements Transformer // robots in disguise +{ + private static final String GRAPHICS_OBJECT = "GraphicsObject"; + private static final String RENDERABLE = "Renderable"; + + @Override + public void transform(ClassGroup group) + { + ClassFile graphicsObject = group.findClass(GRAPHICS_OBJECT); + ClassFile renderable = group.findClass(RENDERABLE); + + graphicsObject.clearFinal(); + + Method initGraphicsObject = new Method(graphicsObject, "", new Signature("()V")); + initGraphicsObject.setPublic(); + + final Code code = new Code(initGraphicsObject); + code.setMaxStack(1); + initGraphicsObject.setCode(code); + graphicsObject.addMethod(initGraphicsObject); + + Instructions ins = code.getInstructions(); + + ins.addInstruction(new ALoad(ins, 0)); + ins.addInstruction(new InvokeSpecial(ins, new net.runelite.asm.pool.Method(renderable.getPoolClass(), "", new Signature("()V")))); + ins.addInstruction(new VReturn(ins)); + } +} diff --git a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java index e1bb33be68..33ab904eb1 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java +++ b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java @@ -31,6 +31,7 @@ import net.runelite.deob.deobfuscators.mapping.AnnotationIntegrityChecker; import net.runelite.deob.deobfuscators.mapping.AnnotationMapper; import net.runelite.deob.deobfuscators.mapping.Mapper; import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping; +import net.runelite.deob.deobfuscators.transformers.GraphicsObjectTransformer; import net.runelite.deob.deobfuscators.transformers.ScriptOpcodesTransformer; import net.runelite.deob.util.JarUtil; import org.slf4j.Logger; @@ -78,6 +79,7 @@ public class UpdateMappings ad.run(); new ScriptOpcodesTransformer().transform(group2); + new GraphicsObjectTransformer().transform(group2); } public void save(File out) throws IOException