diff --git a/build.gradle b/build.gradle index e091d60949..745dfb755c 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,9 @@ allprojects { apply plugin: 'maven' apply plugin: 'checkstyle' + group = 'net.runelite' + version = '1.5.30-SNAPSHOT' + ext { rsversion = 181 cacheversion = 165 @@ -36,12 +39,9 @@ allprojects { gitDirty = localGitDirty rootPath = rootDir.toString().replace('\\', '/') - injectedClassesPath = rootPath + "/injector-plugin/out/injected-client/" + injectedClassesPath = rootPath + "/injected-client/build/libs/injected-client-" + version + ".jar" } - group = 'net.runelite' - version = '1.5.30-SNAPSHOT' - gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" diff --git a/injected-client/build.gradle b/injected-client/build.gradle index e73d2bd89c..a1ef30df3d 100644 --- a/injected-client/build.gradle +++ b/injected-client/build.gradle @@ -24,28 +24,8 @@ */ description = 'Injected Client' - - -def injectedClassesPath = "${rootPath}/injector-plugin/out/injected-client/" - -compileJava { - dependsOn ':injector-plugin:assemble' -} - -compileJava.outputs.upToDateWhen { false } - -compileJava.doLast() { - copy { - File f = file("build/classes/java/main/injected-client") - f.deleteDir() - f.mkdirs() - from ("${injectedClassesPath}") - into ("build/classes/java/main/injected-client") - } -} - -classes.doLast() { - File f = file("build/classes/java/main/Placeholder.class") - f.delete() +task injector(){ + // I kinda want to make the entire injector work here but seems like more work + dependsOn ':injector-plugin:compileJava' } diff --git a/injected-client/src/main/java/Placeholder.java b/injected-client/src/main/java/Placeholder.java deleted file mode 100644 index 0e04b3710c..0000000000 --- a/injected-client/src/main/java/Placeholder.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2019 ThatGamerBlue - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @author ThatGamerBlue - * - * This file exists to force gradle to execute the compileJava task - * so we can hijack it and run the injector-plugin - */ -public class Placeholder -{ -} diff --git a/injector-plugin/build.gradle b/injector-plugin/build.gradle index 745807236e..43694a4268 100644 --- a/injector-plugin/build.gradle +++ b/injector-plugin/build.gradle @@ -2,7 +2,6 @@ group = 'net.runelite.rs' description = 'Injector' def buildPath = buildDir.toString().replace('\\', '/') // this doesnt work in an ext block for some reason - def deobfuscatedJar = "${rootPath}/runescape-client/build/libs/rs-client-${project.version}.jar" def vanillaJar = "${buildPath}/vanilla-${rsversion}.jar" @@ -39,7 +38,7 @@ compileJava.doLast() { into "$buildDir" } def path = sourceSets.main.runtimeClasspath - def loader = new URLClassLoader(path.collect { f -> f.toURL() } as URL[]) + def loader = new URLClassLoader(path.collect { f -> f.toURI().toURL() } as URL[]) def inject = loader.loadClass('net.runelite.injector.Injector') String[] jarPaths = [ deobfuscatedJar.toString(), 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 4543ed5b46..9409b02075 100644 --- a/injector-plugin/src/main/java/net/runelite/injector/Injector.java +++ b/injector-plugin/src/main/java/net/runelite/injector/Injector.java @@ -26,9 +26,6 @@ package net.runelite.injector; import java.io.File; import java.io.IOException; - -import com.google.common.io.Files; -import net.runelite.asm.ClassFile; import net.runelite.asm.ClassGroup; import net.runelite.deob.util.JarUtil; @@ -72,13 +69,7 @@ public class Injector private void save(File out) throws IOException { - out.mkdirs(); - for (ClassFile cf : vanilla.getClasses()) - { - File f = new File(out, cf.getClassName() + ".class"); - byte[] data = JarUtil.writeClass(vanilla, cf); - Files.write(data, f); - } + JarUtil.saveJar(vanilla, out); } diff --git a/injector-plugin/vanilla-181.jar b/injector-plugin/vanilla-181.jar deleted file mode 100644 index 9c78f36300..0000000000 Binary files a/injector-plugin/vanilla-181.jar and /dev/null differ diff --git a/runelite-client/build.gradle b/runelite-client/build.gradle index 02fa592477..9d2d067d91 100644 --- a/runelite-client/build.gradle +++ b/runelite-client/build.gradle @@ -45,7 +45,7 @@ dependencies { runtime group: 'org.jogamp.gluegen', name: 'gluegen-rt', version: '2.3.2', classifier: 'natives-linux-amd64' runtime group: 'org.jogamp.gluegen', name: 'gluegen-rt', version: '2.3.2', classifier: 'natives-linux-i586' runtime project(':runescape-api') - runtime project(':injected-client') + runtimeOnly files("${injectedClassesPath}") testImplementation group: 'junit', name: 'junit', version: '4.12' testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26' testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1' @@ -72,6 +72,8 @@ jar { } shadowJar { + dependsOn ':injected-client:injector' + archiveClassifier.set("shaded") exclude("net/runelite/injector/**") diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 1ca25a1a4d..8e58261c97 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -58,7 +58,6 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.graphics.ModelOutlineRenderer; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.PluginManager; -import net.runelite.client.rs.ClientLoader; import net.runelite.client.rs.ClientUpdateCheckMode; import net.runelite.client.task.Scheduler; import net.runelite.client.ui.ClientUI; @@ -179,8 +178,8 @@ public class RuneLite parser.accepts("developer-mode", "Enable developer tools"); parser.accepts("debug", "Show extra debugging output"); parser.accepts("no-splash", "Do not show the splash screen"); - parser.accepts("local-injected", "Use local injected-client"); - parser.accepts("private-server", "Use a custom codebase"); + parser.accepts("local-injected", "Use local injected-client - DEPRECATED"); + parser.accepts("private-server", "Use a custom codebase - DEPRECATED: Use --rs=RSPS"); final ArgumentAcceptingOptionSpec proxyInfo = parser .accepts("proxy") @@ -261,7 +260,7 @@ public class RuneLite if (options.has("local-injected")) { - ClientLoader.useLocalInjected = true; + log.warn("--local-injected has been deprecated and may get removed soon"); } if (options.has("private-server")) diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java index 8dc0942bd4..51b3f65693 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java @@ -26,23 +26,19 @@ */ package net.runelite.client.rs; -import com.google.common.io.ByteStreams; -import lombok.extern.slf4j.Slf4j; - +import java.net.URLClassLoader; +import java.applet.Applet; +import java.io.IOException; +import java.net.URL; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; -import java.applet.Applet; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; +import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton public class ClientLoader { - public static boolean useLocalInjected = false; private final ClientConfigLoader clientConfigLoader; private final ClientUpdateCheckMode updateCheckMode; @@ -55,60 +51,6 @@ public class ClientLoader this.clientConfigLoader = clientConfigLoader; } - private static Applet loadRLPlus(final RSConfig config) - throws ClassNotFoundException, InstantiationException, IllegalAccessException - { - ClassLoader rsClassLoader = new ClassLoader(ClientLoader.class.getClassLoader()) - { - @Override - protected Class findClass(String name) throws ClassNotFoundException - { - String path = "/injected-client/".concat(name.replace('.', '/')).concat(".class"); - InputStream inputStream = ClientLoader.class.getResourceAsStream(path); - if (inputStream == null) - { - throw new ClassNotFoundException(name + " " + path); - } - byte[] data; - try - { - data = ByteStreams.toByteArray(inputStream); - } - catch (IOException e) - { - e.printStackTrace(); - throw new RuntimeException("Failed to load class: " + name + " " + path); - } - return defineClass(name, data, 0, data.length); - } - }; - Class clientClass = rsClassLoader.loadClass("client"); - return loadFromClass(config, clientClass); - } - - private static Applet loadVanilla(final RSConfig config) - throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException - { - final String codebase = config.getCodeBase(); - final String initialJar = config.getInitialJar(); - final String initialClass = config.getInitialClass(); - final URL url = new URL(codebase + initialJar); - - // Must set parent classloader to null, or it will pull from - // this class's classloader first - final URLClassLoader classloader = new URLClassLoader(new URL[]{url}, null); - final Class clientClass = classloader.loadClass(initialClass); - return loadFromClass(config, clientClass); - } - - private static Applet loadFromClass(final RSConfig config, final Class clientClass) - throws IllegalAccessException, InstantiationException - { - final Applet rs = (Applet) clientClass.newInstance(); - rs.setStub(new RSAppletStub(config)); - return rs; - } - public Applet load() { try @@ -141,4 +83,34 @@ public class ClientLoader return null; } } + + private static Applet loadRLPlus(final RSConfig config) + throws ClassNotFoundException, InstantiationException, IllegalAccessException + { + final Class clientClass = ClientLoader.class.getClassLoader().loadClass(config.getInitialClass()); + return loadFromClass(config, clientClass); + } + + private static Applet loadVanilla(final RSConfig config) + throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException + { + final String codebase = config.getCodeBase(); + final String initialJar = config.getInitialJar(); + final String initialClass = config.getInitialClass(); + final URL url = new URL(codebase + initialJar); + + // Must set parent classloader to null, or it will pull from + // this class's classloader first + final URLClassLoader classloader = new URLClassLoader(new URL[]{url}, null); + final Class clientClass = classloader.loadClass(initialClass); + return loadFromClass(config, clientClass); + } + + private static Applet loadFromClass(final RSConfig config, final Class clientClass) + throws IllegalAccessException, InstantiationException + { + final Applet rs = (Applet) clientClass.newInstance(); + rs.setStub(new RSAppletStub(config)); + return rs; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientUpdateCheckMode.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientUpdateCheckMode.java index 4d1dd55796..bec27bb7c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientUpdateCheckMode.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientUpdateCheckMode.java @@ -29,6 +29,5 @@ public enum ClientUpdateCheckMode AUTO, NONE, VANILLA, - CUSTOM, - PATCH + RSPS } diff --git a/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java b/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java index 8d5944cdf0..516c7e58a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/RSAppletStub.java @@ -56,7 +56,9 @@ class RSAppletStub implements AppletStub try { if (RuneLite.allowPrivateServer) - return new URL(StringFileUtils.readStringFromFile("./codebase")); + { + return new URL(StringFileUtils.readStringFromFile("./codebase")); + } return new URL(config.getCodeBase()); }