120 lines
3.1 KiB
Java
120 lines
3.1 KiB
Java
/*
|
|
* Copyright (c) 2019, Lucas <https://github.com/Lucwousin>
|
|
* All rights reserved.
|
|
*
|
|
* This code is licensed under GPL3, see the complete license in
|
|
* the LICENSE file in the root directory of this source tree.
|
|
*/
|
|
package com.openosrs.injector;
|
|
|
|
import com.openosrs.injector.injection.InjectData;
|
|
import com.openosrs.injector.injection.InjectTaskHandler;
|
|
import com.openosrs.injector.injectors.InjectConstruct;
|
|
import com.openosrs.injector.injectors.Injector;
|
|
import com.openosrs.injector.injectors.InterfaceInjector;
|
|
import com.openosrs.injector.injectors.MixinInjector;
|
|
import com.openosrs.injector.injectors.RSApiInjector;
|
|
import com.openosrs.injector.injectors.raw.ClearColorBuffer;
|
|
import com.openosrs.injector.injectors.raw.DrawAfterWidgets;
|
|
import com.openosrs.injector.injectors.raw.HidePlayerAttacks;
|
|
import com.openosrs.injector.injectors.raw.Occluder;
|
|
import com.openosrs.injector.injectors.raw.RasterizerAlpha;
|
|
import com.openosrs.injector.injectors.raw.RenderDraw;
|
|
import com.openosrs.injector.injectors.raw.ScriptVM;
|
|
import com.openosrs.injector.rsapi.RSApi;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import net.runelite.deob.util.JarUtil;
|
|
import org.gradle.api.file.FileTree;
|
|
import org.gradle.api.logging.Logger;
|
|
import org.gradle.api.logging.Logging;
|
|
|
|
public class Injection extends InjectData implements InjectTaskHandler
|
|
{
|
|
private static final Logger log = Logging.getLogger(Injection.class);
|
|
|
|
public Injection(File vanilla, File rsclient, File mixins, FileTree rsapi) throws Injexception, IOException
|
|
{
|
|
super(
|
|
JarUtil.loadJar(vanilla),
|
|
JarUtil.loadJar(rsclient),
|
|
JarUtil.loadJar(mixins),
|
|
new RSApi(rsapi)
|
|
);
|
|
}
|
|
|
|
public void inject() throws Injexception
|
|
{
|
|
log.debug("Starting injection");
|
|
|
|
inject(new InterfaceInjector(this));
|
|
|
|
inject(new RasterizerAlpha(this));
|
|
|
|
inject(new MixinInjector(this));
|
|
|
|
// This is where field hooks runs
|
|
|
|
// This is where method hooks runs
|
|
|
|
inject(new InjectConstruct(this));
|
|
|
|
inject(new RSApiInjector(this));
|
|
|
|
inject(new DrawAfterWidgets(this));
|
|
|
|
inject(new ScriptVM(this));
|
|
|
|
// All GPU raw injectors should probably be combined, especially RenderDraw and Occluder
|
|
inject(new ClearColorBuffer(this));
|
|
|
|
inject(new RenderDraw(this));
|
|
|
|
inject(new Occluder(this));
|
|
|
|
// inject(new DrawMenu(this));
|
|
|
|
inject(new HidePlayerAttacks(this));
|
|
|
|
validate(new InjectorValidator(this));
|
|
}
|
|
|
|
public void save(File outputJar) throws IOException
|
|
{
|
|
log.info("Saving jar to {}", outputJar.toString());
|
|
|
|
JarUtil.saveJar(this.getVanilla(), outputJar);
|
|
}
|
|
|
|
private void inject(Injector injector) throws Injexception
|
|
{
|
|
final String name = injector.getName();
|
|
|
|
log.info("Starting {}", name);
|
|
|
|
injector.start();
|
|
|
|
injector.inject();
|
|
|
|
log.lifecycle("{} {}", name, injector.getCompletionMsg());
|
|
|
|
if (injector instanceof Validator)
|
|
validate((Validator) injector);
|
|
}
|
|
|
|
private void validate(Validator validator) throws Injexception
|
|
{
|
|
final String name = validator.getName();
|
|
|
|
if (!validator.validate())
|
|
{
|
|
throw new Injexception(name + " failed validation");
|
|
}
|
|
}
|
|
|
|
public void runChildInjector(Injector injector) throws Injexception
|
|
{
|
|
inject(injector);
|
|
}
|
|
}
|