diff --git a/build.gradle.kts b/build.gradle.kts index 1794cc9958..609ae7c4c8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,6 +33,7 @@ buildscript { } dependencies { classpath("org.ajoberstar.grgit:grgit-core:4.1.0") + classpath("com.openosrs:script-assembler-plugin:1.0.0") classpath("com.openosrs:injector-plugin:2.0.0") } } diff --git a/runelite-client/runelite-client.gradle.kts b/runelite-client/runelite-client.gradle.kts index 0b54772ec8..722a0d09b2 100644 --- a/runelite-client/runelite-client.gradle.kts +++ b/runelite-client/runelite-client.gradle.kts @@ -29,6 +29,7 @@ import java.util.Date plugins { id("com.github.johnrengelman.shadow") version "7.1.2" + id("com.openosrs.scriptassembler") java } @@ -161,13 +162,23 @@ tasks { archiveClassifier.set("shaded") } + assembleScripts { + val inp = "${projectDir}/src/main/scripts" + val out = "${buildDir}/scripts/runelite" + + inputs.dir(inp) + outputs.dir(out) + + input.set(file(inp)) + output.set(file(out)) + } + processResources { - dependsOn(":runelite-script-assembler-plugin:assembleMojo") + dependsOn("assembleScripts") + dependsOn(":injected-client:inject") from("${buildDir}/scripts") - dependsOn(":injected-client:inject") - from("${project(":injected-client").buildDir}/libs") from("${project(":injected-client").buildDir}/resources/main") } diff --git a/runelite-script-assembler-plugin/runelite-script-assembler-plugin.gradle.kts b/runelite-script-assembler-plugin/runelite-script-assembler-plugin.gradle.kts deleted file mode 100644 index 25766d7e9e..0000000000 --- a/runelite-script-assembler-plugin/runelite-script-assembler-plugin.gradle.kts +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2019 Owain van Brakel - * Copyright (c) 2020 Lucas - * 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. - */ -import java.io.DataOutputStream as DOS - -description = "Script Assembler Plugin" - -dependencies { - annotationProcessor(group = "org.eclipse.sisu", name = "org.eclipse.sisu.inject", version = "0.3.4") - - compileOnly(group = "org.apache.maven.plugin-tools", name = "maven-plugin-annotations", version = "3.6.0") - - implementation(project(":cache")) - implementation(project(":runelite-api")) - implementation(group = "com.google.guava", name = "guava", version = "30.1.1-jre") - implementation(group = "org.apache.maven", name = "maven-plugin-api", version = "3.6.3") - implementation(group = "org.slf4j", name = "slf4j-nop", version = "1.7.32") -} - -tasks { - register("assembleMojo") { - outputs.cacheIf { true } - val inp = "${project.extra["rootPath"]}/runelite-client/src/main/scripts" - val out = "${project.extra["rootPath"]}/runelite-client/build/scripts/runelite" - inputs.dir(inp) - outputs.dir(out) - - classpath = project.sourceSets.main.get().runtimeClasspath - mainClass.set("net.runelite.script.AssembleMojo") - args(listOf(inp, out)) - - doLast { - DOS(project.file("$out/index").outputStream().buffered(256)).use { - project.fileTree(out) { - exclude { it.path.endsWith(".hash") || it.name.equals("index") } - var lastDir = Int.MAX_VALUE - visit { - if (this.isDirectory) lastDir = this.name.toInt().shl(16) - else it.writeInt(lastDir.or(this.name.toInt())) - } - } - it.writeInt(-1) - } - } - } -} \ No newline at end of file diff --git a/runelite-script-assembler-plugin/src/main/java/net/runelite/script/AssembleMojo.java b/runelite-script-assembler-plugin/src/main/java/net/runelite/script/AssembleMojo.java deleted file mode 100644 index 3a05d7e3d9..0000000000 --- a/runelite-script-assembler-plugin/src/main/java/net/runelite/script/AssembleMojo.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2018, Adam - * 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. - */ -package net.runelite.script; - -import com.google.common.io.Files; -import com.google.common.io.MoreFiles; -import com.google.common.io.RecursiveDeleteOption; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import net.runelite.cache.IndexType; -import net.runelite.cache.definitions.ScriptDefinition; -import net.runelite.cache.definitions.savers.ScriptSaver; -import net.runelite.cache.script.RuneLiteInstructions; -import net.runelite.cache.script.assembler.Assembler; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.logging.Log; -import org.apache.maven.plugins.annotations.LifecyclePhase; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; - -@Mojo( - name = "assemble", - defaultPhase = LifecyclePhase.GENERATE_RESOURCES -) -public class AssembleMojo extends AbstractMojo -{ - @Parameter(required = true) - private File scriptDirectory; - - @Parameter(required = true) - private File outputDirectory; - - private AssembleMojo(File scriptDirectory, File outputDirectory) - { - this.scriptDirectory = scriptDirectory; - this.outputDirectory = outputDirectory; - } - - private final Log log = getLog(); - - public static void main(String[] args) throws Exception - { - if (args.length < 2) - { - throw new IllegalArgumentException("Usage: inputfile outputfile"); - } - - File scriptDirectory = new File(args[0]); - File outputDirectory = new File(args[1]); - - new AssembleMojo(scriptDirectory, outputDirectory).execute(); - } - - @Override - public void execute() throws MojoExecutionException, MojoFailureException - { - RuneLiteInstructions instructions = new RuneLiteInstructions(); - instructions.init(); - - Assembler assembler = new Assembler(instructions); - ScriptSaver saver = new ScriptSaver(); - - int count = 0; - File scriptOut = new File(outputDirectory, Integer.toString(IndexType.CLIENTSCRIPT.getNumber())); - scriptOut.mkdirs(); - - // Clear the target directory to remove stale entries - try - { - MoreFiles.deleteDirectoryContents(scriptOut.toPath(), RecursiveDeleteOption.ALLOW_INSECURE); - } - catch (IOException e) - { - throw new MojoExecutionException("Could not clear scriptOut: " + scriptOut, e); - } - - for (File scriptFile : scriptDirectory.listFiles((dir, name) -> name.endsWith(".rs2asm"))) - { - log.debug("Assembling " + scriptFile); - - try (FileInputStream fin = new FileInputStream(scriptFile)) - { - ScriptDefinition script = assembler.assemble(fin); - byte[] packedScript = saver.save(script); - - File targetFile = new File(scriptOut, Integer.toString(script.getId())); - Files.write(packedScript, targetFile); - - // Copy hash file - - File hashFile = new File(scriptDirectory, Files.getNameWithoutExtension(scriptFile.getName()) + ".hash"); - if (hashFile.exists()) - { - Files.copy(hashFile, new File(scriptOut, Integer.toString(script.getId()) + ".hash")); - } - else if (script.getId() < 10000) // Scripts >=10000 are RuneLite scripts, so they shouldn't have a .hash - { - throw new MojoExecutionException("Unable to find hash file for " + scriptFile); - } - - ++count; - } - catch (IOException ex) - { - throw new MojoFailureException("unable to open file", ex); - } - } - - log.info("Assembled " + count + " scripts"); - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 3bd52905f0..b94065d619 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -44,7 +44,6 @@ include(":runelite-api") include(":runelite-client") include(":runelite-jshell") include(":runelite-mixins") -include(":runelite-script-assembler-plugin") include(":runescape-api") include(":runescape-client") include(":wiki-scraper")