diff --git a/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java index a372f9d68c..f5994ad1d3 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java +++ b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java @@ -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 getIntfNames() + { + final List names = new ArrayList<>(); + for (ClassFile c : getMyInterfaces()) + { + String name = DeobAnnotations.getObfuscatedName(c.getAnnotations()); + if (name == null) + { + continue; + } + + names.add(name); + } + + return names; + } } diff --git a/deobfuscator/src/main/java/net/runelite/deob/Deob.java b/deobfuscator/src/main/java/net/runelite/deob/Deob.java index d0be2f21d2..2dfeae9e6b 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/Deob.java +++ b/deobfuscator/src/main/java/net/runelite/deob/Deob.java @@ -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()); diff --git a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java index eeac06929c..2881148caa 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java +++ b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java @@ -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) { diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationIntegrityChecker.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationIntegrityChecker.java index b8fcb505dd..c837f178ea 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationIntegrityChecker.java +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/AnnotationIntegrityChecker.java @@ -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; } } diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapper.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapper.java index a32983b1ba..8c31fbbb95 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapper.java +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/mapping/Mapper.java @@ -159,6 +159,14 @@ public class Mapper continue; } + //if (cf.getInterfaces().getMyInterfaces().size() != 0) + //{ + // for (Method m : cf.getMethods()) + // { + // if (m.) + // } + //} + List methods1 = cf.getMethods().stream() .filter(m -> !m.isStatic()) .filter(m -> !m.getName().equals("")) diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java index f9a9088920..498c31c88e 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java @@ -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), diff --git a/deobfuscator/src/main/java/net/runelite/deob/updater/ParameterRenamer.java b/deobfuscator/src/main/java/net/runelite/deob/updater/ParameterRenamer.java index f8b6ce7a50..15a4a2b917 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/updater/ParameterRenamer.java +++ b/deobfuscator/src/main/java/net/runelite/deob/updater/ParameterRenamer.java @@ -51,24 +51,14 @@ public class ParameterRenamer { for (Method sourceM : sourceCF.getMethods()) { - Method destM; - if (sourceM.getName().equals("")) - { - ClassFile destCF = (ClassFile) mapping.get(sourceCF); - destM = destCF.findMethod("", 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 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; } diff --git a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/mapping/MappingDumper.java b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/mapping/MappingDumper.java index d99b6967e1..262e7bce2e 100644 --- a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/mapping/MappingDumper.java +++ b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/mapping/MappingDumper.java @@ -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 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("")) + { + 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("")) + { + 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(); diff --git a/deobfuscator/src/test/java/net/runelite/deob/updater/AnnotationCleaner.java b/deobfuscator/src/test/java/net/runelite/deob/updater/AnnotationCleaner.java index 56d716cda2..b3ac46dbd8 100644 --- a/deobfuscator/src/test/java/net/runelite/deob/updater/AnnotationCleaner.java +++ b/deobfuscator/src/test/java/net/runelite/deob/updater/AnnotationCleaner.java @@ -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")); + } } diff --git a/deobfuscator/src/test/java/net/runelite/runesuite/hooks.json b/deobfuscator/src/test/java/net/runelite/runesuite/hooks.json index 56b4ddb42b..b97a00e3e3 100644 --- a/deobfuscator/src/test/java/net/runelite/runesuite/hooks.json +++ b/deobfuscator/src/test/java/net/runelite/runesuite/hooks.json @@ -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, diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java b/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java index 1153609b8e..3367b26c7a 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java @@ -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; diff --git a/injector-plugin/src/main/java/net/runelite/injector/raw/ScriptVM.java b/injector-plugin/src/main/java/net/runelite/injector/raw/ScriptVM.java index c4f0987894..1a8a1115f1 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/raw/ScriptVM.java +++ b/injector-plugin/src/main/java/net/runelite/injector/raw/ScriptVM.java @@ -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"); diff --git a/live/bootstrap.json b/live/bootstrap.json index ed5ccff0b0..9256d3672d 100644 --- a/live/bootstrap.json +++ b/live/bootstrap.json @@ -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" } ] } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9d1649c992..d3b2cc240e 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ true true true - 180 + 181 diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index b5bf50d355..027ce16219 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -38,18 +38,6 @@ 4.1.0 2.3.2 - 1.3 - 5.0.1 - 1.2 - 1.0 - 4.5.1 - 8.0.02 - 1.5.00 - 1.1 - 1.0 - 3.0.2 - 1.4 - 3.2.1 true @@ -74,7 +62,7 @@ net.sf.jopt-simple jopt-simple - ${jopt.version} + 5.0.1 com.google.guava @@ -93,12 +81,12 @@ net.runelite.pushingpixels substance - ${runelite.pushingpixels.substance.version} + 8.0.02 net.runelite.pushingpixels trident - ${runelite.pushingpixels.trident.version} + 1.5.00 runtime @@ -109,7 +97,7 @@ org.apache.commons commons-text - ${commons.text.version} + 1.2 org.jogamp.jogl @@ -180,7 +168,7 @@ io.sigpipe jbsdiff - ${sigpipe.jbsdiff.version} + 1.0 org.tukaani @@ -192,12 +180,12 @@ net.java.dev.jna jna - ${java.dev.jna.version} + 4.5.1 net.java.dev.jna jna-platform - ${java.dev.jna.version} + 4.5.1 @@ -225,26 +213,30 @@ net.runelite discord - ${runelite.discord.version} + 1.1 net.runelite orange-extensions - ${runelite.orange.extensions.version} + 1.0 provided junit junit - - - org.mockito - mockito-all + 4.12 + test org.hamcrest hamcrest-library - ${hamcrest.version} + 1.3 + test + + + org.mockito + mockito-all + 1.10.19 test @@ -333,7 +325,7 @@ org.apache.maven.plugins maven-resources-plugin - ${maven.resources.plugin.version} + 3.0.2 ttf @@ -346,7 +338,7 @@ org.apache.maven.plugins maven-shade-plugin - ${maven.shade.plugin.version} + 3.0.0 package @@ -422,7 +414,7 @@ org.apache.maven.plugins maven-jarsigner-plugin - ${maven.jarsigner.plugin.version} + 1.4 sign diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java index b6c439d9fb..40b6bca9b5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java @@ -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(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java index b08827b18a..9708dc336f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java @@ -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);