gradle: partially revert #1166 (#1250)

This commit is contained in:
ThatGamerBlue
2019-08-03 23:11:59 +01:00
committed by GitHub
parent b2d57b12f1
commit 5b5ee5b5a6
6 changed files with 93 additions and 9 deletions

View File

@@ -40,7 +40,7 @@ allprojects {
gitDirty = localGitDirty gitDirty = localGitDirty
rootPath = rootDir.toString().replace('\\', '/') rootPath = rootDir.toString().replace('\\', '/')
injectedClassesPath = rootPath + "/injected-client/build/libs/injected-client-" + version + ".jar" injectedClassesPath = rootPath + "/injector-plugin/out/injected-client/"
} }
} }

View File

@@ -24,8 +24,24 @@
*/ */
description = 'Injected Client' description = 'Injected Client'
task injector(){ compileJava {
// I kinda want to make the entire injector work here but seems like more work dependsOn ':injector-plugin:assemble'
dependsOn ':injector-plugin:compileJava' }
compileJava.outputs.upToDateWhen { false }
compileJava.doLast() {
copy {
File f = file("build/classes/java/main")
f.deleteDir()
f.mkdirs()
from ("${injectedClassesPath}")
into ("build/classes/java/main")
}
}
classes.doLast() {
File f = file("build/classes/java/main/Placeholder.class")
f.delete()
} }

View File

@@ -0,0 +1,34 @@
/*
* 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
{
}

View File

@@ -26,6 +26,9 @@ 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;
@@ -69,7 +72,13 @@ public class Injector
private void save(File out) throws IOException private void save(File out) throws IOException
{ {
JarUtil.saveJar(vanilla, out); 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);
}
} }

View File

@@ -48,7 +48,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')
runtimeOnly files("${injectedClassesPath}") runtime project(':injected-client')
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'
@@ -92,8 +92,6 @@ jar {
} }
shadowJar { shadowJar {
dependsOn ':injected-client:injector'
archiveClassifier.set("shaded") archiveClassifier.set("shaded")
exclude("net/runelite/injector/**") exclude("net/runelite/injector/**")

View File

@@ -26,6 +26,7 @@
*/ */
package net.runelite.client.rs; package net.runelite.client.rs;
import java.io.InputStream;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.applet.Applet; import java.applet.Applet;
import java.io.IOException; import java.io.IOException;
@@ -33,6 +34,8 @@ 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 com.google.common.io.ByteStreams;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
@@ -91,7 +94,31 @@ public class ClientLoader
private static Applet loadRLPlus(final RSConfig config) private static Applet loadRLPlus(final RSConfig config)
throws ClassNotFoundException, InstantiationException, IllegalAccessException throws ClassNotFoundException, InstantiationException, IllegalAccessException
{ {
final Class<?> clientClass = ClientLoader.class.getClassLoader().loadClass(config.getInitialClass()); ClassLoader rsClassLoader = new ClassLoader(ClientLoader.class.getClassLoader())
{
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException
{
String path = 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); return loadFromClass(config, clientClass);
} }