From 090c95b62616014198d0baeada66cad608c5a600 Mon Sep 17 00:00:00 2001 From: zeruth Date: Mon, 10 Jun 2019 01:51:19 -0400 Subject: [PATCH] Checkstyle fixes --- injector-plugin/pom.xml | 5 +- .../java/net/runelite/injector/Inject.java | 77 ++- .../runelite/injector/InjectConstruct.java | 26 +- .../net/runelite/injector/InjectGetter.java | 6 +- .../net/runelite/injector/InjectHook.java | 24 +- .../runelite/injector/InjectHookMethod.java | 36 +- .../net/runelite/injector/InjectInvoker.java | 12 +- .../net/runelite/injector/InjectMojo.java | 5 +- .../net/runelite/injector/InjectSetter.java | 14 +- .../java/net/runelite/injector/Injector.java | 22 +- .../net/runelite/injector/MixinInjector.java | 14 +- .../injector/raw/ClearColorBuffer.java | 2 +- .../injector/raw/DrawAfterWidgets.java | 2 +- .../injector/InjectConstructTest.java | 10 +- .../runelite/injector/InjectSetterTest.java | 14 +- .../runelite/injector/MixinInjectorTest.java | 15 +- .../client/util/bootstrap/Artifact.java | 13 +- .../client/util/bootstrap/Bootstrap.java | 621 +++++++++--------- .../client/util/bootstrap/Bootstrapper.java | 32 +- .../client/util/bootstrap/Client.java | 15 +- .../net/runelite/mixins/ClickboxMixin.java | 71 +- .../net/runelite/mixins/RSModelMixin.java | 306 ++++----- 22 files changed, 667 insertions(+), 675 deletions(-) diff --git a/injector-plugin/pom.xml b/injector-plugin/pom.xml index 4fcc212a47..38728b11e2 100644 --- a/injector-plugin/pom.xml +++ b/injector-plugin/pom.xml @@ -23,7 +23,8 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - + 4.0.0 @@ -58,7 +59,7 @@ runescape-api ${project.version} - + org.apache.maven maven-plugin-api diff --git a/injector-plugin/src/main/java/net/runelite/injector/Inject.java b/injector-plugin/src/main/java/net/runelite/injector/Inject.java index 53f1c40cc4..dcc0236937 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/Inject.java +++ b/injector-plugin/src/main/java/net/runelite/injector/Inject.java @@ -51,19 +51,16 @@ import net.runelite.injector.raw.RasterizerHook; import net.runelite.injector.raw.RenderDraw; import net.runelite.injector.raw.ScriptVM; import net.runelite.mapping.Import; +import net.runelite.rs.api.RSClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.runelite.rs.api.RSClient; public class Inject { - private static final Logger logger = LoggerFactory.getLogger(Inject.class); - public static final java.lang.Class CLIENT_CLASS = RSClient.class; - public static final String API_PACKAGE_BASE = "net.runelite.rs.api.RS"; public static final String RL_API_PACKAGE_BASE = "net.runelite.api."; - + private static final Logger logger = LoggerFactory.getLogger(Inject.class); private final InjectHookMethod hookMethod = new InjectHookMethod(this); private final InjectGetter getters = new InjectGetter(this); @@ -87,34 +84,6 @@ public class Inject this.vanilla = vanilla; } - public Type getFieldType(Field f) - { - Type type = f.getType(); - - Annotation obfSignature = f.getAnnotations().find(DeobAnnotations.OBFUSCATED_SIGNATURE); - if (obfSignature != null) - { - //Annotation exists. Type was updated by us during deobfuscation - type = DeobAnnotations.getObfuscatedType(f); - } - - return type; - } - - public Signature getMethodSignature(Method m) - { - Signature signature = m.getDescriptor(); - - Annotation obfSignature = m.getAnnotations().find(DeobAnnotations.OBFUSCATED_SIGNATURE); - if (obfSignature != null) - { - //Annotation exists. Signature was updated by us during deobfuscation - signature = DeobAnnotations.getObfuscatedSignature(m); - } - - return signature; - } - /** * Convert a java.lang.Class to a Type * @@ -173,6 +142,34 @@ public class Inject return Type.getType("L" + c.getName().replace('.', '/') + ";", dimms); } + public Type getFieldType(Field f) + { + Type type = f.getType(); + + Annotation obfSignature = f.getAnnotations().find(DeobAnnotations.OBFUSCATED_SIGNATURE); + if (obfSignature != null) + { + //Annotation exists. Type was updated by us during deobfuscation + type = DeobAnnotations.getObfuscatedType(f); + } + + return type; + } + + public Signature getMethodSignature(Method m) + { + Signature signature = m.getDescriptor(); + + Annotation obfSignature = m.getAnnotations().find(DeobAnnotations.OBFUSCATED_SIGNATURE); + if (obfSignature != null) + { + //Annotation exists. Signature was updated by us during deobfuscation + signature = DeobAnnotations.getObfuscatedSignature(m); + } + + return signature; + } + /** * Build a Signature from a java method * @@ -284,7 +281,7 @@ public class Inject assert !f.isStatic(); // non static field exported on non exported interface - // logger.debug("Non static exported field {} on non exported interface", exportedName); + // logger.debug("Non static exported field {} on non exported interface", exportedName); continue; } @@ -325,7 +322,7 @@ public class Inject invokes.process(m, other, implementingClass); } } - + logger.info("Injected {} getters, {} setters, {} invokers", getters.getInjectedGetters(), setters.getInjectedSetters(), invokes.getInjectedInvokers()); @@ -514,10 +511,10 @@ public class Inject } } - // if (rlApiType == null) - // { - // throw new InjectionException("RS API type " + rsApiType + " does not extend RL API interface"); - // } + // if (rlApiType == null) + // { + // throw new InjectionException("RS API type " + rsApiType + " does not extend RL API interface"); + // } final java.lang.Class finalType = rlApiType == null ? rsApiType : rlApiType; @@ -539,7 +536,7 @@ public class Inject return Type.getType("L" + type.getInternalName().substring(API_PACKAGE_BASE.length()) + ";", type.getDimensions()); } - + ClassFile findVanillaForInterface(java.lang.Class clazz) { String className = clazz.getName().replace('.', '/'); diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectConstruct.java b/injector-plugin/src/main/java/net/runelite/injector/InjectConstruct.java index 295f636eaa..88e527d405 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectConstruct.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectConstruct.java @@ -115,19 +115,19 @@ public class InjectConstruct Signature sig = inject.javaMethodToSignature(apiMethod); Signature constructorSig = new Signature.Builder() - .addArguments(Stream.of(apiMethod.getParameterTypes()) - .map(arg -> - { - ClassFile vanilla = inject.findVanillaForInterface(arg); - if (vanilla != null) - { - return new Type("L" + vanilla.getName() + ";"); - } - return Inject.classToType(arg); - }) - .collect(Collectors.toList())) - .setReturnType(Type.VOID) - .build(); + .addArguments(Stream.of(apiMethod.getParameterTypes()) + .map(arg -> + { + ClassFile vanilla = inject.findVanillaForInterface(arg); + if (vanilla != null) + { + return new Type("L" + vanilla.getName() + ";"); + } + return Inject.classToType(arg); + }) + .collect(Collectors.toList())) + .setReturnType(Type.VOID) + .build(); Method vanillaConstructor = vanillaClass.findMethod("", constructorSig); if (vanillaConstructor == null) { diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectGetter.java b/injector-plugin/src/main/java/net/runelite/injector/InjectGetter.java index 3ac2752f6f..b9758b4f61 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectGetter.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectGetter.java @@ -47,16 +47,16 @@ import org.slf4j.LoggerFactory; public class InjectGetter { private static final Logger logger = LoggerFactory.getLogger(InjectGetter.class); - + private final Inject inject; - + private int injectedGetters; public InjectGetter(Inject inject) { this.inject = inject; } - + public void injectGetter(ClassFile clazz, java.lang.reflect.Method method, Field field, Number getter) { // clazz = class file we're injecting the method into. diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectHook.java b/injector-plugin/src/main/java/net/runelite/injector/InjectHook.java index 4be2f1cb5c..a709d92072 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectHook.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectHook.java @@ -58,23 +58,10 @@ import org.slf4j.LoggerFactory; public class InjectHook { private static final Logger logger = LoggerFactory.getLogger(InjectHook.class); - - static class HookInfo - { - String fieldName; - String clazz; - Method method; - boolean before; - Number getter; - } - private static final String HOOK_METHOD_SIGNATURE = "(I)V"; - private static final String CLINIT = ""; - private final Inject inject; private final Map hooked = new HashMap<>(); - private int injectedHooks; public InjectHook(Inject inject) @@ -272,7 +259,7 @@ public class InjectHook if (hookInfo.getter instanceof Integer) { ins.getInstructions().add(idx++, new LDC(ins, (int) hookInfo.getter)); - ins.getInstructions().add(idx++,new IMul(ins)); + ins.getInstructions().add(idx++, new IMul(ins)); } else { @@ -399,4 +386,13 @@ public class InjectHook { return injectedHooks; } + + static class HookInfo + { + String fieldName; + String clazz; + Method method; + boolean before; + Number getter; + } } diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectHookMethod.java b/injector-plugin/src/main/java/net/runelite/injector/InjectHookMethod.java index 6c74fbc5fa..9cd7d4326d 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectHookMethod.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectHookMethod.java @@ -49,10 +49,8 @@ import org.slf4j.LoggerFactory; public class InjectHookMethod { - private static final Logger logger = LoggerFactory.getLogger(InjectHookMethod.class); - public static final String HOOKS = "net/runelite/client/callback/Hooks"; - + private static final Logger logger = LoggerFactory.getLogger(InjectHookMethod.class); private final Inject inject; public InjectHookMethod(Inject inject) @@ -115,7 +113,7 @@ public class InjectHookMethod Instructions instructions = vanillaMethod.getCode().getInstructions(); Signature.Builder builder = new Signature.Builder() - .setReturnType(Type.VOID); // Hooks always return void + .setReturnType(Type.VOID); // Hooks always return void for (Type type : deobMethod.getDescriptor().getArguments()) { @@ -164,11 +162,11 @@ public class InjectHookMethod { // Invoke callback invoke = new InvokeStatic(instructions, - new net.runelite.asm.pool.Method( - new net.runelite.asm.pool.Class(HOOKS), - hookName, - signature - ) + new net.runelite.asm.pool.Method( + new net.runelite.asm.pool.Class(HOOKS), + hookName, + signature + ) ); } else @@ -179,11 +177,11 @@ public class InjectHookMethod if (vanillaMethod.isStatic()) { invoke = new InvokeStatic(instructions, - new net.runelite.asm.pool.Method( - new net.runelite.asm.pool.Class("client"), // Static methods are in client - hookMethod.getName(), - signature - ) + new net.runelite.asm.pool.Method( + new net.runelite.asm.pool.Class("client"), // Static methods are in client + hookMethod.getName(), + signature + ) ); } else @@ -191,11 +189,11 @@ public class InjectHookMethod // otherwise invoke member function //instructions.addInstruction(insertPos++, new ALoad(instructions, 0)); invoke = new InvokeVirtual(instructions, - new net.runelite.asm.pool.Method( - new net.runelite.asm.pool.Class(vanillaMethod.getClassFile().getName()), - hookMethod.getName(), - signature - ) + new net.runelite.asm.pool.Method( + new net.runelite.asm.pool.Class(vanillaMethod.getClassFile().getName()), + hookMethod.getName(), + signature + ) ); } } 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 1b59e63b4c..6b3fa13d33 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectInvoker.java @@ -67,11 +67,11 @@ public class InjectInvoker /** * Inject an invoker for a method * - * @param m Method in the deobfuscated client to inject an invoker for - * @param other Class in the vanilla client of the same class m is a - * member of + * @param m Method in the deobfuscated client to inject an invoker for + * @param other Class in the vanilla client of the same class m is a + * member of * @param implementingClass Java class for the API interface the class - * will implement + * will implement */ public void process(Method m, ClassFile other, java.lang.Class implementingClass) { @@ -108,14 +108,14 @@ public class InjectInvoker assert !m.isStatic(); // non static exported method on non exported interface, weird. - // logger.debug("Non static exported method {} on non exported interface", exportedName); + // logger.debug("Non static exported method {} on non exported interface", exportedName); return; } java.lang.reflect.Method apiMethod = inject.findImportMethodOnApi(targetClassJava, exportedName, null); // api method to invoke 'otherm' if (apiMethod == null) { - // logger.debug("Unable to find api method on {} with imported name {}, not injecting invoker", targetClassJava, exportedName); + // logger.debug("Unable to find api method on {} with imported name {}, not injecting invoker", targetClassJava, exportedName); return; } diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectMojo.java b/injector-plugin/src/main/java/net/runelite/injector/InjectMojo.java index 08ac162588..b7c22194fe 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectMojo.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectMojo.java @@ -45,17 +45,14 @@ import org.apache.maven.plugins.annotations.Parameter; ) public class InjectMojo extends AbstractMojo { + private final Log log = getLog(); @Parameter(defaultValue = "${project.build.outputDirectory}") private File outputDirectory; - @Parameter(defaultValue = "./runescape-client/target/rs-client-${project.version}.jar", readonly = true, required = true) private String rsClientPath; - @Parameter(defaultValue = "${net.runelite.rs:vanilla:jar}", readonly = true, required = true) private String vanillaPath; - private final Log log = getLog(); - @Override public void execute() throws MojoExecutionException, MojoFailureException { diff --git a/injector-plugin/src/main/java/net/runelite/injector/InjectSetter.java b/injector-plugin/src/main/java/net/runelite/injector/InjectSetter.java index bcb8b1815d..6b10ab3b56 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/InjectSetter.java +++ b/injector-plugin/src/main/java/net/runelite/injector/InjectSetter.java @@ -50,7 +50,7 @@ public class InjectSetter private static final Logger logger = LoggerFactory.getLogger(InjectSetter.class); private final Inject inject; - + private int injectedSetters; public InjectSetter(Inject inject) @@ -61,12 +61,12 @@ public class InjectSetter /** * inject a setter into the vanilla classgroup * - * @param targetClass Class where to inject the setter (field's class, - * or client) + * @param targetClass Class where to inject the setter (field's class, + * or client) * @param targetApiClass API targetClass implements, which may have the - * setter declared - * @param field Field of vanilla that will be set - * @param exportedName exported name of field + * setter declared + * @param field Field of vanilla that will be set + * @param exportedName exported name of field * @param setter */ public void injectSetter(ClassFile targetClass, Class targetApiClass, Field field, String exportedName, Number setter) @@ -114,7 +114,7 @@ public class InjectSetter // load argument Type argumentType = sig.getTypeOfArg(0); ins.add(inject.createLoadForTypeIndex(instructions, argumentType, 1)); - + // cast argument to field type Type fieldType = field.getType(); if (!argumentType.equals(fieldType)) diff --git a/injector-plugin/src/main/java/net/runelite/injector/Injector.java b/injector-plugin/src/main/java/net/runelite/injector/Injector.java index 60577cfbd4..d8b61f901b 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/Injector.java +++ b/injector-plugin/src/main/java/net/runelite/injector/Injector.java @@ -39,17 +39,6 @@ public class Injector this.vanilla = vanilla; } - public void inject() throws InjectionException - { - Inject instance = new Inject(deobfuscated, vanilla); - instance.run(); - } - - public void save(File out) throws IOException - { - JarUtil.saveJar(vanilla, out); - } - public static void main(String[] args) throws IOException, InjectionException { if (args.length < 3) @@ -72,5 +61,16 @@ public class Injector u.save(new File(args[2])); } + public void inject() throws InjectionException + { + Inject instance = new Inject(deobfuscated, vanilla); + instance.run(); + } + + public void save(File out) throws IOException + { + JarUtil.saveJar(vanilla, out); + } + } diff --git a/injector-plugin/src/main/java/net/runelite/injector/MixinInjector.java b/injector-plugin/src/main/java/net/runelite/injector/MixinInjector.java index 032524878a..1547880140 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/MixinInjector.java +++ b/injector-plugin/src/main/java/net/runelite/injector/MixinInjector.java @@ -404,7 +404,7 @@ public class MixinInjector care of the garbage parameter itself. */ boolean hasGarbageValue = method.getDescriptor().size() != obMethod.getDescriptor().size() - && deobMethod.getDescriptor().size() < obMethodSignature.size(); + && deobMethod.getDescriptor().size() < obMethodSignature.size(); copiedMethods.put(method.getPoolMethod(), new CopiedMethod(copy, hasGarbageValue)); logger.debug("Injected copy of {} to {}", obMethod, copy); @@ -577,7 +577,7 @@ public class MixinInjector if (!returnType.equals(deobReturnType)) { ClassFile deobReturnTypeClassFile = inject.getDeobfuscated() - .findClass(deobReturnType.getInternalName()); + .findClass(deobReturnType.getInternalName()); if (deobReturnTypeClassFile != null) { ClassFile obReturnTypeClass = inject.toObClass(deobReturnTypeClassFile); @@ -601,13 +601,13 @@ public class MixinInjector moveCode(obMethod, method.getCode()); boolean hasGarbageValue = method.getDescriptor().size() != obMethod.getDescriptor().size() - && deobMethod.getDescriptor().size() < obMethodSignature.size(); + && deobMethod.getDescriptor().size() < obMethodSignature.size(); if (hasGarbageValue) { int garbageIndex = obMethod.isStatic() - ? obMethod.getDescriptor().size() - 1 - : obMethod.getDescriptor().size(); + ? obMethod.getDescriptor().size() - 1 + : obMethod.getDescriptor().size(); /* If the mixin method doesn't have the garbage parameter, @@ -645,8 +645,8 @@ public class MixinInjector } private void setOwnersToTargetClass(ClassFile mixinCf, ClassFile cf, Method method, - Map shadowFields, - Map copiedMethods) + Map shadowFields, + Map copiedMethods) throws InjectionException { ListIterator iterator = method.getCode().getInstructions().getInstructions().listIterator(); diff --git a/injector-plugin/src/main/java/net/runelite/injector/raw/ClearColorBuffer.java b/injector-plugin/src/main/java/net/runelite/injector/raw/ClearColorBuffer.java index e1da299dd1..ffacb7f1a8 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/raw/ClearColorBuffer.java +++ b/injector-plugin/src/main/java/net/runelite/injector/raw/ClearColorBuffer.java @@ -79,7 +79,7 @@ public class ClearColorBuffer if (current instanceof LDC && ((LDC) current).getConstantAsInt() == 0) { int varIdx = 0; - for (; ;) + for (; ; ) { current = it.previous(); if (current instanceof ILoad && ((ILoad) current).getVariableIndex() == 3 - varIdx) diff --git a/injector-plugin/src/main/java/net/runelite/injector/raw/DrawAfterWidgets.java b/injector-plugin/src/main/java/net/runelite/injector/raw/DrawAfterWidgets.java index db239448bf..ae2a3d5478 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/raw/DrawAfterWidgets.java +++ b/injector-plugin/src/main/java/net/runelite/injector/raw/DrawAfterWidgets.java @@ -166,7 +166,7 @@ public class DrawAfterWidgets { // If we get here, we're either in the wrong method // or Jagex has removed the "if (535573958 * kl != -1)" - // logger.debug("Could not find the label for jumping to the " + noClip + " call in " + m); + // logger.debug("Could not find the label for jumping to the " + noClip + " call in " + m); continue; } diff --git a/injector-plugin/src/test/java/net/runelite/injector/InjectConstructTest.java b/injector-plugin/src/test/java/net/runelite/injector/InjectConstructTest.java index 5b0663e48c..dbde5e10bd 100644 --- a/injector-plugin/src/test/java/net/runelite/injector/InjectConstructTest.java +++ b/injector-plugin/src/test/java/net/runelite/injector/InjectConstructTest.java @@ -35,11 +35,6 @@ import static org.mockito.Mockito.when; public class InjectConstructTest { - interface APIClass - { - APIClass create(); - } - @Test public void testInjectConstruct() throws Exception { @@ -60,4 +55,9 @@ public class InjectConstructTest assertNotNull(targetClass.findMethod("create")); } + interface APIClass + { + APIClass create(); + } + } diff --git a/injector-plugin/src/test/java/net/runelite/injector/InjectSetterTest.java b/injector-plugin/src/test/java/net/runelite/injector/InjectSetterTest.java index 1b1c538463..48ff708bc5 100644 --- a/injector-plugin/src/test/java/net/runelite/injector/InjectSetterTest.java +++ b/injector-plugin/src/test/java/net/runelite/injector/InjectSetterTest.java @@ -44,13 +44,6 @@ import static org.mockito.Mockito.when; public class InjectSetterTest { - interface APIClass - { - void setTest(int i); - - void setTestObject(Object str); - } - @Test public void testInjectSetterInt() throws NoSuchMethodException { @@ -113,4 +106,11 @@ public class InjectSetterTest .isPresent()); } + interface APIClass + { + void setTest(int i); + + void setTestObject(Object str); + } + } diff --git a/injector-plugin/src/test/java/net/runelite/injector/MixinInjectorTest.java b/injector-plugin/src/test/java/net/runelite/injector/MixinInjectorTest.java index 02e2dbf0c0..9a96626f27 100644 --- a/injector-plugin/src/test/java/net/runelite/injector/MixinInjectorTest.java +++ b/injector-plugin/src/test/java/net/runelite/injector/MixinInjectorTest.java @@ -53,6 +53,9 @@ import static org.objectweb.asm.Opcodes.ACC_STATIC; @ObfuscatedName("net/runelite/injector/VanillaTarget") class DeobTarget { + @ObfuscatedName("ob_foo4") + private static int foo4; + @ObfuscatedName("ob_foo3") @ObfuscatedSignature( signature = "(I)V", @@ -63,13 +66,12 @@ class DeobTarget // De-obfuscated foo3 System.out.println("foo3"); } - - @ObfuscatedName("ob_foo4") - private static int foo4; } class VanillaTarget { + private static int ob_foo4; + private void ob_foo3(int garbageValue) { // Obfuscated foo3 @@ -79,14 +81,14 @@ class VanillaTarget } System.out.println("foo3"); } - - private static int ob_foo4; } abstract class Source { @net.runelite.api.mixins.Inject private static int foo; + @Shadow("foo4") + private static int foo4; @net.runelite.api.mixins.Inject private void foo2() @@ -103,9 +105,6 @@ abstract class Source System.out.println(foo4); foo3(); } - - @Shadow("foo4") - private static int foo4; } // Test shadowing the "foo" field injected by Source diff --git a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Artifact.java b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Artifact.java index 9b9e2b276e..466dfbcf11 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Artifact.java +++ b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Artifact.java @@ -1,10 +1,9 @@ package net.runelite.client.util.bootstrap; -public class Artifact { - - String hash; - String name; - String path; - String size; - +public class Artifact +{ + String hash; + String name; + String path; + String size; } diff --git a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrap.java b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrap.java index e9d51c58d6..b6e3acde55 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrap.java +++ b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrap.java @@ -1,328 +1,345 @@ package net.runelite.client.util.bootstrap; -import net.runelite.http.api.RuneLiteAPI; -import sun.misc.BASE64Encoder; - -import javax.xml.bind.DatatypeConverter; -import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; -import java.io.UnsupportedEncodingException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import javax.xml.bind.DatatypeConverter; +import net.runelite.http.api.RuneLiteAPI; -public class Bootstrap { +public class Bootstrap +{ + Artifact[] artifacts = getArtifacts(); + Client client = new Client(); + String[] clientJvm9Arguments = new String[]{ + "-XX:+DisableAttachMechanism", + "-Xmx512m", + "-Xss2m", + "-XX:CompileThreshold=1500", + "-Djna.nosys=true" + }; + String[] clientJvmArguments = new String[]{ + "-XX:+DisableAttachMechanism", + "-Xmx512m", + "-Xss2m", + "-XX:CompileThreshold=1500", + "-Xincgc", + "-XX:+UseConcMarkSweepGC", + "-XX:+UseParNewGC", + "-Djna.nosys=true"}; + String[] dependencyHashes; + String[] launcherArguments = new String[]{ + "-XX:+DisableAttachMechanism", + "-Drunelite.launcher.nojvm=true", + "-Xmx512m", + "-Xss2m", + "-XX:CompileThreshold=1500", + "-Xincgc", + "-XX:+UseConcMarkSweepGC", + "-XX:+UseParNewGC", + "-Djna.nosys=true"}; - Artifact[] artifacts = getArtifacts(); - Client client = new Client(); - String[] clientJvm9Arguments = new String[]{ - "-XX:+DisableAttachMechanism", - "-Xmx512m", - "-Xss2m", - "-XX:CompileThreshold=1500", - "-Djna.nosys=true" - }; - String[] clientJvmArguments = new String[]{ - "-XX:+DisableAttachMechanism", - "-Xmx512m", - "-Xss2m", - "-XX:CompileThreshold=1500", - "-Xincgc", - "-XX:+UseConcMarkSweepGC", - "-XX:+UseParNewGC", - "-Djna.nosys=true"}; - String[] dependencyHashes; - String[] launcherArguments = new String[]{ - "-XX:+DisableAttachMechanism", - "-Drunelite.launcher.nojvm=true", - "-Xmx512m", - "-Xss2m", - "-XX:CompileThreshold=1500", - "-Xincgc", - "-XX:+UseConcMarkSweepGC", - "-XX:+UseParNewGC", - "-Djna.nosys=true"}; + public Bootstrap() + { + } - public Bootstrap(){} + public static String getChecksumObject(Serializable object) throws IOException, NoSuchAlgorithmException + { + ByteArrayOutputStream baos = null; + ObjectOutputStream oos = null; + try + { + baos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(baos); + oos.writeObject(object); + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] thedigest = md.digest(baos.toByteArray()); + return DatatypeConverter.printHexBinary(thedigest); + } + finally + { + oos.close(); + baos.close(); + } + } - public Artifact[] getArtifacts() { - try { - artifacts = new Artifact[42]; + private static String getChecksumFile(String filepath) throws IOException + { + System.out.println("Generating Hash for " + filepath); + MessageDigest md = null; + try + { + md = MessageDigest.getInstance("SHA-256"); + } + catch (Exception e) + { + e.printStackTrace(); + } + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) + { + while (dis.read() != -1) + { + //empty loop to clear the data + } + md = dis.getMessageDigest(); + } + catch (Exception e) + { + e.printStackTrace(); + } - //Static artifacts - artifacts[0] = new Artifact(); - artifacts[0].hash = "b12331da8683e5f107d294adeebb83ecf9124abc1db533554d2a8d3c62832d75"; - artifacts[0].name = "asm-all-6.0_BETA.jar"; - artifacts[0].path = "https://mvn.runelite.net/org/ow2/asm/asm-all/6.0_BETA/asm-all-6.0_BETA.jar"; - artifacts[0].size = "265176"; - artifacts[1] = new Artifact(); - artifacts[1].hash = "37abf0103ce5318bfda004fabc004c75ed0dc6d392a8459175692ab7eac97083"; - artifacts[1].name = "naturalmouse-2.0.0.jar"; - artifacts[1].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/artifacts/naturalmouse-2.0.0.jar"; - artifacts[1].size = "3168921"; - artifacts[2] = new Artifact(); - artifacts[2].hash = "50d1e07f11827672249dee9ce8a23691fc59f663deed084bb7b52a4f778d5fbc"; - artifacts[2].name = "jcl-core-2.9-SNAPSHOT.jar"; - artifacts[2].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/artifacts/jcl-core-2.9-SNAPSHOT.jar"; - artifacts[2].size = "3168921"; - artifacts[4] = new Artifact(); - artifacts[4].hash = "18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79"; - artifacts[4].name = "slf4j-api-1.7.25.jar"; - artifacts[4].path = "https://mvn.runelite.net/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar"; - artifacts[4].size = "41203"; - artifacts[5] = new Artifact(); - artifacts[5].hash = "fb53f8539e7fcb8f093a56e138112056ec1dc809ebb020b59d8a36a5ebac37e0"; - artifacts[5].name = "logback-classic-1.2.3.jar"; - artifacts[5].path = "https://mvn.runelite.net/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar"; - artifacts[5].size = "290339"; - artifacts[6] = new Artifact(); - artifacts[6].hash = "5946d837fe6f960c02a53eda7a6926ecc3c758bbdd69aa453ee429f858217f22"; - artifacts[6].name = "logback-core-1.2.3.jar"; - artifacts[6].path = "https://mvn.runelite.net/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar"; - artifacts[6].size = "471901"; - artifacts[7] = new Artifact(); - artifacts[7].hash = "9f0c8d50fa4b79b6ff1502dbec8502179d6b9497cacbe17a13074001aed537ec"; - artifacts[7].name = "jopt-simple-5.0.1.jar"; - artifacts[7].path = "https://mvn.runelite.net/net/sf/jopt-simple/jopt-simple/5.0.1/jopt-simple-5.0.1.jar"; - artifacts[7].size = "78826"; - artifacts[8] = new Artifact(); - artifacts[8].hash = "5be9a7d05ba0ccd74708bc8018ae412255f85843c0b92302e9b9befa6ed52564"; - artifacts[8].name = "guava-23.2-jre.jar"; - artifacts[8].path = "https://mvn.runelite.net/com/google/guava/guava/23.2-jre/guava-23.2-jre.jar"; - artifacts[8].size = "2649860"; - artifacts[9] = new Artifact(); - artifacts[9].hash = "905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed"; - artifacts[9].name = "jsr305-1.3.9.jar"; - artifacts[9].path = "https://mvn.runelite.net/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"; - artifacts[9].size = "33015"; - artifacts[10] = new Artifact(); - artifacts[10].hash = "cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b"; - artifacts[10].name = "error_prone_annotations-2.0.18.jar"; - artifacts[10].path = "https://mvn.runelite.net/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18.jar"; - artifacts[10].size = "12078"; - artifacts[11] = new Artifact(); - artifacts[11].hash = "2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6"; - artifacts[11].name = "j2objc-annotations-1.1.jar"; - artifacts[11].path = "https://mvn.runelite.net/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar"; - artifacts[11].size = "8782"; - artifacts[12] = new Artifact(); - artifacts[12].hash = "2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d"; - artifacts[12].name = "animal-sniffer-annotations-1.14.jar"; - artifacts[12].path = "https://mvn.runelite.net/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar"; - artifacts[12].size = "3482"; - artifacts[13] = new Artifact(); - artifacts[13].hash = "9264c6931c431e928dc64adc842584d5f57d17b2f3aff29221f2b3fdea673dad"; - artifacts[13].name = "guice-4.1.0-no_aop.jar"; - artifacts[13].path = "https://mvn.runelite.net/com/google/inject/guice/4.1.0/guice-4.1.0-no_aop.jar"; - artifacts[13].size = "428603"; - artifacts[14] = new Artifact(); - artifacts[14].hash = "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff"; - artifacts[14].name = "javax.inject-1.jar"; - artifacts[14].path = "https://mvn.runelite.net/javax/inject/javax.inject/1/javax.inject-1.jar"; - artifacts[14].size = "2497"; - artifacts[15] = new Artifact(); - artifacts[15].hash = "0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08"; - artifacts[15].name = "aopalliance-1.0.jar"; - artifacts[15].path = "https://mvn.runelite.net/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"; - artifacts[15].size = "4467"; - artifacts[16] = new Artifact(); - artifacts[16].hash = "233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81"; - artifacts[16].name = "gson-2.8.5.jar"; - artifacts[16].path = "https://mvn.runelite.net/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar"; - artifacts[16].size = "241622"; - artifacts[17] = new Artifact(); - artifacts[17].hash = "0467d25f408428824d5c9c09ec60ee1f0bc341d9bf48971a77fd14939a826c83"; - artifacts[17].name = "substance-8.0.02.jar"; - artifacts[17].path = "https://repo.runelite.net/net/runelite/pushingpixels/substance/8.0.02/substance-8.0.02.jar"; - artifacts[17].size = "1589195"; - artifacts[18] = new Artifact(); - artifacts[18].hash = "3214e1c23d549d5d67c91da4da1ef33c5248470bb824f91cbe8f9e0beea59eef"; - artifacts[18].name = "trident-1.5.00.jar"; - artifacts[18].path = "https://repo.runelite.net/net/runelite/pushingpixels/trident/1.5.00/trident-1.5.00.jar"; - artifacts[18].size = "79726"; - artifacts[19] = new Artifact(); - artifacts[19].hash = "d4a57bbc1627da7c391308fd0fe910b83170fb66afd117236a5b111d2db1590b"; - artifacts[19].name = "commons-text-1.2.jar"; - artifacts[19].path = "https://mvn.runelite.net/org/apache/commons/commons-text/1.2/commons-text-1.2.jar"; - artifacts[19].size = "136544"; - artifacts[20] = new Artifact(); - artifacts[20].hash = "6e8dc31e046508d9953c96534edf0c2e0bfe6f468966b5b842b3f87e43b6a847"; - artifacts[20].name = "commons-lang3-3.7.jar"; - artifacts[20].path = "https://mvn.runelite.net/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar"; - artifacts[20].size = "499634"; - artifacts[21] = new Artifact(); - artifacts[21].hash = "e74603dc77b4183f108480279dbbf7fed3ac206069478636406c1fb45e83b31a"; - artifacts[21].name = "jogl-all-2.3.2.jar"; - artifacts[21].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2.jar"; - artifacts[21].size = "3414448"; - artifacts[22] = new Artifact(); - artifacts[22].hash = "8c53b1884cef19309d34fd10a94b010136d9d6de9a88c386f46006fb47acab5d"; - artifacts[22].name = "jogl-all-2.3.2-natives-windows-amd64.jar"; - artifacts[22].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-windows-amd64.jar"; - artifacts[22].size = "240721"; - artifacts[23] = new Artifact(); - artifacts[23].hash = "507a0e6bd1ee4e81c3dfb287783af93775864eec742988d4162f98ce0cbac9d6"; - artifacts[23].name = "jogl-all-2.3.2-natives-windows-i586.jar"; - artifacts[23].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-windows-i586.jar"; - artifacts[23].size = "209445"; - artifacts[24] = new Artifact(); - artifacts[24].hash = "82637302ae9effdf7d6f302e1050ad6aee3b13019914ddda5b502b9faa980216"; - artifacts[24].name = "jogl-all-2.3.2-natives-linux-amd64.jar"; - artifacts[24].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-linux-amd64.jar"; - artifacts[24].size = "224010"; - artifacts[25] = new Artifact(); - artifacts[25].hash = "f474ef2ef01be24ec811d3858b0f4bc5659076975f4a58ddd79abd787e9305c7"; - artifacts[25].name = "jogl-all-2.3.2-natives-linux-i586.jar"; - artifacts[25].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-linux-i586.jar"; - artifacts[25].size = "217274"; - artifacts[26] = new Artifact(); - artifacts[26].hash = "084844543b18f7ff71b4c0437852bd22f0cb68d7e44c2c611c1bbea76f8c6fdf"; - artifacts[26].name = "gluegen-rt-2.3.2.jar"; - artifacts[26].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2.jar"; - artifacts[26].size = "345605"; - artifacts[27] = new Artifact(); - artifacts[27].hash = "3474017422eff384db466bdb56c96c61220c43133a9da6329cf1781bea16c6b6"; - artifacts[27].name = "gluegen-rt-2.3.2-natives-windows-amd64.jar"; - artifacts[27].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-windows-amd64.jar"; - artifacts[27].size = "8159"; - artifacts[28] = new Artifact(); - artifacts[28].hash = "4eeed9fc2ebea5b9dc48a342b9478d127e989a2e1aa7129b512a98ec75cde338"; - artifacts[28].name = "gluegen-rt-2.3.2-natives-windows-i586.jar"; - artifacts[28].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-windows-i586.jar"; - artifacts[28].size = "7577"; - artifacts[29] = new Artifact(); - artifacts[29].hash = "f2dfd1800202059cf7e0294db5d57755147304e6eb220a9277526dbe6842bde2"; - artifacts[29].name = "gluegen-rt-2.3.2-natives-linux-amd64.jar"; - artifacts[29].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-linux-amd64.jar"; - artifacts[29].size = "4149"; - artifacts[30] = new Artifact(); - artifacts[30].hash = "1365d463f98c0abec92f3ad6b35aa4b53a9599a517800cf99fdabea6712ca7ec"; - artifacts[30].name = "gluegen-rt-2.3.2-natives-linux-i586.jar"; - artifacts[30].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-linux-i586.jar"; - artifacts[30].size = "4130"; - artifacts[31] = new Artifact(); - artifacts[31].hash = "7b7ae00e2aa98c3b2b5ac76e793e2c9b752bf51c86c54654dbd473843a25f1aa"; - artifacts[31].name = "jbsdiff-1.0.jar"; - artifacts[31].path = "https://mvn.runelite.net/io/sigpipe/jbsdiff/1.0/jbsdiff-1.0.jar"; - artifacts[31].size = "24589"; - artifacts[32] = new Artifact(); - artifacts[32].hash = "55bbfe26cee9296fd5b7c0d47ce6a00ea4dd572e235b63e9bb4eaf6f802315e4"; - artifacts[32].name = "commons-compress-1.5.jar"; - artifacts[32].path = "https://mvn.runelite.net/org/apache/commons/commons-compress/1.5/commons-compress-1.5.jar"; - artifacts[32].size = "256241"; - artifacts[33] = new Artifact(); - artifacts[33].hash = "fbc9de96a0cc193a125b4008dbc348e9ed54e5e13fc67b8ed40e645d303cc51b"; - artifacts[33].name = "jna-4.5.1.jar"; - artifacts[33].path = "https://mvn.runelite.net/net/java/dev/jna/jna/4.5.1/jna-4.5.1.jar"; - artifacts[33].size = "1440662"; - artifacts[34] = new Artifact(); - artifacts[34].hash = "84c8667555ee8dd91fef44b451419f6f16f71f727d5fc475a10c2663eba83abb"; - artifacts[34].name = "jna-platform-4.5.1.jar"; - artifacts[34].path = "https://mvn.runelite.net/net/java/dev/jna/jna-platform/4.5.1/jna-platform-4.5.1.jar"; - artifacts[34].size = "2327547"; - artifacts[38] = new Artifact(); - artifacts[38].hash = "f55abda036da75e1af45bd43b9dfa79b2a3d90905be9cb38687c6621597a8165"; - artifacts[38].name = "okhttp-3.7.0.jar"; - artifacts[38].path = "https://mvn.runelite.net/com/squareup/okhttp3/okhttp/3.7.0/okhttp-3.7.0.jar"; - artifacts[38].size = "394987"; - artifacts[39] = new Artifact(); - artifacts[39].hash = "bfe7dfe483c37137966a1690f0c7d0b448ba217902c1fed202aaffdbba3291ae"; - artifacts[39].name = "okio-1.12.0.jar"; - artifacts[39].path = "https://mvn.runelite.net/com/squareup/okio/okio/1.12.0/okio-1.12.0.jar"; - artifacts[39].size = "81088"; - artifacts[40] = new Artifact(); - artifacts[40].hash = "9d4924588d6280c7516db3a4b7298306db5b6f0d1cdf568ce738309b5660f008"; - artifacts[40].name = "commons-csv-1.4.jar"; - artifacts[40].path = "https://mvn.runelite.net/org/apache/commons/commons-csv/1.4/commons-csv-1.4.jar"; - artifacts[40].size = "39978"; - artifacts[41] = new Artifact(); - artifacts[41].hash = "7e26a8d043418f2f22d5f6a3083a9a131817009ee8cd72c004e83b50d1849a7c"; - artifacts[41].name = "discord-1.1.jar"; - artifacts[41].path = "https://repo.runelite.net/net/runelite/discord/1.1/discord-1.1.jar"; - artifacts[41].size = "617294"; + return bytesToHex(md.digest()); - //Dynamic artifacts - artifacts[3] = new Artifact(); - artifacts[3].name = "client-"+ RuneLiteAPI.getVersion()+".jar"; - artifacts[3].hash = getChecksumFile("./runelite-client/target/"+artifacts[3].name); - artifacts[3].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/"+artifacts[3].name; - artifacts[3].size = Long.toString(getFileSize("./runelite-client/target/"+artifacts[3].name)); - artifacts[35] = new Artifact(); - artifacts[35].name = "runelite-api-"+ RuneLiteAPI.getVersion()+".jar"; - artifacts[35].hash = getChecksumFile("./runelite-api/target/"+artifacts[35].name); - artifacts[35].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/"+artifacts[35].name; - artifacts[35].size = Long.toString(getFileSize("./runelite-api/target/"+artifacts[35].name)); - artifacts[36] = new Artifact(); - artifacts[36].name = "runescape-api-"+ RuneLiteAPI.getVersion()+".jar"; - artifacts[36].hash = getChecksumFile("./runescape-api/target/"+artifacts[36].name); - artifacts[36].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/"+artifacts[36].name; - artifacts[36].size = Long.toString(getFileSize("./runescape-api/target/"+artifacts[36].name)); - artifacts[37] = new Artifact(); - artifacts[37].name = "http-api-"+ RuneLiteAPI.getVersion()+".jar"; - artifacts[37].hash = getChecksumFile("./http-api/target/"+artifacts[37].name); - artifacts[37].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/"+artifacts[37].name; - artifacts[37].size = Long.toString(getFileSize("./http-api/target/"+artifacts[37].name)); - } catch (IOException e) { - e.printStackTrace(); - } - return artifacts; - } + } + private static String bytesToHex(byte[] hashInBytes) + { + StringBuilder sb = new StringBuilder(); + for (byte b : hashInBytes) + { + sb.append(String.format("%02x", b)); + } + return sb.toString(); - public static String getChecksumObject(Serializable object) throws IOException, NoSuchAlgorithmException { - ByteArrayOutputStream baos = null; - ObjectOutputStream oos = null; - try { - baos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(baos); - oos.writeObject(object); - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] thedigest = md.digest(baos.toByteArray()); - return DatatypeConverter.printHexBinary(thedigest); - } finally { - oos.close(); - baos.close(); - } - } - private static String getChecksumFile(String filepath) throws IOException { - System.out.println("Generating Hash for "+filepath); - MessageDigest md = null; - try { - md = MessageDigest.getInstance("SHA-256"); - } catch (Exception e) { - e.printStackTrace(); - } - try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) { - while (dis.read() != -1) ; //empty loop to clear the data - md = dis.getMessageDigest(); - } catch (Exception e) { - e.printStackTrace(); - } + } - return bytesToHex(md.digest()); + public Artifact[] getArtifacts() + { + try + { + artifacts = new Artifact[42]; - } + //Static artifacts + artifacts[0] = new Artifact(); + artifacts[0].hash = "b12331da8683e5f107d294adeebb83ecf9124abc1db533554d2a8d3c62832d75"; + artifacts[0].name = "asm-all-6.0_BETA.jar"; + artifacts[0].path = "https://mvn.runelite.net/org/ow2/asm/asm-all/6.0_BETA/asm-all-6.0_BETA.jar"; + artifacts[0].size = "265176"; + artifacts[1] = new Artifact(); + artifacts[1].hash = "37abf0103ce5318bfda004fabc004c75ed0dc6d392a8459175692ab7eac97083"; + artifacts[1].name = "naturalmouse-2.0.0.jar"; + artifacts[1].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/artifacts/naturalmouse-2.0.0.jar"; + artifacts[1].size = "3168921"; + artifacts[2] = new Artifact(); + artifacts[2].hash = "50d1e07f11827672249dee9ce8a23691fc59f663deed084bb7b52a4f778d5fbc"; + artifacts[2].name = "jcl-core-2.9-SNAPSHOT.jar"; + artifacts[2].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/artifacts/jcl-core-2.9-SNAPSHOT.jar"; + artifacts[2].size = "3168921"; + artifacts[4] = new Artifact(); + artifacts[4].hash = "18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79"; + artifacts[4].name = "slf4j-api-1.7.25.jar"; + artifacts[4].path = "https://mvn.runelite.net/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar"; + artifacts[4].size = "41203"; + artifacts[5] = new Artifact(); + artifacts[5].hash = "fb53f8539e7fcb8f093a56e138112056ec1dc809ebb020b59d8a36a5ebac37e0"; + artifacts[5].name = "logback-classic-1.2.3.jar"; + artifacts[5].path = "https://mvn.runelite.net/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar"; + artifacts[5].size = "290339"; + artifacts[6] = new Artifact(); + artifacts[6].hash = "5946d837fe6f960c02a53eda7a6926ecc3c758bbdd69aa453ee429f858217f22"; + artifacts[6].name = "logback-core-1.2.3.jar"; + artifacts[6].path = "https://mvn.runelite.net/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar"; + artifacts[6].size = "471901"; + artifacts[7] = new Artifact(); + artifacts[7].hash = "9f0c8d50fa4b79b6ff1502dbec8502179d6b9497cacbe17a13074001aed537ec"; + artifacts[7].name = "jopt-simple-5.0.1.jar"; + artifacts[7].path = "https://mvn.runelite.net/net/sf/jopt-simple/jopt-simple/5.0.1/jopt-simple-5.0.1.jar"; + artifacts[7].size = "78826"; + artifacts[8] = new Artifact(); + artifacts[8].hash = "5be9a7d05ba0ccd74708bc8018ae412255f85843c0b92302e9b9befa6ed52564"; + artifacts[8].name = "guava-23.2-jre.jar"; + artifacts[8].path = "https://mvn.runelite.net/com/google/guava/guava/23.2-jre/guava-23.2-jre.jar"; + artifacts[8].size = "2649860"; + artifacts[9] = new Artifact(); + artifacts[9].hash = "905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed"; + artifacts[9].name = "jsr305-1.3.9.jar"; + artifacts[9].path = "https://mvn.runelite.net/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"; + artifacts[9].size = "33015"; + artifacts[10] = new Artifact(); + artifacts[10].hash = "cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b"; + artifacts[10].name = "error_prone_annotations-2.0.18.jar"; + artifacts[10].path = "https://mvn.runelite.net/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18.jar"; + artifacts[10].size = "12078"; + artifacts[11] = new Artifact(); + artifacts[11].hash = "2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6"; + artifacts[11].name = "j2objc-annotations-1.1.jar"; + artifacts[11].path = "https://mvn.runelite.net/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar"; + artifacts[11].size = "8782"; + artifacts[12] = new Artifact(); + artifacts[12].hash = "2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d"; + artifacts[12].name = "animal-sniffer-annotations-1.14.jar"; + artifacts[12].path = "https://mvn.runelite.net/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar"; + artifacts[12].size = "3482"; + artifacts[13] = new Artifact(); + artifacts[13].hash = "9264c6931c431e928dc64adc842584d5f57d17b2f3aff29221f2b3fdea673dad"; + artifacts[13].name = "guice-4.1.0-no_aop.jar"; + artifacts[13].path = "https://mvn.runelite.net/com/google/inject/guice/4.1.0/guice-4.1.0-no_aop.jar"; + artifacts[13].size = "428603"; + artifacts[14] = new Artifact(); + artifacts[14].hash = "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff"; + artifacts[14].name = "javax.inject-1.jar"; + artifacts[14].path = "https://mvn.runelite.net/javax/inject/javax.inject/1/javax.inject-1.jar"; + artifacts[14].size = "2497"; + artifacts[15] = new Artifact(); + artifacts[15].hash = "0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08"; + artifacts[15].name = "aopalliance-1.0.jar"; + artifacts[15].path = "https://mvn.runelite.net/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"; + artifacts[15].size = "4467"; + artifacts[16] = new Artifact(); + artifacts[16].hash = "233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81"; + artifacts[16].name = "gson-2.8.5.jar"; + artifacts[16].path = "https://mvn.runelite.net/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar"; + artifacts[16].size = "241622"; + artifacts[17] = new Artifact(); + artifacts[17].hash = "0467d25f408428824d5c9c09ec60ee1f0bc341d9bf48971a77fd14939a826c83"; + artifacts[17].name = "substance-8.0.02.jar"; + artifacts[17].path = "https://repo.runelite.net/net/runelite/pushingpixels/substance/8.0.02/substance-8.0.02.jar"; + artifacts[17].size = "1589195"; + artifacts[18] = new Artifact(); + artifacts[18].hash = "3214e1c23d549d5d67c91da4da1ef33c5248470bb824f91cbe8f9e0beea59eef"; + artifacts[18].name = "trident-1.5.00.jar"; + artifacts[18].path = "https://repo.runelite.net/net/runelite/pushingpixels/trident/1.5.00/trident-1.5.00.jar"; + artifacts[18].size = "79726"; + artifacts[19] = new Artifact(); + artifacts[19].hash = "d4a57bbc1627da7c391308fd0fe910b83170fb66afd117236a5b111d2db1590b"; + artifacts[19].name = "commons-text-1.2.jar"; + artifacts[19].path = "https://mvn.runelite.net/org/apache/commons/commons-text/1.2/commons-text-1.2.jar"; + artifacts[19].size = "136544"; + artifacts[20] = new Artifact(); + artifacts[20].hash = "6e8dc31e046508d9953c96534edf0c2e0bfe6f468966b5b842b3f87e43b6a847"; + artifacts[20].name = "commons-lang3-3.7.jar"; + artifacts[20].path = "https://mvn.runelite.net/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar"; + artifacts[20].size = "499634"; + artifacts[21] = new Artifact(); + artifacts[21].hash = "e74603dc77b4183f108480279dbbf7fed3ac206069478636406c1fb45e83b31a"; + artifacts[21].name = "jogl-all-2.3.2.jar"; + artifacts[21].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2.jar"; + artifacts[21].size = "3414448"; + artifacts[22] = new Artifact(); + artifacts[22].hash = "8c53b1884cef19309d34fd10a94b010136d9d6de9a88c386f46006fb47acab5d"; + artifacts[22].name = "jogl-all-2.3.2-natives-windows-amd64.jar"; + artifacts[22].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-windows-amd64.jar"; + artifacts[22].size = "240721"; + artifacts[23] = new Artifact(); + artifacts[23].hash = "507a0e6bd1ee4e81c3dfb287783af93775864eec742988d4162f98ce0cbac9d6"; + artifacts[23].name = "jogl-all-2.3.2-natives-windows-i586.jar"; + artifacts[23].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-windows-i586.jar"; + artifacts[23].size = "209445"; + artifacts[24] = new Artifact(); + artifacts[24].hash = "82637302ae9effdf7d6f302e1050ad6aee3b13019914ddda5b502b9faa980216"; + artifacts[24].name = "jogl-all-2.3.2-natives-linux-amd64.jar"; + artifacts[24].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-linux-amd64.jar"; + artifacts[24].size = "224010"; + artifacts[25] = new Artifact(); + artifacts[25].hash = "f474ef2ef01be24ec811d3858b0f4bc5659076975f4a58ddd79abd787e9305c7"; + artifacts[25].name = "jogl-all-2.3.2-natives-linux-i586.jar"; + artifacts[25].path = "https://mvn.runelite.net/org/jogamp/jogl/jogl-all/2.3.2/jogl-all-2.3.2-natives-linux-i586.jar"; + artifacts[25].size = "217274"; + artifacts[26] = new Artifact(); + artifacts[26].hash = "084844543b18f7ff71b4c0437852bd22f0cb68d7e44c2c611c1bbea76f8c6fdf"; + artifacts[26].name = "gluegen-rt-2.3.2.jar"; + artifacts[26].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2.jar"; + artifacts[26].size = "345605"; + artifacts[27] = new Artifact(); + artifacts[27].hash = "3474017422eff384db466bdb56c96c61220c43133a9da6329cf1781bea16c6b6"; + artifacts[27].name = "gluegen-rt-2.3.2-natives-windows-amd64.jar"; + artifacts[27].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-windows-amd64.jar"; + artifacts[27].size = "8159"; + artifacts[28] = new Artifact(); + artifacts[28].hash = "4eeed9fc2ebea5b9dc48a342b9478d127e989a2e1aa7129b512a98ec75cde338"; + artifacts[28].name = "gluegen-rt-2.3.2-natives-windows-i586.jar"; + artifacts[28].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-windows-i586.jar"; + artifacts[28].size = "7577"; + artifacts[29] = new Artifact(); + artifacts[29].hash = "f2dfd1800202059cf7e0294db5d57755147304e6eb220a9277526dbe6842bde2"; + artifacts[29].name = "gluegen-rt-2.3.2-natives-linux-amd64.jar"; + artifacts[29].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-linux-amd64.jar"; + artifacts[29].size = "4149"; + artifacts[30] = new Artifact(); + artifacts[30].hash = "1365d463f98c0abec92f3ad6b35aa4b53a9599a517800cf99fdabea6712ca7ec"; + artifacts[30].name = "gluegen-rt-2.3.2-natives-linux-i586.jar"; + artifacts[30].path = "https://mvn.runelite.net/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-linux-i586.jar"; + artifacts[30].size = "4130"; + artifacts[31] = new Artifact(); + artifacts[31].hash = "7b7ae00e2aa98c3b2b5ac76e793e2c9b752bf51c86c54654dbd473843a25f1aa"; + artifacts[31].name = "jbsdiff-1.0.jar"; + artifacts[31].path = "https://mvn.runelite.net/io/sigpipe/jbsdiff/1.0/jbsdiff-1.0.jar"; + artifacts[31].size = "24589"; + artifacts[32] = new Artifact(); + artifacts[32].hash = "55bbfe26cee9296fd5b7c0d47ce6a00ea4dd572e235b63e9bb4eaf6f802315e4"; + artifacts[32].name = "commons-compress-1.5.jar"; + artifacts[32].path = "https://mvn.runelite.net/org/apache/commons/commons-compress/1.5/commons-compress-1.5.jar"; + artifacts[32].size = "256241"; + artifacts[33] = new Artifact(); + artifacts[33].hash = "fbc9de96a0cc193a125b4008dbc348e9ed54e5e13fc67b8ed40e645d303cc51b"; + artifacts[33].name = "jna-4.5.1.jar"; + artifacts[33].path = "https://mvn.runelite.net/net/java/dev/jna/jna/4.5.1/jna-4.5.1.jar"; + artifacts[33].size = "1440662"; + artifacts[34] = new Artifact(); + artifacts[34].hash = "84c8667555ee8dd91fef44b451419f6f16f71f727d5fc475a10c2663eba83abb"; + artifacts[34].name = "jna-platform-4.5.1.jar"; + artifacts[34].path = "https://mvn.runelite.net/net/java/dev/jna/jna-platform/4.5.1/jna-platform-4.5.1.jar"; + artifacts[34].size = "2327547"; + artifacts[38] = new Artifact(); + artifacts[38].hash = "f55abda036da75e1af45bd43b9dfa79b2a3d90905be9cb38687c6621597a8165"; + artifacts[38].name = "okhttp-3.7.0.jar"; + artifacts[38].path = "https://mvn.runelite.net/com/squareup/okhttp3/okhttp/3.7.0/okhttp-3.7.0.jar"; + artifacts[38].size = "394987"; + artifacts[39] = new Artifact(); + artifacts[39].hash = "bfe7dfe483c37137966a1690f0c7d0b448ba217902c1fed202aaffdbba3291ae"; + artifacts[39].name = "okio-1.12.0.jar"; + artifacts[39].path = "https://mvn.runelite.net/com/squareup/okio/okio/1.12.0/okio-1.12.0.jar"; + artifacts[39].size = "81088"; + artifacts[40] = new Artifact(); + artifacts[40].hash = "9d4924588d6280c7516db3a4b7298306db5b6f0d1cdf568ce738309b5660f008"; + artifacts[40].name = "commons-csv-1.4.jar"; + artifacts[40].path = "https://mvn.runelite.net/org/apache/commons/commons-csv/1.4/commons-csv-1.4.jar"; + artifacts[40].size = "39978"; + artifacts[41] = new Artifact(); + artifacts[41].hash = "7e26a8d043418f2f22d5f6a3083a9a131817009ee8cd72c004e83b50d1849a7c"; + artifacts[41].name = "discord-1.1.jar"; + artifacts[41].path = "https://repo.runelite.net/net/runelite/discord/1.1/discord-1.1.jar"; + artifacts[41].size = "617294"; - private static String bytesToHex(byte[] hashInBytes) { + //Dynamic artifacts + artifacts[3] = new Artifact(); + artifacts[3].name = "client-" + RuneLiteAPI.getVersion() + ".jar"; + artifacts[3].hash = getChecksumFile("./runelite-client/target/" + artifacts[3].name); + artifacts[3].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/" + artifacts[3].name; + artifacts[3].size = Long.toString(getFileSize("./runelite-client/target/" + artifacts[3].name)); + artifacts[35] = new Artifact(); + artifacts[35].name = "runelite-api-" + RuneLiteAPI.getVersion() + ".jar"; + artifacts[35].hash = getChecksumFile("./runelite-api/target/" + artifacts[35].name); + artifacts[35].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/" + artifacts[35].name; + artifacts[35].size = Long.toString(getFileSize("./runelite-api/target/" + artifacts[35].name)); + artifacts[36] = new Artifact(); + artifacts[36].name = "runescape-api-" + RuneLiteAPI.getVersion() + ".jar"; + artifacts[36].hash = getChecksumFile("./runescape-api/target/" + artifacts[36].name); + artifacts[36].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/" + artifacts[36].name; + artifacts[36].size = Long.toString(getFileSize("./runescape-api/target/" + artifacts[36].name)); + artifacts[37] = new Artifact(); + artifacts[37].name = "http-api-" + RuneLiteAPI.getVersion() + ".jar"; + artifacts[37].hash = getChecksumFile("./http-api/target/" + artifacts[37].name); + artifacts[37].path = "https://raw.githubusercontent.com/runelite-extended/maven-repo/master/live/" + artifacts[37].name; + artifacts[37].size = Long.toString(getFileSize("./http-api/target/" + artifacts[37].name)); + } + catch (IOException e) + { + e.printStackTrace(); + } + return artifacts; + } - StringBuilder sb = new StringBuilder(); - for (byte b : hashInBytes) { - sb.append(String.format("%02x", b)); - } - return sb.toString(); - - } - - private long getFileSize(String fileLocation) { - File f = new File(fileLocation); - return f.length(); - } + private long getFileSize(String fileLocation) + { + File f = new File(fileLocation); + return f.length(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrapper.java b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrapper.java index 7082bc780e..3a124c0b71 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrapper.java +++ b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Bootstrapper.java @@ -2,24 +2,24 @@ package net.runelite.client.util.bootstrap; import com.google.gson.Gson; import com.google.gson.GsonBuilder; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.FileWriter; -import java.io.IOException; -public class Bootstrapper { +public class Bootstrapper +{ - public static void main(String[] args) { - Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create(); - try { - FileWriter fw = new FileWriter("./bootstrap.json"); - gson.toJson(new Bootstrap(), fw); - fw.close(); - } catch (Exception e) { - e.printStackTrace(); - } + public static void main(String[] args) + { + Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create(); + try + { + FileWriter fw = new FileWriter("./bootstrap.json"); + gson.toJson(new Bootstrap(), fw); + fw.close(); + } + catch (Exception e) + { + e.printStackTrace(); + } - } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Client.java b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Client.java index 55195e26a7..59b1c60ff9 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Client.java +++ b/runelite-client/src/main/java/net/runelite/client/util/bootstrap/Client.java @@ -1,11 +1,12 @@ package net.runelite.client.util.bootstrap; -public class Client { +public class Client +{ - String artifactId = "client"; - String classifier = ""; - String extension = "jar"; - String groupId = "net.runelite"; - String properties = ""; - String version = "1.5.27"; + String artifactId = "client"; + String classifier = ""; + String extension = "jar"; + String groupId = "net.runelite"; + String properties = ""; + String version = "1.5.27"; } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java index 6fe745cb14..1200698f52 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ClickboxMixin.java @@ -1,12 +1,9 @@ package net.runelite.mixins; -import net.runelite.api.Model; -import net.runelite.api.Perspective; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Shadow; import net.runelite.rs.api.RSClient; -import net.runelite.rs.api.RSModel; /** * Class to check clickboxes of models. Mostly refactored code from the client. @@ -14,19 +11,40 @@ import net.runelite.rs.api.RSModel; @Mixin(RSClient.class) public abstract class ClickboxMixin implements RSClient { - @Shadow("client") - private static RSClient client; - private static final int MAX_ENTITES_AT_MOUSE = 1000; private static final int CLICKBOX_CLOSE = 50; private static final int CLICKBOX_FAR = 10000; private static final int OBJECT_INTERACTION_FAR = 100; // Max distance, in tiles, from camera - @Inject private static final int[] rl$modelViewportXs = new int[4700]; - @Inject private static final int[] rl$modelViewportYs = new int[4700]; + @Shadow("client") + private static RSClient client; + + @Inject + private static int rl$rot1(int var0, int var1, int var2, int var3) + { + return var0 * var2 + var3 * var1 >> 16; + } + + @Inject + private static int rl$rot2(int var0, int var1, int var2, int var3) + { + return var2 * var1 - var3 * var0 >> 16; + } + + @Inject + private static int rl$rot3(int var0, int var1, int var2, int var3) + { + return var0 * var2 - var3 * var1 >> 16; + } + + @Inject + private static int rl$rot4(int var0, int var1, int var2, int var3) + { + return var3 * var0 + var2 * var1 >> 16; + } @Inject public void checkClickbox(net.runelite.api.Model model, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, long l2) @@ -118,11 +136,8 @@ public abstract class ClickboxMixin implements RSClient int n28 = rl$modelViewportXs[n12]; int n29 = rl$modelViewportXs[n10]; int n30 = rl$modelViewportXs[n24]; - if (n25 != -5000 && n26 != -5000 && n27 != -5000 && (bl5 = (n23 = (n22 = rSModel.isClickable() ? 20 - : 5) + n11) < n28 && n23 < n29 && n23 < n30 ? false - : ((n23 = n11 - n22) > n28 && n23 > n29 && n23 > n30 ? false - : ((n23 = n22 + n14) < n25 && n23 < n26 && n23 < n27 ? false - : (n23 = n14 - n22) <= n25 || n23 <= n26 || n23 <= n27)))) + if (n25 != -5000 && n26 != -5000 && n27 != -5000 && (bl5 = ((n23 = (n22 = rSModel.isClickable() ? 20 + : 5) + n11) >= n28 || n23 >= n29 || n23 >= n30) && (((n23 = n11 - n22) <= n28 || n23 <= n29 || n23 <= n30) && (((n23 = n22 + n14) >= n25 || n23 >= n26 || n23 >= n27) && ((n23 = n14 - n22) <= n25 || n23 <= n26 || n23 <= n27))))) { this.addHashAtMouse(l2); return; @@ -211,34 +226,6 @@ public abstract class ClickboxMixin implements RSClient { return false; } - if (Math.abs(n39 * n23 - n38 * n24) <= n33 * n26 + n32 * n27) - { - return true; - } - return false; - } - - @Inject - private static int rl$rot1(int var0, int var1, int var2, int var3) - { - return var0 * var2 + var3 * var1 >> 16; - } - - @Inject - private static int rl$rot2(int var0, int var1, int var2, int var3) - { - return var2 * var1 - var3 * var0 >> 16; - } - - @Inject - private static int rl$rot3(int var0, int var1, int var2, int var3) - { - return var0 * var2 - var3 * var1 >> 16; - } - - @Inject - private static int rl$rot4(int var0, int var1, int var2, int var3) - { - return var3 * var0 + var2 * var1 >> 16; + return Math.abs(n39 * n23 - n38 * n24) <= n33 * n26 + n32 * n27; } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java index a27b82b2da..38a27323e9 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java @@ -24,21 +24,21 @@ */ package net.runelite.mixins; -import net.runelite.api.Model; -import net.runelite.api.Perspective; -import net.runelite.api.Point; -import net.runelite.api.model.Jarvis; -import net.runelite.api.model.Triangle; -import net.runelite.api.model.Vertex; import java.awt.Polygon; import java.util.ArrayList; import java.util.List; +import net.runelite.api.Model; +import net.runelite.api.Perspective; +import net.runelite.api.Point; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; +import net.runelite.api.model.Jarvis; +import net.runelite.api.model.Triangle; +import net.runelite.api.model.Vertex; import net.runelite.rs.api.RSAnimation; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSFrames; @@ -77,9 +77,112 @@ public abstract class RSModelMixin implements RSModel } @Inject - public boolean isClickable() { + public boolean isClickable() + { return isClickable; - }; + } + + @Inject + public void interpolateFrames(RSFrames frames, int frameId, RSFrames nextFrames, int nextFrameId, int interval, int intervalCount) + { + if (getVertexGroups() != null) + { + if (frameId != -1) + { + RSAnimation frame = frames.getFrames()[frameId]; + RSSkeleton skin = frame.getSkin(); + RSAnimation nextFrame = null; + if (nextFrames != null) + { + nextFrame = nextFrames.getFrames()[nextFrameId]; + if (nextFrame.getSkin() != skin) + { + nextFrame = null; + } + } + + client.setAnimOffsetX(0); + client.setAnimOffsetY(0); + client.setAnimOffsetZ(0); + + interpolateFrames(skin, frame, nextFrame, interval, intervalCount); + resetBounds(); + } + } + } + + @Override + @Inject + public Polygon getConvexHull(int localX, int localY, int orientation, int tileHeight) + { + List vertices = getVertices(); + + // rotate vertices + for (int i = 0; i < vertices.size(); ++i) + { + Vertex v = vertices.get(i); + vertices.set(i, v.rotate(orientation)); + } + + List points = new ArrayList(); + + for (Vertex v : vertices) + { + // Compute canvas location of vertex + Point p = Perspective.localToCanvas(client, + localX - v.getX(), + localY - v.getZ(), + tileHeight + v.getY()); + if (p != null) + { + points.add(p); + } + } + + // Run Jarvis march algorithm + points = Jarvis.convexHull(points); + if (points == null) + { + return null; + } + + // Convert to a polygon + Polygon p = new Polygon(); + for (Point point : points) + { + p.addPoint(point.getX(), point.getY()); + } + + return p; + } + + @Inject + @Override + public float[][] getFaceTextureUCoordinates() + { + return rl$faceTextureUCoordinates; + } + + @Inject + @Override + public void setFaceTextureUCoordinates(float[][] faceTextureUCoordinates) + { + this.rl$faceTextureUCoordinates = faceTextureUCoordinates; + } + + @Inject + @Override + public float[][] getFaceTextureVCoordinates() + { + return rl$faceTextureVCoordinates; + } + + @Inject + @Override + public void setFaceTextureVCoordinates(float[][] faceTextureVCoordinates) + { + this.rl$faceTextureVCoordinates = faceTextureVCoordinates; + } @MethodHook(value = "", end = true) @Inject @@ -174,6 +277,48 @@ public abstract class RSModelMixin implements RSModel return triangles; } + @Inject + @Override + public int getSceneId() + { + return rl$sceneId; + } + + @Inject + @Override + public void setSceneId(int sceneId) + { + this.rl$sceneId = sceneId; + } + + @Inject + @Override + public int getBufferOffset() + { + return rl$bufferOffset; + } + + @Inject + @Override + public void setBufferOffset(int bufferOffset) + { + rl$bufferOffset = bufferOffset; + } + + @Inject + @Override + public int getUvBufferOffset() + { + return rl$uvBufferOffset; + } + + @Inject + @Override + public void setUvBufferOffset(int bufferOffset) + { + rl$uvBufferOffset = bufferOffset; + } + @Copy("contourGround") public abstract Model rs$contourGround(int[][] tileHeights, int packedX, int height, int packedY, boolean copy, int contouredGround); @@ -201,36 +346,6 @@ public abstract class RSModelMixin implements RSModel rsModel.setFaceTextureVCoordinates(rl$faceTextureVCoordinates); } - @Inject - public void interpolateFrames(RSFrames frames, int frameId, RSFrames nextFrames, int nextFrameId, int interval, - int intervalCount) - { - if (getVertexGroups() != null) - { - if (frameId != -1) - { - RSAnimation frame = frames.getFrames()[frameId]; - RSSkeleton skin = frame.getSkin(); - RSAnimation nextFrame = null; - if (nextFrames != null) - { - nextFrame = nextFrames.getFrames()[nextFrameId]; - if (nextFrame.getSkin() != skin) - { - nextFrame = null; - } - } - - client.setAnimOffsetX(0); - client.setAnimOffsetY(0); - client.setAnimOffsetZ(0); - - interpolateFrames(skin, frame, nextFrame, interval, intervalCount); - resetBounds(); - } - } - } - @Inject public void interpolateFrames(RSSkeleton skin, RSAnimation frame, RSAnimation nextFrame, int interval, int intervalCount) { @@ -334,119 +449,4 @@ public abstract class RSModelMixin implements RSModel } } } - - @Override - @Inject - public Polygon getConvexHull(int localX, int localY, int orientation, int tileHeight) - { - List vertices = getVertices(); - - // rotate vertices - for (int i = 0; i < vertices.size(); ++i) - { - Vertex v = vertices.get(i); - vertices.set(i, v.rotate(orientation)); - } - - List points = new ArrayList(); - - for (Vertex v : vertices) - { - // Compute canvas location of vertex - Point p = Perspective.localToCanvas(client, - localX - v.getX(), - localY - v.getZ(), - tileHeight + v.getY()); - if (p != null) - { - points.add(p); - } - } - - // Run Jarvis march algorithm - points = Jarvis.convexHull(points); - if (points == null) - { - return null; - } - - // Convert to a polygon - Polygon p = new Polygon(); - for (Point point : points) - { - p.addPoint(point.getX(), point.getY()); - } - - return p; - } - - @Inject - @Override - public int getSceneId() - { - return rl$sceneId; - } - - @Inject - @Override - public void setSceneId(int sceneId) - { - this.rl$sceneId = sceneId; - } - - @Inject - @Override - public int getBufferOffset() - { - return rl$bufferOffset; - } - - @Inject - @Override - public void setBufferOffset(int bufferOffset) - { - rl$bufferOffset = bufferOffset; - } - - @Inject - @Override - public int getUvBufferOffset() - { - return rl$uvBufferOffset; - } - - @Inject - @Override - public void setUvBufferOffset(int bufferOffset) - { - rl$uvBufferOffset = bufferOffset; - } - - @Inject - @Override - public float[][] getFaceTextureUCoordinates() - { - return rl$faceTextureUCoordinates; - } - - @Inject - @Override - public void setFaceTextureUCoordinates(float[][] faceTextureUCoordinates) - { - this.rl$faceTextureUCoordinates = faceTextureUCoordinates; - } - - @Inject - @Override - public float[][] getFaceTextureVCoordinates() - { - return rl$faceTextureVCoordinates; - } - - @Inject - @Override - public void setFaceTextureVCoordinates(float[][] faceTextureVCoordinates) - { - this.rl$faceTextureVCoordinates = faceTextureVCoordinates; - } }