ByteCodePatcher

Adds PlayerTransform
-Adds transformProtectedGetSkullIcon
-Adds transformGetSkullIcon
This commit is contained in:
zeruth
2019-04-18 17:30:51 -04:00
parent 8f334f6658
commit 8680c08533
4 changed files with 98 additions and 7 deletions

View File

@@ -233,7 +233,8 @@ public class ClientLoader
if (hooks.clientInstance.equals("")||
hooks.projectileClass.equals("") ||
hooks.actorClass.equals("")) {
hooks.actorClass.equals("") ||
hooks.playerClass.equals("")) {
System.out.println("[RuneLit] Bad hooks, re-scraping.");
ByteCodePatcher.clientInstance = getClientInstance(ByteCodeUtils.injectedClientFile.getPath());
ByteCodePatcher.findHooks(injectedClientFile.getPath());

View File

@@ -8,6 +8,7 @@ import javassist.NotFoundException;
import net.runelite.client.RuneLite;
import net.runelite.client.rs.ClientLoader;
import net.runelite.client.rs.bytecode.transformers.ActorTransform;
import net.runelite.client.rs.bytecode.transformers.PlayerTransform;
import net.runelite.client.rs.bytecode.transformers.ProjectileTransform;
import net.runelite.http.api.RuneLiteAPI;
import org.xeustechnologies.jcl.JarClassLoader;
@@ -50,6 +51,8 @@ public class ByteCodePatcher {
transformActor(actorClass);
Class projectileClass = Class.forName(hooks.projectileClass, false, child);
transformProjectile(projectileClass);
Class playerClass = Class.forName(hooks.playerClass, false, child);
transformPlayer(playerClass);
ByteCodeUtils.updateHijackedJar();
} catch (Exception e) {
e.printStackTrace();
@@ -103,6 +106,7 @@ public class ByteCodePatcher {
Class classToLoad = Class.forName(entry.getName().replace(".class", ""), false, child);
checkActor(classToLoad);
checkProjectile(classToLoad);
checkPlayer(classToLoad);
} catch (Exception e) {
e.printStackTrace();
}
@@ -129,10 +133,10 @@ public class ByteCodePatcher {
}
}
public static void transformActor(Class current) {
System.out.println("[RuneLit] Transforming Actor at class: "+current.getName());
public static void transformActor(Class actor) {
System.out.println("[RuneLit] Transforming Actor at class: "+actor.getName());
ActorTransform at = new ActorTransform();
at.modify(current);
at.modify(actor);
}
public static void checkProjectile(Class current) {
@@ -151,10 +155,32 @@ public class ByteCodePatcher {
}
}
public static void transformProjectile(Class current) {
System.out.println("[RuneLit] Transforming Projectile at class: "+current.getName());
public static void transformProjectile(Class projectile) {
System.out.println("[RuneLit] Transforming Projectile at class: "+projectile.getName());
ProjectileTransform pt = new ProjectileTransform();
pt.modify(current);
pt.modify(projectile);
}
public static void checkPlayer(Class current) {
try {
Method method = current.getDeclaredMethod("getSkullIcon");
if (method!=null) {
hooks.playerClass = current.getName();
System.out.println("[RuneLit] Transforming Player at class: "+current.getName());
PlayerTransform pt = new PlayerTransform();
pt.modify(current);
}
} catch (NoSuchMethodException e) {
//e.printStackTrace();
} catch (NoClassDefFoundError e) {
//e.printStackTrace();
}
}
public static void transformPlayer(Class player) {
System.out.println("[RuneLit] Transforming Player at class: "+player.getName());
PlayerTransform pt = new PlayerTransform();
pt.modify(player);
}
}

View File

@@ -5,6 +5,7 @@ public class Hooks {
public String clientInstance = "";
public String actorClass = "";
public String projectileClass = "";
public String playerClass = "";
public Hooks() {
}

View File

@@ -0,0 +1,63 @@
package net.runelite.client.rs.bytecode.transformers;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
import net.runelite.client.rs.bytecode.ByteCodePatcher;
public class PlayerTransform {
public CtClass ct = null;
public void modify(Class player) {
try {
ct = ByteCodePatcher.classPool.get(player.getName());
transformProtectedGetSkullIcon();
transformGetSkullIcon();
ByteCodePatcher.modifiedClasses.add(ct);
} catch (Exception e) {
e.printStackTrace();
}
}
public void transformProtectedGetSkullIcon() {
CtMethod protectedGetSkullIcon;
try {
protectedGetSkullIcon = ct.getDeclaredMethod("1protect$getRsSkullIcon");
ct.removeMethod(protectedGetSkullIcon);
protectedGetSkullIcon.setName("getRsSkullIcon");
ct.addMethod(protectedGetSkullIcon);
} catch (Exception e) {
e.printStackTrace();
}
}
public void transformGetSkullIcon() {
CtMethod getSkullIcon;
try {
String SkullIcon = "net.runelite.api.SkullIcon";
getSkullIcon = ct.getDeclaredMethod("getSkullIcon");
ct.removeMethod(getSkullIcon);
getSkullIcon = CtNewMethod.make("public "+SkullIcon+" getSkullIcon() {" +
" switch (this.getRsSkullIcon()) {" +
" case 0: {" +
" return "+SkullIcon+".SKULL; }" +
" case 1: {" +
" return "+SkullIcon+".SKULL_FIGHT_PIT; }" +
" case 8: {" +
" return "+SkullIcon+".DEAD_MAN_FIVE; }" +
" case 9: {" +
" return "+SkullIcon+".DEAD_MAN_FOUR; }" +
" case 10: {" +
" return "+SkullIcon+".DEAD_MAN_THREE; }" +
" case 11: {" +
" return "+SkullIcon+".DEAD_MAN_TWO; }" +
" case 12: {" +
" return "+SkullIcon+".DEAD_MAN_ONE; } }" +
" return null; }",ct);
ct.addMethod(getSkullIcon);
} catch (Exception e) {
e.printStackTrace();
}
}
}