gradle: injected-client things
Move injector goal to injected-client(ish) Keep injected-client classes in the correct package Remove placeholder class/duplicate vanilla jar
This commit is contained in:
@@ -27,6 +27,9 @@ allprojects {
|
|||||||
apply plugin: 'maven'
|
apply plugin: 'maven'
|
||||||
apply plugin: 'checkstyle'
|
apply plugin: 'checkstyle'
|
||||||
|
|
||||||
|
group = 'net.runelite'
|
||||||
|
version = '1.5.30-SNAPSHOT'
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
rsversion = 181
|
rsversion = 181
|
||||||
cacheversion = 165
|
cacheversion = 165
|
||||||
@@ -36,12 +39,9 @@ allprojects {
|
|||||||
gitDirty = localGitDirty
|
gitDirty = localGitDirty
|
||||||
|
|
||||||
rootPath = rootDir.toString().replace('\\', '/')
|
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 {
|
gradle.projectsEvaluated {
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
|
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
|
||||||
|
|||||||
@@ -24,28 +24,8 @@
|
|||||||
*/
|
*/
|
||||||
description = 'Injected Client'
|
description = 'Injected Client'
|
||||||
|
|
||||||
|
task injector(){
|
||||||
|
// I kinda want to make the entire injector work here but seems like more work
|
||||||
def injectedClassesPath = "${rootPath}/injector-plugin/out/injected-client/"
|
dependsOn ':injector-plugin:compileJava'
|
||||||
|
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@ group = 'net.runelite.rs'
|
|||||||
description = 'Injector'
|
description = 'Injector'
|
||||||
|
|
||||||
def buildPath = buildDir.toString().replace('\\', '/') // this doesnt work in an ext block for some reason
|
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 deobfuscatedJar = "${rootPath}/runescape-client/build/libs/rs-client-${project.version}.jar"
|
||||||
def vanillaJar = "${buildPath}/vanilla-${rsversion}.jar"
|
def vanillaJar = "${buildPath}/vanilla-${rsversion}.jar"
|
||||||
|
|
||||||
@@ -39,7 +38,7 @@ compileJava.doLast() {
|
|||||||
into "$buildDir"
|
into "$buildDir"
|
||||||
}
|
}
|
||||||
def path = sourceSets.main.runtimeClasspath
|
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')
|
def inject = loader.loadClass('net.runelite.injector.Injector')
|
||||||
String[] jarPaths = [
|
String[] jarPaths = [
|
||||||
deobfuscatedJar.toString(),
|
deobfuscatedJar.toString(),
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ package net.runelite.injector;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import com.google.common.io.Files;
|
|
||||||
import net.runelite.asm.ClassFile;
|
|
||||||
import net.runelite.asm.ClassGroup;
|
import net.runelite.asm.ClassGroup;
|
||||||
import net.runelite.deob.util.JarUtil;
|
import net.runelite.deob.util.JarUtil;
|
||||||
|
|
||||||
@@ -72,13 +69,7 @@ public class Injector
|
|||||||
|
|
||||||
private void save(File out) throws IOException
|
private void save(File out) throws IOException
|
||||||
{
|
{
|
||||||
out.mkdirs();
|
JarUtil.saveJar(vanilla, out);
|
||||||
for (ClassFile cf : vanilla.getClasses())
|
|
||||||
{
|
|
||||||
File f = new File(out, cf.getClassName() + ".class");
|
|
||||||
byte[] data = JarUtil.writeClass(vanilla, cf);
|
|
||||||
Files.write(data, f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -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-amd64'
|
||||||
runtime group: 'org.jogamp.gluegen', name: 'gluegen-rt', version: '2.3.2', classifier: 'natives-linux-i586'
|
runtime group: 'org.jogamp.gluegen', name: 'gluegen-rt', version: '2.3.2', classifier: 'natives-linux-i586'
|
||||||
runtime project(':runescape-api')
|
runtime project(':runescape-api')
|
||||||
runtime project(':injected-client')
|
runtimeOnly files("${injectedClassesPath}")
|
||||||
testImplementation group: 'junit', name: 'junit', version: '4.12'
|
testImplementation group: 'junit', name: 'junit', version: '4.12'
|
||||||
testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
|
testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
|
||||||
testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1'
|
testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1'
|
||||||
@@ -72,6 +72,8 @@ jar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
dependsOn ':injected-client:injector'
|
||||||
|
|
||||||
archiveClassifier.set("shaded")
|
archiveClassifier.set("shaded")
|
||||||
|
|
||||||
exclude("net/runelite/injector/**")
|
exclude("net/runelite/injector/**")
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager;
|
|||||||
import net.runelite.client.graphics.ModelOutlineRenderer;
|
import net.runelite.client.graphics.ModelOutlineRenderer;
|
||||||
import net.runelite.client.menus.MenuManager;
|
import net.runelite.client.menus.MenuManager;
|
||||||
import net.runelite.client.plugins.PluginManager;
|
import net.runelite.client.plugins.PluginManager;
|
||||||
import net.runelite.client.rs.ClientLoader;
|
|
||||||
import net.runelite.client.rs.ClientUpdateCheckMode;
|
import net.runelite.client.rs.ClientUpdateCheckMode;
|
||||||
import net.runelite.client.task.Scheduler;
|
import net.runelite.client.task.Scheduler;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
@@ -179,8 +178,8 @@ public class RuneLite
|
|||||||
parser.accepts("developer-mode", "Enable developer tools");
|
parser.accepts("developer-mode", "Enable developer tools");
|
||||||
parser.accepts("debug", "Show extra debugging output");
|
parser.accepts("debug", "Show extra debugging output");
|
||||||
parser.accepts("no-splash", "Do not show the splash screen");
|
parser.accepts("no-splash", "Do not show the splash screen");
|
||||||
parser.accepts("local-injected", "Use local injected-client");
|
parser.accepts("local-injected", "Use local injected-client - DEPRECATED");
|
||||||
parser.accepts("private-server", "Use a custom codebase");
|
parser.accepts("private-server", "Use a custom codebase - DEPRECATED: Use --rs=RSPS");
|
||||||
|
|
||||||
final ArgumentAcceptingOptionSpec<String> proxyInfo = parser
|
final ArgumentAcceptingOptionSpec<String> proxyInfo = parser
|
||||||
.accepts("proxy")
|
.accepts("proxy")
|
||||||
@@ -261,7 +260,7 @@ public class RuneLite
|
|||||||
|
|
||||||
if (options.has("local-injected"))
|
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"))
|
if (options.has("private-server"))
|
||||||
|
|||||||
@@ -26,23 +26,19 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.rs;
|
package net.runelite.client.rs;
|
||||||
|
|
||||||
import com.google.common.io.ByteStreams;
|
import java.net.URLClassLoader;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import java.applet.Applet;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import java.applet.Applet;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Singleton
|
@Singleton
|
||||||
public class ClientLoader
|
public class ClientLoader
|
||||||
{
|
{
|
||||||
public static boolean useLocalInjected = false;
|
|
||||||
private final ClientConfigLoader clientConfigLoader;
|
private final ClientConfigLoader clientConfigLoader;
|
||||||
private final ClientUpdateCheckMode updateCheckMode;
|
private final ClientUpdateCheckMode updateCheckMode;
|
||||||
|
|
||||||
@@ -55,60 +51,6 @@ public class ClientLoader
|
|||||||
this.clientConfigLoader = clientConfigLoader;
|
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()
|
public Applet load()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -141,4 +83,34 @@ public class ClientLoader
|
|||||||
return null;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,5 @@ public enum ClientUpdateCheckMode
|
|||||||
AUTO,
|
AUTO,
|
||||||
NONE,
|
NONE,
|
||||||
VANILLA,
|
VANILLA,
|
||||||
CUSTOM,
|
RSPS
|
||||||
PATCH
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,9 @@ class RSAppletStub implements AppletStub
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (RuneLite.allowPrivateServer)
|
if (RuneLite.allowPrivateServer)
|
||||||
|
{
|
||||||
return new URL(StringFileUtils.readStringFromFile("./codebase"));
|
return new URL(StringFileUtils.readStringFromFile("./codebase"));
|
||||||
|
}
|
||||||
|
|
||||||
return new URL(config.getCodeBase());
|
return new URL(config.getCodeBase());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user