project(injector): Make it possible to use rsc-api in rsc
This commit is contained in:
@@ -10,8 +10,10 @@ package com.openosrs.injector.injectors.raw;
|
|||||||
import com.openosrs.injector.InjectUtil;
|
import com.openosrs.injector.InjectUtil;
|
||||||
import com.openosrs.injector.injection.InjectData;
|
import com.openosrs.injector.injection.InjectData;
|
||||||
import com.openosrs.injector.injectors.AbstractInjector;
|
import com.openosrs.injector.injectors.AbstractInjector;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
|
import java.util.Set;
|
||||||
import net.runelite.asm.ClassFile;
|
import net.runelite.asm.ClassFile;
|
||||||
import net.runelite.asm.Field;
|
import net.runelite.asm.Field;
|
||||||
import net.runelite.asm.Method;
|
import net.runelite.asm.Method;
|
||||||
@@ -43,6 +45,9 @@ public class CopyRuneLiteClasses extends AbstractInjector
|
|||||||
"RuneLiteObject"
|
"RuneLiteObject"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
private final Set<Type> shadowFields = new HashSet<>();
|
||||||
|
|
||||||
public CopyRuneLiteClasses(InjectData inject)
|
public CopyRuneLiteClasses(InjectData inject)
|
||||||
{
|
{
|
||||||
super(inject);
|
super(inject);
|
||||||
@@ -52,6 +57,8 @@ public class CopyRuneLiteClasses extends AbstractInjector
|
|||||||
{
|
{
|
||||||
for (String className : RUNELITE_OBJECTS)
|
for (String className : RUNELITE_OBJECTS)
|
||||||
{
|
{
|
||||||
|
shadowFields.clear();
|
||||||
|
|
||||||
ClassFile runeliteObjectVanilla = inject.vanilla.findClass(className);
|
ClassFile runeliteObjectVanilla = inject.vanilla.findClass(className);
|
||||||
|
|
||||||
final ClassFile runeLiteDeob = inject.getDeobfuscated()
|
final ClassFile runeLiteDeob = inject.getDeobfuscated()
|
||||||
@@ -85,18 +92,23 @@ public class CopyRuneLiteClasses extends AbstractInjector
|
|||||||
runeliteObjectVanilla.getInterfaces().addInterface(interfaze);
|
runeliteObjectVanilla.getInterfaces().addInterface(interfaze);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Field field : runeLiteDeob.getFields())
|
|
||||||
{
|
|
||||||
field.setType(InjectUtil.deobToVanilla(inject, field.getType()));
|
|
||||||
runeliteObjectVanilla.addField(field);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Method method : runeLiteDeob.getMethods())
|
for (Method method : runeLiteDeob.getMethods())
|
||||||
{
|
{
|
||||||
transformMethod(method);
|
transformMethod(method);
|
||||||
runeliteObjectVanilla.addMethod(method);
|
runeliteObjectVanilla.addMethod(method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Field field : runeLiteDeob.getFields())
|
||||||
|
{
|
||||||
|
if (shadowFields.contains(field.getType()))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
field.setType(InjectUtil.deobToVanilla(inject, field.getType()));
|
||||||
|
runeliteObjectVanilla.addField(field);
|
||||||
|
}
|
||||||
|
|
||||||
inject.vanilla.addClass(runeliteObjectVanilla);
|
inject.vanilla.addClass(runeliteObjectVanilla);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,7 +177,16 @@ public class CopyRuneLiteClasses extends AbstractInjector
|
|||||||
net.runelite.asm.pool.Field field = ((GetStatic) i).getField();
|
net.runelite.asm.pool.Field field = ((GetStatic) i).getField();
|
||||||
Field vanilla = findField(field);
|
Field vanilla = findField(field);
|
||||||
|
|
||||||
if (vanilla != null)
|
if (method.getClassFile().getName().equals(field.getClazz().getName()) && field.getType().toString().contains("Lnet/runelite/rs/api/RS"))
|
||||||
|
{
|
||||||
|
shadowFields.add(field.getType());
|
||||||
|
|
||||||
|
String fieldName = field.getType().toString().replace("Lnet/runelite/rs/api/RS", "").replace(";", "");
|
||||||
|
final Field deobTargetField = InjectUtil.findStaticField(inject, fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1), null, InjectUtil.apiToDeob(inject, field.getType()));
|
||||||
|
|
||||||
|
iterator.set(new GetStatic(ins, inject.toVanilla(deobTargetField)));
|
||||||
|
}
|
||||||
|
else if (vanilla != null)
|
||||||
{
|
{
|
||||||
iterator.set(new GetStatic(ins, vanilla));
|
iterator.set(new GetStatic(ins, vanilla));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ group = "com.openosrs.rs"
|
|||||||
description = "RuneScape Client"
|
description = "RuneScape Client"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
api(project(":runescape-api"))
|
||||||
api(project(":runelite-api"))
|
api(project(":runelite-api"))
|
||||||
|
|
||||||
implementation(project(":injection-annotations"))
|
implementation(project(":injection-annotations"))
|
||||||
|
|||||||
Reference in New Issue
Block a user