feat: biem boem bam
This commit is contained in:
@@ -18,9 +18,11 @@ import com.openosrs.injector.injectors.RSApiInjector;
|
||||
import com.openosrs.injector.injectors.raw.AddPlayerToMenu;
|
||||
import com.openosrs.injector.injectors.raw.ClearColorBuffer;
|
||||
import com.openosrs.injector.injectors.raw.DrawMenu;
|
||||
import com.openosrs.injector.injectors.raw.GraphicsObject;
|
||||
import com.openosrs.injector.injectors.raw.Occluder;
|
||||
import com.openosrs.injector.injectors.raw.RasterizerAlpha;
|
||||
import com.openosrs.injector.injectors.raw.RenderDraw;
|
||||
import com.openosrs.injector.injectors.raw.RuneliteObject;
|
||||
import com.openosrs.injector.injectors.raw.ScriptVM;
|
||||
import com.openosrs.injector.rsapi.RSApi;
|
||||
import com.openosrs.injector.transformers.InjectTransformer;
|
||||
@@ -109,6 +111,8 @@ public class Injector extends InjectData implements InjectTaskHandler
|
||||
|
||||
inject(new CreateAnnotations(this));
|
||||
|
||||
inject(new RuneliteObject(this));
|
||||
|
||||
inject(new InterfaceInjector(this));
|
||||
|
||||
inject(new RasterizerAlpha(this));
|
||||
@@ -138,6 +142,8 @@ public class Injector extends InjectData implements InjectTaskHandler
|
||||
|
||||
inject(new AddPlayerToMenu(this));
|
||||
|
||||
inject(new GraphicsObject(this));
|
||||
|
||||
validate(new InjectorValidator(this));
|
||||
|
||||
transform(new SourceChanger(this));
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
*/
|
||||
package com.openosrs.injector.injection;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.openosrs.injector.InjectUtil;
|
||||
import com.openosrs.injector.injectors.Injector;
|
||||
import com.openosrs.injector.rsapi.RSApi;
|
||||
@@ -45,7 +44,7 @@ public abstract class InjectData
|
||||
/**
|
||||
* Deobfuscated ClassFiles -> Vanilla ClassFiles
|
||||
*/
|
||||
public Map<ClassFile, ClassFile> toVanilla;
|
||||
public final Map<ClassFile, ClassFile> toVanilla = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Strings -> Deobfuscated ClassFiles
|
||||
@@ -53,14 +52,12 @@ public abstract class InjectData
|
||||
* - Obfuscated name
|
||||
* - RSApi implementing name
|
||||
*/
|
||||
private final Map<String, ClassFile> toDeob = new HashMap<>();
|
||||
public final Map<String, ClassFile> toDeob = new HashMap<>();
|
||||
|
||||
public abstract void runChildInjector(Injector injector);
|
||||
|
||||
public void initToVanilla()
|
||||
{
|
||||
ImmutableMap.Builder<ClassFile, ClassFile> toVanillaB = ImmutableMap.builder();
|
||||
|
||||
for (final ClassFile deobClass : deobfuscated)
|
||||
{
|
||||
if (deobClass.getName().startsWith("net/runelite/") || deobClass.getName().startsWith("netscape"))
|
||||
@@ -73,13 +70,14 @@ public abstract class InjectData
|
||||
{
|
||||
toDeob.put(obName, deobClass);
|
||||
|
||||
// Can't be null
|
||||
final ClassFile obClass = this.vanilla.findClass(obName);
|
||||
toVanillaB.put(deobClass, obClass);
|
||||
|
||||
if (obClass != null)
|
||||
{
|
||||
toVanilla.put(deobClass, obClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.toVanilla = toVanillaB.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Owain van Brakel <https://github.com/Owain94>
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is licensed under GPL3, see the complete license in
|
||||
* the LICENSE file in the root directory of this submodule.
|
||||
*/
|
||||
package com.openosrs.injector.injectors.raw;
|
||||
|
||||
import com.openosrs.injector.injection.InjectData;
|
||||
import com.openosrs.injector.injectors.AbstractInjector;
|
||||
import net.runelite.asm.ClassFile;
|
||||
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;
|
||||
|
||||
public class GraphicsObject extends AbstractInjector
|
||||
{
|
||||
public GraphicsObject(InjectData inject)
|
||||
{
|
||||
super(inject);
|
||||
}
|
||||
|
||||
public void inject()
|
||||
{
|
||||
final ClassFile graphicsObjectVanilla = inject.toVanilla(
|
||||
inject.getDeobfuscated()
|
||||
.findClass("GraphicsObject")
|
||||
);
|
||||
|
||||
final ClassFile renderableVanilla = inject.toVanilla(
|
||||
inject.getDeobfuscated()
|
||||
.findClass("Renderable")
|
||||
);
|
||||
|
||||
graphicsObjectVanilla.clearFinal();
|
||||
|
||||
Method initGraphicsObject = new Method(graphicsObjectVanilla, "<init>", new Signature("()V"));
|
||||
initGraphicsObject.setPublic();
|
||||
|
||||
final Code code = new Code(initGraphicsObject);
|
||||
code.setMaxStack(1);
|
||||
initGraphicsObject.setCode(code);
|
||||
graphicsObjectVanilla.addMethod(initGraphicsObject);
|
||||
|
||||
Instructions ins = code.getInstructions();
|
||||
|
||||
ins.addInstruction(new ALoad(ins, 0));
|
||||
ins.addInstruction(new InvokeSpecial(ins, new net.runelite.asm.pool.Method(renderableVanilla.getPoolClass(), "<init>", new Signature("()V"))));
|
||||
ins.addInstruction(new VReturn(ins));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Owain van Brakel <https://github.com/Owain94>
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is licensed under GPL3, see the complete license in
|
||||
* the LICENSE file in the root directory of this submodule.
|
||||
*/
|
||||
package com.openosrs.injector.injectors.raw;
|
||||
|
||||
import com.openosrs.injector.injection.InjectData;
|
||||
import com.openosrs.injector.injectors.AbstractInjector;
|
||||
import java.util.List;
|
||||
import net.runelite.asm.ClassFile;
|
||||
import net.runelite.asm.Method;
|
||||
import net.runelite.asm.attributes.Code;
|
||||
import net.runelite.asm.attributes.code.Instruction;
|
||||
import net.runelite.asm.attributes.code.InstructionType;
|
||||
import net.runelite.asm.attributes.code.Instructions;
|
||||
import net.runelite.asm.attributes.code.instructions.ALoad;
|
||||
import net.runelite.asm.attributes.code.instructions.Dup;
|
||||
import net.runelite.asm.attributes.code.instructions.InvokeSpecial;
|
||||
import net.runelite.asm.attributes.code.instructions.New;
|
||||
import net.runelite.asm.attributes.code.instructions.Return;
|
||||
import net.runelite.asm.attributes.code.instructions.VReturn;
|
||||
import net.runelite.asm.signature.Signature;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
|
||||
public class RuneliteObject extends AbstractInjector
|
||||
{
|
||||
private static final String RUNELITE_OBJECT = "RuneLiteObject";
|
||||
|
||||
public RuneliteObject(InjectData inject)
|
||||
{
|
||||
super(inject);
|
||||
}
|
||||
|
||||
public void inject()
|
||||
{
|
||||
ClassFile runeliteObjectVanilla = inject.vanilla.findClass(RUNELITE_OBJECT);
|
||||
|
||||
final ClassFile graphicsObjectVanilla = inject.toVanilla(
|
||||
inject.getDeobfuscated()
|
||||
.findClass("GraphicsObject")
|
||||
);
|
||||
|
||||
graphicsObjectVanilla.clearFinal();
|
||||
|
||||
final ClassFile clientVanilla = inject.toVanilla(
|
||||
inject.getDeobfuscated()
|
||||
.findClass("Client")
|
||||
);
|
||||
|
||||
final ClassFile runeLiteObjectDeob = inject.getDeobfuscated()
|
||||
.findClass(RUNELITE_OBJECT);
|
||||
|
||||
if (runeliteObjectVanilla == null)
|
||||
{
|
||||
runeliteObjectVanilla = new ClassFile(inject.vanilla);
|
||||
runeliteObjectVanilla.setName(RUNELITE_OBJECT);
|
||||
runeliteObjectVanilla.setParentClass(graphicsObjectVanilla.getPoolClass());
|
||||
runeliteObjectVanilla.setAccess(Opcodes.ACC_PUBLIC);
|
||||
runeliteObjectVanilla.setVersion(Opcodes.V1_8);
|
||||
inject.vanilla.addClass(runeliteObjectVanilla);
|
||||
|
||||
inject.toVanilla.put(runeLiteObjectDeob, runeliteObjectVanilla);
|
||||
}
|
||||
|
||||
{
|
||||
Method initRuneliteObject = new Method(runeliteObjectVanilla, "<init>", new Signature("()V"));
|
||||
initRuneliteObject.setPublic();
|
||||
|
||||
final Code code = new Code(initRuneliteObject);
|
||||
code.setMaxStack(1);
|
||||
initRuneliteObject.setCode(code);
|
||||
runeliteObjectVanilla.addMethod(initRuneliteObject);
|
||||
|
||||
final Instructions instructions = code.getInstructions();
|
||||
final List<Instruction> ins = instructions.getInstructions();
|
||||
|
||||
ins.add(new ALoad(instructions, 0));
|
||||
ins.add(new InvokeSpecial(instructions, new net.runelite.asm.pool.Method(graphicsObjectVanilla.getPoolClass(), "<init>", new Signature("()V"))));
|
||||
ins.add(new VReturn(instructions));
|
||||
}
|
||||
|
||||
{
|
||||
Method copy = new Method(clientVanilla, "createRuneLiteObject", new Signature("()Lnet/runelite/api/RuneLiteObject;"));
|
||||
copy.setPublic();
|
||||
|
||||
final Code code = new Code(copy);
|
||||
code.setMaxStack(2);
|
||||
copy.setCode(code);
|
||||
clientVanilla.addMethod(copy);
|
||||
|
||||
final Instructions instructions = code.getInstructions();
|
||||
final List<Instruction> ins = instructions.getInstructions();
|
||||
|
||||
ins.add(new New(instructions, runeliteObjectVanilla.getPoolClass()));
|
||||
ins.add(new Dup(instructions));
|
||||
ins.add(new InvokeSpecial(instructions, new net.runelite.asm.pool.Method(runeliteObjectVanilla.getPoolClass(), "<init>", new Signature("()V"))));
|
||||
ins.add(new Return(instructions, InstructionType.ARETURN));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user