everything else
This commit is contained in:
@@ -28,6 +28,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import net.runelite.asm.pool.Class;
|
||||
import net.runelite.deob.DeobAnnotations;
|
||||
|
||||
public class Interfaces
|
||||
{
|
||||
@@ -89,4 +90,21 @@ public class Interfaces
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public List<String> getIntfNames()
|
||||
{
|
||||
final List<String> names = new ArrayList<>();
|
||||
for (ClassFile c : getMyInterfaces())
|
||||
{
|
||||
String name = DeobAnnotations.getObfuscatedName(c.getAnnotations());
|
||||
if (name == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
names.add(name);
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,11 +81,9 @@ public class Deob
|
||||
|
||||
ClassGroup group = JarUtil.loadJar(new File(args[0]));
|
||||
|
||||
if (args.length > 2 && args[2].equals("rl"))
|
||||
{
|
||||
run(group, new StaticShouldBeInstance());
|
||||
}
|
||||
else
|
||||
run(group, new StaticShouldBeInstance());
|
||||
|
||||
if (args.length <= 2 || !args[2].equals("rl"))
|
||||
{
|
||||
// remove except RuntimeException
|
||||
run(group, new RuntimeExceptions());
|
||||
|
||||
@@ -83,11 +83,6 @@ public class DeobAnnotations
|
||||
return getAnnotationValue(cf.getAnnotations(), IMPLEMENTS);
|
||||
}
|
||||
|
||||
public static String getHookName(Annotations an)
|
||||
{
|
||||
return getAnnotationValue(an, HOOK);
|
||||
}
|
||||
|
||||
public static Number getObfuscatedGetter(Field field)
|
||||
{
|
||||
if (field == null || field.getAnnotations() == null)
|
||||
@@ -104,7 +99,7 @@ public class DeobAnnotations
|
||||
return (Number) an.getElement().getValue();
|
||||
}
|
||||
|
||||
public static String getObfuscatedValue(Method method)
|
||||
public static String getDecoder(Method method)
|
||||
{
|
||||
if (method == null || method.getAnnotations() == null)
|
||||
{
|
||||
@@ -126,7 +121,7 @@ public class DeobAnnotations
|
||||
return (String) elements.get(1).getValue();
|
||||
}
|
||||
|
||||
private static String getAnnotationValue(Annotations an, Type type)
|
||||
public static String getAnnotationValue(Annotations an, Type type)
|
||||
{
|
||||
if (an == null)
|
||||
{
|
||||
|
||||
@@ -246,7 +246,8 @@ public class AnnotationIntegrityChecker
|
||||
Import im = method.getAnnotation(Import.class);
|
||||
if (im != null && im.value().equals(name))
|
||||
{
|
||||
return true;
|
||||
logger.debug(name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -159,6 +159,14 @@ public class Mapper
|
||||
continue;
|
||||
}
|
||||
|
||||
//if (cf.getInterfaces().getMyInterfaces().size() != 0)
|
||||
//{
|
||||
// for (Method m : cf.getMethods())
|
||||
// {
|
||||
// if (m.)
|
||||
// }
|
||||
//}
|
||||
|
||||
List<Method> methods1 = cf.getMethods().stream()
|
||||
.filter(m -> !m.isStatic())
|
||||
.filter(m -> !m.getName().equals("<init>"))
|
||||
|
||||
@@ -72,6 +72,7 @@ public enum ScriptOpcode
|
||||
CC_SETSCROLLSIZE(1120),
|
||||
CC_RESUME_PAUSEBUTTON(1121),
|
||||
CC_SETFILLCOLOUR(1123),
|
||||
CC_SETFILLMODE(1125),
|
||||
CC_SETLINEDIRECTION(1126),
|
||||
CC_SETMODELTRANSPARENT(1127),
|
||||
CC_SETOBJECT(1200),
|
||||
@@ -134,9 +135,11 @@ public enum ScriptOpcode
|
||||
CC_GETMODELANGLE_X(1606),
|
||||
CC_GETMODELANGLE_Z(1607),
|
||||
CC_GETMODELANGLE_Y(1608),
|
||||
CC_GETTRANS(1609),
|
||||
CC_GETTRANSTOP(1609),
|
||||
CC_GETTRANSBOT(1610),
|
||||
CC_GETCOLOUR(1611),
|
||||
CC_GETFILLCOLOUR(1612),
|
||||
CC_GETFILLMODE(1613),
|
||||
CC_GETMODELTRANSPARENT(1614),
|
||||
CC_GETINVOBJECT(1700),
|
||||
CC_GETINVCOUNT(1701),
|
||||
@@ -172,6 +175,8 @@ public enum ScriptOpcode
|
||||
IF_SETSCROLLSIZE(2120),
|
||||
IF_RESUME_PAUSEBUTTON(2121),
|
||||
IF_SETFILLCOLOUR(2123),
|
||||
IF_SETTRANSBOT(2124),
|
||||
IF_SETFILLMODE(2125),
|
||||
IF_SETLINEDIRECTION(2126),
|
||||
IF_SETOBJECT(2200),
|
||||
IF_SETNPCHEAD(2201),
|
||||
@@ -233,9 +238,11 @@ public enum ScriptOpcode
|
||||
IF_GETMODELANGLE_X(2606),
|
||||
IF_GETMODELANGLE_Z(2607),
|
||||
IF_GETMODELANGLE_Y(2608),
|
||||
IF_GETTRANS(2609),
|
||||
IF_GETTRANSTOP(2609),
|
||||
IF_GETTRANSBOT(2610),
|
||||
IF_GETCOLOUR(2611),
|
||||
IF_GETFILLCOLOUR(2612),
|
||||
IF_GETFILLMODE(2613),
|
||||
IF_GETMODELTRANSPARENT(2614),
|
||||
IF_GETINVOBJECT(2700),
|
||||
IF_GETINVCOUNT(2701),
|
||||
|
||||
@@ -51,24 +51,14 @@ public class ParameterRenamer
|
||||
{
|
||||
for (Method sourceM : sourceCF.getMethods())
|
||||
{
|
||||
Method destM;
|
||||
if (sourceM.getName().equals("<init>"))
|
||||
{
|
||||
ClassFile destCF = (ClassFile) mapping.get(sourceCF);
|
||||
destM = destCF.findMethod("<init>", sourceM.getDescriptor());
|
||||
}
|
||||
else
|
||||
{
|
||||
destM = (Method) mapping.get(sourceM);
|
||||
}
|
||||
|
||||
if (sourceM.getParameters() != null && !sourceM.getParameters().isEmpty() && destM.getParameters().size() >= 1)
|
||||
Method destM = (Method) mapping.get(sourceM);
|
||||
if (destM != null && destM.getParameters().size() > 0 && sourceM.getParameters() != null && !sourceM.getParameters().isEmpty() && sourceM.getParameters().size() >= 1)
|
||||
{
|
||||
List<Parameter> oldParams = destM.getParameters();
|
||||
for (int i = 0; i < sourceM.getParameters().size(); i++)
|
||||
{
|
||||
String name = sourceM.getParameters().get(i).getName();
|
||||
if (name.matches("arg[0-9]") || name.length() <= 2 && (name.charAt(0) != 'x' || name.charAt(0) != 'y'))
|
||||
if (name.matches("var[0-9]") || name.length() <= 2 && (name.charAt(0) != 'x' || name.charAt(0) != 'y' || name.charAt(0) != 'z'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -24,31 +24,268 @@
|
||||
*/
|
||||
package net.runelite.deob.deobfuscators.mapping;
|
||||
|
||||
import com.google.common.io.Files;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.Instant;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.runelite.asm.ClassFile;
|
||||
import net.runelite.asm.ClassGroup;
|
||||
import net.runelite.asm.Field;
|
||||
import net.runelite.asm.Method;
|
||||
import net.runelite.asm.Type;
|
||||
import net.runelite.asm.attributes.code.Parameter;
|
||||
import net.runelite.asm.signature.Signature;
|
||||
import net.runelite.deob.Deob;
|
||||
import net.runelite.deob.DeobAnnotations;
|
||||
import net.runelite.deob.DeobTestProperties;
|
||||
import net.runelite.deob.deobfuscators.mapping.mappingdumper.MappedClass;
|
||||
import net.runelite.deob.deobfuscators.mapping.mappingdumper.MappedField;
|
||||
import net.runelite.deob.deobfuscators.mapping.mappingdumper.MappedMethod;
|
||||
import net.runelite.deob.deobfuscators.mapping.mappingdumper.MappingDump;
|
||||
import net.runelite.deob.util.JarUtil;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class MappingDumper
|
||||
{
|
||||
@Rule
|
||||
public DeobTestProperties properties = new DeobTestProperties();
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(MappingDumper.class);
|
||||
|
||||
private MappingDump dump;
|
||||
private Map<String, MappedClass> classMap;
|
||||
private static final String OUTDIR = "";
|
||||
private final File OUTFILE = new File(OUTDIR, "rlplushooks.json");
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
dump = new MappingDump();
|
||||
dump.revision = properties.getRsVersion();
|
||||
dump.classes = new ArrayList<>();
|
||||
dump.staticFields = new ArrayList<>();
|
||||
dump.staticMethods = new ArrayList<>();
|
||||
classMap = new HashMap<>();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void newDump() throws IOException
|
||||
{
|
||||
final ClassGroup group = JarUtil.loadJar(new File(properties.getRsClient()));
|
||||
|
||||
|
||||
// First create all the mappedclasses, so we can add static methods to their lists
|
||||
for (ClassFile c : group.getClasses())
|
||||
{
|
||||
if (c.getName().contains("runelite"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
final MappedClass mc = new MappedClass();
|
||||
|
||||
mc.obfuscatedName = DeobAnnotations.getObfuscatedName(c.getAnnotations());
|
||||
mc.implementingName = DeobAnnotations.getImplements(c);
|
||||
mc.superClass = c.getSuperName();
|
||||
mc.interfaces = c.getInterfaces().getIntfNames();
|
||||
mc.constructors = new ArrayList<>();
|
||||
mc.fields = new ArrayList<>();
|
||||
mc.methods = new ArrayList<>();
|
||||
mc.access = c.getAccess();
|
||||
mc.staticMethods = new ArrayList<>();
|
||||
mc.staticFields = new ArrayList<>();
|
||||
|
||||
dump.classes.add(mc);
|
||||
classMap.put(c.getName(), mc);
|
||||
|
||||
dump.totalClasses++;
|
||||
if (mc.implementingName != null)
|
||||
{
|
||||
dump.totalNamedClasses++;
|
||||
}
|
||||
}
|
||||
|
||||
for (ClassFile c : group.getClasses())
|
||||
{
|
||||
if (c.getName().contains("runelite"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
final MappedClass mc = classMap.get(c.getName());
|
||||
|
||||
getFields(c, mc);
|
||||
|
||||
getMethods(c, mc);
|
||||
}
|
||||
|
||||
dump.totalNonStaticFields = dump.totalFields - dump.totalStaticFields;
|
||||
dump.totalNamedNonStaticFields = dump.totalNamedFields - dump.totalNamedStaticFields;
|
||||
dump.totalNonStaticMethods = dump.totalMethods - dump.totalStaticMethods;
|
||||
dump.totalNamedNonStaticMethods = dump.totalNamedMethods - dump.totalNamedStaticMethods;
|
||||
|
||||
final Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||
Files.asCharSink(OUTFILE, Charset.defaultCharset()).write(gson.toJson(dump));
|
||||
|
||||
log.info("Dumped current mappings. revision {}", dump.revision);
|
||||
log.info("Total classes: {}. Total mapped classes: {}. ({}%)", dump.totalClasses, dump.totalNamedClasses, dump.totalNamedClasses * 100 / dump.totalClasses);
|
||||
log.info("Total non static methods: {}. Total mapped non static methods: {}. ({}%)", dump.totalNonStaticMethods, dump.totalNamedNonStaticMethods, dump.totalNamedNonStaticMethods * 100 / dump.totalNamedMethods);
|
||||
log.info("Total methods: {}. Total mapped methods: {}. ({}%)", dump.totalMethods, dump.totalNamedMethods, dump.totalNamedMethods * 100 / dump.totalMethods);
|
||||
log.info("Total fields: {}. Total mapped fields: {}. ({}%)", dump.totalFields, dump.totalNamedFields, dump.totalNamedFields * 100 / dump.totalFields);
|
||||
log.info("Total non static fields: {}. Total mapped non static fields: {}. ({}%)", dump.totalNonStaticFields, dump.totalNamedNonStaticFields, dump.totalNamedNonStaticFields * 100 / dump.totalNamedFields);
|
||||
|
||||
}
|
||||
|
||||
private void getFields(final ClassFile c, final MappedClass mc)
|
||||
{
|
||||
for (Field f : c.getFields())
|
||||
{
|
||||
dump.totalFields++;
|
||||
|
||||
if (f.isStatic())
|
||||
{
|
||||
dump.totalStaticFields++;
|
||||
}
|
||||
|
||||
if (Deob.isObfuscated(f.getName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
dump.totalNamedFields++;
|
||||
|
||||
final MappedField mf = new MappedField();
|
||||
|
||||
mf.exportedName = f.getName();
|
||||
mf.owner = mc.obfuscatedName;
|
||||
mf.obfuscatedName = DeobAnnotations.getObfuscatedName(f.getAnnotations());
|
||||
mf.access = f.getAccessFlags();
|
||||
mf.descriptor = DeobAnnotations.getAnnotationValue(f.getAnnotations(), DeobAnnotations.OBFUSCATED_SIGNATURE);
|
||||
|
||||
Number decoder = DeobAnnotations.getObfuscatedGetter(f);
|
||||
if (decoder != null)
|
||||
{
|
||||
mf.decoder = decoder.longValue();
|
||||
}
|
||||
|
||||
if (mf.descriptor == null)
|
||||
{
|
||||
mf.descriptor = f.getType().toString();
|
||||
}
|
||||
|
||||
if (f.isStatic())
|
||||
{
|
||||
dump.staticFields.add(mf);
|
||||
dump.totalNamedStaticFields++;
|
||||
|
||||
int _index = mf.exportedName.indexOf('_');
|
||||
|
||||
if (_index != -1)
|
||||
{
|
||||
String className = mf.exportedName.substring(0, _index);
|
||||
MappedClass staticOwner = classMap.get(className);
|
||||
|
||||
if (staticOwner != null)
|
||||
{
|
||||
staticOwner.staticFields.add(mf);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mc.fields.add(mf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getMethods(final ClassFile c, final MappedClass mc)
|
||||
{
|
||||
for (Method m : c.getMethods())
|
||||
{
|
||||
dump.totalMethods++;
|
||||
|
||||
if (m.isStatic())
|
||||
{
|
||||
dump.totalStaticMethods++;
|
||||
}
|
||||
|
||||
if (Deob.isObfuscated(m.getName()) || m.getName().equals("<clinit>"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
dump.totalNamedMethods++;
|
||||
|
||||
final MappedMethod mm = new MappedMethod();
|
||||
|
||||
mm.exportedName = m.getName();
|
||||
mm.owner = mc.obfuscatedName;
|
||||
mm.obfuscatedName = DeobAnnotations.getObfuscatedName(m.getAnnotations());
|
||||
mm.access = m.getAccessFlags();
|
||||
mm.parameters = new ArrayList<>();
|
||||
mm.descriptor = DeobAnnotations.getObfuscatedSignature(m) != null ? DeobAnnotations.getObfuscatedSignature(m).toString() : m.getDescriptor().toString();
|
||||
|
||||
try
|
||||
{
|
||||
mm.garbageValue = Long.parseLong(DeobAnnotations.getDecoder(m));
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
mm.garbageValue = null;
|
||||
}
|
||||
|
||||
for (Parameter p : m.getParameters())
|
||||
{
|
||||
mm.parameters.add(p.getName());
|
||||
}
|
||||
|
||||
if (m.getName().equals("<init>"))
|
||||
{
|
||||
mm.exportedName = null;
|
||||
mc.constructors.add(mm);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m.isStatic())
|
||||
{
|
||||
dump.staticMethods.add(mm);
|
||||
dump.totalNamedStaticMethods++;
|
||||
|
||||
int _index = mm.exportedName.indexOf('_');
|
||||
|
||||
if (_index != -1)
|
||||
{
|
||||
String className = mm.exportedName.substring(0, _index - 1);
|
||||
MappedClass staticOwner = classMap.get(className);
|
||||
|
||||
if (staticOwner != null)
|
||||
{
|
||||
staticOwner.staticMethods.add(mm);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mc.methods.add(mm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dump() throws IOException
|
||||
{
|
||||
@@ -126,7 +363,7 @@ public class MappingDumper
|
||||
|
||||
String methodName = DeobAnnotations.getObfuscatedName(m.getAnnotations());
|
||||
Signature signature = DeobAnnotations.getObfuscatedSignature(m);
|
||||
String garbageValue = DeobAnnotations.getObfuscatedValue(m);
|
||||
String garbageValue = DeobAnnotations.getDecoder(m);
|
||||
|
||||
if (signature == null)
|
||||
{
|
||||
@@ -238,7 +475,7 @@ public class MappingDumper
|
||||
|
||||
String methodName = DeobAnnotations.getObfuscatedName(m.getAnnotations());
|
||||
Signature obfSignature = DeobAnnotations.getObfuscatedSignature(m);
|
||||
String predicate = DeobAnnotations.getObfuscatedValue(m);
|
||||
String predicate = DeobAnnotations.getDecoder(m);
|
||||
|
||||
JsonObject jMethod = new JsonObject();
|
||||
|
||||
|
||||
@@ -7,12 +7,15 @@ import net.runelite.asm.ClassGroup;
|
||||
import net.runelite.asm.Field;
|
||||
import net.runelite.asm.Method;
|
||||
import net.runelite.asm.attributes.Annotations;
|
||||
import net.runelite.asm.attributes.annotation.Annotation;
|
||||
import net.runelite.asm.attributes.annotation.Element;
|
||||
import net.runelite.deob.Deob;
|
||||
import net.runelite.deob.DeobAnnotations;
|
||||
import net.runelite.deob.DeobTestProperties;
|
||||
import net.runelite.deob.util.JarUtil;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
@@ -83,4 +86,135 @@ public class AnnotationCleaner
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void fixMappings() throws Exception
|
||||
{
|
||||
File client = new File(properties.getRsClient());
|
||||
ClassGroup group = JarUtil.loadJar(client);
|
||||
int impl = 0,
|
||||
meth = 0,
|
||||
field = 0;
|
||||
|
||||
for (ClassFile c : group.getClasses())
|
||||
{
|
||||
if (c.getName().contains("runelite"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
log.debug("Checking {}", c.toString());
|
||||
|
||||
String implementingName = DeobAnnotations.getImplements(c);
|
||||
if (!Strings.isNullOrEmpty(implementingName))
|
||||
{
|
||||
// Still error here cause I don't wanna call classes dumb shit
|
||||
assertEquals(c + " implements " + implementingName + " but is called " + c.getClassName(), implementingName, c.getClassName());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Deob.isObfuscated(c.getClassName()))
|
||||
{
|
||||
Annotations an = c.getAnnotations();
|
||||
|
||||
Annotation implAn = new Annotation(an);
|
||||
implAn.setType(DeobAnnotations.IMPLEMENTS);
|
||||
|
||||
Element value = new Element(implAn);
|
||||
value.setValue(c.getClassName());
|
||||
value.setName("value");
|
||||
|
||||
implAn.addElement(value);
|
||||
an.addAnnotation(implAn);
|
||||
impl++;
|
||||
}
|
||||
}
|
||||
|
||||
for (Field f : c.getFields())
|
||||
{
|
||||
Annotations an = f.getAnnotations();
|
||||
|
||||
String fieldName = f.getName();
|
||||
String exportedName = DeobAnnotations.getExportedName(an);
|
||||
|
||||
if (exportedName == null && Deob.isObfuscated(fieldName) || fieldName.equals(DeobAnnotations.getObfuscatedName(an)) || DeobAnnotations.getObfuscatedName(an) == null)
|
||||
{
|
||||
//Annotation exp = new Annotation(an);
|
||||
//exp.setType(DeobAnnotations.EXPORT);
|
||||
//
|
||||
//Element ele = new Element(exp);
|
||||
//ele.setValue(fieldName);
|
||||
//
|
||||
//log.info("Added export on {}", fieldName);
|
||||
//field++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!fieldName.equals(exportedName))
|
||||
{
|
||||
log.info("Changed export from {} to {}", exportedName, fieldName);
|
||||
Annotation a = an.find(DeobAnnotations.EXPORT);
|
||||
if (a == null)
|
||||
{
|
||||
a = new Annotation(an);
|
||||
a.setType(DeobAnnotations.EXPORT);
|
||||
|
||||
Element value = new Element(a);
|
||||
value.setValue(fieldName);
|
||||
value.setName("value");
|
||||
a.addElement(value);
|
||||
an.addAnnotation(a);
|
||||
|
||||
}
|
||||
a.getElement().setValue(fieldName);
|
||||
field++;
|
||||
}
|
||||
}
|
||||
|
||||
for (Method m : c.getMethods())
|
||||
{
|
||||
Annotations an = m.getAnnotations();
|
||||
|
||||
String fieldName = m.getName();
|
||||
String exportedName = DeobAnnotations.getExportedName(an);
|
||||
|
||||
if (exportedName == null && Deob.isObfuscated(fieldName) || fieldName.equals(DeobAnnotations.getObfuscatedName(an)) || DeobAnnotations.getObfuscatedName(an) == null)
|
||||
{
|
||||
continue;
|
||||
// Annotation exp = new Annotation(an);
|
||||
// exp.setType(DeobAnnotations.EXPORT);
|
||||
//
|
||||
// Element ele = new Element(exp);
|
||||
// ele.setValue(fieldName);
|
||||
//
|
||||
// log.info("Added export on {}", fieldName);
|
||||
// meth++;
|
||||
}
|
||||
|
||||
if (!fieldName.equals(exportedName))
|
||||
{
|
||||
log.info("Changed export from {} to {}", exportedName, fieldName);
|
||||
Annotation a = an.find(DeobAnnotations.EXPORT);
|
||||
if (a == null)
|
||||
{
|
||||
a = new Annotation(an);
|
||||
a.setType(DeobAnnotations.EXPORT);
|
||||
|
||||
Element value = new Element(a);
|
||||
value.setValue(fieldName);
|
||||
value.setName("value");
|
||||
a.addElement(value);
|
||||
an.addAnnotation(a);
|
||||
|
||||
}
|
||||
a.getElement().setValue(fieldName);
|
||||
meth++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("Changed {} classes, {} methods, {} fields", impl, meth, field);
|
||||
JarUtil.saveJar(group, new File("C:/Users/Lucas/Desktop/niec.jar"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17541,14 +17541,14 @@
|
||||
"access" : 0,
|
||||
"descriptor" : "(Lgr;IB)V"
|
||||
}, {
|
||||
"method" : "getSprite1",
|
||||
"method" : "getFrontSprite",
|
||||
"owner" : "ii",
|
||||
"name" : "q",
|
||||
"access" : 1,
|
||||
"parameters" : [ ],
|
||||
"descriptor" : "(B)Lln;"
|
||||
}, {
|
||||
"method" : "getSprite2",
|
||||
"method" : "getBackSprite",
|
||||
"owner" : "ii",
|
||||
"name" : "w",
|
||||
"access" : 1,
|
||||
|
||||
@@ -90,7 +90,7 @@ class InjectInvoker
|
||||
obfuscatedName = m.getName();
|
||||
}
|
||||
|
||||
String garbage = DeobAnnotations.getObfuscatedValue(m);
|
||||
String garbage = DeobAnnotations.getDecoder(m);
|
||||
Method otherm = other.findMethod(obfuscatedName, inject.getMethodSignature(m));
|
||||
|
||||
assert otherm != null;
|
||||
|
||||
@@ -110,7 +110,7 @@ public class ScriptVM
|
||||
*/
|
||||
final String scriptObName = DeobAnnotations.getObfuscatedName(inject.getDeobfuscated().findClass("Script").getAnnotations());
|
||||
|
||||
final Method runScript = findStaticMethod(vanilla, "copy$runScript0");
|
||||
final Method runScript = findStaticMethod(vanilla, "copy$runScript");
|
||||
final Method vmExecuteOpcode = findStaticMethod(vanilla, "vmExecuteOpcode");
|
||||
|
||||
final Field scriptInstructions = findDeobField(inject, "opcodes");
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"extension": "jar",
|
||||
"groupId": "net.runelite",
|
||||
"properties": "",
|
||||
"version": "1.5.28"
|
||||
"version": "1.5.29"
|
||||
},
|
||||
"clientJvm9Arguments": [
|
||||
"-XX:+DisableAttachMechanism",
|
||||
@@ -56,10 +56,10 @@
|
||||
"size": "3168921"
|
||||
},
|
||||
{
|
||||
"hash": "49b13a23e5bef24bfe2c48574ae0f1a782075ab6f11fb587ee0c70cf0e808fba",
|
||||
"hash": "08774848b10e8f76f96f364150a956d13c798e7c266d88cd0a0534e1f2f26c30",
|
||||
"name": "client-1.5.29-SNAPSHOT.jar",
|
||||
"path": "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/client-1.5.29-SNAPSHOT.jar",
|
||||
"size": "6043808"
|
||||
"size": "6185577"
|
||||
},
|
||||
{
|
||||
"hash": "18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79",
|
||||
@@ -248,22 +248,22 @@
|
||||
"size": "2327547"
|
||||
},
|
||||
{
|
||||
"hash": "adddf7e024c391b0f10fb2a1d5ec5c3064348caa08a41f1219031da86d2b30a1",
|
||||
"hash": "b98cb800d9013cb3d84ba89a8ea8d54b88d66a2010f282cbf0265953b3f37491",
|
||||
"name": "runelite-api-1.5.29-SNAPSHOT.jar",
|
||||
"path": "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/runelite-api-1.5.29-SNAPSHOT.jar",
|
||||
"size": "1031030"
|
||||
"size": "1031527"
|
||||
},
|
||||
{
|
||||
"hash": "84863671e050f7146da8cba37401aaadfb37427e6f51bca0e282ead45f6130f6",
|
||||
"hash": "bfbd1bdea706a23799f9630adad9825acc358b8185a1cb8356853032f99d1a22",
|
||||
"name": "runescape-api-1.5.29-SNAPSHOT.jar",
|
||||
"path": "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/runescape-api-1.5.29-SNAPSHOT.jar",
|
||||
"size": "58377"
|
||||
"size": "58397"
|
||||
},
|
||||
{
|
||||
"hash": "666e607343914fb98a0feb80b5067b4ff043e30aa1e6fb0878bf3796971250b6",
|
||||
"hash": "7ad65d4043416ddb09769c0b554fd43a9aa906d6934de03639310c6c552ecc6e",
|
||||
"name": "http-api-1.5.29-SNAPSHOT.jar",
|
||||
"path": "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/http-api-1.5.29-SNAPSHOT.jar",
|
||||
"size": "115783"
|
||||
"size": "138036"
|
||||
},
|
||||
{
|
||||
"hash": "f55abda036da75e1af45bd43b9dfa79b2a3d90905be9cb38687c6621597a8165",
|
||||
@@ -290,10 +290,10 @@
|
||||
"size": "617294"
|
||||
},
|
||||
{
|
||||
"hash": "2a84d3f3be4c4c7475cbbe437051bfb5bf6295b8b3ffed0f6f76937eb500109e",
|
||||
"hash": "01521c7b56e2f76aa7adef5082c2f8ee8cf9e93b02d3b2f4101a30f750db9db4",
|
||||
"name": "injected-client-1.5.29-SNAPSHOT.jar",
|
||||
"path": "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/injected-client-1.5.29-SNAPSHOT.jar",
|
||||
"size": "2197676"
|
||||
"size": "2252769"
|
||||
}
|
||||
]
|
||||
}
|
||||
2
pom.xml
2
pom.xml
@@ -63,7 +63,7 @@
|
||||
<maven.javadoc.skip>true</maven.javadoc.skip>
|
||||
<checkstyle.skip>true</checkstyle.skip>
|
||||
<archetype.test.skip>true</archetype.test.skip>
|
||||
<rs.version>180</rs.version>
|
||||
<rs.version>181</rs.version>
|
||||
</properties>
|
||||
|
||||
<licenses>
|
||||
|
||||
@@ -38,18 +38,6 @@
|
||||
<properties>
|
||||
<guice.version>4.1.0</guice.version>
|
||||
<jogl.version>2.3.2</jogl.version>
|
||||
<hamcrest.version>1.3</hamcrest.version>
|
||||
<jopt.version>5.0.1</jopt.version>
|
||||
<commons.text.version>1.2</commons.text.version>
|
||||
<sigpipe.jbsdiff.version>1.0</sigpipe.jbsdiff.version>
|
||||
<java.dev.jna.version>4.5.1</java.dev.jna.version>
|
||||
<runelite.pushingpixels.substance.version>8.0.02</runelite.pushingpixels.substance.version>
|
||||
<runelite.pushingpixels.trident.version>1.5.00</runelite.pushingpixels.trident.version>
|
||||
<runelite.discord.version>1.1</runelite.discord.version>
|
||||
<runelite.orange.extensions.version>1.0</runelite.orange.extensions.version>
|
||||
<maven.resources.plugin.version>3.0.2</maven.resources.plugin.version>
|
||||
<maven.jarsigner.plugin.version>1.4</maven.jarsigner.plugin.version>
|
||||
<maven.shade.plugin.version>3.2.1</maven.shade.plugin.version>
|
||||
|
||||
<jarsigner.skip>true</jarsigner.skip>
|
||||
</properties>
|
||||
@@ -74,7 +62,7 @@
|
||||
<dependency>
|
||||
<groupId>net.sf.jopt-simple</groupId>
|
||||
<artifactId>jopt-simple</artifactId>
|
||||
<version>${jopt.version}</version>
|
||||
<version>5.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
@@ -93,12 +81,12 @@
|
||||
<dependency>
|
||||
<groupId>net.runelite.pushingpixels</groupId>
|
||||
<artifactId>substance</artifactId>
|
||||
<version>${runelite.pushingpixels.substance.version}</version>
|
||||
<version>8.0.02</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.runelite.pushingpixels</groupId>
|
||||
<artifactId>trident</artifactId>
|
||||
<version>${runelite.pushingpixels.trident.version}</version>
|
||||
<version>1.5.00</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@@ -109,7 +97,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>${commons.text.version}</version>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jogamp.jogl</groupId>
|
||||
@@ -180,7 +168,7 @@
|
||||
<dependency>
|
||||
<groupId>io.sigpipe</groupId>
|
||||
<artifactId>jbsdiff</artifactId>
|
||||
<version>${sigpipe.jbsdiff.version}</version>
|
||||
<version>1.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.tukaani</groupId>
|
||||
@@ -192,12 +180,12 @@
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
<version>${java.dev.jna.version}</version>
|
||||
<version>4.5.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna-platform</artifactId>
|
||||
<version>${java.dev.jna.version}</version>
|
||||
<version>4.5.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -225,26 +213,30 @@
|
||||
<dependency>
|
||||
<groupId>net.runelite</groupId>
|
||||
<artifactId>discord</artifactId>
|
||||
<version>${runelite.discord.version}</version>
|
||||
<version>1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.runelite</groupId>
|
||||
<artifactId>orange-extensions</artifactId>
|
||||
<version>${runelite.orange.extensions.version}</version>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-library</artifactId>
|
||||
<version>${hamcrest.version}</version>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<version>1.10.19</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@@ -333,7 +325,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.resources.plugin.version}</version>
|
||||
<version>3.0.2</version>
|
||||
<configuration>
|
||||
<nonFilteredFileExtensions>
|
||||
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
|
||||
@@ -346,7 +338,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>${maven.shade.plugin.version}</version>
|
||||
<version>3.0.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
@@ -422,7 +414,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jarsigner-plugin</artifactId>
|
||||
<version>${maven.jarsigner.plugin.version}</version>
|
||||
<version>1.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign</id>
|
||||
|
||||
@@ -107,13 +107,13 @@ public abstract class ScriptVMMixin implements RSClient
|
||||
return false;
|
||||
}
|
||||
|
||||
@Copy("runScript0")
|
||||
@Copy("runScript")
|
||||
static void rs$runScript(RSScriptEvent event, int maxExecutionTime)
|
||||
{
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
@Replace("runScript0")
|
||||
@Replace("runScript")
|
||||
static void rl$runScript(RSScriptEvent event, int maxExecutionTime)
|
||||
{
|
||||
Object[] arguments = event.getArguments();
|
||||
|
||||
@@ -34,13 +34,13 @@ public abstract class SpriteMixin implements RSClient
|
||||
return widgetSpriteOverrides;
|
||||
}
|
||||
|
||||
@Copy("readSprite")
|
||||
@Copy("SpriteBuffer_loadSprite")
|
||||
public static RSSprite rs$loadSprite(RSAbstractArchive var0, int var1, int var2)
|
||||
{
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
@Replace("readSprite")
|
||||
@Replace("SpriteBuffer_loadSprite")
|
||||
public static RSSprite rl$loadSprite(RSAbstractArchive var0, int var1, int var2)
|
||||
{
|
||||
Sprite sprite = spriteOverrides.get(var1);
|
||||
|
||||
Reference in New Issue
Block a user