diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 50ec0d67061..0f841e208b7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,134 +1,3 @@ # Contributing to RuneLite -We'd love for you to contribute to our source code and to make RuneLite even better than it is -today! - -Check out the [Developer Guide](https://github.com/runelite/runelite/wiki/Developer-Guide) for setup instructions, and general tips and tricks. - -If you want to make or contribute to a plugin hub plugin, this is *not* the correct guide; instead read the plugin hub development guide, which is linked from the developer guide. - -Here are the guidelines we'd like you to follow: - - - [Question or Problem?](#question) - - [Issues and Bugs](#issue) - - [Submission Guidelines](#submit) - - [Coding Format](#format) - -## Got a Question or Problem? - -If you have questions about how to contribute to RuneLite, please join our [Discord](https://runelite.net/discord) server. - -## Found an Issue? - -If you find a bug in the source code or a mistake in the documentation, you can help us by -submitting an issue to our [GitHub Repository](https://github.com/runelite/runelite). Even better you can submit a Pull Request -with a fix. - -**Please see the [Submission Guidelines](#submit) below.** - -## Submission Guidelines - -### Submitting an Issue -Before you submit your issue search the archive, maybe your question was already answered. - -If your issue appears to be a bug and hasn't been reported, open a new issue. Help us to maximize -the effort we can spend fixing issues and adding new features, by not reporting duplicate issues. -Providing the following information will increase the chances of your issue being dealt with -quickly: - -* **Overview of the Issue** - if an error is being thrown a non-minified stack trace helps -* **Java Version and Operating System** - is this a problem with a specific setup? -* **Reproduce the Error** - provide details, if possible, on how to reproduce the error -* **Related Issues** - has a similar issue been reported before? -* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be causing the problem (line of code or commit) - -### Submitting a Pull Request -Before you submit your pull request consider the following guidelines: - -* Search [GitHub](https://github.com/runelite/runelite/pulls) for an open or closed Pull Request - that relates to your submission. You don't want to duplicate effort. -* If adding a feature or enhancement, we recommend you first [start a discussion for - it](https://github.com/runelite/runelite/discussions) before submitting a Pull Request. -* [Fork](https://help.github.com/articles/fork-a-repo/) this repo. -* [Clone](https://help.github.com/articles/cloning-a-repository/) your copy. - ```shell - git clone https://github.com/YOUR_USERNAME/runelite.git - cd runelite/ - ``` -* After cloning, set a new remote [upstream](https://help.github.com/articles/configuring-a-remote-for-a-fork/) (this helps to keep your fork up to date) - - ```shell - git remote add upstream https://github.com/runelite/runelite.git - ``` - -* Make your changes in a new git branch: - - ```shell - git checkout -b my-fix-branch master - ``` - -* Create your patch and run appropriate tests. -* Follow our [Coding Format](#format). -* Commit your changes using a descriptive commit message that uses the imperative, present tense: "change" not "changed" nor "changes". - - ```shell - git commit -a - ``` - Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files. - -* Push your branch to GitHub: - - ```shell - git push origin my-fix-branch - ``` - -In GitHub, send a pull request to `runelite:master`. -If we suggest changes, then: - -* Make the required updates. -* Re-run RuneLite and make sure any and all tests are still passing. -* Commit your changes to your branch (e.g. `my-fix-branch`). -* Push the changes to your GitHub repository (this will update your Pull Request). - -If the PR gets too outdated we may ask you to rebase and force push to update the PR: - -```shell -git fetch upstream -git rebase upstream/master -git push origin my-fix-branch -f -``` - -That's it! Thank you for your contribution! - -#### After your pull request is merged - -After your pull request is merged, you can safely delete your branch and pull the changes -from the main (upstream) repository: - -* Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows: - - ```shell - git push origin --delete my-fix-branch - ``` - -* Check out the master branch: - - ```shell - git checkout master -f - ``` - -* Delete the local branch: - - ```shell - git branch -D my-fix-branch - ``` - -* Update your master with the latest upstream version: - - ```shell - git pull --ff upstream master - ``` - -## Coding Format - -To ensure consistency throughout the source code, review our [code conventions](https://github.com/runelite/runelite/wiki/Code-Conventions). +Please view our [Developer Guide](https://github.com/runelite/runelite/wiki/Developer-Guide) on the RuneLite Wiki. diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index ebf2f182577..b338871fc6c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -9,27 +9,32 @@ jobs: permissions: contents: read - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - persist-credentials: false + env: + GRADLE_OPTS: "-Dfile:encoding=UTF-8" - - name: Cache - uses: actions/cache@v4 + steps: + - name: Cache glslang + uses: actions/cache@v5 with: path: | - ~/.m2/repository ~/.cache/runelite - key: ${{ runner.os }}-cache-${{ hashFiles('**/pom.xml', '**/build.sh', '**/pmd-ruleset.xml') }} + key: ${{ runner.os }}-cache-${{ hashFiles('ci/build.sh') }} restore-keys: | ${{ runner.os }}-cache- + - name: Checkout + uses: actions/checkout@v4 + - name: Set up JDK 11 uses: actions/setup-java@v4 with: distribution: temurin java-version: 11 - - name: Build + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + gradle-version: wrapper + + - name: Build and Test run: ./ci/build.sh diff --git a/.gitignore b/.gitignore index ff14386ce44..f35ca9ebe00 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,39 @@ -target -nbactions.xml -nb-configuration.xml -/nbproject/ -project.properties -*.iml +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### .idea/ -.project -.settings/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated .classpath -.vscode .factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### .DS_Store \ No newline at end of file diff --git a/.mvn/jvm.config b/.mvn/jvm.config deleted file mode 100644 index 67bd169f319..00000000000 --- a/.mvn/jvm.config +++ /dev/null @@ -1 +0,0 @@ --Xmx512m diff --git a/README.md b/README.md index 4b7d5b27451..2a0827e72de 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ If you have any questions, please join our IRC channel on [irc.rizon.net #runeli ## Usage -Open the project in your IDE as a Maven project, build the root module and then run the RuneLite class in runelite-client. +Open the project in your IDE as a Gradle project, and then run the RuneLite class in runelite-client. For more information visit the [RuneLite Wiki](https://github.com/runelite/runelite/wiki). ### License @@ -22,4 +22,4 @@ RuneLite is licensed under the BSD 2-clause license. See the license header in t ## Contribute and Develop -We've set up a separate document for our [contribution guidelines](https://github.com/runelite/runelite/blob/master/.github/CONTRIBUTING.md). +Please view our [Developer Guide](https://github.com/runelite/runelite/wiki/Developer-Guide) on the RuneLite Wiki. diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000000..32c11350bc6 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +tasks.register("cleanAll") { + gradle.includedBuilds.forEach { build -> this@register.dependsOn(build.task(":clean")) } + subprojects.forEach { proj -> this@register.dependsOn(proj.tasks["clean"]) } +} + +tasks.register("buildAll") { + gradle.includedBuilds.forEach { build -> this@register.dependsOn(build.task(":build")) } + subprojects.forEach { proj -> this@register.dependsOn(proj.tasks["build"]) } +} + +tasks.register("assembleAll") { + gradle.includedBuilds.forEach { build -> this@register.dependsOn(build.task(":assemble")) } + subprojects.forEach { proj -> this@register.dependsOn(proj.tasks["assemble"]) } +} + +tasks.register("testAll") { + gradle.includedBuilds.forEach { build -> this@register.dependsOn(build.task(":test")) } + subprojects.forEach { proj -> this@register.dependsOn(proj.tasks["test"]) } +} + +tasks.register("publishAll") { + this@register.dependsOn(project(":client").tasks["publish"]) + this@register.dependsOn(project(":jshell").tasks["publish"]) + + this@register.dependsOn(gradle.includedBuild("cache").task(":publish")) + this@register.dependsOn(gradle.includedBuild("runelite-api").task(":publish")) +} + +tasks.register("publishAllToMavenLocal") { + this@register.dependsOn(project(":client").tasks["publishToMavenLocal"]) + this@register.dependsOn(project(":jshell").tasks["publishToMavenLocal"]) + + this@register.dependsOn(gradle.includedBuild("cache").task(":publishToMavenLocal")) + this@register.dependsOn(gradle.includedBuild("runelite-api").task(":publishToMavenLocal")) +} diff --git a/cache/build.gradle.kts b/cache/build.gradle.kts new file mode 100644 index 00000000000..d9a04312a88 --- /dev/null +++ b/cache/build.gradle.kts @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +plugins { + java + `maven-publish` + antlr + alias(libs.plugins.lombok) +} + +lombok.version = libs.versions.lombok.get() + +java { + withJavadocJar() + withSourcesJar() +} + +dependencies { + antlr(libs.antlr.core) + implementation(libs.antlr.runtime) + + implementation(libs.guava) + implementation(libs.slf4j.api) + runtimeOnly(libs.slf4j.simple) + implementation(libs.commons.compress) + implementation(libs.gson) + implementation(libs.commons.cli) + implementation(libs.jna.core) + + testImplementation(libs.junit) + testImplementation(libs.rs.cache) +} + +// the gradle antlr plugin adds all of antlr to runtimeClasspath, +// workaround that https://github.com/gradle/gradle/issues/820 +configurations { + api { + setExtendsFrom(extendsFrom.filterNot { it == antlr.get() }) + } +} + +sourceSets { + main { + antlr { setSrcDirs(listOf("src/main/antlr4")) } + } +} + +publishing { + publications { + create("cache") { + from(components["java"]) + } + } +} + +tasks.processTestResources { + filesMatching("cache.properties") { + filter { it.replace("\${rs.version}", libs.versions.rs.get()) } + filter { it.replace("\${cache.version}", libs.versions.cache.get()) } + } +} + +tasks.test { + enabled = false + jvmArgs("-Xmx2048m") +} + +// everything from here down is accounting for antlr sources in varying ways +tasks.named("sourcesJar", Jar::class) { + dependsOn(tasks.generateGrammarSource) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + exclude("net/runelite/cache/script/assembler/*.interp") + exclude("net/runelite/cache/script/assembler/*.tokens") +} + +tasks.javadoc { + exclude("net/runelite/cache/script/assembler/*.interp") + exclude("net/runelite/cache/script/assembler/*.tokens") +} + +tasks.checkstyleMain { + exclude("net/runelite/cache/script/assembler/*.java") +} + +tasks.generateGrammarSource { + arguments.addAll(listOf("-package", "net.runelite.cache.script.assembler")) +} + +afterEvaluate { + tasks.named("generateEffectiveLombokConfig") { + // lombok won't find anything in the antlr generated sources, but it looks in there regardless + // and gradle complains if you don't provide an explicit task dependency between the two + dependsOn(tasks.generateGrammarSource) + } +} diff --git a/cache/pom.xml b/cache/pom.xml deleted file mode 100644 index 499028ab2cc..00000000000 --- a/cache/pom.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - 4.0.0 - - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - - - cache - Cache - - - 165 - - 4.13.1 - - - - - com.google.guava - guava - - - org.slf4j - slf4j-api - - - org.slf4j - slf4j-simple - true - - - org.apache.commons - commons-compress - 1.10 - - - com.google.code.gson - gson - - - org.antlr - antlr4-runtime - ${antlr4.version} - - - commons-cli - commons-cli - 1.3.1 - - - org.projectlombok - lombok - provided - - - net.java.dev.jna - jna - 5.9.0 - - - - junit - junit - 4.12 - test - - - net.runelite.rs - cache - ${cache.version} - test - - - - - - - src/test/resources - true - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - -Xmx2048m - - ${cache.tmpdir} - - - - - maven-assembly-plugin - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - org.antlr - antlr4-maven-plugin - ${antlr4.version} - - - process-resources - - antlr4 - - - - - - - org.projectlombok - lombok-maven-plugin - - - org.apache.maven.plugins - maven-javadoc-plugin - - - ${project.build.directory}/delombok;${project.build.directory}/generated-sources/antlr4 - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - diff --git a/cache/settings.gradle.kts b/cache/settings.gradle.kts new file mode 100644 index 00000000000..ccc997b18fe --- /dev/null +++ b/cache/settings.gradle.kts @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +rootProject.name = "cache" +apply(from = "../common.settings.gradle.kts") diff --git a/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java index 69db696418d..94436f9823c 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/NpcDefinition.java @@ -51,6 +51,7 @@ public class NpcDefinition public int crawlRotate180Animation = -1; public int crawlRotateLeftAnimation = -1; public int crawlRotateRightAnimation = -1; + public boolean idleAnimRestart; public short[] recolorToFind; public short[] recolorToReplace; public short[] retextureToFind; @@ -81,4 +82,5 @@ public class NpcDefinition public boolean canHideForOverlap; public int overlapTintHSL = 39188; public boolean unknown1 = false; + public boolean zbuf = true; } diff --git a/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java index 3a93d10baee..d229f09316c 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/ObjectDefinition.java @@ -68,6 +68,7 @@ public class ObjectDefinition private boolean obstructsGround = false; private int contouredGround = -1; private int supportsItems = -1; + private int raise; private int[] configChangeDest; private int category; private boolean isRotated = false; diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java index 726148d1385..0c0aa1ed5fc 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/NpcLoader.java @@ -383,6 +383,10 @@ else if (opcode == 129) { def.unknown1 = true; } + else if (opcode == 130) + { + def.idleAnimRestart = true; + } else if (opcode == 145) { def.canHideForOverlap = true; @@ -391,6 +395,10 @@ else if (opcode == 146) { def.overlapTintHSL = stream.readUnsignedShort(); } + else if (opcode == 147) + { + def.zbuf = false; + } else if (opcode == 249) { length = stream.readUnsignedByte(); diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java index f11aab4ac8b..d2abc4b3f41 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/ObjectLoader.java @@ -396,6 +396,10 @@ else if (opcode == 95) { def.setSoundVisibility(is.readUnsignedByte()); } + else if (opcode == 96) + { + def.setRaise(is.readUnsignedByte()); + } else if (opcode == 249) { int length = is.readUnsignedByte(); diff --git a/ci/build.sh b/ci/build.sh index a8092698243..7ebd1a095a3 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -15,4 +15,5 @@ if [ ! -f "${GLSLANG_ARCHIVE}" ] || [ ! -d "${GLSLANG_DIR}" ] || ! echo "${GLSLA unzip -o -q "${GLSLANG_ARCHIVE}" -d "${GLSLANG_DIR}" fi -mvn verify --settings ci/settings.xml -Dglslang.path="${GLSLANG_DIR}/bin/glslangValidator" +export ORG_GRADLE_PROJECT_glslangPath="$GLSLANG_DIR/bin/glslangValidator" +./gradlew --build-cache ':buildAll' diff --git a/ci/settings.xml b/ci/settings.xml deleted file mode 100644 index 44c93408311..00000000000 --- a/ci/settings.xml +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - runelite - repo - ${env.REPO_PASSWORD} - - - - - - - - - - - - - - - - - runelite - - - false - false - false - ${user.home}/.cache/runelite/pmd.cache - true - - - - - - - runelite - - diff --git a/common.settings.gradle.kts b/common.settings.gradle.kts new file mode 100644 index 00000000000..c19ee3957c6 --- /dev/null +++ b/common.settings.gradle.kts @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +dependencyResolutionManagement { + repositories { + maven(uri("https://repo.runelite.net")) { + name = "rrn" + + content { + includeGroupAndSubgroups("net.runelite") + } + } + mavenCentral { + content { excludeGroupAndSubgroups("net.runelite") } + } + } + + versionCatalogs { + create("libs") { + from(files("./libs.versions.toml")) + } + } +} + +// set up some defaults +val rootProps = file("./gradle.properties").inputStream().use { stream -> + java.util.Properties().apply { load(stream) } +} +val checkstyleDir = file("./config/checkstyle/") +gradle.beforeProject { + apply(plugin = "idea") + apply(plugin = "checkstyle") + group = rootProps["project.build.group"] as String + version = rootProps["project.build.version"] as String + + tasks.withType { + options.encoding = "UTF-8" + options.release = 11 + } +} + +gradle.afterProject { + tasks.withType { + (this.options as StandardJavadocDocletOptions).apply { + quiet() + encoding("UTF-8") + use(true) + bottom("Copyright © 2014") + links( + "https://docs.oracle.com/en/java/javase/11/docs/api/" + ) + } + } + + // shared checkstyle config + extensions.findByType()?.run { + toolVersion = "8.3" + configDirectory = file("../config/checkstyle") + } + + // shared publishing config + tasks.withType { enabled = false } + extensions.findByType()?.run { + repositories { + maven(uri(providers.gradleProperty("rrnUrl").getOrElse("https://repo.runelite.net"))) { + name = "rrn" + if (url.scheme != "file") { + credentials(PasswordCredentials::class) { + username = providers.gradleProperty("rrnPublishUsername").orElse(providers.gradleProperty("rrnUsername")).getOrElse("") + password = providers.gradleProperty("rrnPublishPassword").orElse(providers.gradleProperty("rrnPassword")).getOrElse("") + } + } + } + } + } + + // produce reproducible outputs + tasks.withType { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + } + + tasks.withType { + testLogging { + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + } + } + + extensions.findByType()?.run { + module { + isDownloadSources = true + isDownloadJavadoc = true + } + } +} diff --git a/checkstyle.xml b/config/checkstyle/checkstyle.xml similarity index 96% rename from checkstyle.xml rename to config/checkstyle/checkstyle.xml index 97efb7194ea..c8287888985 100644 --- a/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -27,6 +27,7 @@ "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd"> + @@ -57,6 +58,6 @@ - + diff --git a/suppressions.xml b/config/checkstyle/suppressions.xml similarity index 90% rename from suppressions.xml rename to config/checkstyle/suppressions.xml index 962c26ceb0d..deef26f2cd1 100644 --- a/suppressions.xml +++ b/config/checkstyle/suppressions.xml @@ -29,4 +29,6 @@ + + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000000..a4776710c31 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,33 @@ +# +# Copyright (c) 2024, LlemonDuck +# 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. +# + +org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx1024m +org.gradle.parallel=true +org.gradle.caching=false + +project.build.group=net.runelite +project.build.version=1.12.17-SNAPSHOT + +glslang.path= diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml new file mode 100644 index 00000000000..0b929186cf3 --- /dev/null +++ b/gradle/verification-metadata.xml @@ -0,0 +1,468 @@ + + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000000..249e5832f09 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..a9c19e29fb7 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +#Tue Jul 02 14:53:12 EDT 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip +distributionSha256Sum=f8b4f4772d302c8ff580bc40d0f56e715de69b163546944f787c87abf209c961 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 00000000000..1b6c787337f --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000000..107acd32c4e --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libs.versions.toml b/libs.versions.toml new file mode 100644 index 00000000000..23d656b53e9 --- /dev/null +++ b/libs.versions.toml @@ -0,0 +1,85 @@ +# +# Copyright (c) 2024, LlemonDuck +# 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. +# +[versions] +rs = "235" +cache = "165" + +flatlaf = "3.2.5-rl4" +guice = "4.1.0" +lombok = "1.18.30" +logback = "1.2.9" +lwjgl = "3.3.2" +slf4j = "1.7.25" +antlr = "4.13.1" + + +[libraries] +rs-vanilla = { module = "net.runelite.rs:vanilla", version.ref = "rs" } +rs-cache = { module = "net.runelite.rs:cache", version.ref = "cache" } + +flatlaf-core = { module = "net.runelite:flatlaf", version.ref = "flatlaf" } +flatlaf-extras = { module = "net.runelite:flatlaf-extras", version.ref = "flatlaf" } +rl-http-api = "net.runelite.arn:http-api:1.2.21" +rl-awt = "net.runelite:rlawt:1.7" +rl-discord = "net.runelite:discord:1.4" +rl-orange = "net.runelite:orange-extensions:1.1" + +antlr-core = { module = "org.antlr:antlr4", version.ref="antlr" } +antlr-runtime = { module = "org.antlr:antlr4-runtime", version.ref="antlr" } +commons-compress = "org.apache.commons:commons-compress:1.10" +commons-text = "org.apache.commons:commons-text:1.2" +commons-cli = "commons-cli:commons-cli:1.3.1" +fife-rsyntaxtextarea = "com.fifesoft:rsyntaxtextarea:3.1.2" +fife-autocomplete = "com.fifesoft:autocomplete:3.1.1" +findbugs = "com.google.code.findbugs:jsr305:3.0.2" +gson = "com.google.code.gson:gson:2.8.5" +guava = "com.google.guava:guava:23.2-jre" +guice-core = { module = "com.google.inject:guice", version.ref = "guice" } +guice-testlib = { module = "com.google.inject.extensions:guice-testlib", version.ref = "guice" } +guice-grapher = { module = "com.google.inject.extensions:guice-grapher", version.ref = "guice" } +hamcrest = "org.hamcrest:hamcrest-library:1.3" +javapoet = "com.squareup:javapoet:1.13.0" +javax-inject = "javax.inject:javax.inject:1" +jetbrains-annotations = "org.jetbrains:annotations:23.0.0" +jna-core = "net.java.dev.jna:jna:5.9.0" +jna-platform = "net.java.dev.jna:jna-platform:5.9.0" +jopt = "net.sf.jopt-simple:jopt-simple:5.0.1" +junit = "junit:junit:4.12" +logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } +logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } +lwjgl-core = { module = "org.lwjgl:lwjgl", version.ref = "lwjgl" } +lwjgl-opengl = { module = "org.lwjgl:lwjgl-opengl", version.ref = "lwjgl" } +lwjgl-opencl = { module = "org.lwjgl:lwjgl-opencl", version.ref = "lwjgl" } +mockito = "org.mockito:mockito-core:3.1.0" +okhttp-mockserver = "com.squareup.okhttp3:mockwebserver:3.14.9" +protobuf = "com.google.protobuf:protobuf-javalite:3.21.12" +slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } +slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } +tomlj = "org.tomlj:tomlj:1.1.0" + + + +[plugins] +lombok = { id = "io.freefair.lombok", version = "8.10.2" } diff --git a/pom.xml b/pom.xml deleted file mode 100644 index b69345dba2e..00000000000 --- a/pom.xml +++ /dev/null @@ -1,332 +0,0 @@ - - - - 4.0.0 - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - pom - - RuneLite - Open source RuneScape client - http://runelite.net - - - UTF-8 - 1 - 1.18.30 - 1.2.9 - 1.7.25 - 3.2.5-rl4 - - true - true - - - - - - 2-Clause BSD License - https://opensource.org/licenses/BSD-2-Clause - - - - 2014 - - - https://github.com/runelite/runelite - scm:git:git://github.com/runelite/runelite - scm:git:git@github.com:runelite/runelite - HEAD - - - - - Adam- - Adam - Adam@sigterm.info - - - - - GitHub Issues - https://github.com/runelite/runelite/issues - - - - - central - Central Repository - https://repo.maven.apache.org/maven2 - - false - - - - runelite - RuneLite - https://repo.runelite.net - - true - always - - - - - - central - Central Repository - https://repo.maven.apache.org/maven2 - - never - - - false - - - - runelite-plugins - RuneLite Plugins - https://repo.runelite.net - - true - always - - - - - - cache - runelite-api - runelite-client - runelite-jshell - runelite-maven-plugin - - - - - - com.google.guava - guava - 23.2-jre - - - org.projectlombok - lombok - ${lombok.version} - provided - - - com.google.code.gson - gson - 2.8.5 - - - com.google.code.findbugs - jsr305 - 3.0.2 - - - ch.qos.logback - logback-classic - ${logback.version} - - - ch.qos.logback - logback-core - ${logback.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - com.google.inject - guice-bom - 4.1.0 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 11 - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - true - -Xmx512m -Duser.language=en -Duser.region=US - - ${glslang.path} - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - org.projectlombok - lombok-maven-plugin - 1.18.20.0 - - - ${maven.javadoc.skip} - ${project.basedir}/src/main/java - - ${project.build.directory}/delombok - false - - - - generate-sources - - delombok - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.5.0 - - - ${project.build.directory}/delombok - - Copyright © {inceptionYear} - - - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - com.puppycrawl.tools - checkstyle - 8.3 - - - - - verify-style - process-classes - - check - - - - - checkstyle.xml - - - ${project.build.sourceDirectory} - - true - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - - org.apache.maven.plugins - maven-deploy-plugin - 2.8.2 - - - org.apache.maven.plugins - maven-plugin-plugin - 3.6.0 - - - org.apache.maven.plugins - maven-pmd-plugin - 3.22.0 - - - net.sourceforge.pmd - pmd-core - 7.2.0 - - - net.sourceforge.pmd - pmd-java - 7.2.0 - - - - - - - diff --git a/runelite-api/build.gradle.kts b/runelite-api/build.gradle.kts new file mode 100644 index 00000000000..4efc0b7307f --- /dev/null +++ b/runelite-api/build.gradle.kts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +plugins { + java + `maven-publish` + checkstyle + alias(libs.plugins.lombok) + + id("net.runelite.runelite-gradle-plugin.component") +} + +lombok.version = libs.versions.lombok.get() + +java { + withJavadocJar() + withSourcesJar() +} + +dependencies { + implementation(libs.slf4j.api) + compileOnly(libs.findbugs) + + compileOnly(libs.jetbrains.annotations) + + testImplementation(libs.junit) + testRuntimeOnly(libs.slf4j.simple) +} + +val runtimeJar = tasks.register("runtimeJar") { + this@register.group = BasePlugin.BUILD_GROUP + + from(sourceSets.main.get().output) + archiveClassifier = "runtime" + + /* from JLS 13.1.3: references to a static field that is a constant variable (§4.12.4) must be resolved + at compile time to the value denoted by the constant variable's initializer *and* no references to the + field should be present in the code in a binary file. + + This permits us to remove the classes containing only these types of fields at runtime */ + exclude("net/runelite/api/annotations/*.class") + exclude("net/runelite/api/clan/ClanID.class") + exclude("net/runelite/api/dbtable/DBTableID*.class") + exclude("net/runelite/api/widgets/ComponentID.class") + exclude("net/runelite/api/widgets/InterfaceID.class") + exclude("net/runelite/api/widgets/ItemQuantityMode.class") + exclude("net/runelite/api/widgets/WidgetID*.class") + exclude("net/runelite/api/widgets/WidgetModalMode.class") + exclude("net/runelite/api/widgets/WidgetModelType.class") + exclude("net/runelite/api/widgets/WidgetPositionMode.class") + exclude("net/runelite/api/widgets/WidgetSizeMode.class") + exclude("net/runelite/api/widgets/WidgetTextAlignment.class") + exclude("net/runelite/api/widgets/WidgetType.class") + exclude("net/runelite/api/AnimationID.class") + exclude("net/runelite/api/CollisionDataFlag.class") + exclude("net/runelite/api/EnumID.class") + exclude("net/runelite/api/FontID.class") + exclude("net/runelite/api/GraphicID.class") + exclude("net/runelite/api/HintArrowType.class") + exclude("net/runelite/api/HitsplatID.class") + exclude("net/runelite/api/ItemID.class") + exclude("net/runelite/api/KeyCode.class") + exclude("net/runelite/api/NpcID.class") + exclude("net/runelite/api/NullItemID.class") + exclude("net/runelite/api/NullNpcID.class") + exclude("net/runelite/api/NullObjectID.class") + exclude("net/runelite/api/ObjectID.class") + exclude("net/runelite/api/Opcodes.class") + exclude("net/runelite/api/ParamID.class") + exclude("net/runelite/api/ScriptID.class") + exclude("net/runelite/api/SettingID.class") + exclude("net/runelite/api/SkullIcon.class") + exclude("net/runelite/api/SoundEffectID.class") + exclude("net/runelite/api/SoundEffectVolume.class") + exclude("net/runelite/api/SpriteID.class") + exclude("net/runelite/api/StructID.class") + exclude("net/runelite/api/Varbits.class") + exclude("net/runelite/api/VarClientInt.class") + exclude("net/runelite/api/VarClientStr.class") + exclude("net/runelite/api/VarPlayer.class") + exclude("net/runelite/api/gameval/*.class") +} +tasks.assemble { dependsOn(runtimeJar) } + +publishing { + publications { + create("api") { + from(components["java"]) + artifact(runtimeJar) { classifier = "runtime" } + } + } +} + +tasks.withType { + inputFile = file("src/main/interfaces/interfaces.toml") + outputDirectory = file("build/generated/sources/runelite/java/main") +} + +tasks.checkstyleMain { + exclude("net/runelite/api/widgets/ComponentID.java") + exclude("net/runelite/api/widgets/InterfaceID.java") +} + +tasks.javadoc { + title = "RuneLite API ${project.version} API" + + exclude( + "net/runelite/api/gameval/**", + "net/runelite/api/AnimationID.java", + "net/runelite/api/ItemID.java", + "net/runelite/api/NullItemID.java", + "net/runelite/api/ObjectID.java", + "net/runelite/api/NullObjectID.java", + "net/runelite/api/NpcID.java", + "net/runelite/api/NullNpcID.java", + ) +} diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml deleted file mode 100644 index c01f5fd8785..00000000000 --- a/runelite-api/pom.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - 4.0.0 - - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - - - runelite-api - RuneLite API - https://static.runelite.net/runelite-api - - - - org.slf4j - slf4j-api - - - org.projectlombok - lombok - provided - - - com.google.code.findbugs - jsr305 - provided - - - org.jetbrains - annotations - 23.0.0 - provided - - - - junit - junit - 4.12 - test - - - org.slf4j - slf4j-simple - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - runtime-jar - package - - jar - - - runtime - - net/runelite/api/annotations/*.class - net/runelite/api/clan/ClanID.class - net/runelite/api/dbtable/DBTableID*.class - net/runelite/api/widgets/ComponentID.class - net/runelite/api/widgets/InterfaceID.class - net/runelite/api/widgets/ItemQuantityMode.class - net/runelite/api/widgets/WidgetID*.class - net/runelite/api/widgets/WidgetModalMode.class - net/runelite/api/widgets/WidgetModelType.class - net/runelite/api/widgets/WidgetPositionMode.class - net/runelite/api/widgets/WidgetSizeMode.class - net/runelite/api/widgets/WidgetTextAlignment.class - net/runelite/api/widgets/WidgetType.class - net/runelite/api/AnimationID.class - net/runelite/api/CollisionDataFlag.class - net/runelite/api/EnumID.class - net/runelite/api/FontID.class - net/runelite/api/GraphicID.class - net/runelite/api/HintArrowType.class - net/runelite/api/HitsplatID.class - net/runelite/api/ItemID.class - net/runelite/api/KeyCode.class - net/runelite/api/NpcID.class - net/runelite/api/NullItemID.class - net/runelite/api/NullNpcID.class - net/runelite/api/NullObjectID.class - net/runelite/api/ObjectID.class - net/runelite/api/Opcodes.class - net/runelite/api/ParamID.class - net/runelite/api/ScriptID.class - net/runelite/api/SettingID.class - net/runelite/api/SkullIcon.class - net/runelite/api/SoundEffectID.class - net/runelite/api/SoundEffectVolume.class - net/runelite/api/SpriteID.class - net/runelite/api/StructID.class - net/runelite/api/Varbits.class - net/runelite/api/VarClientInt.class - net/runelite/api/VarClientStr.class - net/runelite/api/VarPlayer.class - net/runelite/api/gameval/*.class - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - ${project.build.directory}/delombok;${project.build.directory}/generated-sources - net.runelite.api.gameval - - net/runelite/api/AnimationID.java - net/runelite/api/ItemID.java - net/runelite/api/NullItemID.java - net/runelite/api/ObjectID.java - net/runelite/api/NullObjectID.java - net/runelite/api/NpcID.java - net/runelite/api/NullNpcID.java - - - - - net.runelite - runelite-maven-plugin - ${project.version} - - - pack-components - - pack-components - - - src/main/interfaces - ${project.build.directory}/generated-sources - - - - - - - diff --git a/runelite-api/settings.gradle.kts b/runelite-api/settings.gradle.kts new file mode 100644 index 00000000000..b640a5c2f81 --- /dev/null +++ b/runelite-api/settings.gradle.kts @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +rootProject.name = "runelite-api" +apply(from = "../common.settings.gradle.kts") + +includeBuild("../runelite-gradle-plugin") diff --git a/runelite-api/src/main/interfaces/interfaces.toml b/runelite-api/src/main/interfaces/interfaces.toml index f302980514e..0742286b166 100644 --- a/runelite-api/src/main/interfaces/interfaces.toml +++ b/runelite-api/src/main/interfaces/interfaces.toml @@ -58,24 +58,23 @@ tutorial_button=4 item_count_top=5 item_count_bar=6 item_count_bottom=7 -group_storage_button=8 -content_container=10 -tab_container=11 -item_container=13 -scrollbar=14 -search_button_background=42 -deposit_inventory=44 -deposit_equipment=46 -potion_store=48 -incinerator=49 -incinerator_confirm=50 -potionstore_content=52 -equipment_parent=80 -equipment_set_bonus=121 -settings_button=125 -equipment_button=126 -popup=128 -equipment_stat_bonus=134 +content_container=9 +tab_container=10 +item_container=12 +scrollbar=13 +search_button_background=41 +deposit_inventory=43 +deposit_equipment=45 +potion_store=119 +incinerator=48 +incinerator_confirm=49 +potionstore_content=51 +equipment_parent=54 +equipment_set_bonus=95 +settings_button=99 +equipment_button=100 +popup=102 +equipment_stat_bonus=108 [bank_inventory] id=15 diff --git a/runelite-api/src/main/java/net/runelite/api/ActorSpotAnim.java b/runelite-api/src/main/java/net/runelite/api/ActorSpotAnim.java index e2a0bb04159..4ba77383e7a 100644 --- a/runelite-api/src/main/java/net/runelite/api/ActorSpotAnim.java +++ b/runelite-api/src/main/java/net/runelite/api/ActorSpotAnim.java @@ -40,6 +40,18 @@ public interface ActorSpotAnim extends Node */ void setId(int id); + /** + * Get the client cycle that the spotanim starts at + * @return + */ + int getStartCycle(); + + /** + * Set the client cycle that the spotanim starts at + * @param cycle + */ + void setStartCycle(int cycle); + /** * Get the spotanim height * @return diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 08faddd452d..b841ff4f307 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -27,6 +27,7 @@ import com.jagex.oldscape.pub.OAuthApi; import java.awt.Canvas; import java.awt.Dimension; +import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; @@ -145,8 +146,7 @@ public interface Client extends OAuthApi, GameEngine void setGameState(GameState gameState); /** - * Causes the client to shutdown. It is faster than - * {@link java.applet.Applet#stop()} because it doesn't wait for 4000ms. + * Causes the client to shutdown. * This will call {@link System#exit} when it is done */ void stopNow(); @@ -2438,4 +2438,7 @@ default Tile getSelectedSceneTile() */ @Nonnull WorldView findWorldViewFromWorldPoint(WorldPoint point); + + @Nullable + FileDescriptor getSocketFD(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ClientConfiguration.java b/runelite-api/src/main/java/net/runelite/api/ClientConfiguration.java new file mode 100644 index 00000000000..f7d0eb891e3 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/ClientConfiguration.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Abex + * 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.api; + +import java.net.URL; + +public interface ClientConfiguration +{ + URL getCodeBase(); + String getParameter(String key); + void onError(String code); +} diff --git a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java index 4b80d581f50..15081b5584f 100644 --- a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java +++ b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java @@ -55,6 +55,10 @@ public interface DecorativeObject extends TileObject */ int getYOffset(); + int getXOffset2(); + + int getYOffset2(); + /** * A bitfield containing various flags: *
{@code
diff --git a/runelite-api/src/main/java/net/runelite/api/GameEngine.java b/runelite-api/src/main/java/net/runelite/api/GameEngine.java
index 30faa9691d8..c37befbdfb7 100644
--- a/runelite-api/src/main/java/net/runelite/api/GameEngine.java
+++ b/runelite-api/src/main/java/net/runelite/api/GameEngine.java
@@ -31,6 +31,9 @@
  */
 public interface GameEngine
 {
+	void setConfiguration(ClientConfiguration configuration);
+	void initialize();
+
 	/**
 	 * Gets the canvas that contains everything.
 	 *
@@ -53,4 +56,9 @@ public interface GameEngine
 	boolean isClientThread();
 
 	void resizeCanvas();
+
+	/**
+	 * Releases the startup block if "runelite.delaystart" is set true
+	 */
+	public void unblockStartup();
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/IconID.java b/runelite-api/src/main/java/net/runelite/api/IconID.java
index dccf3bbc07b..8c40b8ed29d 100644
--- a/runelite-api/src/main/java/net/runelite/api/IconID.java
+++ b/runelite-api/src/main/java/net/runelite/api/IconID.java
@@ -48,7 +48,10 @@ public enum IconID
 	NO_ENTRY(11),
 	CHAIN_LINK(12),
 	BOUNTY_HUNTER_EMBLEM(20),
-	LEAGUE(22);
+	LEAGUE(22),
+	GROUP_IRONMAN(41),
+	HARDCORE_GROUP_IRONMAN(42),
+	UNRANKED_GROUP_IRONMAN(43);
 
 	private final int index;
 
diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java
index d35518552e4..2ff20148c04 100644
--- a/runelite-api/src/main/java/net/runelite/api/ItemID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java
@@ -5615,10 +5615,10 @@ public final class ItemID
 	public static final int BLACK_MASK_1 = 8919;
 	public static final int BLACK_MASK = 8921;
 	public static final int WITCHWOOD_ICON = 8923;
-	public static final int BANDANA_EYEPATCH = 8924;
-	public static final int BANDANA_EYEPATCH_8925 = 8925;
-	public static final int BANDANA_EYEPATCH_8926 = 8926;
-	public static final int BANDANA_EYEPATCH_8927 = 8927;
+	public static final int BANDANA_EYEPATCH_WHITE = 8924;
+	public static final int BANDANA_EYEPATCH_RED = 8925;
+	public static final int BANDANA_EYEPATCH_BLUE = 8926;
+	public static final int BANDANA_EYEPATCH_BROWN = 8927;
 	public static final int HAT_EYEPATCH = 8928;
 	public static final int CRABCLAW_HOOK = 8929;
 	public static final int PIPE_SECTION = 8930;
@@ -13552,8 +13552,8 @@ public final class ItemID
 	public static final int SIGIL_OF_AGILE_FORTUNE_28493 = 28493;
 	public static final int SIGIL_OF_THE_FOOD_MASTER = 28495;
 	public static final int SIGIL_OF_THE_FOOD_MASTER_28496 = 28496;
-	public static final int SIGIL_OF_THE_WELLFED = 28498;
-	public static final int SIGIL_OF_THE_WELLFED_28499 = 28499;
+	public static final int SIGIL_OF_THE_WELL_FED = 28498;
+	public static final int SIGIL_OF_THE_WELL_FED_28499 = 28499;
 	public static final int SIGIL_OF_THE_INFERNAL_CHEF = 28501;
 	public static final int SIGIL_OF_THE_INFERNAL_CHEF_28502 = 28502;
 	public static final int SIGIL_OF_THE_INFERNAL_SMITH = 28504;
@@ -13582,10 +13582,10 @@ public final class ItemID
 	public static final int CORRUPTED_SCYTHE_OF_VITUR_UNCHARGED = 28545;
 	public static final int CORRUPTED_TUMEKENS_SHADOW = 28547;
 	public static final int CORRUPTED_TUMEKENS_SHADOW_UNCHARGED = 28549;
-	public static final int QUEST_LAMP = 28551;
-	public static final int QUEST_LAMP_28552 = 28552;
-	public static final int QUEST_LAMP_28553 = 28553;
-	public static final int QUEST_LAMP_28554 = 28554;
+	public static final int FREMENNIK_QUEST_LAMP = 28551;
+	public static final int ELF_QUEST_LAMP = 28552;
+	public static final int GNOME_QUEST_LAMP = 28553;
+	public static final int MAHJARRAT_1_QUEST_LAMP = 28554;
 	public static final int STARTER_BOW_28555 = 28555;
 	public static final int STARTER_STAFF_28557 = 28557;
 	public static final int STARTER_SWORD_28559 = 28559;
@@ -14125,22 +14125,22 @@ public final class ItemID
 	public static final int SIGIL_OF_METICULOUSNESS_29649 = 29649;
 	public static final int SIGIL_OF_REVOKED_LIMITATION = 29651;
 	public static final int SIGIL_OF_REVOKED_LIMITATION_29652 = 29652;
-	public static final int SIGIL_OF_RAMPART = 29654;
-	public static final int SIGIL_OF_RAMPART_29655 = 29655;
+	public static final int SIGIL_OF_THE_RAMPART = 29654;
+	public static final int SIGIL_OF_THE_RAMPART_29655 = 29655;
 	public static final int SIGIL_OF_DECEPTION = 29657;
 	public static final int SIGIL_OF_DECEPTION_29658 = 29658;
-	public static final int SIGIL_OF_LITHE = 29660;
-	public static final int SIGIL_OF_LITHE_29661 = 29661;
-	public static final int SIGIL_OF_ADROIT = 29663;
-	public static final int SIGIL_OF_ADROIT_29664 = 29664;
+	public static final int SIGIL_OF_LITHENESS = 29660;
+	public static final int SIGIL_OF_LITHENESS_29661 = 29661;
+	public static final int SIGIL_OF_THE_ADROIT = 29663;
+	public static final int SIGIL_OF_THE_ADROIT_29664 = 29664;
 	public static final int SIGIL_OF_ONSLAUGHT = 29666;
 	public static final int SIGIL_OF_ONSLAUGHT_29667 = 29667;
 	public static final int SIGIL_OF_RESTORATION = 29669;
 	public static final int SIGIL_OF_RESTORATION_29670 = 29670;
-	public static final int SIGIL_OF_SWASHBUCKLER = 29672;
-	public static final int SIGIL_OF_SWASHBUCKLER_29673 = 29673;
-	public static final int SIGIL_OF_GUNSLINGER = 29675;
-	public static final int SIGIL_OF_GUNSLINGER_29676 = 29676;
+	public static final int SIGIL_OF_THE_SWASHBUCKLER = 29672;
+	public static final int SIGIL_OF_THE_SWASHBUCKLER_29673 = 29673;
+	public static final int SIGIL_OF_THE_GUNSLINGER = 29675;
+	public static final int SIGIL_OF_THE_GUNSLINGER_29676 = 29676;
 	public static final int SIGIL_OF_ARCANE_SWIFTNESS = 29678;
 	public static final int SIGIL_OF_ARCANE_SWIFTNESS_29679 = 29679;
 	public static final int GUTHIXIAN_TEMPLE_TELEPORT = 29684;
@@ -15116,17 +15116,17 @@ public final class ItemID
 	public static final int FETID_KEY = 31744;
 	public static final int CAPTURED_WIND_MOTE = 31745;
 	public static final int GURTOBS_FABRIC_ROLL = 31746;
-	public static final int NIFTY_HAT = 31748;
-	public static final int NIFTY_JACKET = 31750;
-	public static final int NIFTY_TROUSERS = 31752;
-	public static final int NIFTY_SHOES = 31754;
+	public static final int SWAMP_CRUISERS_HAT = 31748;
+	public static final int SWAMP_CRUISERS_JACKET = 31750;
+	public static final int SWAMP_CRUISERS_TROUSERS = 31752;
+	public static final int SWAMP_CRUISERS_SHOES = 31754;
 	public static final int SERRATED_KEY = 31756;
 	public static final int HEART_OF_ITHELL = 31757;
 	public static final int GWYNAS_FABRIC_ROLL = 31758;
-	public static final int SLEEK_HAT = 31760;
-	public static final int SLEEK_JACKET = 31762;
-	public static final int SLEEK_TROUSERS = 31764;
-	public static final int SLEEK_SHOES = 31766;
+	public static final int CRYSTAL_GLIDERS_HAT = 31760;
+	public static final int CRYSTAL_GLIDERS_JACKET = 31762;
+	public static final int CRYSTAL_GLIDERS_TROUSERS = 31764;
+	public static final int CRYSTAL_GLIDERS_SHOES = 31766;
 	public static final int SUNKEN_RUM = 31768;
 	public static final int TINY_PEARL = 31770;
 	public static final int SMALL_PEARL = 31773;
@@ -15352,8 +15352,8 @@ public final class ItemID
 	public static final int TEAK_MAST_AND_LINEN_SAILS = 32167;
 	public static final int TEAK_MAST_AND_LINEN_SAILS_32168 = 32168;
 	public static final int MAHOGANY_MAST_AND_CANVAS_SAILS = 32169;
-	public static final int MAHOGANY_MAST_AND_LINEN_SAILS = 32170;
-	public static final int MAHOGANY_MAST_AND_LINEN_SAILS_32171 = 32171;
+	public static final int MAHOGANY_MAST_AND_CANVAS_SAILS_32170 = 32170;
+	public static final int MAHOGANY_MAST_AND_CANVAS_SAILS_32171 = 32171;
 	public static final int CAMPHOR_MAST_AND_CANVAS_SAILS = 32172;
 	public static final int CAMPHOR_MAST_AND_LINEN_SAILS = 32173;
 	public static final int CAMPHOR_MAST_AND_LINEN_SAILS_32174 = 32174;
@@ -15550,7 +15550,7 @@ public final class ItemID
 	public static final int SMALL_KEY_THE_PANDEMONIUM = 32411;
 	public static final int SMALL_KEY_THE_ONYX_CREST = 32412;
 	public static final int SMALL_KEY_TEAR_OF_THE_SOUL = 32413;
-	public static final int SMALL_KEY_YNSDAIL = 32414;
+	public static final int SMALL_KEY_YNYSDAIL = 32414;
 	public static final int SMALL_KEY_MINOTAURS_REST = 32415;
 	public static final int SMALL_KEY_BUCCANEERS_HAVEN = 32416;
 	public static final int SMALL_KEY_ISLE_OF_BONES = 32417;
@@ -16018,5 +16018,121 @@ public final class ItemID
 	public static final int IRONWOOD_LOGS = 32907;
 	public static final int ROSEWOOD_LOGS = 32910;
 	public static final int JAR_OF_FEATHERS = 32921;
+	public static final int STEEL_NAILS_32923 = 32923;
+	public static final int CRATE_OF_ARROWTIPS_32924 = 32924;
+	public static final int CRATE_OF_CLOTHES_32925 = 32925;
+	public static final int LOVLEY_JUBBLY_BIB = 32928;
+	public static final int BEER_BELLY_SWEATER = 32930;
+	public static final int JAD_JUMPER = 32932;
+	public static final int CHRISTMAS_DINNER = 32934;
+	public static final int CRATE_OF_FURS_32936 = 32936;
+	public static final int CRATE_OF_FISH_32937 = 32937;
+	public static final int CRATE_OF_FISH_32938 = 32938;
+	public static final int CRATE_OF_FISH_32939 = 32939;
+	public static final int CRATE_OF_SAND_32940 = 32940;
+	public static final int CRATE_OF_RED_CORAL_32941 = 32941;
+	public static final int CRATE_OF_FISH_32942 = 32942;
+	public static final int CRATE_OF_SPICES_32943 = 32943;
+	public static final int CRATE_OF_JEWELLERY_32944 = 32944;
+	public static final int CRATE_OF_BAIT_32945 = 32945;
+	public static final int CRATE_OF_COCONUTS_32946 = 32946;
+	public static final int CRATE_OF_ARROWTIPS_32947 = 32947;
+	public static final int CRATE_OF_PINEAPPLES_32948 = 32948;
+	public static final int CRATE_OF_LOGS_32949 = 32949;
+	public static final int CRATE_OF_PLANKS_32950 = 32950;
+	public static final int CRATE_OF_LOGS_32951 = 32951;
+	public static final int CRATE_OF_ALPACA_WOOL_32952 = 32952;
+	public static final int CRATE_OF_PLANKS_32953 = 32953;
+	public static final int CRATE_OF_FABRICS_32954 = 32954;
+	public static final int CRATE_OF_PLANKS_32955 = 32955;
+	public static final int CRATE_OF_LOGS_32956 = 32956;
+	public static final int CRATE_OF_PLANKS_32957 = 32957;
+	public static final int CRATE_OF_FISH_32958 = 32958;
+	public static final int CRATE_OF_FISH_32959 = 32959;
+	public static final int CRATE_OF_GEMS_32960 = 32960;
+	public static final int CRATE_OF_FISH_32961 = 32961;
+	public static final int CRATE_OF_FISH_32962 = 32962;
+	public static final int CRATE_OF_POTIONS_32963 = 32963;
+	public static final int CRATE_OF_FURS_32964 = 32964;
+	public static final int CRATE_OF_SWAMP_PASTE_32965 = 32965;
+	public static final int CRATE_OF_PLANKS_32966 = 32966;
+	public static final int CRATE_OF_BOOKS_32967 = 32967;
+	public static final int CRATE_OF_BOOKS_32968 = 32968;
+	public static final int CRATE_OF_JEWELLERY_32969 = 32969;
+	public static final int CRATE_OF_JEWELLERY_32970 = 32970;
+	public static final int CRATE_OF_PLANKS_32971 = 32971;
+	public static final int CRATE_OF_FURS_32972 = 32972;
+	public static final int CRATE_OF_FISH_32973 = 32973;
+	public static final int CRATE_OF_FISH_32974 = 32974;
+	public static final int CRATE_OF_SILK_32975 = 32975;
+	public static final int CRATE_OF_FISH_32976 = 32976;
+	public static final int CRATE_OF_LOGS_32977 = 32977;
+	public static final int CRATE_OF_SWORDS_32978 = 32978;
+	public static final int CRATE_OF_FISH_32979 = 32979;
+	public static final int CRATE_OF_FISH_32980 = 32980;
+	public static final int CRATE_OF_SEEDS_32981 = 32981;
+	public static final int CRATE_OF_SWORDS_32982 = 32982;
+	public static final int CRATE_OF_PLATEBODIES_32983 = 32983;
+	public static final int CRATE_OF_SWORDS_32984 = 32984;
+	public static final int CRATE_OF_ORES_32985 = 32985;
+	public static final int CRATE_OF_LOGS_32986 = 32986;
+	public static final int CRATE_OF_POTIONS_32987 = 32987;
+	public static final int CRATE_OF_FISH_32988 = 32988;
+	public static final int CRATE_OF_FISH_32989 = 32989;
+	public static final int CRATE_OF_RUNES_32990 = 32990;
+	public static final int CRATE_OF_FISH_32991 = 32991;
+	public static final int CRATE_OF_PLANKS_32992 = 32992;
+	public static final int CRATE_OF_TEAK_LOGS_32993 = 32993;
+	public static final int CRATE_OF_RUNES_32994 = 32994;
+	public static final int CRATE_OF_COCKTAILS_32995 = 32995;
+	public static final int CRATE_OF_SHIP_PARTS_32996 = 32996;
+	public static final int CRATE_OF_RUM_32997 = 32997;
+	public static final int CRATE_OF_JAVELINS_32998 = 32998;
+	public static final int CRATE_OF_POTIONS_32999 = 32999;
+	public static final int CRATE_OF_ORES_33000 = 33000;
+	public static final int CRATE_OF_POTIONS_33001 = 33001;
+	public static final int HOLY_MOLEYS = 33002;
+	public static final int KHARIDIAN_QUEST_LAMP = 33004;
+	public static final int MYREQUE_QUEST_LAMP = 33005;
+	public static final int DRAGONKIN_QUEST_LAMP = 33006;
+	public static final int MAHJARRAT_2_QUEST_LAMP = 33007;
+	public static final int CAMELOT_QUEST_LAMP = 33008;
+	public static final int RECIPE_FOR_DISASTER_QUEST_LAMP = 33009;
+	public static final int RUINOUS_POWERS_33010 = 33010;
+	public static final int ANNIHILATION_WEAPON_SCROLL = 33012;
+	public static final int ANNIHILATION_BLUEPRINTS = 33015;
+	public static final int ANNIHILATION_TELEPORT_SCROLL = 33018;
+	public static final int BOW_OF_FAERDHINEN_C_33021 = 33021;
+	public static final int CRYSTAL_BODY_33023 = 33023;
+	public static final int CRYSTAL_BODY_INACTIVE_33025 = 33025;
+	public static final int CRYSTAL_LEGS_33027 = 33027;
+	public static final int CRYSTAL_LEGS_INACTIVE_33029 = 33029;
+	public static final int CRYSTAL_HELM_33031 = 33031;
+	public static final int CRYSTAL_HELM_INACTIVE_33033 = 33033;
+	public static final int TOXIC_STAFF_UNCHARGED_33035 = 33035;
+	public static final int TOXIC_STAFF_DEADMAN = 33036;
+	public static final int THE_DOGSWORD_33038 = 33038;
+	public static final int THUNDER_KHOPESH_33041 = 33041;
+	public static final int TRINKET_OF_AVARICE = 33044;
+	public static final int TRINKET_OF_FORTUITY_INACTIVE = 33047;
+	public static final int TRINKET_OF_FORTUITY_ACTIVE = 33050;
+	public static final int SIGIL_OF_THE_GODS = 33053;
+	public static final int SIGIL_OF_THE_GODS_33054 = 33054;
+	public static final int SIGIL_OF_CONCLUSION = 33055;
+	public static final int SIGIL_OF_CONCLUSION_33056 = 33056;
+	public static final int SIGIL_OF_AUTOMATION = 33057;
+	public static final int SIGIL_OF_AUTOMATION_33058 = 33058;
+	public static final int SIGIL_OF_ETERNAL_BELIEF = 33059;
+	public static final int SIGIL_OF_ETERNAL_BELIEF_33060 = 33060;
+	public static final int SIGIL_OF_EFFICIENCY = 33061;
+	public static final int SIGIL_OF_EFFICIENCY_33062 = 33062;
+	public static final int STARTER_CAPE = 33063;
+	public static final int DEADMANS_SKULL = 33065;
+	public static final int HOODED_SLAYER_HELMET = 33066;
+	public static final int HOODED_SLAYER_HELMET_I = 33068;
+	public static final int HOODED_SLAYER_HELMET_I_33070 = 33070;
+	public static final int HOODED_SLAYER_HELMET_I_33072 = 33072;
+	public static final int FACILITY_BOTTLE_EMPTY = 33074;
+	public static final int FACILITY_BOTTLE_FULL = 33077;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java
index 7b672f40f3c..a9d7037b598 100644
--- a/runelite-api/src/main/java/net/runelite/api/NpcID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java
@@ -12360,6 +12360,7 @@ public final class NpcID
 	public static final int RUSTY_CHEST = 14811;
 	public static final int TARNISHED_CHEST = 14812;
 	public static final int RUSTY_CHEST_14813 = 14813;
+	public static final int REVENANT_IMP_14814 = 14814;
 	public static final int SPOOKY_CHAIR = 14815;
 	public static final int MAKO = 14816;
 	public static final int MORA = 14817;
@@ -12402,6 +12403,8 @@ public final class NpcID
 	public static final int SHELLBANE_GRYPHON = 14860;
 	public static final int ELDER_KELMO = 14861;
 	public static final int ELDER_NAMA = 14863;
+	public static final int REVENANT_GOBLIN_14864 = 14864;
+	public static final int REVENANT_PYREFIEND_14865 = 14865;
 	public static final int HENDERSON = 14866;
 	public static final int ONE_EYED_ROSALEE = 14867;
 	public static final int CAPTAIN_DAWSON = 14868;
@@ -12672,6 +12675,14 @@ public final class NpcID
 	public static final int DRINK_TROLL_QUEEN = 15175;
 	public static final int DRINK_TROLL_QUEEN_15176 = 15176;
 	public static final int SAILING_CAT = 15177;
+	public static final int REVENANT_HOBGOBLIN_15178 = 15178;
+	public static final int REVENANT_CYCLOPS_15179 = 15179;
+	public static final int REVENANT_HELLHOUND_15180 = 15180;
+	public static final int REVENANT_DEMON_15181 = 15181;
+	public static final int REVENANT_ORK_15182 = 15182;
+	public static final int REVENANT_DARK_BEAST_15183 = 15183;
+	public static final int REVENANT_KNIGHT_15184 = 15184;
+	public static final int REVENANT_DRAGON_15185 = 15185;
 	public static final int PUNCHING_BAG = 15191;
 	public static final int PUNCHING_BAG_15192 = 15192;
 	public static final int DPS_CALC = 15193;
@@ -12718,6 +12729,7 @@ public final class NpcID
 	public static final int DOLPHIN = 15234;
 	public static final int DOLPHIN_15235 = 15235;
 	public static final int DOLPHIN_CALF = 15236;
+	public static final int ZEMOUREGAL_15237 = 15237;
 	public static final int JUNIOR_JIM_15238 = 15238;
 	public static final int JUMBO_JIM = 15239;
 	public static final int CREW_REGISTRAR = 15245;
@@ -12980,5 +12992,28 @@ public final class NpcID
 	public static final int TRADER_CREWMEMBER_15544 = 15544;
 	public static final int TRADER_CREWMEMBER_15545 = 15545;
 	public static final int TRADER_CREWMEMBER_15546 = 15546;
+	public static final int BIG_EVIL_CHICKEN = 15547;
+	public static final int SCURRIUS_15548 = 15548;
+	public static final int PHANTOM_MUSPAH_15549 = 15549;
+	public static final int SPLATTER_15550 = 15550;
+	public static final int TUMEKENS_WARDEN_15551 = 15551;
+	public static final int ELIDINIS_WARDEN_15552 = 15552;
+	public static final int I_DSCIM_YOU = 15553;
+	public static final int SOL_HEREDIT_15554 = 15554;
+	public static final int YAMA_15555 = 15555;
+	public static final int PESTILENT_BLOAT_15556 = 15556;
+	public static final int TZTOKJADREK = 15557;
+	public static final int ZEMOUREGAL_SUMMON = 15558;
+	public static final int ZEMOUREGAL_SUMMON_15559 = 15559;
+	public static final int ZEMOUREGAL_SUMMON_15560 = 15560;
+	public static final int ZEMOUREGAL_SUMMON_15561 = 15561;
+	public static final int ZEMOUREGAL_SUMMON_15562 = 15562;
+	public static final int ZEMOUREGAL_SUMMON_15563 = 15563;
+	public static final int ZEMOUREGAL_15564 = 15564;
+	public static final int GUARD_15566 = 15566;
+	public static final int GUARD_15568 = 15568;
+	public static final int KETZEK_15572 = 15572;
+	public static final int KETZEK_15573 = 15573;
+	public static final int TZTOKJAD_15574 = 15574;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java
index 1b5bfb58e7d..9eeb7134727 100644
--- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java
@@ -13686,59 +13686,6 @@ public final class NullItemID
 	public static final int NULL_25987 = 25987;
 	public static final int NULL_25988 = 25988;
 	public static final int NULL_25989 = 25989;
-	public static final int NULL_25992 = 25992;
-	public static final int NULL_25995 = 25995;
-	public static final int NULL_25998 = 25998;
-	public static final int NULL_26001 = 26001;
-	public static final int NULL_26004 = 26004;
-	public static final int NULL_26007 = 26007;
-	public static final int NULL_26010 = 26010;
-	public static final int NULL_26013 = 26013;
-	public static final int NULL_26016 = 26016;
-	public static final int NULL_26019 = 26019;
-	public static final int NULL_26022 = 26022;
-	public static final int NULL_26025 = 26025;
-	public static final int NULL_26028 = 26028;
-	public static final int NULL_26031 = 26031;
-	public static final int NULL_26034 = 26034;
-	public static final int NULL_26037 = 26037;
-	public static final int NULL_26040 = 26040;
-	public static final int NULL_26043 = 26043;
-	public static final int NULL_26046 = 26046;
-	public static final int NULL_26049 = 26049;
-	public static final int NULL_26052 = 26052;
-	public static final int NULL_26055 = 26055;
-	public static final int NULL_26058 = 26058;
-	public static final int NULL_26061 = 26061;
-	public static final int NULL_26064 = 26064;
-	public static final int NULL_26067 = 26067;
-	public static final int NULL_26070 = 26070;
-	public static final int NULL_26073 = 26073;
-	public static final int NULL_26076 = 26076;
-	public static final int NULL_26079 = 26079;
-	public static final int NULL_26082 = 26082;
-	public static final int NULL_26085 = 26085;
-	public static final int NULL_26088 = 26088;
-	public static final int NULL_26091 = 26091;
-	public static final int NULL_26094 = 26094;
-	public static final int NULL_26097 = 26097;
-	public static final int NULL_26100 = 26100;
-	public static final int NULL_26103 = 26103;
-	public static final int NULL_26106 = 26106;
-	public static final int NULL_26109 = 26109;
-	public static final int NULL_26112 = 26112;
-	public static final int NULL_26115 = 26115;
-	public static final int NULL_26118 = 26118;
-	public static final int NULL_26121 = 26121;
-	public static final int NULL_26124 = 26124;
-	public static final int NULL_26127 = 26127;
-	public static final int NULL_26130 = 26130;
-	public static final int NULL_26133 = 26133;
-	public static final int NULL_26136 = 26136;
-	public static final int NULL_26139 = 26139;
-	public static final int NULL_26142 = 26142;
-	public static final int NULL_26145 = 26145;
-	public static final int NULL_26148 = 26148;
 	public static final int NULL_26155 = 26155;
 	public static final int NULL_26157 = 26157;
 	public static final int NULL_26159 = 26159;
@@ -14738,24 +14685,6 @@ public final class NullItemID
 	public static final int NULL_28391 = 28391;
 	public static final int NULL_28411 = 28411;
 	public static final int NULL_28472 = 28472;
-	public static final int NULL_28479 = 28479;
-	public static final int NULL_28482 = 28482;
-	public static final int NULL_28485 = 28485;
-	public static final int NULL_28488 = 28488;
-	public static final int NULL_28491 = 28491;
-	public static final int NULL_28494 = 28494;
-	public static final int NULL_28497 = 28497;
-	public static final int NULL_28500 = 28500;
-	public static final int NULL_28503 = 28503;
-	public static final int NULL_28506 = 28506;
-	public static final int NULL_28509 = 28509;
-	public static final int NULL_28512 = 28512;
-	public static final int NULL_28515 = 28515;
-	public static final int NULL_28518 = 28518;
-	public static final int NULL_28521 = 28521;
-	public static final int NULL_28524 = 28524;
-	public static final int NULL_28527 = 28527;
-	public static final int NULL_28530 = 28530;
 	public static final int NULL_28532 = 28532;
 	public static final int NULL_28533 = 28533;
 	public static final int NULL_28535 = 28535;
@@ -15326,17 +15255,6 @@ public final class NullItemID
 	public static final int NULL_29644 = 29644;
 	public static final int NULL_29645 = 29645;
 	public static final int NULL_29647 = 29647;
-	public static final int NULL_29650 = 29650;
-	public static final int NULL_29653 = 29653;
-	public static final int NULL_29656 = 29656;
-	public static final int NULL_29659 = 29659;
-	public static final int NULL_29662 = 29662;
-	public static final int NULL_29665 = 29665;
-	public static final int NULL_29668 = 29668;
-	public static final int NULL_29671 = 29671;
-	public static final int NULL_29674 = 29674;
-	public static final int NULL_29677 = 29677;
-	public static final int NULL_29680 = 29680;
 	public static final int NULL_29681 = 29681;
 	public static final int NULL_29682 = 29682;
 	public static final int NULL_29683 = 29683;
@@ -16678,5 +16596,45 @@ public final class NullItemID
 	public static final int NULL_32919 = 32919;
 	public static final int NULL_32920 = 32920;
 	public static final int NULL_32922 = 32922;
+	public static final int NULL_32926 = 32926;
+	public static final int NULL_32929 = 32929;
+	public static final int NULL_32931 = 32931;
+	public static final int NULL_32933 = 32933;
+	public static final int NULL_32935 = 32935;
+	public static final int NULL_33003 = 33003;
+	public static final int NULL_33011 = 33011;
+	public static final int NULL_33013 = 33013;
+	public static final int NULL_33014 = 33014;
+	public static final int NULL_33016 = 33016;
+	public static final int NULL_33017 = 33017;
+	public static final int NULL_33019 = 33019;
+	public static final int NULL_33020 = 33020;
+	public static final int NULL_33022 = 33022;
+	public static final int NULL_33024 = 33024;
+	public static final int NULL_33026 = 33026;
+	public static final int NULL_33028 = 33028;
+	public static final int NULL_33030 = 33030;
+	public static final int NULL_33032 = 33032;
+	public static final int NULL_33034 = 33034;
+	public static final int NULL_33037 = 33037;
+	public static final int NULL_33039 = 33039;
+	public static final int NULL_33040 = 33040;
+	public static final int NULL_33042 = 33042;
+	public static final int NULL_33043 = 33043;
+	public static final int NULL_33045 = 33045;
+	public static final int NULL_33046 = 33046;
+	public static final int NULL_33048 = 33048;
+	public static final int NULL_33049 = 33049;
+	public static final int NULL_33051 = 33051;
+	public static final int NULL_33052 = 33052;
+	public static final int NULL_33064 = 33064;
+	public static final int NULL_33067 = 33067;
+	public static final int NULL_33069 = 33069;
+	public static final int NULL_33071 = 33071;
+	public static final int NULL_33073 = 33073;
+	public static final int NULL_33075 = 33075;
+	public static final int NULL_33076 = 33076;
+	public static final int NULL_33078 = 33078;
+	public static final int NULL_33079 = 33079;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java
index 35a4c0af240..58a72148a36 100644
--- a/runelite-api/src/main/java/net/runelite/api/NullNpcID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NullNpcID.java
@@ -2545,5 +2545,10 @@ public final class NullNpcID
 	public static final int NULL_15493 = 15493;
 	public static final int NULL_15494 = 15494;
 	public static final int NULL_15495 = 15495;
+	public static final int NULL_15565 = 15565;
+	public static final int NULL_15567 = 15567;
+	public static final int NULL_15569 = 15569;
+	public static final int NULL_15570 = 15570;
+	public static final int NULL_15571 = 15571;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
index cc2c7944ccf..327141d4bfd 100644
--- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
+++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java
@@ -30266,6 +30266,7 @@ public final class NullObjectID
 	public static final int NULL_58523 = 58523;
 	public static final int NULL_58524 = 58524;
 	public static final int NULL_58526 = 58526;
+	public static final int NULL_58527 = 58527;
 	public static final int NULL_58528 = 58528;
 	public static final int NULL_58529 = 58529;
 	public static final int NULL_58530 = 58530;
@@ -31130,6 +31131,45 @@ public final class NullObjectID
 	public static final int NULL_60237 = 60237;
 	public static final int NULL_60238 = 60238;
 	public static final int NULL_60239 = 60239;
+	public static final int NULL_60245 = 60245;
+	public static final int NULL_60247 = 60247;
+	public static final int NULL_60249 = 60249;
+	public static final int NULL_60251 = 60251;
+	public static final int NULL_60252 = 60252;
+	public static final int NULL_60253 = 60253;
+	public static final int NULL_60254 = 60254;
+	public static final int NULL_60255 = 60255;
+	public static final int NULL_60256 = 60256;
+	public static final int NULL_60257 = 60257;
+	public static final int NULL_60258 = 60258;
+	public static final int NULL_60259 = 60259;
+	public static final int NULL_60260 = 60260;
+	public static final int NULL_60261 = 60261;
+	public static final int NULL_60262 = 60262;
+	public static final int NULL_60263 = 60263;
+	public static final int NULL_60264 = 60264;
+	public static final int NULL_60265 = 60265;
+	public static final int NULL_60266 = 60266;
+	public static final int NULL_60267 = 60267;
+	public static final int NULL_60268 = 60268;
+	public static final int NULL_60269 = 60269;
+	public static final int NULL_60270 = 60270;
+	public static final int NULL_60271 = 60271;
+	public static final int NULL_60272 = 60272;
+	public static final int NULL_60273 = 60273;
+	public static final int NULL_60274 = 60274;
+	public static final int NULL_60275 = 60275;
+	public static final int NULL_60276 = 60276;
+	public static final int NULL_60277 = 60277;
+	public static final int NULL_60278 = 60278;
+	public static final int NULL_60279 = 60279;
+	public static final int NULL_60280 = 60280;
+	public static final int NULL_60281 = 60281;
+	public static final int NULL_60282 = 60282;
+	public static final int NULL_60283 = 60283;
+	public static final int NULL_60284 = 60284;
+	public static final int NULL_60285 = 60285;
+	public static final int NULL_60286 = 60286;
 	public static final int NULL_60311 = 60311;
 	public static final int NULL_60322 = 60322;
 	public static final int NULL_60323 = 60323;
@@ -31285,5 +31325,12 @@ public final class NullObjectID
 	public static final int NULL_60550 = 60550;
 	public static final int NULL_60565 = 60565;
 	public static final int NULL_60569 = 60569;
+	public static final int NULL_60615 = 60615;
+	public static final int NULL_60617 = 60617;
+	public static final int NULL_60618 = 60618;
+	public static final int NULL_60643 = 60643;
+	public static final int NULL_60646 = 60646;
+	public static final int NULL_60661 = 60661;
+	public static final int NULL_60662 = 60662;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
index 9814fbcbeba..f26d96b5662 100644
--- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
@@ -28508,6 +28508,7 @@ public final class ObjectID
 	public static final int ROCKS_58922 = 58922;
 	public static final int NICKEL_ROCKS = 58923;
 	public static final int ROCKS_58924 = 58924;
+	public static final int CABINET_58925 = 58925;
 	public static final int SCOREBOARD_58926 = 58926;
 	public static final int SCOREBOARD_58927 = 58927;
 	public static final int SCOREBOARD_58928 = 58928;
@@ -28717,6 +28718,7 @@ public final class ObjectID
 	public static final int SAILS_59549 = 59549;
 	public static final int SAILS_59550 = 59550;
 	public static final int SAILS_59551 = 59551;
+	public static final int CREVICE_59552 = 59552;
 	public static final int SAILS_59553 = 59553;
 	public static final int HELM = 59555;
 	public static final int HELM_59556 = 59556;
@@ -29105,48 +29107,9 @@ public final class ObjectID
 	public static final int HELM_60242 = 60242;
 	public static final int SAILS_60243 = 60243;
 	public static final int SAILS_60244 = 60244;
-	public static final int BASIC_CARGO_HOLD = 60245;
-	public static final int BASIC_CARGO_HOLD_60246 = 60246;
-	public static final int OAK_CARGO_HOLD = 60247;
-	public static final int OAK_CARGO_HOLD_60248 = 60248;
-	public static final int TEAK_CARGO_HOLD = 60249;
-	public static final int TEAK_CARGO_HOLD_60250 = 60250;
-	public static final int MAHOGANY_CARGO_HOLD = 60251;
-	public static final int MAHOGANY_CARGO_HOLD_60252 = 60252;
-	public static final int CAMPHOR_CARGO_HOLD = 60253;
-	public static final int CAMPHOR_CARGO_HOLD_60254 = 60254;
-	public static final int IRONWOOD_CARGO_HOLD = 60255;
-	public static final int IRONWOOD_CARGO_HOLD_60256 = 60256;
-	public static final int ROSEWOOD_CARGO_HOLD = 60257;
-	public static final int ROSEWOOD_CARGO_HOLD_60258 = 60258;
-	public static final int BASIC_CARGO_HOLD_60259 = 60259;
-	public static final int BASIC_CARGO_HOLD_60260 = 60260;
-	public static final int OAK_CARGO_HOLD_60261 = 60261;
-	public static final int OAK_CARGO_HOLD_60262 = 60262;
-	public static final int TEAK_CARGO_HOLD_60263 = 60263;
-	public static final int TEAK_CARGO_HOLD_60264 = 60264;
-	public static final int MAHOGANY_CARGO_HOLD_60265 = 60265;
-	public static final int MAHOGANY_CARGO_HOLD_60266 = 60266;
-	public static final int CAMPHOR_CARGO_HOLD_60267 = 60267;
-	public static final int CAMPHOR_CARGO_HOLD_60268 = 60268;
-	public static final int IRONWOOD_CARGO_HOLD_60269 = 60269;
-	public static final int IRONWOOD_CARGO_HOLD_60270 = 60270;
-	public static final int ROSEWOOD_CARGO_HOLD_60271 = 60271;
-	public static final int ROSEWOOD_CARGO_HOLD_60272 = 60272;
-	public static final int BASIC_CARGO_HOLD_60273 = 60273;
-	public static final int BASIC_CARGO_HOLD_60274 = 60274;
-	public static final int OAK_CARGO_HOLD_60275 = 60275;
-	public static final int OAK_CARGO_HOLD_60276 = 60276;
-	public static final int TEAK_CARGO_HOLD_60277 = 60277;
-	public static final int TEAK_CARGO_HOLD_60278 = 60278;
-	public static final int MAHOGANY_CARGO_HOLD_60279 = 60279;
-	public static final int MAHOGANY_CARGO_HOLD_60280 = 60280;
-	public static final int CAMPHOR_CARGO_HOLD_60281 = 60281;
-	public static final int CAMPHOR_CARGO_HOLD_60282 = 60282;
-	public static final int IRONWOOD_CARGO_HOLD_60283 = 60283;
-	public static final int IRONWOOD_CARGO_HOLD_60284 = 60284;
-	public static final int ROSEWOOD_CARGO_HOLD_60285 = 60285;
-	public static final int ROSEWOOD_CARGO_HOLD_60286 = 60286;
+	public static final int DEADMANS_CHEST = 60246;
+	public static final int DEADMANS_CHEST_60248 = 60248;
+	public static final int DEADMANS_CHEST_60250 = 60250;
 	public static final int NOTICE_BOARD_60287 = 60287;
 	public static final int NOTICE_BOARD_60288 = 60288;
 	public static final int NOTICE_BOARD_60289 = 60289;
@@ -29281,5 +29244,83 @@ public final class ObjectID
 	public static final int SHRIMP = 60573;
 	public static final int HAROLD = 60574;
 	public static final int TENTACLE_60575 = 60575;
+	public static final int TABLE_60576 = 60576;
+	public static final int BASIC_CARGO_HOLD = 60577;
+	public static final int TABLE_60578 = 60578;
+	public static final int TABLE_60579 = 60579;
+	public static final int TABLE_60580 = 60580;
+	public static final int BASIC_CARGO_HOLD_60581 = 60581;
+	public static final int OAK_CARGO_HOLD = 60582;
+	public static final int OAK_CARGO_HOLD_60583 = 60583;
+	public static final int TEAK_CARGO_HOLD = 60584;
+	public static final int BAR_60585 = 60585;
+	public static final int TEAK_CARGO_HOLD_60586 = 60586;
+	public static final int BAR_60587 = 60587;
+	public static final int MAHOGANY_CARGO_HOLD = 60588;
+	public static final int BAR_60589 = 60589;
+	public static final int MAHOGANY_CARGO_HOLD_60590 = 60590;
+	public static final int BAR_60591 = 60591;
+	public static final int CAMPHOR_CARGO_HOLD = 60592;
+	public static final int BAR_60593 = 60593;
+	public static final int CAMPHOR_CARGO_HOLD_60594 = 60594;
+	public static final int BAR_60595 = 60595;
+	public static final int IRONWOOD_CARGO_HOLD = 60596;
+	public static final int BAR_60597 = 60597;
+	public static final int IRONWOOD_CARGO_HOLD_60598 = 60598;
+	public static final int BAR_60599 = 60599;
+	public static final int BAR_60600 = 60600;
+	public static final int ROSEWOOD_CARGO_HOLD = 60601;
+	public static final int ROSEWOOD_CARGO_HOLD_60602 = 60602;
+	public static final int BASIC_CARGO_HOLD_60603 = 60603;
+	public static final int BASIC_CARGO_HOLD_60604 = 60604;
+	public static final int OAK_CARGO_HOLD_60605 = 60605;
+	public static final int OAK_CARGO_HOLD_60606 = 60606;
+	public static final int TEAK_CARGO_HOLD_60607 = 60607;
+	public static final int CRATE_60608 = 60608;
+	public static final int CRATE_60609 = 60609;
+	public static final int CRATE_60610 = 60610;
+	public static final int CRATE_60611 = 60611;
+	public static final int CRATE_60612 = 60612;
+	public static final int CRATE_60613 = 60613;
+	public static final int CRATE_60614 = 60614;
+	public static final int SNOWBALL_PILE_60616 = 60616;
+	public static final int SHELLBANE_GRYPHON_DISPLAY = 60619;
+	public static final int TEAK_CARGO_HOLD_60620 = 60620;
+	public static final int MAHOGANY_CARGO_HOLD_60621 = 60621;
+	public static final int MAHOGANY_CARGO_HOLD_60622 = 60622;
+	public static final int CAMPHOR_CARGO_HOLD_60623 = 60623;
+	public static final int CAMPHOR_CARGO_HOLD_60624 = 60624;
+	public static final int IRONWOOD_CARGO_HOLD_60625 = 60625;
+	public static final int IRONWOOD_CARGO_HOLD_60626 = 60626;
+	public static final int ROSEWOOD_CARGO_HOLD_60627 = 60627;
+	public static final int ROSEWOOD_CARGO_HOLD_60628 = 60628;
+	public static final int BASIC_CARGO_HOLD_60629 = 60629;
+	public static final int BASIC_CARGO_HOLD_60630 = 60630;
+	public static final int OAK_CARGO_HOLD_60631 = 60631;
+	public static final int OAK_CARGO_HOLD_60632 = 60632;
+	public static final int TEAK_CARGO_HOLD_60633 = 60633;
+	public static final int TEAK_CARGO_HOLD_60634 = 60634;
+	public static final int MAHOGANY_CARGO_HOLD_60635 = 60635;
+	public static final int MAHOGANY_CARGO_HOLD_60636 = 60636;
+	public static final int CAMPHOR_CARGO_HOLD_60637 = 60637;
+	public static final int CAMPHOR_CARGO_HOLD_60638 = 60638;
+	public static final int IRONWOOD_CARGO_HOLD_60639 = 60639;
+	public static final int IRONWOOD_CARGO_HOLD_60640 = 60640;
+	public static final int ROSEWOOD_CARGO_HOLD_60641 = 60641;
+	public static final int ROSEWOOD_CARGO_HOLD_60642 = 60642;
+	public static final int STAINEDGLASS_WINDOW_60647 = 60647;
+	public static final int STAINEDGLASS_WINDOW_60648 = 60648;
+	public static final int SHUTTERED_WINDOW_60649 = 60649;
+	public static final int DECORATIVE_WINDOW_60650 = 60650;
+	public static final int STAINEDGLASS_WINDOW_60651 = 60651;
+	public static final int DECORATIVE_WINDOW_60652 = 60652;
+	public static final int STAINEDGLASS_WINDOW_60653 = 60653;
+	public static final int DECORATIVE_WINDOW_60654 = 60654;
+	public static final int STAINEDGLASS_WINDOW_60655 = 60655;
+	public static final int DECORATIVE_WINDOW_60656 = 60656;
+	public static final int STAINEDGLASS_WINDOW_60657 = 60657;
+	public static final int DECORATIVE_WINDOW_60658 = 60658;
+	public static final int STAINEDGLASS_WINDOW_60659 = 60659;
+	public static final int WINDOW_SPACE_60660 = 60660;
 /* This file is automatically generated. Do not edit. */
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java
index aa3b2098c78..c8cd4e1b5d7 100644
--- a/runelite-api/src/main/java/net/runelite/api/Perspective.java
+++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java
@@ -122,8 +122,8 @@ public static Point localToCanvas(@Nonnull Client client, @Nonnull LocalPoint po
 			}
 
 			LocalPoint entityLocation = we.getLocalLocation();
-			int height = getTileHeight(we.getWorldView(), point.getX(), point.getY(), plane); // height in wv
-			height += getTileHeight(wv, entityLocation.getX(), entityLocation.getY(), wv.getPlane()); // height of we
+			int height = we.getWorldView().getTileHeight(point.getX(), point.getY(), plane); // height in wv
+			height += wv.getTileHeight(entityLocation.getX(), entityLocation.getY(), wv.getPlane()); // height of we
 			height -= heightOffset;
 
 			WorldView subWv = we.getWorldView();
@@ -661,30 +661,6 @@ public static int getFootprintTileHeight(@Nonnull Client client, @Nonnull LocalP
 		return h;
 	}
 
-	/**
-	 * Get the height of a location, in local coordinates. Interpolates the height from the adjacent tiles.
-	 * Does not account for bridges.
-	 * @return
-	 */
-	private static int getTileHeight(@Nonnull WorldView wv, int localX, int localY, int plane)
-	{
-		int offset = wv.isTopLevel() ? ESCENE_OFFSET : 0;
-		int sceneX = (localX >> LOCAL_COORD_BITS) + offset;
-		int sceneY = (localY >> LOCAL_COORD_BITS) + offset;
-		if (sceneX >= 0 && sceneY >= 0 && sceneX < wv.getSizeX() + offset && sceneY < wv.getSizeY() + offset)
-		{
-			int[][][] tileHeights = wv.getScene().getTileHeights();
-
-			int x = localX & (LOCAL_TILE_SIZE - 1);
-			int y = localY & (LOCAL_TILE_SIZE - 1);
-			int var8 = x * tileHeights[plane][sceneX + 1][sceneY] + (LOCAL_TILE_SIZE - x) * tileHeights[plane][sceneX][sceneY] >> LOCAL_COORD_BITS;
-			int var9 = tileHeights[plane][sceneX][sceneY + 1] * (LOCAL_TILE_SIZE - x) + x * tileHeights[plane][sceneX + 1][sceneY + 1] >> LOCAL_COORD_BITS;
-			return (LOCAL_TILE_SIZE - y) * var8 + y * var9 >> LOCAL_COORD_BITS;
-		}
-
-		return 0;
-	}
-
 	/**
 	 * Calculates a tile polygon from offset worldToScreen() points.
 	 *
@@ -751,10 +727,11 @@ public static Polygon getCanvasTileAreaPoly(
 		}
 
 		int offset = wv.isTopLevel() ? ESCENE_OFFSET : 0;
+		int escene = offset << 1;
 		final int msx = localLocation.getSceneX() + offset;
 		final int msy = localLocation.getSceneY() + offset;
 
-		if (msx < 0 || msy < 0 || msx >= wv.getSizeX() + offset || msy >= wv.getSizeY() + offset)
+		if (msx < 0 || msy < 0 || msx >= wv.getSizeX() + escene || msy >= wv.getSizeY() + escene)
 		{
 			// out of scene
 			return null;
@@ -768,10 +745,10 @@ public static Polygon getCanvasTileAreaPoly(
 		var scene = wv.getScene();
 		final byte[][][] tileSettings = scene.getExtendedTileSettings();
 
-		int tilePlane = level;
+		int mapLevel = level;
 		if (level < Constants.MAX_Z - 1 && (tileSettings[1][msx][msy] & TILE_FLAG_BRIDGE) == TILE_FLAG_BRIDGE)
 		{
-			tilePlane = level + 1;
+			mapLevel = level + 1;
 		}
 
 		final int swX = localLocation.getX() - (sizeX * LOCAL_TILE_SIZE / 2);
@@ -786,10 +763,10 @@ public static Polygon getCanvasTileAreaPoly(
 		final int nwX = neX;
 		final int nwY = swY;
 
-		final int swHeight = getTileHeight(wv, swX, swY, tilePlane) - heightOffset;
-		final int nwHeight = getTileHeight(wv, nwX, nwY, tilePlane) - heightOffset;
-		final int neHeight = getTileHeight(wv, neX, neY, tilePlane) - heightOffset;
-		final int seHeight = getTileHeight(wv, seX, seY, tilePlane) - heightOffset;
+		final int swHeight = wv.getTileHeight(swX, swY, mapLevel) - heightOffset;
+		final int nwHeight = wv.getTileHeight(nwX, nwY, mapLevel) - heightOffset;
+		final int neHeight = wv.getTileHeight(neX, neY, mapLevel) - heightOffset;
+		final int seHeight = wv.getTileHeight(seX, seY, mapLevel) - heightOffset;
 
 		Point p1 = localToCanvas(client, wv.getId(), swX, swY, swHeight);
 		Point p2 = localToCanvas(client, wv.getId(), nwX, nwY, nwHeight);
diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java
index 5771c500d83..fdd2e252bf2 100644
--- a/runelite-api/src/main/java/net/runelite/api/Player.java
+++ b/runelite-api/src/main/java/net/runelite/api/Player.java
@@ -24,7 +24,6 @@
  */
 package net.runelite.api;
 
-import java.awt.Polygon;
 import org.intellij.lang.annotations.MagicConstant;
 
 /**
@@ -49,13 +48,6 @@ public interface Player extends Actor
 	 */
 	PlayerComposition getPlayerComposition();
 
-	/**
-	 * Gets the polygons that make up the players model.
-	 *
-	 * @return the model polygons
-	 */
-	Polygon[] getPolygons();
-
 	/**
 	 * Gets the current team cape team number the player is on.
 	 *
diff --git a/runelite-api/src/main/java/net/runelite/api/Projection.java b/runelite-api/src/main/java/net/runelite/api/Projection.java
index 288714c99f3..5d6027fd8da 100644
--- a/runelite-api/src/main/java/net/runelite/api/Projection.java
+++ b/runelite-api/src/main/java/net/runelite/api/Projection.java
@@ -27,4 +27,6 @@
 public interface Projection
 {
 	float[] project(float x, float y, float z);
+
+	float[] project(float x, float y, float z, float[] out);
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/Quest.java b/runelite-api/src/main/java/net/runelite/api/Quest.java
index e042e514032..8d4b9e2988e 100644
--- a/runelite-api/src/main/java/net/runelite/api/Quest.java
+++ b/runelite-api/src/main/java/net/runelite/api/Quest.java
@@ -231,8 +231,6 @@ public enum Quest
 	THE_FINAL_DAWN(5189, "The Final Dawn"),
 	SHADOWS_OF_CUSTODIA(5190, "Shadows of Custodia"),
 	SCRAMBLED(5191, "Scrambled!"),
-	AN_EXISTENTIAL_CRISIS(5192, "An Existential Crisis"),
-	IMPENDING_CHAOS(5193, "Impending Chaos"),
 	VALE_TOTEMS(5194, "Vale Totems"),
 	TUTORIAL_ISLAND(7033, "Tutorial Island"),
 	PANDEMONIUM(7103, "Pandemonium"),
@@ -240,7 +238,6 @@ public enum Quest
 	CURRENT_AFFAIRS(7105, "Current Affairs"),
 	TROUBLED_TORTUGANS(7106, "Troubled Tortugans"),
 	THE_RED_REEF(7107, "The Red Reef"),
-	BURIAL_AT_SEA(7108, "Burial at Sea"),
 	;
 
 	@Getter
diff --git a/runelite-api/src/main/java/net/runelite/api/Renderable.java b/runelite-api/src/main/java/net/runelite/api/Renderable.java
index b47d52fcd28..b3162b3e91b 100644
--- a/runelite-api/src/main/java/net/runelite/api/Renderable.java
+++ b/runelite-api/src/main/java/net/runelite/api/Renderable.java
@@ -24,6 +24,8 @@
  */
 package net.runelite.api;
 
+import org.intellij.lang.annotations.MagicConstant;
+
 /**
  * Represents an object that can be rendered.
  */
@@ -42,4 +44,12 @@ public interface Renderable extends Node
 	void setModelHeight(int modelHeight);
 
 	int getAnimationHeightOffset();
+
+	@MagicConstant(intValues = {RENDERMODE_DEFAULT, RENDERMODE_SORTED, RENDERMODE_SORTED_NO_DEPTH, RENDERMODE_UNSORTED})
+	int getRenderMode();
+
+	int RENDERMODE_DEFAULT = 0;
+	int RENDERMODE_SORTED = 1;
+	int RENDERMODE_SORTED_NO_DEPTH = 2;
+	int RENDERMODE_UNSORTED = 3;
 }
diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
index 57921c24880..82758bcea62 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java
@@ -272,7 +272,7 @@ public final class ScriptID
 	 * 
  • int (WidgetID) * 16, various widgets making up the bank interface
  • * */ - @ScriptArguments(integer = 17) + @ScriptArguments(integer = 20) public static final int BANKMAIN_SEARCH_REFRESH = 283; @ScriptArguments(integer = 6) @@ -308,7 +308,7 @@ public final class ScriptID @ScriptArguments(integer = 4, string = 1) public static final int XPDROPS_SETDROPSIZE = 996; - @ScriptArguments(integer = 34) + @ScriptArguments(integer = 35) public static final int BANKMAIN_INIT = 274; /** @@ -317,10 +317,10 @@ public final class ScriptID *
  • int (WidgetID) * 17, various widgets making up the bank interface
  • * */ - @ScriptArguments(integer = 17) + @ScriptArguments(integer = 20) public static final int BANKMAIN_BUILD = 277; - @ScriptArguments(integer = 19) + @ScriptArguments(integer = 22) public static final int BANKMAIN_FINISHBUILDING = 505; @ScriptArguments() @@ -337,7 +337,7 @@ public final class ScriptID * These can be retrieved from the onInvTransmitListener of BANK_ITEM_CONTAINER. Note that this array also * contains the script ID for the bank layout script in the first index */ - @ScriptArguments(integer = 18) + @ScriptArguments(integer = 21) public static final int BANKMAIN_SEARCH_TOGGLE = 281; @ScriptArguments(integer = 6) @@ -477,7 +477,7 @@ public final class ScriptID @ScriptArguments(integer = 3) public static final int POTIONSTORE_DOSE_CHANGE = 6555; - @ScriptArguments(integer = 5) + @ScriptArguments(integer = 6) public static final int FAIRYRINGS_SORT_UPDATE = 402; @ScriptArguments(integer = 1, string = 1) @@ -500,4 +500,7 @@ public final class ScriptID @ScriptArguments(integer = 6, string = 9) public static final int INTERFACE_INV_DRAW_SLOT_BIG = 154; + + @ScriptArguments(integer = 4) + public static final int BANKMAIN_POPUP_TAB_DRAW = 9221; } diff --git a/runelite-api/src/main/java/net/runelite/api/WorldView.java b/runelite-api/src/main/java/net/runelite/api/WorldView.java index 01bf39cb8fe..34c1636d9f7 100644 --- a/runelite-api/src/main/java/net/runelite/api/WorldView.java +++ b/runelite-api/src/main/java/net/runelite/api/WorldView.java @@ -264,4 +264,10 @@ Projectile createProjectile(int id, int plane, int startX, int startY, int start */ @MagicConstant(intValues = {Constants.CLICK_ACTION_NONE, Constants.CLICK_ACTION_WALK, Constants.CLICK_ACTION_SET_HEADING}) int getYellowClickAction(); + + /** + * Gets the tile height at the given coordinates, interpolating the height from adjacent tiles. + * @return + */ + int getTileHeight(int x, int y, int maplevel); } diff --git a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java index cefa4b1be08..36c3e7ea98e 100644 --- a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java +++ b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java @@ -33,6 +33,7 @@ import net.runelite.api.Client; import static net.runelite.api.Constants.CHUNK_SIZE; import static net.runelite.api.Constants.REGION_SIZE; +import static net.runelite.api.Constants.SCENE_SIZE; import net.runelite.api.Perspective; import net.runelite.api.Scene; import net.runelite.api.WorldView; @@ -298,8 +299,11 @@ private static WorldPoint fromLocalInstance(int[][][] instanceTemplateChunks, Lo int chunkX = sceneX / CHUNK_SIZE; int chunkY = sceneY / CHUNK_SIZE; - // get the template chunk for the chunk - int templateChunk = instanceTemplateChunks[plane][chunkX][chunkY]; + int templateChunk = -1; + if (chunkX >= 0 && chunkX < (SCENE_SIZE / CHUNK_SIZE) && chunkY >= 0 && chunkY < (SCENE_SIZE / CHUNK_SIZE)) + { + templateChunk = instanceTemplateChunks[plane][chunkX][chunkY]; + } int rotation = templateChunk >> 1 & 0x3; int templateChunkY = (templateChunk >> 3 & 0x7FF) * CHUNK_SIZE; diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java index 2cb67272d86..967aca8d874 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java @@ -13693,5 +13693,28 @@ public final class AnimationID public static final int VFX_WIND_SAIL_3X10_SPEEDBOOST01 = 13693; public static final int HUMAN_WORKBENCH_CRAFTING_LOOP = 13694; public static final int TURTLE_IDLE01_LOOP = 13695; + public static final int HUMAN_XMAS25_CHRISTMAS_DINNER_READY = 13696; + public static final int HUMAN_XMAS25_CHRISTMAS_DINNER_WALK_F = 13697; + public static final int HUMAN_XMAS25_CHRISTMAS_DINNER_WALK_B = 13698; + public static final int HUMAN_XMAS25_CHRISTMAS_DINNER_RUN = 13699; + public static final int HUMAN_XMAS25_CHRISTMAS_DINNER_ATTACK = 13700; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_FULL = 13701; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_01 = 13702; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_02 = 13703; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_03 = 13704; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_04 = 13705; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_05 = 13706; + public static final int HUMAN_DEADMAN_ANNIHILATION_REWARD_TELEPORT_06 = 13707; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_FULL = 13708; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_01 = 13709; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_02 = 13710; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_03 = 13711; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_04 = 13712; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_05 = 13713; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_06 = 13714; + public static final int DEADMAN_2026_SOTD_SPECIAL_TOXIC_UNCHARGED = 13715; + public static final int DEADMAN_2026_SOTD_SPECIAL_TOXIC_CHARGED = 13716; + public static final int ZUK_SPAWN_NO_ROCK = 13717; + public static final int FEVER_SPIDER_DEATH = 13718; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java index 747de726020..376141b2449 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java @@ -164,45 +164,50 @@ public static final class Quest */ public static final int COL_SPEEDRUN = 31; + /** + * (stat, integer) + */ + public static final int COL_STAT_XP_AWARDED = 33; + /** * integer */ - public static final int COL_PREREQUISITE_DIRECT = 33; + public static final int COL_PREREQUISITE_DIRECT = 34; /** * integer */ - public static final int COL_PREREQUISITE_INDIRECT = 34; + public static final int COL_PREREQUISITE_INDIRECT = 35; /** * integer */ - public static final int COL_FTUE_STARTER = 35; + public static final int COL_FTUE_STARTER = 36; /** * boolean */ - public static final int COL_CR_CAN_RECOMMEND = 36; + public static final int COL_CR_CAN_RECOMMEND = 37; /** * integer */ - public static final int COL_CR_EXPERIENCE_PROFILE = 37; + public static final int COL_CR_EXPERIENCE_PROFILE = 38; /** * string */ - public static final int COL_CR_RECOMMENDATION_REASON = 38; + public static final int COL_CR_RECOMMENDATION_REASON = 39; /** * boolean */ - public static final int COL_CR_RECOMMENDATION_REASON_IS_PRIMARY = 39; + public static final int COL_CR_RECOMMENDATION_REASON_IS_PRIMARY = 40; /** * integer */ - public static final int COL_RELATED_CONTENT = 47; + public static final int COL_RELATED_CONTENT = 48; public static final class Row { @@ -438,6 +443,7 @@ public static final class Row public static final int HALLOWEEN_2024 = 3935; public static final int XMAS_2024 = 4228; public static final int BIRTHDAY_2025 = 4318; + public static final int XMAS_2025 = 4968; public static final int EASTER_2025 = 5107; public static final int HALLOWEEN_2025 = 6989; } @@ -1957,9 +1963,9 @@ public static final class Row public static final int CLUEHELPER_HOTCOLD_MASTER_VARLAMORE_SUNSET = 3488; public static final int CLUEHELPER_HOTCOLD_MASTER_VARLAMORE_BAZAAR = 3489; public static final int CLUEHELPER_HOTCOLD_MASTER_VARLAMORE_ALDARIN_THEATRE = 3689; + public static final int CLUEHELPER_HOTCOLD_MASTER_SAIL_BUCCANEERS_HAVEN = 4963; public static final int CLUEHELPER_HOTCOLD_MASTER_VARLAMORE_RAINFOREST_CENTRE = 5182; public static final int CLUEHELPER_HOTCOLD_MASTER_SAIL_GREAT_CONCH = 7051; - public static final int CLUEHELPER_HOTCOLD_MASTER_SAIL_ISLE_OF_SERPENTS = 7052; public static final int CLUEHELPER_HOTCOLD_MASTER_SAIL_DRUMSTICK_ISLE = 7053; } } @@ -3078,6 +3084,7 @@ public static final class Row public static final int CLUEHELPER_TARGET_COORD_0_26_50_30_47 = 3810; public static final int CLUEHELPER_TARGET_COORD_0_25_51_10_38 = 3811; public static final int CLUEHELPER_TARGET_COORD_1_25_83_40_54 = 3936; + public static final int CLUEHELPER_TARGET_COORD_0_32_57_30_17 = 4964; public static final int CLUEHELPER_TARGET_COORD_VARLAMORE_RAINFOREST_CENTRE = 5172; public static final int CLUEHELPER_TARGET_COORD_0_20_51_41_59 = 5173; public static final int CLUEHELPER_TARGET_COORD_0_58_60_52_60 = 6152; @@ -3089,7 +3096,6 @@ public static final class Row public static final int CLUEHELPER_TARGET_COORD_0_32_49_33_48 = 7064; public static final int CLUEHELPER_TARGET_COORD_0_30_63_26_42 = 7065; public static final int CLUEHELPER_TARGET_COORD_0_50_36_49_45 = 7066; - public static final int CLUEHELPER_TARGET_COORD_0_29_37_0_47 = 7067; public static final int CLUEHELPER_TARGET_COORD_0_33_55_27_42 = 7068; public static final int CLUEHELPER_TARGET_COORD_0_32_40_21_48 = 7069; } @@ -4422,6 +4428,7 @@ public static final class Row public static final int ENT_TOTEMS_SHOP = 5458; public static final int ENT_TOTEMS_SHOP_IRONMAN = 5459; public static final int SAILING_BOAT_SHOP = 8548; + public static final int DEADMAN_SKULL_SHOP = 9575; } } @@ -4529,6 +4536,16 @@ public static final class OmnishopStockData */ public static final int COL_OMNISHOP_STOCK_DESCRIPTION_DYNAMIC = 22; + /** + * boolean + */ + public static final int COL_OMNISHOP_STOCK_USE_SHORTNAME = 23; + + /** + * string + */ + public static final int COL_OMNISHOP_STOCK_SHORTNAME = 24; + public static final class Row { public static final int DEADMAN_SHOP_2024_WEAPON_ORNAMENT_SCROLL = 1355; @@ -4739,6 +4756,70 @@ public static final class Row public static final int SAILING_SHIP_STOCK_RAFT = 8549; public static final int SAILING_SHIP_STOCK_SKIFF = 8550; public static final int SAILING_SHIP_STOCK_SLOOP = 8551; + public static final int DEADMAN_SHOP_2026_WEAPON_ORNAMENT_SCROLL = 9572; + public static final int DEADMAN_SHOP_2026_POH_ORNAMENT_SCROLL = 9573; + public static final int DEADMAN_SHOP_2026_HOME_TELEPORT_SCROLL = 9574; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_AGILE_FORTUNE = 9577; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_HOARDING = 9578; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_DECEPTION = 9579; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_LITHE = 9580; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_FOOD_MASTER = 9581; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_WELL_FED = 9582; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_POTION_MASTER = 9583; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_TREASURE_HUNTER = 9584; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_HUNTER = 9585; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_INFERNAL_CHEF = 9586; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_NATURE = 9587; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_DEVOTION = 9588; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_FAITH = 9589; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_ALCHEMANIAC = 9590; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_RESISTANCE = 9591; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_DEFT_STRIKES = 9592; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_AUGMENTED_THRALL = 9593; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_ONSLAUGHT = 9594; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_RESTORATION = 9595; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_TITANIUM = 9596; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_METICULOUSNESS = 9597; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_ENHANCED_HARVEST = 9598; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_SLAUGHTER = 9599; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_WOODCRAFT = 9600; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_REMOTE_STORAGE = 9601; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_CONSISTENCY = 9602; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_RIGOROUS_RANGER = 9603; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_METICULOUS_MAGE = 9604; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_LIGHTBEARER = 9605; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_SPECIALISED_STRIKES = 9606; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_PORCUPINE = 9607; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_FORTIFICATION = 9608; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_RUTHLESS_RANGER = 9609; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_FORMIDABLE_FIGHTER = 9610; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_MENACING_MAGE = 9611; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_SWASHBUCKLER = 9612; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_GUNSLINGER = 9613; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_ARCANE_SWIFTNESS = 9614; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_ADROIT = 9615; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_BARROWS = 9616; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_FINALITY = 9617; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_PIOUS_PROTECTION = 9618; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_AGGRESSION = 9619; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_RAMPAGE = 9620; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_THE_GODS = 9621; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_REVOKED_LIMITATION = 9622; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_CONCLUSION = 9623; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_AUTOMATION = 9624; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_ETERNAL_BELIEF = 9625; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_EFFICIENCY = 9626; + public static final int DEADMAN_SKULL_SHOP_SIGIL_OF_RUINOUS_PRAYER_BOOK = 9627; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_RECIPE_FOR_DISASTER = 9628; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_CAMELOT_STORYLINE = 9629; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_FREMENNIK_STORYLINE = 9630; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_ELF_STORYLINE = 9631; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_GNOME_STORYLINE = 9632; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_KHARIDIAN_STORYLINE = 9633; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_MYREQUE_STORYLINE = 9634; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_DRAGONKIN_STORYLINE = 9635; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_MAHJARRAT_STORYLINE_1 = 9636; + public static final int DEADMAN_SKULL_SHOP_QUEST_LAMP_MAHJARRAT_STORYLINE_2 = 9637; } } @@ -4811,6 +4892,7 @@ public static final class Row public static final int OMNISHOP_CURRENCY_CW_TICKETS = 5104; public static final int OMNISHOP_CURRENCY_CW_PLAUDITS = 5105; public static final int OMNISHOP_CURRENCY_ENT_TOTEMS_RESEARCH_POINTS = 5460; + public static final int OMNISHOP_CURRENCY_DEADMAN_SKULL_POINTS = 9576; } } @@ -5724,6 +5806,7 @@ public static final class Row public static final int MUSIC_THE_HEIST = 3971; public static final int MUSIC_HEAVY_SECURITY = 3972; public static final int MUSIC_THE_PLUNDERED_TOMB = 3973; + public static final int MUSIC_CHRISTMAS_2025 = 4969; public static final int MUSIC_YAMA_COMBAT = 5154; public static final int MUSIC_TLATI_RAINFOREST = 5377; public static final int MUSIC_AUBURN_VALLEY_1 = 5378; @@ -6562,6 +6645,21 @@ public static final class Row } } + public static final class DynamicBuildersDemoSets + { + public static final int ID = 76; + + /** + * (struct, integer, integer, string, boolean) + */ + public static final int COL_BUTTON_STYLES = 0; + + public static final class Row + { + public static final int DYNAMIC_BUILDERS_DEMO = 4965; + } + } + public static final class PrepotDeviceLoadoutUi { public static final int ID = 77; @@ -9365,15 +9463,20 @@ public static final class SlayerTask */ public static final int COL_EXTENSION_MIN_MAX = 15; + /** + * (dbrow, integer, integer) + */ + public static final int COL_EXTENSION_ADDITIVE = 16; + /** * dbrow */ - public static final int COL_BLOCK_UNLOCK = 16; + public static final int COL_BLOCK_UNLOCK = 17; /** * integer */ - public static final int COL_RELATED_CONTENT = 17; + public static final int COL_RELATED_CONTENT = 18; public static final class Row { @@ -9935,6 +10038,11 @@ public static final class SlayerArea */ public static final int COL_AREA_NAME_IN_HELPER = 3; + /** + * string + */ + public static final int COL_AREA_HINT = 4; + /** * integer */ @@ -10163,6 +10271,8 @@ public static final class Row public static final int SLAYER_REWARDS_LONGER_AQUANITES = 9418; public static final int SLAYER_REWARDS_LONGER_WYRMS = 9419; public static final int SLAYER_REWARDS_UNLOCK_GRYPHONS = 9420; + public static final int SLAYER_REWARDS_UNLOCK_HELM_HOODED = 9641; + public static final int SLAYER_REWARDS_LONGER_GRYPHONS = 9642; } } @@ -12854,62 +12964,67 @@ public static final class SailingBoatFacilityStats /** * integer */ - public static final int COL_BOAT_BASESPEED = 23; + public static final int COL_BOAT_CRYSTALHELM_RESISTANCE = 23; + + /** + * integer + */ + public static final int COL_BOAT_BASESPEED = 24; /** * integer */ - public static final int COL_BOAT_SPEEDCAP = 24; + public static final int COL_BOAT_SPEEDCAP = 25; /** * integer */ - public static final int COL_BOAT_ACCELERATION = 25; + public static final int COL_BOAT_ACCELERATION = 26; /** * integer */ - public static final int COL_BOAT_SPEEDBOOST_DURATION = 26; + public static final int COL_BOAT_SPEEDBOOST_DURATION = 27; /** * integer */ - public static final int COL_BOAT_CARGOHOLD_SIZE = 27; + public static final int COL_BOAT_CARGOHOLD_SIZE = 28; /** * integer */ - public static final int COL_BOAT_CARGOHOLD_SIZE_UIM = 28; + public static final int COL_BOAT_CARGOHOLD_SIZE_UIM = 29; /** * integer */ - public static final int COL_BOAT_FETID_WATER_RESISTANT = 29; + public static final int COL_BOAT_FETID_WATER_RESISTANT = 30; /** * integer */ - public static final int COL_BOAT_CRYSTAL_FLECKED_RESISTANT = 30; + public static final int COL_BOAT_CRYSTAL_FLECKED_RESISTANT = 31; /** * integer */ - public static final int COL_BOAT_TANGLED_KELP_RESISTANT = 31; + public static final int COL_BOAT_TANGLED_KELP_RESISTANT = 32; /** * integer */ - public static final int COL_BOAT_ICY_SEAS_RESISTANT = 32; + public static final int COL_BOAT_ICY_SEAS_RESISTANT = 33; /** * integer */ - public static final int COL_BOAT_MAX_WIND_MOTES = 33; + public static final int COL_BOAT_MAX_WIND_MOTES = 34; /** * integer */ - public static final int COL_BOAT_ADDITIONAL_RECOVERY_COST_PERCENTAGE = 34; + public static final int COL_BOAT_ADDITIONAL_RECOVERY_COST_PERCENTAGE = 35; public static final class Row { @@ -13589,6 +13704,11 @@ public static final class SailingBoatFacility */ public static final int COL_FACILITY_CUSTOMISATION_ORDER = 25; + /** + * integer + */ + public static final int COL_FACILITY_BOTTLE_ID = 26; + public static final class Row { public static final int SAILING_BOAT_FACILITY_BRONZE_CANNON = 8427; @@ -14657,6 +14777,11 @@ public static final class SailingDock */ public static final int COL_LEVEL_REQUIRED = 4; + /** + * dbrow + */ + public static final int COL_QUEST_REQUIRED = 5; + /** * graphic */ @@ -14898,6 +15023,8 @@ public static final class PortTask public static final class Row { + public static final int PORT_TASK_RELLEKKA_COURIER_19 = 4966; + public static final int PORT_TASK_RELLEKKA_COURIER_20 = 4967; public static final int PORT_TASK_PORT_SARIM_COURIER_0 = 8664; public static final int PORT_TASK_PORT_SARIM_COURIER_1 = 8665; public static final int PORT_TASK_PORT_SARIM_COURIER_2 = 8666; @@ -15866,5 +15993,222 @@ public static final class Row public static final int CHARTERING_COSTS = 9454; } } + + public static final class PatchyData + { + public static final int ID = 208; + + /** + * integer + */ + public static final int COL_ID = 0; + + /** + * namedobj + */ + public static final int COL_COMBINED = 1; + + /** + * (namedobj, namedobj) + */ + public static final int COL_INGREDIENTS = 2; + + public static final class Row + { + public static final int PATCHY_DATA_BIG_HAT_EYEPATCH = 4970; + public static final int PATCHY_DATA_SMALL_HAT_EYEPATCH = 5121; + public static final int PATCHY_DATA_BANDANA_EYEPATCH_BLUE = 5122; + public static final int PATCHY_DATA_BANDANA_EYEPATCH_BROWN = 7052; + public static final int PATCHY_DATA_BANDANA_EYEPATCH_RED = 7067; + public static final int PATCHY_DATA_BANDANA_EYEPATCH_WHITE = 9455; + public static final int PATCHY_DATA_HAT_CAVALIER_MASK = 9456; + public static final int PATCHY_DATA_DOUBLE_EYE_PATCH = 9457; + public static final int PATCHY_DATA_HAT_BERRET_MIME_MASK = 9458; + public static final int PATCHY_DATA_WOM_HEAD = 9459; + public static final int PATCHY_DATA_TOPHAT_MONACLE = 9460; + public static final int PATCHY_DATA_CRABCLAW_HOOK = 9461; + public static final int PATCHY_DATA_DARK_FLIPPERS = 9462; + } + } + + public static final class SkillGuideV2InlineIcon + { + public static final int ID = 209; + + /** + * integer + */ + public static final int COL_ID = 0; + + /** + * graphic + */ + public static final int COL_GRAPHIC = 1; + + /** + * (integer, integer) + */ + public static final int COL_SIZE = 2; + + /** + * (integer, integer) + */ + public static final int COL_OFFSET = 3; + + /** + * (integer, integer) + */ + public static final int COL_MARGIN = 4; + + public static final class Row + { + public static final int SKILL_GUIDE_V2_ICON_ATTACK = 9463; + public static final int SKILL_GUIDE_V2_ICON_STRENGTH = 9464; + public static final int SKILL_GUIDE_V2_ICON_DEFENCE = 9465; + public static final int SKILL_GUIDE_V2_ICON_RANGED = 9466; + public static final int SKILL_GUIDE_V2_ICON_PRAYER = 9467; + public static final int SKILL_GUIDE_V2_ICON_MAGIC = 9468; + public static final int SKILL_GUIDE_V2_ICON_RUNECRAFT = 9469; + public static final int SKILL_GUIDE_V2_ICON_HITPOINTS = 9470; + public static final int SKILL_GUIDE_V2_ICON_AGILITY = 9471; + public static final int SKILL_GUIDE_V2_ICON_HERBLORE = 9472; + public static final int SKILL_GUIDE_V2_ICON_THIEVING = 9473; + public static final int SKILL_GUIDE_V2_ICON_CRAFTING = 9474; + public static final int SKILL_GUIDE_V2_ICON_FLETCHING = 9475; + public static final int SKILL_GUIDE_V2_ICON_MINING = 9476; + public static final int SKILL_GUIDE_V2_ICON_SMITHING = 9477; + public static final int SKILL_GUIDE_V2_ICON_FISHING = 9478; + public static final int SKILL_GUIDE_V2_ICON_COOKING = 9479; + public static final int SKILL_GUIDE_V2_ICON_FIREMAKING = 9480; + public static final int SKILL_GUIDE_V2_ICON_WOODCUTTING = 9481; + public static final int SKILL_GUIDE_V2_ICON_SLAYER = 9482; + public static final int SKILL_GUIDE_V2_ICON_FARMING = 9483; + public static final int SKILL_GUIDE_V2_ICON_CONSTRUCTION = 9484; + public static final int SKILL_GUIDE_V2_ICON_HUNTER = 9485; + public static final int SKILL_GUIDE_V2_ICON_SAILING = 9486; + public static final int SKILL_GUIDE_V2_ICON_MAP_AGILITY_SHORTCUT = 9487; + public static final int SKILL_GUIDE_V2_ICON_MAP_ALTAR = 9488; + public static final int SKILL_GUIDE_V2_ICON_MAP_ANVIL = 9489; + public static final int SKILL_GUIDE_V2_ICON_MAP_ARCHERY_SHOP = 9490; + public static final int SKILL_GUIDE_V2_ICON_MAP_AXE_SHOP = 9491; + public static final int SKILL_GUIDE_V2_ICON_MAP_BANK = 9492; + public static final int SKILL_GUIDE_V2_ICON_MAP_CLOTHES_SHOP = 9493; + public static final int SKILL_GUIDE_V2_ICON_MAP_COOKING_RANGE = 9494; + public static final int SKILL_GUIDE_V2_ICON_MAP_CRAFTING_SHOP = 9495; + public static final int SKILL_GUIDE_V2_ICON_MAP_ESTATE_AGENT = 9496; + public static final int SKILL_GUIDE_V2_ICON_MAP_FARMING_PATCH = 9497; + public static final int SKILL_GUIDE_V2_ICON_MAP_FARMING_SHOP = 9498; + public static final int SKILL_GUIDE_V2_ICON_MAP_FISHING_SHOP = 9499; + public static final int SKILL_GUIDE_V2_ICON_MAP_FISHING_SPOT = 9500; + public static final int SKILL_GUIDE_V2_ICON_MAP_FURNACE = 9501; + public static final int SKILL_GUIDE_V2_ICON_MAP_GENERAL_STORE = 9502; + public static final int SKILL_GUIDE_V2_ICON_MAP_GRAND_EXCHANGE = 9503; + public static final int SKILL_GUIDE_V2_ICON_MAP_HELMET_SHOP = 9504; + public static final int SKILL_GUIDE_V2_ICON_MAP_HERBALIST = 9505; + public static final int SKILL_GUIDE_V2_ICON_MAP_HUNTER_STORE = 9506; + public static final int SKILL_GUIDE_V2_ICON_MAP_LOOM = 9507; + public static final int SKILL_GUIDE_V2_ICON_MAP_MAGIC_SHOP = 9508; + public static final int SKILL_GUIDE_V2_ICON_MAP_MINING_SHOP = 9509; + public static final int SKILL_GUIDE_V2_ICON_MAP_MINING_SITE = 9510; + public static final int SKILL_GUIDE_V2_ICON_MAP_PLATEBODY_SHOP = 9511; + public static final int SKILL_GUIDE_V2_ICON_MAP_PLATELEGS_SHOP = 9512; + public static final int SKILL_GUIDE_V2_ICON_MAP_PLATESKIRT_SHOP = 9513; + public static final int SKILL_GUIDE_V2_ICON_MAP_POH_PORTAL = 9514; + public static final int SKILL_GUIDE_V2_ICON_MAP_POTTERY_WHEEL = 9515; + public static final int SKILL_GUIDE_V2_ICON_MAP_RARE_TREES = 9516; + public static final int SKILL_GUIDE_V2_ICON_MAP_SAWMILL = 9517; + public static final int SKILL_GUIDE_V2_ICON_MAP_SWORD_SHOP = 9518; + public static final int SKILL_GUIDE_V2_ICON_MAP_SCIMITAR_SHOP = 9519; + public static final int SKILL_GUIDE_V2_ICON_MAP_SLAYER_MASTER = 9520; + public static final int SKILL_GUIDE_V2_ICON_MAP_SPINNING_WHEEL = 9521; + public static final int SKILL_GUIDE_V2_ICON_MAP_STAFF_SHOP = 9522; + public static final int SKILL_GUIDE_V2_ICON_MAP_TANNERY = 9523; + public static final int SKILL_GUIDE_V2_ICON_MAP_WATER_SOURCE = 9524; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_TUTOR_MINING = 9525; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_TUTOR_FISHING = 9526; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_TUTOR_WOODCUTTING = 9527; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_TUTOR_HUNTER = 9528; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_TUTOR_COMBAT = 9529; + public static final int SKILL_GUIDE_V2_ICON_MAP_ICON_GARDEN_SUPPLIER = 9530; + public static final int SKILL_GUIDE_V2_ICON_MAP_FORESTRY_SHOP = 9531; + public static final int SKILL_GUIDE_V2_ICON_MAP_AGILITY_TRAINING = 9532; + public static final int SKILL_GUIDE_V2_ICON_MAP_PORT_TASK_BOARD = 9533; + public static final int SKILL_GUIDE_V2_ICON_MAP_SALVAGING_SPOT = 9534; + public static final int SKILL_GUIDE_V2_ICON_MAP_BARRACUDA_TRIAL = 9535; + public static final int SKILL_GUIDE_V2_ICON_MAP_FISHING_SHOAL = 9536; + public static final int SKILL_GUIDE_V2_ICON_MAP_SHIPWRIGHT = 9537; + public static final int SKILL_GUIDE_V2_ICON_MAP_DOCKING_POINT = 9538; + public static final int SKILL_GUIDE_V2_ICON_MAP_CREW_REGISTRAR = 9539; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_MISS = 9540; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_DAMAGE = 9541; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_MAXHIT = 9542; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_HEAL = 9543; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_POISON = 9544; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_DISEASE_HEALTH = 9545; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_DISEASE_STAT = 9546; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_VENOM = 9547; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_SHIELD = 9548; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_ARMOUR = 9549; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_CHARGE = 9550; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_UNCHARGE = 9551; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_CORRUPTION = 9552; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_DODGE = 9553; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_CHARGE_BLUE = 9554; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_UNCHARGE_BLUE = 9555; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_POISE = 9556; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_PRAYER_DRAIN = 9557; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_BLEED = 9558; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_SANITY_LOSE = 9559; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_SANITY_GAIN = 9560; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_DOOM = 9561; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_BURN = 9562; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_COLD = 9563; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_CORROSION = 9564; + public static final int SKILL_GUIDE_V2_ICON_HITMARK_BOAT = 9565; + public static final int SKILL_GUIDE_V2_ICON_COMBAT = 9566; + public static final int SKILL_GUIDE_V2_ICON_SPELLBOOK = 9567; + public static final int SKILL_GUIDE_V2_ICON_WIKI = 9568; + public static final int SKILL_GUIDE_V2_ICON_QUEST = 9569; + public static final int SKILL_GUIDE_V2_ICON_SAILING_OPTIONS = 9570; + public static final int SKILL_GUIDE_V2_ICON_CAPTAINS_LOG = 9571; + } + } + + public static final class DeadmanskullInterfaceTab + { + public static final int ID = 210; + + /** + * string + */ + public static final int COL_NAME = 0; + + /** + * integer + */ + public static final int COL_TAB_NUMBER = 1; + + /** + * (struct, dbrow) + */ + public static final int COL_COMBAT_SIGIL = 2; + + /** + * (struct, dbrow) + */ + public static final int COL_SKILLING_SIGIL = 3; + + /** + * (struct, dbrow) + */ + public static final int COL_UTILITY_SIGIL = 4; + + public static final class Row + { + public static final int DEADMANSKULL_INTERFACE_TAB_PERMANENT = 9638; + public static final int DEADMANSKULL_INTERFACE_TAB_TOGGLE = 9639; + public static final int DEADMANSKULL_INTERFACE_TAB_ATTUNE = 9640; + } + } /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java index 99faf930178..d7dd56f4ed4 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java @@ -423,7 +423,7 @@ public final class InterfaceID public static final int CANOEING = 416; public static final int BREW_TOOLS = 417; public static final int BREW_WAITING_ROOM_OVERLAY = 418; - public static final int PATCHY_INTERFACE = 419; + public static final int DEADMAN_TUTORIAL = 419; public static final int BEEHIVE = 420; public static final int PVP_ARENA_STAGINGAREA_SHARELOADOUT = 421; public static final int POH_VIEWER = 422; @@ -949,6 +949,11 @@ public final class InterfaceID public static final int PORT_TASK_INFO = 942; public static final int SAILING_BOAT_CARGOHOLD = 943; public static final int SAILING_BOAT_CARGOHOLD_SIDE = 944; + public static final int REUSABLE_FLOATER = 945; + public static final int PATCHY = 946; + public static final int MENU_NEW = 947; + public static final int DEADMANSKULL_INTERFACE = 948; + public static final int QUETZALWHISTLE_MENU = 949; public static final class _100GuideEggsOverlay { @@ -1215,140 +1220,145 @@ public static final class Bankmain public static final int OCCUPIEDSLOTS = 0x000c_0005; public static final int UNIVERSE_LINE4 = 0x000c_0006; public static final int CAPACITY_LAYER = 0x000c_0007; - public static final int GIM_STORAGE = 0x000c_0008; - public static final int CAPACITY = 0x000c_0009; - public static final int ITEMS_CONTAINER = 0x000c_000a; - public static final int TABS = 0x000c_000b; - public static final int TABS_LINE0 = 0x000c_000c; - public static final int ITEMS = 0x000c_000d; - public static final int SCROLLBAR = 0x000c_000e; - public static final int POTIONSTORE_CONTAINER = 0x000c_000f; - public static final int POTIONSTORE_BACKGROUND = 0x000c_0010; - public static final int BOTTOM = 0x000c_0011; - public static final int REARRANGE_TEXT = 0x000c_0012; - public static final int SWAP = 0x000c_0013; - public static final int SWAP_TEXT = 0x000c_0014; - public static final int INSERT = 0x000c_0015; - public static final int INSERT_TEXT = 0x000c_0016; - public static final int WITHDRAW_TEXT = 0x000c_0017; - public static final int ITEM = 0x000c_0018; - public static final int ITEM_TEXT = 0x000c_0019; - public static final int NOTE = 0x000c_001a; - public static final int NOTE_TEXT = 0x000c_001b; - public static final int QUANTITY_LAYER = 0x000c_001c; - public static final int QUANTITY_LAYER_TEXT0 = 0x000c_001d; - public static final int QUANTITY1 = 0x000c_001e; - public static final int QUANTITY1_TEXT = 0x000c_001f; - public static final int QUANTITY5 = 0x000c_0020; - public static final int QUANTITY5_TEXT = 0x000c_0021; - public static final int QUANTITY10 = 0x000c_0022; - public static final int QUANTITY10_TEXT = 0x000c_0023; - public static final int QUANTITYX = 0x000c_0024; - public static final int QUANTITYX_TEXT = 0x000c_0025; - public static final int QUANTITYALL = 0x000c_0026; - public static final int QUANTITYALL_TEXT = 0x000c_0027; - public static final int PLACEHOLDER = 0x000c_0028; - public static final int PLACEHOLDER_GRAPHIC = 0x000c_0029; - public static final int SEARCH = 0x000c_002a; - public static final int SEARCH_GRAPHIC = 0x000c_002b; - public static final int DEPOSITINV = 0x000c_002c; - public static final int DEPOSITINV_GRAPHIC = 0x000c_002d; - public static final int DEPOSITWORN = 0x000c_002e; - public static final int DEPOSITWORN_GRAPHIC = 0x000c_002f; - public static final int POTIONSTORE_BUTTON = 0x000c_0030; - public static final int INCINERATOR_TARGET = 0x000c_0031; - public static final int INCINERATOR_CONFIRM = 0x000c_0032; - public static final int INCINERATOR_CONFIRM_GRAPHIC0 = 0x000c_0033; - public static final int POTIONSTORE_ITEMS = 0x000c_0034; - public static final int POTIONSTORE_SCROLLBAR = 0x000c_0035; - public static final int MENU_CONTAINER = 0x000c_0036; - public static final int TABDISPLAY = 0x000c_0037; - public static final int INCINERATOR_TOGGLE = 0x000c_0038; - public static final int BANKTUT_TOGGLE = 0x000c_0039; - public static final int TABDISPLAY_TEXT0 = 0x000c_003a; - public static final int TABDISPLAY_SELECT = 0x000c_003b; - public static final int SIDEOPS_TOGGLE = 0x000c_003c; - public static final int BANKOPS_TOGGLE = 0x000c_003d; - public static final int DEPOSITINV_TOGGLE = 0x000c_003e; - public static final int DEPOSITWORN_TOGGLE = 0x000c_003f; - public static final int DEPOSITPOTION_TOGGLE = 0x000c_0040; - public static final int CHUGGINGBARREL_TOGGLE = 0x000c_0041; - public static final int RELEASE_PLACEHOLDERS = 0x000c_0042; - public static final int LOCKS = 0x000c_0043; - public static final int BANK_FILLERS = 0x000c_0044; - public static final int BANK_FILLER_1 = 0x000c_0045; - public static final int BANK_FILLER_1_TEXT = 0x000c_0046; - public static final int BANK_FILLER_10 = 0x000c_0047; - public static final int BANK_FILLER_10_TEXT = 0x000c_0048; - public static final int BANK_FILLER_50 = 0x000c_0049; - public static final int BANK_FILLER_50_TEXT = 0x000c_004a; - public static final int BANK_FILLER_X = 0x000c_004b; - public static final int BANK_FILLER_X_TEXT = 0x000c_004c; - public static final int BANK_FILLER_ALL = 0x000c_004d; - public static final int BANK_FILLER_ALL_TEXT = 0x000c_004e; - public static final int BANK_FILLER_CONFIRM = 0x000c_004f; - public static final int WORNITEMS_CONTAINER = 0x000c_0050; - public static final int WORNITEMS_CONTAINER_MODEL0 = 0x000c_0051; - public static final int WORNITEMS_CONTAINER_GRAPHIC1 = 0x000c_0052; - public static final int WORNITEMS_CONTAINER_GRAPHIC2 = 0x000c_0053; - public static final int WORNITEMS_CONTAINER_GRAPHIC3 = 0x000c_0054; - public static final int WORNITEMS_CONTAINER_GRAPHIC4 = 0x000c_0055; - public static final int WORNITEMS_CONTAINER_GRAPHIC5 = 0x000c_0056; - public static final int WORNSLOT0 = 0x000c_0057; - public static final int WORNSLOT1 = 0x000c_0058; - public static final int WORNSLOT2 = 0x000c_0059; - public static final int WORNSLOT3 = 0x000c_005a; - public static final int WORNSLOT4 = 0x000c_005b; - public static final int WORNSLOT5 = 0x000c_005c; - public static final int WORNSLOT7 = 0x000c_005d; - public static final int WORNSLOT9 = 0x000c_005e; - public static final int WORNSLOT10 = 0x000c_005f; - public static final int WORNSLOT12 = 0x000c_0060; - public static final int WORNSLOT13 = 0x000c_0061; - public static final int EXTRA_QUIVER_SLOT = 0x000c_0062; - public static final int STAT_GROUP = 0x000c_0063; - public static final int STAT_GROUP_TEXT0 = 0x000c_0064; - public static final int STABATT = 0x000c_0065; - public static final int SLASHATT = 0x000c_0066; - public static final int CRUSHATT = 0x000c_0067; - public static final int MAGICATT = 0x000c_0068; - public static final int RANGEATT = 0x000c_0069; - public static final int STAT_GROUP_TEXT6 = 0x000c_006a; - public static final int STABDEF = 0x000c_006b; - public static final int SLASHDEF = 0x000c_006c; - public static final int CRUSHDEF = 0x000c_006d; - public static final int MAGICDEF = 0x000c_006e; - public static final int RANGEDEF = 0x000c_006f; - public static final int STAT_GROUP_TEXT12 = 0x000c_0070; - public static final int MELEESTRENGTH = 0x000c_0071; - public static final int RANGESTRENGTH = 0x000c_0072; - public static final int MAGICDAMAGE = 0x000c_0073; - public static final int PRAYER = 0x000c_0074; - public static final int STAT_GROUP_TEXT17 = 0x000c_0075; - public static final int TYPEMULTIPLIER = 0x000c_0076; - public static final int SLAYERMULTIPLIER = 0x000c_0077; - public static final int STAT_GROUP_TEXT20 = 0x000c_0078; - public static final int NEXT_PAGE = 0x000c_0079; - public static final int SET_BONUS = 0x000c_007a; - public static final int WORNITEMS_CONTAINER_GRAPHIC21 = 0x000c_007b; - public static final int WORNITEMS_CONTAINER_TEXT22 = 0x000c_007c; - public static final int MENU_BUTTON = 0x000c_007d; - public static final int WORNITEMS_BUTTON = 0x000c_007e; - public static final int BANK_HIGHLIGHT = 0x000c_007f; - public static final int POPUP = 0x000c_0080; - public static final int DROPDOWN_CONTAINER = 0x000c_0081; - public static final int TOOLTIP = 0x000c_0082; - public static final int SET_BONUS_TEXT0 = 0x000c_0083; - public static final int SET_EFFECT = 0x000c_0084; - public static final int SCROLLBAR_1 = 0x000c_0085; - public static final int PREVIOUS_PAGE = 0x000c_0086; - public static final int ATTACKSPEEDBASE = 0x000c_0087; - public static final int ATTACKSPEEDACTUAL = 0x000c_0088; - public static final int EXTRA_QUIVER_AMMO_GRAPHIC = 0x000c_0089; - public static final int EXTRA_QUIVER_AMMO = 0x000c_008a; - public static final int DROPDOWN = 0x000c_008b; - public static final int DROPDOWN_CONTENT = 0x000c_008c; - public static final int DROPDOWN_SCROLLER = 0x000c_008d; + public static final int CAPACITY = 0x000c_0008; + public static final int ITEMS_CONTAINER = 0x000c_0009; + public static final int TABS = 0x000c_000a; + public static final int TABS_LINE0 = 0x000c_000b; + public static final int ITEMS = 0x000c_000c; + public static final int SCROLLBAR = 0x000c_000d; + public static final int POTIONSTORE_CONTAINER = 0x000c_000e; + public static final int POTIONSTORE_BACKGROUND = 0x000c_000f; + public static final int BOTTOM = 0x000c_0010; + public static final int SWAP_INSERT = 0x000c_0011; + public static final int SWAP_INSERT_GRAPHIC = 0x000c_0012; + public static final int NOTE = 0x000c_0013; + public static final int NOTE_GRAPHIC = 0x000c_0014; + public static final int BOTTOM_LINE4 = 0x000c_0015; + public static final int QUANTITY_LAYER = 0x000c_0016; + public static final int QUANTITY1 = 0x000c_0017; + public static final int QUANTITY1_TEXT = 0x000c_0018; + public static final int QUANTITY5 = 0x000c_0019; + public static final int QUANTITY5_TEXT = 0x000c_001a; + public static final int QUANTITY10 = 0x000c_001b; + public static final int QUANTITY10_TEXT = 0x000c_001c; + public static final int QUANTITYX = 0x000c_001d; + public static final int QUANTITYX_TEXT = 0x000c_001e; + public static final int QUANTITYALL = 0x000c_001f; + public static final int QUANTITYALL_TEXT = 0x000c_0020; + public static final int BOTTOM_LINE6 = 0x000c_0021; + public static final int PLACEHOLDER = 0x000c_0022; + public static final int PLACEHOLDER_GRAPHIC = 0x000c_0023; + public static final int SEARCH = 0x000c_0024; + public static final int SEARCH_GRAPHIC = 0x000c_0025; + public static final int DEPOSIT_LINE = 0x000c_0026; + public static final int DEPOSITCONTAINERS = 0x000c_0027; + public static final int DEPOSITCONTAINERS_GRAPHIC = 0x000c_0028; + public static final int DEPOSITINV = 0x000c_0029; + public static final int DEPOSITINV_GRAPHIC = 0x000c_002a; + public static final int DEPOSITWORN = 0x000c_002b; + public static final int DEPOSITWORN_GRAPHIC = 0x000c_002c; + public static final int HORIZONTAL_LINE = 0x000c_002d; + public static final int POPUP_BUTTON_OUT = 0x000c_002e; + public static final int STORAGE_POPUP_TAB = 0x000c_002f; + public static final int INCINERATOR_TARGET = 0x000c_0030; + public static final int INCINERATOR_CONFIRM = 0x000c_0031; + public static final int INCINERATOR_CONFIRM_GRAPHIC0 = 0x000c_0032; + public static final int POTIONSTORE_ITEMS = 0x000c_0033; + public static final int POTIONSTORE_SCROLLBAR = 0x000c_0034; + public static final int MENU_CONTAINER = 0x000c_0035; + public static final int WORNITEMS_CONTAINER = 0x000c_0036; + public static final int WORNITEMS_CONTAINER_MODEL0 = 0x000c_0037; + public static final int WORNITEMS_CONTAINER_GRAPHIC1 = 0x000c_0038; + public static final int WORNITEMS_CONTAINER_GRAPHIC2 = 0x000c_0039; + public static final int WORNITEMS_CONTAINER_GRAPHIC3 = 0x000c_003a; + public static final int WORNITEMS_CONTAINER_GRAPHIC4 = 0x000c_003b; + public static final int WORNITEMS_CONTAINER_GRAPHIC5 = 0x000c_003c; + public static final int WORNSLOT0 = 0x000c_003d; + public static final int WORNSLOT1 = 0x000c_003e; + public static final int WORNSLOT2 = 0x000c_003f; + public static final int WORNSLOT3 = 0x000c_0040; + public static final int WORNSLOT4 = 0x000c_0041; + public static final int WORNSLOT5 = 0x000c_0042; + public static final int WORNSLOT7 = 0x000c_0043; + public static final int WORNSLOT9 = 0x000c_0044; + public static final int WORNSLOT10 = 0x000c_0045; + public static final int WORNSLOT12 = 0x000c_0046; + public static final int WORNSLOT13 = 0x000c_0047; + public static final int EXTRA_QUIVER_SLOT = 0x000c_0048; + public static final int STAT_GROUP = 0x000c_0049; + public static final int STAT_GROUP_TEXT0 = 0x000c_004a; + public static final int STABATT = 0x000c_004b; + public static final int SLASHATT = 0x000c_004c; + public static final int CRUSHATT = 0x000c_004d; + public static final int MAGICATT = 0x000c_004e; + public static final int RANGEATT = 0x000c_004f; + public static final int STAT_GROUP_TEXT6 = 0x000c_0050; + public static final int STABDEF = 0x000c_0051; + public static final int SLASHDEF = 0x000c_0052; + public static final int CRUSHDEF = 0x000c_0053; + public static final int MAGICDEF = 0x000c_0054; + public static final int RANGEDEF = 0x000c_0055; + public static final int STAT_GROUP_TEXT12 = 0x000c_0056; + public static final int MELEESTRENGTH = 0x000c_0057; + public static final int RANGESTRENGTH = 0x000c_0058; + public static final int MAGICDAMAGE = 0x000c_0059; + public static final int PRAYER = 0x000c_005a; + public static final int STAT_GROUP_TEXT17 = 0x000c_005b; + public static final int TYPEMULTIPLIER = 0x000c_005c; + public static final int SLAYERMULTIPLIER = 0x000c_005d; + public static final int STAT_GROUP_TEXT20 = 0x000c_005e; + public static final int NEXT_PAGE = 0x000c_005f; + public static final int SET_BONUS = 0x000c_0060; + public static final int WORNITEMS_CONTAINER_GRAPHIC21 = 0x000c_0061; + public static final int WORNITEMS_CONTAINER_TEXT22 = 0x000c_0062; + public static final int MENU_BUTTON = 0x000c_0063; + public static final int WORNITEMS_BUTTON = 0x000c_0064; + public static final int BANK_HIGHLIGHT = 0x000c_0065; + public static final int POPUP = 0x000c_0066; + public static final int DROPDOWN_CONTAINER = 0x000c_0067; + public static final int TOOLTIP = 0x000c_0068; + public static final int SET_BONUS_TEXT0 = 0x000c_0069; + public static final int SET_EFFECT = 0x000c_006a; + public static final int SCROLLBAR_1 = 0x000c_006b; + public static final int PREVIOUS_PAGE = 0x000c_006c; + public static final int ATTACKSPEEDBASE = 0x000c_006d; + public static final int ATTACKSPEEDACTUAL = 0x000c_006e; + public static final int EXTRA_QUIVER_AMMO_GRAPHIC = 0x000c_006f; + public static final int EXTRA_QUIVER_AMMO = 0x000c_0070; + public static final int DROPDOWN = 0x000c_0071; + public static final int DROPDOWN_CONTENT = 0x000c_0072; + public static final int DROPDOWN_SCROLLER = 0x000c_0073; + public static final int STORAGE_POPUP_TAB_FRAME = 0x000c_0074; + public static final int POPUP_BUTTON_IN = 0x000c_0075; + public static final int GIM_STORAGE = 0x000c_0076; + public static final int POTIONSTORE_BUTTON = 0x000c_0077; + public static final int TABDISPLAY = 0x000c_0078; + public static final int TABDISPLAY_TEXT0 = 0x000c_0079; + public static final int TABDISPLAY_SELECT_1 = 0x000c_007a; + public static final int INCINERATOR_TOGGLE = 0x000c_007b; + public static final int BANKTUT_TOGGLE = 0x000c_007c; + public static final int SIDEOPS_TOGGLE = 0x000c_007d; + public static final int BANKOPS_TOGGLE = 0x000c_007e; + public static final int DEPOSITINV_TOGGLE = 0x000c_007f; + public static final int DEPOSITWORN_TOGGLE = 0x000c_0080; + public static final int DEPOSITCONTAINERS_TOGGLE = 0x000c_0081; + public static final int POPUP_TAB_FORGETPOS = 0x000c_0082; + public static final int DEPOSITPOTION_TOGGLE = 0x000c_0083; + public static final int CHUGGINGBARREL_TOGGLE = 0x000c_0084; + public static final int RELEASE_PLACEHOLDERS = 0x000c_0085; + public static final int LOCKS = 0x000c_0086; + public static final int BANK_FILLERS = 0x000c_0087; + public static final int BANK_FILLER_1 = 0x000c_0088; + public static final int BANK_FILLER_1_TEXT = 0x000c_0089; + public static final int BANK_FILLER_10 = 0x000c_008a; + public static final int BANK_FILLER_10_TEXT = 0x000c_008b; + public static final int BANK_FILLER_50 = 0x000c_008c; + public static final int BANK_FILLER_50_TEXT = 0x000c_008d; + public static final int BANK_FILLER_X = 0x000c_008e; + public static final int BANK_FILLER_X_TEXT = 0x000c_008f; + public static final int BANK_FILLER_ALL = 0x000c_0090; + public static final int BANK_FILLER_ALL_TEXT = 0x000c_0091; + public static final int BANK_FILLER_CONFIRM = 0x000c_0092; } public static final class CorpBeast @@ -1428,77 +1438,76 @@ public static final class Bankside public static final int RUNEPOUCH_FRAME_GRAPHIC0 = 0x000f_0018; public static final int RUNEPOUCH_CONTENTS = 0x000f_0019; public static final int RUNEPOUCH_TOP = 0x000f_001a; - public static final int RUNEPOUCH_CONTENTS_TEXT1 = 0x000f_001b; - public static final int RUNEPOUCH_LOAD_A = 0x000f_001c; - public static final int RUNEPOUCH_LOAD_B = 0x000f_001d; - public static final int RUNEPOUCH_LOAD_C = 0x000f_001e; - public static final int RUNEPOUCH_LOAD_D = 0x000f_001f; - public static final int RUNEPOUCH_LOADOUT_SCROLLBAR = 0x000f_0020; - public static final int RUNEPOUCH_LOADOUT_CONTAINER = 0x000f_0021; - public static final int RUNEPOUCH_LOADOUT_A = 0x000f_0022; - public static final int RUNEPOUCH_NAME_A = 0x000f_0023; - public static final int RUNEPOUCH_SELECT_CONTAINER = 0x000f_0024; - public static final int RUNEPOUCH_NAME_SELECT_CONTAINER = 0x000f_0025; - public static final int RUNEPOUCH_LOADOUT_B = 0x000f_0026; - public static final int RUNEPOUCH_NAME_B = 0x000f_0027; - public static final int RUNEPOUCH_SELECT_CONTAINER_GRAPHIC0 = 0x000f_0028; - public static final int RUNEPOUCH_LOADOUT_C = 0x000f_0029; - public static final int RUNEPOUCH_NAME_C = 0x000f_002a; - public static final int RUNEPOUCH_SELECT_LIST = 0x000f_002b; - public static final int RUNEPOUCH_LOADOUT_D = 0x000f_002c; - public static final int RUNEPOUCH_NAME_D = 0x000f_002d; - public static final int RUNEPOUCH_LOADOUT_E = 0x000f_002e; - public static final int RUNEPOUCH_NAME_E = 0x000f_002f; - public static final int RUNEPOUCH_LOADOUT_F = 0x000f_0030; - public static final int RUNEPOUCH_NAME_F = 0x000f_0031; - public static final int RUNEPOUCH_LOADOUT_G = 0x000f_0032; - public static final int RUNEPOUCH_NAME_G = 0x000f_0033; - public static final int RUNEPOUCH_LOADOUT_H = 0x000f_0034; - public static final int RUNEPOUCH_NAME_H = 0x000f_0035; - public static final int RUNEPOUCH_LOADOUT_I = 0x000f_0036; - public static final int RUNEPOUCH_NAME_I = 0x000f_0037; - public static final int RUNEPOUCH_LOADOUT_J = 0x000f_0038; - public static final int RUNEPOUCH_NAME_J = 0x000f_0039; - public static final int RUNEPOUCH_SELECT_SCROLLBAR = 0x000f_003a; - public static final int BANKSIDE_HIGHLIGHT = 0x000f_003b; - public static final int PREPOT_DEVICE_CONTAINER = 0x000f_003c; - public static final int PREPOT_DEVICE_BANKALL = 0x000f_003d; - public static final int PREPOT_DEVICE_FILL = 0x000f_003e; - public static final int PREPOT_DEVICE_CONTAINER_TEXT2 = 0x000f_003f; - public static final int PREPOT_DEVICE_DISMISS = 0x000f_0040; - public static final int PREPOT_DEVICE_FRAME = 0x000f_0041; - public static final int PREPOT_DEVICE_FRAME_GRAPHIC0 = 0x000f_0042; - public static final int PREPOT_DEVICE_CONTENTS_CONTAINER = 0x000f_0043; - public static final int PREPOT_DEVICE_CONTENTS_BG = 0x000f_0044; - public static final int PREPOT_DEVICE_CONTENTS = 0x000f_0045; - public static final int PREPOT_DEVICE_CONTENTS_CONTAINER_TEXT2 = 0x000f_0046; - public static final int PREPOT_DEVICE_LOADOUTS_SCROLLBAR = 0x000f_0047; - public static final int PREPOT_DEVICE_LOADOUTS = 0x000f_0048; - public static final int PREPOT_DEVICE_LOADOUT_0 = 0x000f_0049; - public static final int PREPOT_DEVICE_LOADOUT_1 = 0x000f_004a; - public static final int PREPOT_DEVICE_LOADOUT_2 = 0x000f_004b; - public static final int PREPOT_DEVICE_LOADOUT_3 = 0x000f_004c; - public static final int PREPOT_DEVICE_LOADOUT_1_LOAD = 0x000f_004d; - public static final int PREPOT_DEVICE_LOADOUT_1_SAVE = 0x000f_004e; - public static final int PREPOT_DEVICE_LOADOUT_1_CONTENTS = 0x000f_004f; - public static final int PREPOT_DEVICE_LOADOUT_2_LOAD = 0x000f_0050; - public static final int PREPOT_DEVICE_LOADOUT_2_SAVE = 0x000f_0051; - public static final int PREPOT_DEVICE_LOADOUT_2_CONTENTS = 0x000f_0052; - public static final int PREPOT_DEVICE_LOADOUT_3_LOAD = 0x000f_0053; - public static final int PREPOT_DEVICE_LOADOUT_3_SAVE = 0x000f_0054; - public static final int PREPOT_DEVICE_LOADOUT_3_CONTENTS = 0x000f_0055; - public static final int PREPOT_DEVICE_LOADOUT_0_LOAD = 0x000f_0056; - public static final int PREPOT_DEVICE_LOADOUT_0_SAVE = 0x000f_0057; - public static final int PREPOT_DEVICE_LOADOUT_0_CONTENTS = 0x000f_0058; - public static final int RUNEPOUCH_LOAD_E = 0x000f_0059; - public static final int RUNEPOUCH_LOAD_F = 0x000f_005a; - public static final int RUNEPOUCH_LOAD_G = 0x000f_005b; - public static final int RUNEPOUCH_LOAD_H = 0x000f_005c; - public static final int RUNEPOUCH_LOAD_I = 0x000f_005d; - public static final int RUNEPOUCH_LOAD_J = 0x000f_005e; - public static final int RUNEPOUCH_NAME_SELECT_CONTAINER_GRAPHIC0 = 0x000f_005f; - public static final int RUNEPOUCH_NAME_SELECT_LIST = 0x000f_0060; - public static final int RUNEPOUCH_NAME_SELECT_SCROLLBAR = 0x000f_0061; + public static final int RUNEPOUCH_LOAD_A = 0x000f_001b; + public static final int RUNEPOUCH_LOAD_B = 0x000f_001c; + public static final int RUNEPOUCH_LOAD_C = 0x000f_001d; + public static final int RUNEPOUCH_LOAD_D = 0x000f_001e; + public static final int RUNEPOUCH_LOADOUT_SCROLLBAR = 0x000f_001f; + public static final int RUNEPOUCH_LOADOUT_CONTAINER = 0x000f_0020; + public static final int RUNEPOUCH_LOADOUT_A = 0x000f_0021; + public static final int RUNEPOUCH_NAME_A = 0x000f_0022; + public static final int RUNEPOUCH_SELECT_CONTAINER = 0x000f_0023; + public static final int RUNEPOUCH_NAME_SELECT_CONTAINER = 0x000f_0024; + public static final int RUNEPOUCH_LOADOUT_B = 0x000f_0025; + public static final int RUNEPOUCH_NAME_B = 0x000f_0026; + public static final int RUNEPOUCH_SELECT_CONTAINER_GRAPHIC0 = 0x000f_0027; + public static final int RUNEPOUCH_LOADOUT_C = 0x000f_0028; + public static final int RUNEPOUCH_NAME_C = 0x000f_0029; + public static final int RUNEPOUCH_SELECT_LIST = 0x000f_002a; + public static final int RUNEPOUCH_LOADOUT_D = 0x000f_002b; + public static final int RUNEPOUCH_NAME_D = 0x000f_002c; + public static final int RUNEPOUCH_LOADOUT_E = 0x000f_002d; + public static final int RUNEPOUCH_NAME_E = 0x000f_002e; + public static final int RUNEPOUCH_LOADOUT_F = 0x000f_002f; + public static final int RUNEPOUCH_NAME_F = 0x000f_0030; + public static final int RUNEPOUCH_LOADOUT_G = 0x000f_0031; + public static final int RUNEPOUCH_NAME_G = 0x000f_0032; + public static final int RUNEPOUCH_LOADOUT_H = 0x000f_0033; + public static final int RUNEPOUCH_NAME_H = 0x000f_0034; + public static final int RUNEPOUCH_LOADOUT_I = 0x000f_0035; + public static final int RUNEPOUCH_NAME_I = 0x000f_0036; + public static final int RUNEPOUCH_LOADOUT_J = 0x000f_0037; + public static final int RUNEPOUCH_NAME_J = 0x000f_0038; + public static final int RUNEPOUCH_SELECT_SCROLLBAR = 0x000f_0039; + public static final int BANKSIDE_HIGHLIGHT = 0x000f_003a; + public static final int PREPOT_DEVICE_CONTAINER = 0x000f_003b; + public static final int PREPOT_DEVICE_BANKALL = 0x000f_003c; + public static final int PREPOT_DEVICE_FILL = 0x000f_003d; + public static final int PREPOT_DEVICE_CONTAINER_TEXT2 = 0x000f_003e; + public static final int PREPOT_DEVICE_DISMISS = 0x000f_003f; + public static final int PREPOT_DEVICE_FRAME = 0x000f_0040; + public static final int PREPOT_DEVICE_FRAME_GRAPHIC0 = 0x000f_0041; + public static final int PREPOT_DEVICE_CONTENTS_CONTAINER = 0x000f_0042; + public static final int PREPOT_DEVICE_CONTENTS_BG = 0x000f_0043; + public static final int PREPOT_DEVICE_CONTENTS = 0x000f_0044; + public static final int PREPOT_DEVICE_CONTENTS_CONTAINER_TEXT2 = 0x000f_0045; + public static final int PREPOT_DEVICE_LOADOUTS_SCROLLBAR = 0x000f_0046; + public static final int PREPOT_DEVICE_LOADOUTS = 0x000f_0047; + public static final int PREPOT_DEVICE_LOADOUT_0 = 0x000f_0048; + public static final int PREPOT_DEVICE_LOADOUT_1 = 0x000f_0049; + public static final int PREPOT_DEVICE_LOADOUT_2 = 0x000f_004a; + public static final int PREPOT_DEVICE_LOADOUT_3 = 0x000f_004b; + public static final int PREPOT_DEVICE_LOADOUT_1_LOAD = 0x000f_004c; + public static final int PREPOT_DEVICE_LOADOUT_1_SAVE = 0x000f_004d; + public static final int PREPOT_DEVICE_LOADOUT_1_CONTENTS = 0x000f_004e; + public static final int PREPOT_DEVICE_LOADOUT_2_LOAD = 0x000f_004f; + public static final int PREPOT_DEVICE_LOADOUT_2_SAVE = 0x000f_0050; + public static final int PREPOT_DEVICE_LOADOUT_2_CONTENTS = 0x000f_0051; + public static final int PREPOT_DEVICE_LOADOUT_3_LOAD = 0x000f_0052; + public static final int PREPOT_DEVICE_LOADOUT_3_SAVE = 0x000f_0053; + public static final int PREPOT_DEVICE_LOADOUT_3_CONTENTS = 0x000f_0054; + public static final int PREPOT_DEVICE_LOADOUT_0_LOAD = 0x000f_0055; + public static final int PREPOT_DEVICE_LOADOUT_0_SAVE = 0x000f_0056; + public static final int PREPOT_DEVICE_LOADOUT_0_CONTENTS = 0x000f_0057; + public static final int RUNEPOUCH_LOAD_E = 0x000f_0058; + public static final int RUNEPOUCH_LOAD_F = 0x000f_0059; + public static final int RUNEPOUCH_LOAD_G = 0x000f_005a; + public static final int RUNEPOUCH_LOAD_H = 0x000f_005b; + public static final int RUNEPOUCH_LOAD_I = 0x000f_005c; + public static final int RUNEPOUCH_LOAD_J = 0x000f_005d; + public static final int RUNEPOUCH_NAME_SELECT_CONTAINER_GRAPHIC0 = 0x000f_005e; + public static final int RUNEPOUCH_NAME_SELECT_LIST = 0x000f_005f; + public static final int RUNEPOUCH_NAME_SELECT_SCROLLBAR = 0x000f_0060; } public static final class Oculus @@ -8126,8 +8135,8 @@ public static final class BankDepositbox public static final int INVENTORY_RECT2 = 0x00c0_001a; public static final int INVENTORY_RECT3 = 0x00c0_001b; public static final int DEPOSIT_ALL_BUTTONS = 0x00c0_001c; - public static final int DEPOSIT_INV = 0x00c0_001d; - public static final int DEPOSIT_WORN = 0x00c0_001e; + public static final int DEPOSIT_WORN = 0x00c0_001d; + public static final int DEPOSIT_INV = 0x00c0_001e; public static final int DEPOSIT_LOOTINGBAG = 0x00c0_001f; public static final int QUANTITY_BUTTONS = 0x00c0_0020; public static final int MENU = 0x00c0_0021; @@ -14589,7 +14598,7 @@ public static final class FairyringsLog public static final int SORT_1 = 0x017d_0004; public static final int SORT_2 = 0x017d_0005; public static final int TITLEBOX_TEXT1 = 0x017d_0006; - public static final int TITLEBOX_GRAPHIC2 = 0x017d_0007; + public static final int SEARCH = 0x017d_0007; public static final int CONTENTS = 0x017d_0008; public static final int FAVES = 0x017d_0009; public static final int DIVIDER = 0x017d_000a; @@ -15817,62 +15826,56 @@ public static final class BrewWaitingRoomOverlay public static final int CONTENTS_TEXT4 = 0x01a2_0007; } - public static final class PatchyInterface - { - public static final int PATCHY_SCROLL = 0x01a3_0000; - public static final int UNIVERSE_PAGE_1 = 0x01a3_0001; - public static final int PATCHY_FIRST_PAGE = 0x01a3_0002; - public static final int UNIVERSE_PAGE_2 = 0x01a3_0003; - public static final int PATCHY_PUNCHLINE_1 = 0x01a3_0004; - public static final int PARTYHAT_LAYER = 0x01a3_0005; - public static final int WOM_HEAD = 0x01a3_0006; - public static final int PHAT_BUTTON = 0x01a3_0007; - public static final int TOPHAT_LAYER = 0x01a3_0008; - public static final int TOPHAT_MONACLE = 0x01a3_0009; - public static final int TOPHAT_BUTTON = 0x01a3_000a; - public static final int PIRATEHAT_LAYER = 0x01a3_000b; - public static final int PIRATEHAT_PATCH = 0x01a3_000c; - public static final int PIRATEHAT_PATCH_1 = 0x01a3_000d; - public static final int PIRATEHAT_BUTTON = 0x01a3_000e; - public static final int DOUBLE_EYEPATCH_LAYER = 0x01a3_000f; - public static final int DARK_FLIPPERS_LAYER = 0x01a3_0010; - public static final int DARK_FLIPPERS = 0x01a3_0011; - public static final int DARK_FLIPPERS_BUTTON = 0x01a3_0012; - public static final int DOUBLE_EYE_PATCH = 0x01a3_0013; - public static final int DOUBLE_EYEPATCH_BUTTON = 0x01a3_0014; - public static final int PATCHY_PUNCHLINE = 0x01a3_0015; - public static final int BANDANA_LAYER = 0x01a3_0016; - public static final int BANDANA_RED_LAYER = 0x01a3_0017; - public static final int BANDANA_BLUE_LAYER = 0x01a3_0018; - public static final int BANDANA_BROWN_LAYER = 0x01a3_0019; - public static final int HAT_LAYER = 0x01a3_001a; - public static final int CLAW_LAYER = 0x01a3_001b; - public static final int CAVALIER_LAYER = 0x01a3_001c; - public static final int BARRET_LAYER = 0x01a3_001d; - public static final int PATCHY_BANDANA_RED = 0x01a3_001e; - public static final int PATCHY_BANDANA_WHITE = 0x01a3_001f; - public static final int PATCHY_BANDANA_BLUE = 0x01a3_0020; - public static final int PATCHY_BANDANA_BROWN = 0x01a3_0021; - public static final int PATCHY_HAT = 0x01a3_0022; - public static final int PATCHY_HOOK_CLAW = 0x01a3_0023; - public static final int PATCHY_CAVALIER_BLACK = 0x01a3_0024; - public static final int PATCHY_BARRET_BLACK = 0x01a3_0025; - public static final int BANDANA_BLUE_BUTTON = 0x01a3_0026; - public static final int BANDANA_BROWN_BUTTON = 0x01a3_0027; - public static final int HAT_BUTTON = 0x01a3_0028; - public static final int CLAW_BUTTON = 0x01a3_0029; - public static final int BANDANA_RED_BUTTON = 0x01a3_002a; - public static final int BANDANA_BUTTON = 0x01a3_002b; - public static final int CAVALIER_BUTTON = 0x01a3_002c; - public static final int BARRET_BUTTON = 0x01a3_002d; - public static final int BANDANA_RECT_WHITE = 0x01a3_002e; - public static final int BANDANA_RECT_RED = 0x01a3_002f; - public static final int BANDANA_RECT_BLUE = 0x01a3_0030; - public static final int BANDANA_RECT_BROWN = 0x01a3_0031; - public static final int HAT_RECT = 0x01a3_0032; - public static final int HOOK_RECT = 0x01a3_0033; - public static final int PATCHY_CLOSE = 0x01a3_0034; - public static final int PATCHY_NEXT_PAGE = 0x01a3_0035; + public static final class DeadmanTutorial + { + public static final int UNIVERSE = 0x01a3_0000; + public static final int NOCLICK = 0x01a3_0001; + public static final int MAIN = 0x01a3_0002; + public static final int TUT_1_LAYER = 0x01a3_0003; + public static final int TUT_2_LAYER = 0x01a3_0004; + public static final int TUT_3_LAYER = 0x01a3_0005; + public static final int TUT_4_LAYER = 0x01a3_0006; + public static final int TUT_5_LAYER = 0x01a3_0007; + public static final int TUT_TELEPORT_LAYER = 0x01a3_0008; + public static final int BACKGROUND = 0x01a3_0009; + public static final int TUT_1_LAYER_GRAPHIC1 = 0x01a3_000a; + public static final int TUT_1_LAYER_GRAPHIC2 = 0x01a3_000b; + public static final int TUT_1_TEXT_1 = 0x01a3_000c; + public static final int CONTINUE_1 = 0x01a3_000d; + public static final int LOGOUT = 0x01a3_000e; + public static final int BACKGROUND_1 = 0x01a3_000f; + public static final int TUT_2_LAYER_GRAPHIC1 = 0x01a3_0010; + public static final int TUT_1_TEXT_2 = 0x01a3_0011; + public static final int CONTINUE_2 = 0x01a3_0012; + public static final int TUT_1_INDEX_1 = 0x01a3_0013; + public static final int TUT_2_LAYER_GRAPHIC5 = 0x01a3_0014; + public static final int TUT_2_LAYER_GRAPHIC6 = 0x01a3_0015; + public static final int BACKGROUND_2 = 0x01a3_0016; + public static final int TUT_3_LAYER_GRAPHIC1 = 0x01a3_0017; + public static final int TUT_1_TEXT_3 = 0x01a3_0018; + public static final int CONTINUE_3 = 0x01a3_0019; + public static final int BACK_3 = 0x01a3_001a; + public static final int TUT_1_INDEX_2 = 0x01a3_001b; + public static final int BACKGROUND_3 = 0x01a3_001c; + public static final int TUT_4_LAYER_GRAPHIC1 = 0x01a3_001d; + public static final int TUT_1_TEXT_4 = 0x01a3_001e; + public static final int CONTINUE_4 = 0x01a3_001f; + public static final int BACK_4 = 0x01a3_0020; + public static final int TUT_1_INDEX_3 = 0x01a3_0021; + public static final int BACKGROUND_4 = 0x01a3_0022; + public static final int TUT_TELEPORT_LAYER_GRAPHIC1 = 0x01a3_0023; + public static final int TUT_1_TEXT_TELEPORT = 0x01a3_0024; + public static final int TELE_LUMBRIDGE = 0x01a3_0025; + public static final int TELE_VARROCK = 0x01a3_0026; + public static final int TELE_ARDOUGNE = 0x01a3_0027; + public static final int TELE_KOUREND = 0x01a3_0028; + public static final int TELE_GNOMESTRONGHOLD = 0x01a3_0029; + public static final int BACKGROUND_5 = 0x01a3_002a; + public static final int TUT_5_LAYER_GRAPHIC1 = 0x01a3_002b; + public static final int TUT_1_TEXT_5 = 0x01a3_002c; + public static final int CONTINUE_5 = 0x01a3_002d; + public static final int BACK_5 = 0x01a3_002e; + public static final int TUT_1_INDEX_4 = 0x01a3_002f; } public static final class Beehive @@ -16080,27 +16083,30 @@ public static final class SlayerRewards public static final int BUY_PRICES = 0x01aa_0019; public static final int BUY_SCROLLBAR = 0x01aa_001a; public static final int TASKS = 0x01aa_001b; - public static final int VIEW_TASKS = 0x01aa_001c; - public static final int TASKS_STORED_CONTAINER = 0x01aa_001d; - public static final int TASKS_STORED_CONTAINER_RECT0 = 0x01aa_001e; - public static final int TASKS_INTRODUCTION = 0x01aa_001f; - public static final int TASKS_CURRENT_CONTAINER = 0x01aa_0020; - public static final int TASKS_CURRENT_CONTAINER_RECT0 = 0x01aa_0021; - public static final int TASKS_CURRENT_CONTAINER_RECT1 = 0x01aa_0022; - public static final int TASKS_CURRENT_CONTAINER_RECT2 = 0x01aa_0023; - public static final int TASKS_CURRENT_CONTAINER_TEXT3 = 0x01aa_0024; - public static final int TASKS_CURRENT = 0x01aa_0025; - public static final int TASKS_TEXT4 = 0x01aa_0026; - public static final int TASKS_SLOT_1 = 0x01aa_0027; - public static final int TASKS_SLOT_2 = 0x01aa_0028; - public static final int TASKS_SLOT_3 = 0x01aa_0029; - public static final int TASKS_SLOT_4 = 0x01aa_002a; - public static final int TASKS_SLOT_5 = 0x01aa_002b; - public static final int TASKS_SLOT_6 = 0x01aa_002c; - public static final int TASKS_SLOT_DIARY = 0x01aa_002d; - public static final int TASKS_STORED_CONTAINER_RECT1 = 0x01aa_002e; - public static final int TASKS_STORED_CONTAINER_RECT2 = 0x01aa_002f; - public static final int TASKS_STORED = 0x01aa_0030; + public static final int REWARDS = 0x01aa_001c; + public static final int VIEW_TASKS = 0x01aa_001d; + public static final int TASKS_STORED_CONTAINER = 0x01aa_001e; + public static final int TASKS_STORED_CONTAINER_RECT0 = 0x01aa_001f; + public static final int TASKS_INTRODUCTION = 0x01aa_0020; + public static final int TASKS_CURRENT_CONTAINER = 0x01aa_0021; + public static final int TASKS_CURRENT_CONTAINER_RECT0 = 0x01aa_0022; + public static final int TASKS_CURRENT_CONTAINER_RECT1 = 0x01aa_0023; + public static final int TASKS_CURRENT_CONTAINER_RECT2 = 0x01aa_0024; + public static final int TASKS_CURRENT_CONTAINER_TEXT3 = 0x01aa_0025; + public static final int TASKS_CURRENT = 0x01aa_0026; + public static final int TASKS_TEXT4 = 0x01aa_0027; + public static final int TASKS_SLOT_1 = 0x01aa_0028; + public static final int TASKS_SLOT_2 = 0x01aa_0029; + public static final int TASKS_SLOT_3 = 0x01aa_002a; + public static final int TASKS_SLOT_4 = 0x01aa_002b; + public static final int TASKS_SLOT_5 = 0x01aa_002c; + public static final int TASKS_SLOT_6 = 0x01aa_002d; + public static final int TASKS_SLOT_DIARY = 0x01aa_002e; + public static final int TASKS_STORED_CONTAINER_RECT1 = 0x01aa_002f; + public static final int TASKS_STORED_CONTAINER_RECT2 = 0x01aa_0030; + public static final int TASKS_STORED = 0x01aa_0031; + public static final int REWARDS_CONTENTS = 0x01aa_0032; + public static final int REWARDS_SCROLLBAR = 0x01aa_0033; } public static final class ScrollGodfather @@ -24659,34 +24665,27 @@ public static final class SharedBank public static final int SEARCH_GRAPHIC = 0x02d4_0011; public static final int DEPOSITINV = 0x02d4_0012; public static final int DEPOSITINV_GRAPHIC = 0x02d4_0013; - public static final int BOTTOM = 0x02d4_0014; - public static final int MODE_LAYER = 0x02d4_0015; - public static final int REARRANGE_TEXT = 0x02d4_0016; - public static final int SWAP = 0x02d4_0017; - public static final int SWAP_TEXT = 0x02d4_0018; - public static final int INSERT = 0x02d4_0019; - public static final int INSERT_TEXT = 0x02d4_001a; - public static final int WITHDRAWAL_LAYER = 0x02d4_001b; - public static final int WITHDRAW_TEXT = 0x02d4_001c; - public static final int ITEM = 0x02d4_001d; - public static final int ITEM_TEXT = 0x02d4_001e; - public static final int NOTE = 0x02d4_001f; - public static final int NOTE_TEXT = 0x02d4_0020; - public static final int BOTTOM_TEXT2 = 0x02d4_0021; - public static final int SAVE_BUTTON = 0x02d4_0022; - public static final int QUANTITY_LAYER = 0x02d4_0023; - public static final int QUANTITY_LAYER_TEXT0 = 0x02d4_0024; - public static final int QUANTITY1 = 0x02d4_0025; - public static final int QUANTITY1_TEXT = 0x02d4_0026; - public static final int QUANTITY5 = 0x02d4_0027; - public static final int QUANTITY5_TEXT = 0x02d4_0028; - public static final int QUANTITY10 = 0x02d4_0029; - public static final int QUANTITY10_TEXT = 0x02d4_002a; - public static final int QUANTITYX = 0x02d4_002b; - public static final int QUANTITYX_TEXT = 0x02d4_002c; - public static final int QUANTITYALL = 0x02d4_002d; - public static final int QUANTITYALL_TEXT = 0x02d4_002e; - public static final int POPUP = 0x02d4_002f; + public static final int MODE_LAYER = 0x02d4_0014; + public static final int SWAP_INSERT = 0x02d4_0015; + public static final int WITHDRAWAL_LAYER = 0x02d4_0016; + public static final int NOTE = 0x02d4_0017; + public static final int SWAP_INSERT_GRAPHIC = 0x02d4_0018; + public static final int QUANTITY_LAYER = 0x02d4_0019; + public static final int BOTTOM_TEXT3 = 0x02d4_001a; + public static final int SAVE_BUTTON = 0x02d4_001b; + public static final int BOTTOM = 0x02d4_001c; + public static final int POPUP = 0x02d4_001d; + public static final int NOTE_GRAPHIC = 0x02d4_001e; + public static final int QUANTITY1 = 0x02d4_001f; + public static final int QUANTITY1_TEXT = 0x02d4_0020; + public static final int QUANTITY5 = 0x02d4_0021; + public static final int QUANTITY5_TEXT = 0x02d4_0022; + public static final int QUANTITY10 = 0x02d4_0023; + public static final int QUANTITY10_TEXT = 0x02d4_0024; + public static final int QUANTITYX = 0x02d4_0025; + public static final int QUANTITYX_TEXT = 0x02d4_0026; + public static final int QUANTITYALL = 0x02d4_0027; + public static final int QUANTITYALL_TEXT = 0x02d4_0028; } public static final class SharedBankSide @@ -28665,9 +28664,21 @@ public static final class SkillGuideV2 public static final int CONTENT = 0x035c_0005; public static final int TAB_CONTENT = 0x035c_0006; public static final int TABS = 0x035c_0007; - public static final int LIST = 0x035c_0008; - public static final int LIST_BORDER = 0x035c_0009; - public static final int LIST_SCROLLER = 0x035c_000a; + public static final int OVERVIEW = 0x035c_0008; + public static final int OVERVIEW_BORDER = 0x035c_0009; + public static final int OVERVIEW_TABS = 0x035c_000a; + public static final int OVERVIEW_CONTENT = 0x035c_000b; + public static final int OVERVIEW_CONTENT_RIGHT_BORDER_OUTER = 0x035c_000c; + public static final int OVERVIEW_CONTENT_RIGHT_BORDER_INNER = 0x035c_000d; + public static final int OVERVIEW_CONTENT_1 = 0x035c_000e; + public static final int OVERVIEW_CONTENT_2 = 0x035c_000f; + public static final int OVERVIEW_SCROLLBAR = 0x035c_0010; + public static final int QUEST_JOURNAL_BUTTON_TRIGGER = 0x035c_0011; + public static final int SKILL_GUIDE_BUTTON_TRIGGER = 0x035c_0012; + public static final int GUIDE_DATA = 0x035c_0013; + public static final int LIST_BORDER = 0x035c_0014; + public static final int LIST = 0x035c_0015; + public static final int LIST_SCROLLER = 0x035c_0016; } public static final class BondMain @@ -30335,40 +30346,41 @@ public static final class EventRewards public static final class Ballot { public static final int UNIVERSE = 0x03a0_0000; - public static final int CONTENT = 0x03a0_0001; - public static final int FRAME = 0x03a0_0002; - public static final int CLOSE = 0x03a0_0003; - public static final int ROOT_LIST = 0x03a0_0004; - public static final int LIST_FILTERS = 0x03a0_0005; - public static final int LIST_YEARS_CONTAINER = 0x03a0_0006; - public static final int LIST_YEARS_SCROLLBAR = 0x03a0_0007; - public static final int LIST_YEARS_CONTENT = 0x03a0_0008; - public static final int LIST_BOX = 0x03a0_0009; - public static final int LIST = 0x03a0_000a; - public static final int LIST_SCROLLBAR = 0x03a0_000b; - public static final int ROOT_OVERVIEW = 0x03a0_000c; - public static final int OVERVIEW_SCROLLING = 0x03a0_000d; - public static final int OVERVIEW_BACKGROUNDS = 0x03a0_000e; - public static final int OVERVIEW_CONTENTS = 0x03a0_000f; - public static final int OVERVIEW_SCROLLBAR = 0x03a0_0010; - public static final int EXIT_OVERVIEW = 0x03a0_0011; - public static final int ROOT_VOTING = 0x03a0_0012; - public static final int VOTING = 0x03a0_0013; - public static final int VOTING_SCROLLBAR = 0x03a0_0014; - public static final int SINGLE_CHOICE = 0x03a0_0015; - public static final int MULTIPLE_CHOICE = 0x03a0_0016; - public static final int TEXT = 0x03a0_0017; - public static final int MATRIX = 0x03a0_0018; - public static final int RANKED = 0x03a0_0019; - public static final int EXIT_VOTING = 0x03a0_001a; - public static final int LOADING_CONTAINER = 0x03a0_001b; - public static final int LOADING_ICON = 0x03a0_001c; - public static final int POPUP_CONTAINER = 0x03a0_001d; - public static final int POPUP_CONTAINER_RECT0 = 0x03a0_001e; - public static final int POPUP_WINDOW = 0x03a0_001f; - public static final int POPUP_FRAME = 0x03a0_0020; - public static final int POPUP_DISMISS = 0x03a0_0021; - public static final int POPUP_OTHER = 0x03a0_0022; + public static final int DODGER = 0x03a0_0001; + public static final int CONTENT = 0x03a0_0002; + public static final int FRAME = 0x03a0_0003; + public static final int CLOSE = 0x03a0_0004; + public static final int ROOT_LIST = 0x03a0_0005; + public static final int LIST_FILTERS = 0x03a0_0006; + public static final int LIST_YEARS_CONTAINER = 0x03a0_0007; + public static final int LIST_YEARS_SCROLLBAR = 0x03a0_0008; + public static final int LIST_YEARS_CONTENT = 0x03a0_0009; + public static final int LIST_BOX = 0x03a0_000a; + public static final int LIST = 0x03a0_000b; + public static final int LIST_SCROLLBAR = 0x03a0_000c; + public static final int ROOT_OVERVIEW = 0x03a0_000d; + public static final int OVERVIEW_SCROLLING = 0x03a0_000e; + public static final int OVERVIEW_BACKGROUNDS = 0x03a0_000f; + public static final int OVERVIEW_CONTENTS = 0x03a0_0010; + public static final int OVERVIEW_SCROLLBAR = 0x03a0_0011; + public static final int EXIT_OVERVIEW = 0x03a0_0012; + public static final int ROOT_VOTING = 0x03a0_0013; + public static final int VOTING = 0x03a0_0014; + public static final int VOTING_SCROLLBAR = 0x03a0_0015; + public static final int SINGLE_CHOICE = 0x03a0_0016; + public static final int MULTIPLE_CHOICE = 0x03a0_0017; + public static final int TEXT = 0x03a0_0018; + public static final int MATRIX = 0x03a0_0019; + public static final int RANKED = 0x03a0_001a; + public static final int EXIT_VOTING = 0x03a0_001b; + public static final int LOADING_CONTAINER = 0x03a0_001c; + public static final int LOADING_ICON = 0x03a0_001d; + public static final int POPUP_CONTAINER = 0x03a0_001e; + public static final int POPUP_CONTAINER_RECT0 = 0x03a0_001f; + public static final int POPUP_WINDOW = 0x03a0_0020; + public static final int POPUP_FRAME = 0x03a0_0021; + public static final int POPUP_DISMISS = 0x03a0_0022; + public static final int POPUP_OTHER = 0x03a0_0023; } public static final class TutorialPlayerExperience @@ -30778,5 +30790,83 @@ public static final class SailingBoatCargoholdSide public static final int TEXT = 0x03b0_0007; public static final int DISMISS = 0x03b0_0008; } + + public static final class ReusableFloater + { + public static final int UNIVERSE = 0x03b1_0000; + } + + public static final class Patchy + { + public static final int UNIVERSE = 0x03b2_0000; + public static final int UNIVERSE_MODEL0 = 0x03b2_0001; + public static final int UNIVERSE_GRAPHIC1 = 0x03b2_0002; + public static final int CONTENTS = 0x03b2_0003; + public static final int LIST = 0x03b2_0004; + public static final int INFO_CONTAINER = 0x03b2_0005; + public static final int INFO_CONTAINER_GRAPHIC0 = 0x03b2_0006; + public static final int INFO_CONTENTS = 0x03b2_0007; + public static final int CONFIRM = 0x03b2_0008; + public static final int CONFIRM_GRAPHIC0 = 0x03b2_0009; + public static final int SCROLLBAR = 0x03b2_000a; + } + + public static final class MenuNew + { + public static final int INFINITE = 0x03b3_0000; + public static final int UNIVERSE = 0x03b3_0001; + public static final int FRAME = 0x03b3_0002; + public static final int TITLE = 0x03b3_0003; + public static final int CONTENT_FRAME = 0x03b3_0004; + public static final int CONTENT = 0x03b3_0005; + public static final int KEYLISTENERS = 0x03b3_0006; + public static final int CONTENT_SCROLL = 0x03b3_0007; + public static final int GRAPHICS = 0x03b3_0008; + public static final int TEXT = 0x03b3_0009; + public static final int SCROLLBAR = 0x03b3_000a; + } + + public static final class DeadmanskullInterface + { + public static final int INFINITY = 0x03b4_0000; + public static final int FRAME = 0x03b4_0001; + public static final int CLOSE = 0x03b4_0002; + public static final int CONTENT = 0x03b4_0003; + public static final int TABS = 0x03b4_0004; + public static final int PERMANENT_TAB = 0x03b4_0005; + public static final int TOGGLE_TAB = 0x03b4_0006; + public static final int ATTUNE_TAB = 0x03b4_0007; + public static final int MAIN = 0x03b4_0008; + public static final int ITEMS = 0x03b4_0009; + public static final int ITEMS_CONTENTS = 0x03b4_000a; + public static final int ITEMS_SCROLLBAR = 0x03b4_000b; + public static final int ITEMS_RECT2 = 0x03b4_000c; + public static final int UNIVERSE = 0x03b4_000d; + public static final int RESIZE_PREVIEW = 0x03b4_000e; + public static final int TOOLTIP = 0x03b4_000f; + } + + public static final class QuetzalwhistleMenu + { + public static final int UNIVERSE = 0x03b5_0000; + public static final int CONTENTS = 0x03b5_0001; + public static final int BACKGROUND = 0x03b5_0002; + public static final int SCROLL = 0x03b5_0003; + public static final int MAP = 0x03b5_0004; + public static final int BACKGROUND_MODEL2 = 0x03b5_0005; + public static final int BACKGROUND_MODEL3 = 0x03b5_0006; + public static final int BACKGROUND_MODEL4 = 0x03b5_0007; + public static final int BACKGROUND_MODEL5 = 0x03b5_0008; + public static final int BACKGROUND_MODEL6 = 0x03b5_0009; + public static final int BACKGROUND_MODEL7 = 0x03b5_000a; + public static final int BACKGROUND_MODEL8 = 0x03b5_000b; + public static final int ICONS = 0x03b5_000c; + public static final int CURRENT = 0x03b5_000d; + public static final int SELECTED_BACK = 0x03b5_000e; + public static final int SELECTED_FRONT = 0x03b5_000f; + public static final int SELECTED_LOCKED = 0x03b5_0010; + public static final int SELECTED_CURRENT = 0x03b5_0011; + public static final int CLOSE = 0x03b5_0012; + } /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java b/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java index 1727d028dd6..4d64a3c6d66 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java @@ -1007,5 +1007,8 @@ public final class InventoryID public static final int TRADER_SHOP_PORT_ROBERTS_IRON = 1000; public static final int TRADER_SHOP_PORT_ROBERTS_UIM = 1001; public static final int TRADER_SHOP_PORT_ROBERTS_GIM = 1002; + public static final int RAZMIREBUILDINGSTORE_IRON = 1003; + public static final int RAZMIREBUILDINGSTORE_UIM = 1004; + public static final int RAZMIREBUILDINGSTORE_GIM = 1005; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java index e54d576744f..170f664dc4c 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/ItemID.java @@ -29608,22 +29608,22 @@ public final class ItemID public static final int WITCHWOOD_ICON = 8923; /** - * Bandana eyepatch + * Bandana eyepatch (white) */ public static final int PIRATE_BANDANA_EYEPATCH = 8924; /** - * Bandana eyepatch + * Bandana eyepatch (red) */ public static final int PIRATE_BANDANA_EYEPATCH_RED = 8925; /** - * Bandana eyepatch + * Bandana eyepatch (blue) */ public static final int PIRATE_BANDANA_EYEPATCH_BLUE = 8926; /** - * Bandana eyepatch + * Bandana eyepatch (brown) */ public static final int PIRATE_BANDANA_EYEPATCH_BROWN = 8927; @@ -72799,12 +72799,12 @@ public final class ItemID public static final int SIGIL_OF_THE_FOOD_MASTER_UNATTUNED = 28496; /** - * Sigil of the well-fed + * Sigil of the well fed */ public static final int SIGIL_OF_THE_WELL_FED_ATTUNED = 28498; /** - * Sigil of the well-fed + * Sigil of the well fed */ public static final int SIGIL_OF_THE_WELL_FED_UNATTUNED = 28499; @@ -72949,22 +72949,22 @@ public final class ItemID public static final int DEADMAN_BLIGHTED_TUMEKENS_SHADOW_UNCHARGED = 28549; /** - * Quest lamp + * Fremennik quest lamp */ public static final int DEADMAN_QUEST_LAMP_TIER_1 = 28551; /** - * Quest lamp + * Elf quest lamp */ public static final int DEADMAN_QUEST_LAMP_TIER_2 = 28552; /** - * Quest lamp + * Gnome quest lamp */ public static final int DEADMAN_QUEST_LAMP_TIER_3 = 28553; /** - * Quest lamp + * Mahjarrat 1 quest lamp */ public static final int DEADMAN_QUEST_LAMP_TIER_4 = 28554; @@ -75830,12 +75830,12 @@ public final class ItemID public static final int SIGIL_OF_REVOKED_LIMITATION_UNATTUNED = 29652; /** - * Sigil of rampart + * Sigil of the rampart */ public static final int SIGIL_OF_RAMPART_ATTUNED = 29654; /** - * Sigil of rampart + * Sigil of the rampart */ public static final int SIGIL_OF_RAMPART_UNATTUNED = 29655; @@ -75850,22 +75850,22 @@ public final class ItemID public static final int SIGIL_OF_DECEPTION_UNATTUNED = 29658; /** - * Sigil of lithe + * Sigil of litheness */ public static final int SIGIL_OF_LITHE_ATTUNED = 29660; /** - * Sigil of lithe + * Sigil of litheness */ public static final int SIGIL_OF_LITHE_UNATTUNED = 29661; /** - * Sigil of adroit + * Sigil of the adroit */ public static final int SIGIL_OF_ADROIT_ATTUNED = 29663; /** - * Sigil of adroit + * Sigil of the adroit */ public static final int SIGIL_OF_ADROIT_UNATTUNED = 29664; @@ -75890,22 +75890,22 @@ public final class ItemID public static final int SIGIL_OF_RESTORATION_UNATTUNED = 29670; /** - * Sigil of swashbuckler + * Sigil of the swashbuckler */ public static final int SIGIL_OF_SWASHBUCKLER_ATTUNED = 29672; /** - * Sigil of swashbuckler + * Sigil of the swashbuckler */ public static final int SIGIL_OF_SWASHBUCKLER_UNATTUNED = 29673; /** - * Sigil of gunslinger + * Sigil of the gunslinger */ public static final int SIGIL_OF_GUNSLINGER_ATTUNED = 29675; /** - * Sigil of gunslinger + * Sigil of the gunslinger */ public static final int SIGIL_OF_GUNSLINGER_UNATTUNED = 29676; @@ -81519,22 +81519,22 @@ public final class ItemID public static final int GURTOBS_FABRIC_ROLL = 31746; /** - * Nifty hat + * Swamp cruiser's hat */ public static final int JUBBLY_JIVE_COSMETIC_HEAD = 31748; /** - * Nifty jacket + * Swamp cruiser's jacket */ public static final int JUBBLY_JIVE_COSMETIC_CHEST = 31750; /** - * Nifty trousers + * Swamp cruiser's trousers */ public static final int JUBBLY_JIVE_COSMETIC_LEGS = 31752; /** - * Nifty shoes + * Swamp cruiser's shoes */ public static final int JUBBLY_JIVE_COSMETIC_FEET = 31754; @@ -81554,22 +81554,22 @@ public final class ItemID public static final int GWYNAS_FABRIC_ROLL = 31758; /** - * Sleek hat + * Crystal glider's hat */ public static final int GWENITH_GLIDE_COSMETIC_HEAD = 31760; /** - * Sleek jacket + * Crystal glider's jacket */ public static final int GWENITH_GLIDE_COSMETIC_CHEST = 31762; /** - * Sleek trousers + * Crystal glider's trousers */ public static final int GWENITH_GLIDE_COSMETIC_LEGS = 31764; /** - * Sleek shoes + * Crystal glider's shoes */ public static final int GWENITH_GLIDE_COSMETIC_FEET = 31766; @@ -82708,12 +82708,12 @@ public final class ItemID public static final int SAILING_SKILLGUIDE_MAST_MAHOGANY = 32169; /** - * Mahogany mast and linen sails + * Mahogany mast and canvas sails */ public static final int SAILING_SKILLGUIDE_MAST_MAHOGANY_SKIFF = 32170; /** - * Mahogany mast and linen sails + * Mahogany mast and canvas sails */ public static final int SAILING_SKILLGUIDE_MAST_MAHOGANY_SLOOP = 32171; @@ -83698,7 +83698,7 @@ public final class ItemID public static final int LOST_SCHEMATIC_KEY_BUCCANEERS = 32413; /** - * Small key (ynsdail) + * Small key (ynysdail) */ public static final int LOST_SCHEMATIC_KEY_LLEDRITH = 32414; @@ -86051,6 +86051,591 @@ public final class ItemID */ public static final int JAR_OF_FEATHERS = 32921; + /** + * Steel nails + */ + public static final int ANY_NAILS = 32923; + + /** + * Crate of arrowtips + */ + public static final int CARGO_CRATE_ARROWTIPS_RELLEKKA = 32924; + + /** + * Crate of clothes + */ + public static final int CARGO_CRATE_CLOTHES_VOID_KNIGHTS_OUTPOST = 32925; + + /** + * Null + */ + public static final int XMAS25_SERVING_PLATTER = 32926; + + /** + * Lovley jubbly bib + */ + public static final int XMAS25_BIB = 32928; + + /** + * Beer belly sweater + */ + public static final int XMAS25_BEER_BELLY_SWEATER = 32930; + + /** + * Jad jumper + */ + public static final int XMAS25_CONTEST_JUMPER = 32932; + + /** + * Christmas dinner + */ + public static final int XMAS25_CHRISTMAS_DINNER = 32934; + + /** + * Crate of furs + */ + public static final int CARGO_CRATE_FURS_ALDARIN_1 = 32936; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_ARDOUGNE_1 = 32937; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_ARDOUGNE_2 = 32938; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_ARDOUGNE_3 = 32939; + + /** + * Crate of sand + */ + public static final int CARGO_CRATE_SAND_ARDOUGNE_1 = 32940; + + /** + * Crate of red coral + */ + public static final int CARGO_CRATE_RED_CORAL_ARDOUGNE_1 = 32941; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_BRIMHAVEN_1 = 32942; + + /** + * Crate of spices + */ + public static final int CARGO_CRATE_SPICES_BRIMHAVEN_1 = 32943; + + /** + * Crate of jewellery + */ + public static final int CARGO_CRATE_JEWELLERY_BRIMHAVEN_1 = 32944; + + /** + * Crate of bait + */ + public static final int CARGO_CRATE_BAIT_CATHERBY_1 = 32945; + + /** + * Crate of coconuts + */ + public static final int CARGO_CRATE_COCONUTS_CATHERBY_1 = 32946; + + /** + * Crate of arrowtips + */ + public static final int CARGO_CRATE_ARROWTIPS_CATHERBY_1 = 32947; + + /** + * Crate of pineapples + */ + public static final int CARGO_CRATE_PINEAPPLES_CIVITAS_ILLA_FORTIS_1 = 32948; + + /** + * Crate of logs + */ + public static final int CARGO_CRATE_LOGS_DEEPFIN_POINT_1 = 32949; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_DEEPFIN_POINT_1 = 32950; + + /** + * Crate of logs + */ + public static final int CARGO_CRATE_LOGS_DEEPFIN_POINT_2 = 32951; + + /** + * Crate of alpaca wool + */ + public static final int CARGO_CRATE_ALPACA_WOOL_DEEPFIN_POINT_1 = 32952; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_DEEPFIN_POINT_2 = 32953; + + /** + * Crate of fabrics + */ + public static final int CARGO_CRATE_FABRICS_DEEPFIN_POINT_1 = 32954; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_DEEPFIN_POINT_3 = 32955; + + /** + * Crate of logs + */ + public static final int CARGO_CRATE_LOGS_DEEPFIN_POINT_3 = 32956; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_DEEPFIN_POINT_4 = 32957; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_LANDS_END_1 = 32958; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_LANDS_END_2 = 32959; + + /** + * Crate of gems + */ + public static final int CARGO_CRATE_GEMS_LANDS_END_1 = 32960; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_LUNAR_ISLE_1 = 32961; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_LUNAR_ISLE_2 = 32962; + + /** + * Crate of potions + */ + public static final int CARGO_CRATE_POTIONS_LUNAR_ISLE_1 = 32963; + + /** + * Crate of furs + */ + public static final int CARGO_CRATE_FURS_PISCATORIS_1 = 32964; + + /** + * Crate of swamp paste + */ + public static final int CARGO_CRATE_SWAMP_PASTE_PORT_KHAZARD_1 = 32965; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_PORT_PISCARILIUS_1 = 32966; + + /** + * Crate of books + */ + public static final int CARGO_CRATE_BOOKS_PORT_PISCARILIUS_1 = 32967; + + /** + * Crate of books + */ + public static final int CARGO_CRATE_BOOKS_PORT_PISCARILIUS_2 = 32968; + + /** + * Crate of jewellery + */ + public static final int CARGO_CRATE_JEWELLERY_PORT_PISCARILIUS_1 = 32969; + + /** + * Crate of jewellery + */ + public static final int CARGO_CRATE_JEWELLERY_PORT_PISCARILIUS_2 = 32970; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_PORT_PISCARILIUS_2 = 32971; + + /** + * Crate of furs + */ + public static final int CARGO_CRATE_FURS_PORT_PISCARILIUS_1 = 32972; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_PORT_ROBERTS_1 = 32973; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_PORT_ROBERTS_2 = 32974; + + /** + * Crate of silk + */ + public static final int CARGO_CRATE_SILK_PORT_ROBERTS_1 = 32975; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_PORT_ROBERTS_3 = 32976; + + /** + * Crate of logs + */ + public static final int CARGO_CRATE_LOGS_PORT_SARIM_1 = 32977; + + /** + * Crate of swords + */ + public static final int CARGO_CRATE_SWORDS_PORT_SARIM_1 = 32978; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_PORT_SARIM_1 = 32979; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_PORT_SARIM_2 = 32980; + + /** + * Crate of seeds + */ + public static final int CARGO_CRATE_SEEDS_PORT_SARIM_1 = 32981; + + /** + * Crate of swords + */ + public static final int CARGO_CRATE_SWORDS_PORT_TYRAS_1 = 32982; + + /** + * Crate of platebodies + */ + public static final int CARGO_CRATE_PLATEBODIES_PORT_TYRAS_1 = 32983; + + /** + * Crate of swords + */ + public static final int CARGO_CRATE_SWORDS_PORT_TYRAS_2 = 32984; + + /** + * Crate of ores + */ + public static final int CARGO_CRATE_ORES_PORT_TYRAS_1 = 32985; + + /** + * Crate of logs + */ + public static final int CARGO_CRATE_LOGS_PRIFDDINAS_1 = 32986; + + /** + * Crate of potions + */ + public static final int CARGO_CRATE_POTIONS_PRIFDDINAS_1 = 32987; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_RED_ROCK_1 = 32988; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_RED_ROCK_2 = 32989; + + /** + * Crate of runes + */ + public static final int CARGO_CRATE_RUNES_RED_ROCK_1 = 32990; + + /** + * Crate of fish + */ + public static final int CARGO_CRATE_FISH_RED_ROCK_3 = 32991; + + /** + * Crate of planks + */ + public static final int CARGO_CRATE_PLANKS_RELLEKKA_1 = 32992; + + /** + * Crate of teak logs + */ + public static final int CARGO_CRATE_TEAK_LOGS_RELLEKKA_1 = 32993; + + /** + * Crate of runes + */ + public static final int CARGO_CRATE_RUNES_RUINS_OF_UNKAH_1 = 32994; + + /** + * Crate of cocktails + */ + public static final int CARGO_CRATE_COCKTAILS_RUINS_OF_UNKAH_1 = 32995; + + /** + * Crate of ship parts + */ + public static final int CARGO_CRATE_SHIP_PARTS_RUINS_OF_UNKAH_1 = 32996; + + /** + * Crate of rum + */ + public static final int CARGO_CRATE_RUM_THE_PANDEMONIUM_1 = 32997; + + /** + * Crate of javelins + */ + public static final int CARGO_CRATE_JAVELINS_THE_SUMMER_SHORE_1 = 32998; + + /** + * Crate of potions + */ + public static final int CARGO_CRATE_POTIONS_VOID_KNIGHTS_OUTPOST_1 = 32999; + + /** + * Crate of ores + */ + public static final int CARGO_CRATE_ORES_VOID_KNIGHTS_OUTPOST_1 = 33000; + + /** + * Crate of potions + */ + public static final int CARGO_CRATE_POTIONS_VOID_KNIGHTS_OUTPOST_2 = 33001; + + /** + * Holy moleys + */ + public static final int HOLY_MOLEYS = 33002; + + /** + * Kharidian quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_5 = 33004; + + /** + * Myreque quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_6 = 33005; + + /** + * Dragonkin quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_7 = 33006; + + /** + * Mahjarrat 2 quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_8 = 33007; + + /** + * Camelot quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_9 = 33008; + + /** + * Recipe for disaster quest lamp + */ + public static final int DEADMAN_QUEST_LAMP_TIER_10 = 33009; + + /** + * Ruinous powers + */ + public static final int DEADMAN_RUINOUS_POWERS_BOOK = 33010; + + /** + * Annihilation weapon scroll + */ + public static final int DEADMAN_2026_WEAPON_ORNAMENT_SCROLL = 33012; + + /** + * Annihilation blueprints + */ + public static final int DEADMAN_2026_POH_ORNAMENT_SCROLL = 33015; + + /** + * Annihilation teleport scroll + */ + public static final int DEADMAN_2026_HOME_TELEPORT_SCROLL = 33018; + + /** + * Bow of faerdhinen (c) + */ + public static final int BOW_OF_FAERDHINEN_INFINITE_DEADMAN = 33021; + + /** + * Crystal body + */ + public static final int CRYSTAL_CHESTPLATE_DEADMAN = 33023; + + /** + * Crystal body (inactive) + */ + public static final int CRYSTAL_CHESTPLATE_INACTIVE_DEADMAN = 33025; + + /** + * Crystal legs + */ + public static final int CRYSTAL_PLATELEGS_DEADMAN = 33027; + + /** + * Crystal legs (inactive) + */ + public static final int CRYSTAL_PLATELEGS_INACTIVE_DEADMAN = 33029; + + /** + * Crystal helm + */ + public static final int CRYSTAL_HELMET_DEADMAN = 33031; + + /** + * Crystal helm (inactive) + */ + public static final int CRYSTAL_HELMET_INACTIVE_DEADMAN = 33033; + + /** + * Toxic staff (uncharged) + */ + public static final int TOXIC_SOTD_DEADMAN = 33035; + + /** + * Toxic staff (deadman) + */ + public static final int TOXIC_SOTD_CHARGED_DEADMAN = 33036; + + /** + * The dogsword + */ + public static final int DEADMAN_DOGSWORD = 33038; + + /** + * Thunder khopesh + */ + public static final int DEADMAN_THUNDER_KHOPESH = 33041; + + /** + * Trinket of avarice + */ + public static final int MAGIC_ROCK_OF_AVARICE = 33044; + + /** + * Trinket of fortuity (inactive) + */ + public static final int MAGIC_ROCK_OF_FORTUITY_INACTIVE = 33047; + + /** + * Trinket of fortuity (active) + */ + public static final int MAGIC_ROCK_OF_FORTUITY_ACTIVE = 33050; + + /** + * Sigil of the gods + */ + public static final int SIGIL_OF_THE_GODS_ATTUNED = 33053; + + /** + * Sigil of the gods + */ + public static final int SIGIL_OF_THE_GODS_UNATTUNED = 33054; + + /** + * Sigil of conclusion + */ + public static final int SIGIL_OF_CONCLUSION_ATTUNED = 33055; + + /** + * Sigil of conclusion + */ + public static final int SIGIL_OF_CONCLUSION_UNATTUNED = 33056; + + /** + * Sigil of automation + */ + public static final int SIGIL_OF_AUTOMATION_ATTUNED = 33057; + + /** + * Sigil of automation + */ + public static final int SIGIL_OF_AUTOMATION_UNATTUNED = 33058; + + /** + * Sigil of eternal belief + */ + public static final int SIGIL_OF_ETERNAL_BELIEF_ATTUNED = 33059; + + /** + * Sigil of eternal belief + */ + public static final int SIGIL_OF_ETERNAL_BELIEF_UNATTUNED = 33060; + + /** + * Sigil of efficiency + */ + public static final int SIGIL_OF_EFFICIENCY_ATTUNED = 33061; + + /** + * Sigil of efficiency + */ + public static final int SIGIL_OF_EFFICIENCY_UNATTUNED = 33062; + + /** + * Starter cape + */ + public static final int DEADMAN_STARTER_CAPE = 33063; + + /** + * Deadman's skull + */ + public static final int DEADMAN_SKULL = 33065; + + /** + * Hooded slayer helmet + */ + public static final int SLAYER_HELM_HOODED = 33066; + + /** + * Hooded slayer helmet (i) + */ + public static final int SLAYER_HELM_I_HOODED = 33068; + + /** + * Hooded slayer helmet (i) + */ + public static final int SW_SLAYER_HELM_I_HOODED = 33070; + + /** + * Hooded slayer helmet (i) + */ + public static final int PVPA_SLAYER_HELM_I_HOODED = 33072; + + /** + * Facility bottle (empty) + */ + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33074; + + /** + * Facility bottle (full) + */ + public static final int SAILING_FACILITY_BOTTLE_FULL = 33077; + public static final class Cert { public static final int TWPART1 = 7; @@ -90019,59 +90604,6 @@ public static final class Cert public static final int RAW_BOAR_MEAT = 25834; public static final int PRIF_WEAPON_SEED_ENHANCED = 25860; public static final int BOW_OF_FAERDHINEN_INACTIVE = 25863; - public static final int SIGIL_OF_RESILIENCE_UNATTUNED = 25992; - public static final int SIGIL_OF_CONSISTENCY_UNATTUNED = 25995; - public static final int SIGIL_OF_THE_FORMIDABLE_FIGHTER_UNATTUNED = 25998; - public static final int SIGIL_OF_THE_RIGOROUS_RANGER_UNATTUNED = 26001; - public static final int SIGIL_OF_THE_METICULOUS_MAGE_UNATTUNED = 26004; - public static final int SIGIL_OF_FORTIFICATION_UNATTUNED = 26007; - public static final int SIGIL_OF_BARROWS_UNATTUNED = 26010; - public static final int SIGIL_OF_DEFT_STRIKES_UNATTUNED = 26013; - public static final int SIGIL_OF_FREEDOM_UNATTUNED = 26016; - public static final int SIGIL_OF_ENHANCED_HARVEST_UNATTUNED = 26019; - public static final int SIGIL_OF_STORAGE_UNATTUNED = 26022; - public static final int SIGIL_OF_THE_SMITH_UNATTUNED = 26025; - public static final int SIGIL_OF_THE_ALCHEMIST_UNATTUNED = 26028; - public static final int SIGIL_OF_THE_FLETCHER_UNATTUNED = 26031; - public static final int SIGIL_OF_THE_CHEF_UNATTUNED = 26034; - public static final int SIGIL_OF_THE_CRAFTER_UNATTUNED = 26037; - public static final int SIGIL_OF_THE_ABYSS_UNATTUNED = 26040; - public static final int SIGIL_OF_STAMINA_UNATTUNED = 26043; - public static final int SIGIL_OF_THE_POTION_MASTER_UNATTUNED = 26046; - public static final int SIGIL_OF_THE_ETERNAL_JEWELLER_UNATTUNED = 26049; - public static final int SIGIL_OF_THE_TREASURE_HUNTER_UNATTUNED = 26052; - public static final int SIGIL_OF_MOBILITY_UNATTUNED = 26055; - public static final int SIGIL_OF_EXAGGERATION_UNATTUNED = 26058; - public static final int SIGIL_OF_SPECIALISED_STRIKES_UNATTUNED = 26061; - public static final int SIGIL_OF_THE_PORCUPINE_UNATTUNED = 26064; - public static final int SIGIL_OF_BINDING_UNATTUNED = 26067; - public static final int SIGIL_OF_ESCAPING_UNATTUNED = 26070; - public static final int SIGIL_OF_THE_RUTHLESS_RANGER_UNATTUNED = 26073; - public static final int SIGIL_OF_THE_FERAL_FIGHTER_UNATTUNED = 26076; - public static final int SIGIL_OF_THE_MENACING_MAGE_UNATTUNED = 26079; - public static final int SIGIL_OF_PROSPERITY_UNATTUNED = 26082; - public static final int SIGIL_OF_THE_DWARVES_UNATTUNED = 26085; - public static final int SIGIL_OF_THE_ELVES_UNATTUNED = 26088; - public static final int SIGIL_OF_THE_BARBARIANS_UNATTUNED = 26091; - public static final int SIGIL_OF_THE_GNOMES_UNATTUNED = 26094; - public static final int SIGIL_OF_NATURE_UNATTUNED = 26097; - public static final int SIGIL_OF_DEVOTION_UNATTUNED = 26100; - public static final int SIGIL_OF_THE_FORAGER_UNATTUNED = 26103; - public static final int SIGIL_OF_GARMENTS_UNATTUNED = 26106; - public static final int SIGIL_OF_SLAUGHTER_UNATTUNED = 26109; - public static final int SIGIL_OF_THE_FORTUNE_FARMER_UNATTUNED = 26112; - public static final int SIGIL_OF_VERSATILITY_UNATTUNED = 26115; - public static final int SIGIL_OF_THE_SERPENT_UNATTUNED = 26118; - public static final int SIGIL_OF_SUPREME_STAMINA_UNATTUNED = 26121; - public static final int SIGIL_OF_PRESERVATION_UNATTUNED = 26124; - public static final int SIGIL_OF_FINALITY_UNATTUNED = 26127; - public static final int SIGIL_OF_PIOUS_PROTECTION_UNATTUNED = 26130; - public static final int SIGIL_OF_AGGRESSION_UNATTUNED = 26133; - public static final int SIGIL_OF_RAMPAGE_UNATTUNED = 26136; - public static final int SIGIL_OF_THE_SKILLER_UNATTUNED = 26139; - public static final int SIGIL_OF_REMOTE_STORAGE_UNATTUNED = 26142; - public static final int SIGIL_OF_LAST_RECALL_UNATTUNED = 26145; - public static final int SIGIL_OF_THE_GUARDIAN_ANGEL_UNATTUNED = 26148; public static final int POH_CONDENSED_GOLD = 26267; public static final int BRUTAL_2DOSEANCIENTBREW = 26351; public static final int BRUTAL_1DOSEANCIENTBREW = 26354; @@ -90216,24 +90748,6 @@ public static final class Cert public static final int DT2_AWAKENERS_ORB = 28335; public static final int SOULREAPER = 28339; public static final int DT2_STRANGLEWOOD_SURVIVAL_BARRICADE = 28391; - public static final int SIGIL_OF_SUSTENANCE_UNATTUNED = 28479; - public static final int SIGIL_OF_HOARDING_UNATTUNED = 28482; - public static final int SIGIL_OF_THE_ALCHEMANIAC_UNATTUNED = 28485; - public static final int SIGIL_OF_THE_HUNTER_UNATTUNED = 28488; - public static final int SIGIL_OF_RESISTANCE_UNATTUNED = 28491; - public static final int SIGIL_OF_AGILE_FORTUNE_UNATTUNED = 28494; - public static final int SIGIL_OF_THE_FOOD_MASTER_UNATTUNED = 28497; - public static final int SIGIL_OF_THE_WELL_FED_UNATTUNED = 28500; - public static final int SIGIL_OF_THE_INFERNAL_CHEF_UNATTUNED = 28503; - public static final int SIGIL_OF_THE_INFERNAL_SMITH_UNATTUNED = 28506; - public static final int SIGIL_OF_THE_LIGHTBEARER_UNATTUNED = 28509; - public static final int SIGIL_OF_THE_BLOODHOUND_UNATTUNED = 28512; - public static final int SIGIL_OF_PRECISION_UNATTUNED = 28515; - public static final int SIGIL_OF_THE_AUGMENTED_THRALL_UNATTUNED = 28518; - public static final int SIGIL_OF_FAITH_UNATTUNED = 28521; - public static final int SIGIL_OF_TITANIUM_UNATTUNED = 28524; - public static final int SIGIL_OF_THE_NINJA_UNATTUNED = 28527; - public static final int SIGIL_OF_WOODCRAFT_UNATTUNED = 28530; public static final int DEADMAN_BLIGHTED_VOIDWAKER = 28532; public static final int DEADMAN_BLIGHTED_DRAGON_CLAWS = 28535; public static final int DEADMAN_BLIGHTED_AGS = 28538; @@ -90380,17 +90894,6 @@ public static final class Cert public static final int DEADMAN2DOSEOVERLOAD = 29638; public static final int DEADMAN1DOSEOVERLOAD = 29641; public static final int DEADMAN_OVERLOAD_CHITIN = 29644; - public static final int SIGIL_OF_METICULOUSNESS_UNATTUNED = 29650; - public static final int SIGIL_OF_REVOKED_LIMITATION_UNATTUNED = 29653; - public static final int SIGIL_OF_RAMPART_UNATTUNED = 29656; - public static final int SIGIL_OF_DECEPTION_UNATTUNED = 29659; - public static final int SIGIL_OF_LITHE_UNATTUNED = 29662; - public static final int SIGIL_OF_ADROIT_UNATTUNED = 29665; - public static final int SIGIL_OF_ONSLAUGHT_UNATTUNED = 29668; - public static final int SIGIL_OF_RESTORATION_UNATTUNED = 29671; - public static final int SIGIL_OF_SWASHBUCKLER_UNATTUNED = 29674; - public static final int SIGIL_OF_GUNSLINGER_UNATTUNED = 29677; - public static final int SIGIL_OF_ARCANE_SWIFTNESS_UNATTUNED = 29680; public static final int NOXIOUS_HALBERD = 29797; public static final int AMULET_OF_RANCOUR = 29802; public static final int ARANEA_BOOTS = 29807; @@ -90705,6 +91208,17 @@ public static final class Cert public static final int CAMPHOR_LOGS = 32905; public static final int IRONWOOD_LOGS = 32908; public static final int ROSEWOOD_LOGS = 32911; + public static final int DEADMAN_2026_WEAPON_ORNAMENT_SCROLL = 33013; + public static final int DEADMAN_2026_POH_ORNAMENT_SCROLL = 33016; + public static final int DEADMAN_2026_HOME_TELEPORT_SCROLL = 33019; + public static final int DEADMAN_DOGSWORD = 33039; + public static final int DEADMAN_THUNDER_KHOPESH = 33042; + public static final int MAGIC_ROCK_OF_AVARICE = 33045; + public static final int MAGIC_ROCK_OF_FORTUITY_INACTIVE = 33048; + public static final int MAGIC_ROCK_OF_FORTUITY_ACTIVE = 33051; + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33075; + public static final int BREW_RED_RUM = 33078; + public static final int BREW_BLUE_RUM = 33079; } public static final class Placeholder @@ -100130,6 +100644,34 @@ public static final class Placeholder public static final int IRONWOOD_LOGS = 32909; public static final int ROSEWOOD_LOGS = 32912; public static final int JAR_OF_FEATHERS = 32922; + public static final int XMAS25_BIB = 32929; + public static final int XMAS25_BEER_BELLY_SWEATER = 32931; + public static final int XMAS25_CONTEST_JUMPER = 32933; + public static final int XMAS25_CHRISTMAS_DINNER = 32935; + public static final int HOLY_MOLEYS = 33003; + public static final int DEADMAN_RUINOUS_POWERS_BOOK = 33011; + public static final int DEADMAN_2026_WEAPON_ORNAMENT_SCROLL = 33014; + public static final int DEADMAN_2026_POH_ORNAMENT_SCROLL = 33017; + public static final int DEADMAN_2026_HOME_TELEPORT_SCROLL = 33020; + public static final int BOW_OF_FAERDHINEN_INFINITE_DEADMAN = 33022; + public static final int CRYSTAL_CHESTPLATE_DEADMAN = 33024; + public static final int CRYSTAL_CHESTPLATE_INACTIVE_DEADMAN = 33026; + public static final int CRYSTAL_PLATELEGS_DEADMAN = 33028; + public static final int CRYSTAL_PLATELEGS_INACTIVE_DEADMAN = 33030; + public static final int CRYSTAL_HELMET_DEADMAN = 33032; + public static final int CRYSTAL_HELMET_INACTIVE_DEADMAN = 33034; + public static final int TOXIC_SOTD_CHARGED_DEADMAN = 33037; + public static final int DEADMAN_DOGSWORD = 33040; + public static final int DEADMAN_THUNDER_KHOPESH = 33043; + public static final int MAGIC_ROCK_OF_AVARICE = 33046; + public static final int MAGIC_ROCK_OF_FORTUITY_INACTIVE = 33049; + public static final int MAGIC_ROCK_OF_FORTUITY_ACTIVE = 33052; + public static final int DEADMAN_STARTER_CAPE = 33064; + public static final int SLAYER_HELM_HOODED = 33067; + public static final int SLAYER_HELM_I_HOODED = 33069; + public static final int SW_SLAYER_HELM_I_HOODED = 33071; + public static final int PVPA_SLAYER_HELM_I_HOODED = 33073; + public static final int SAILING_FACILITY_BOTTLE_EMPTY = 33076; } /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java b/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java index df29c4fce58..9e1b1f5d4e2 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/NpcID.java @@ -64331,6 +64331,11 @@ public final class NpcID */ public static final int REINFORCED_PIRATE_THIEVING_CHEST_GLE = 14813; + /** + * Revenant imp + */ + public static final int WILD_CAVE_IMP_DEADMAN = 14814; + /** * Spooky chair */ @@ -64548,6 +64553,16 @@ public final class NpcID */ public static final int SLAYER_GRYPHON_BOSS_GUARDIAN_VIS = 14863; + /** + * Revenant goblin + */ + public static final int WILD_CAVE_GOBLIN_DEADMAN = 14864; + + /** + * Revenant pyrefiend + */ + public static final int WILD_CAVE_PYREFIEND_DEADMAN = 14865; + /** * Henderson */ @@ -65939,6 +65954,46 @@ public final class NpcID * Sailing cat */ public static final int SAILING_CHARTING_DRINK_CRATE_SAILING_CAT_EFFECT = 15177; + + /** + * Revenant hobgoblin + */ + public static final int WILD_CAVE_HOBGOBLIN_DEADMAN = 15178; + + /** + * Revenant cyclops + */ + public static final int WILD_CAVE_CYCLOPS_DEADMAN = 15179; + + /** + * Revenant hellhound + */ + public static final int WILD_CAVE_HELLHOUND_DEADMAN = 15180; + + /** + * Revenant demon + */ + public static final int WILD_CAVE_DEMON_DEADMAN = 15181; + + /** + * Revenant ork + */ + public static final int WILD_CAVE_ORK_DEADMAN = 15182; + + /** + * Revenant dark beast + */ + public static final int WILD_CAVE_DARKBEAST_DEADMAN = 15183; + + /** + * Revenant knight + */ + public static final int WILD_CAVE_KNIGHT_DEADMAN = 15184; + + /** + * Revenant dragon + */ + public static final int WILD_CAVE_DRAGON_DEADMAN = 15185; public static final int BOAT_HP_NPC_TINY = 15186; public static final int BOAT_HP_NPC_SMALL = 15187; public static final int BOAT_HP_NPC_MEDIUM = 15188; @@ -66175,6 +66230,11 @@ public final class NpcID */ public static final int SAILING_DOLPHIN_BABY = 15236; + /** + * Zemouregal + */ + public static final int DEADMAN_BREACH_LUCIEN = 15237; + /** * Junior Jim */ @@ -67531,5 +67591,125 @@ public final class NpcID * Trader Crewmember */ public static final int SAILING_TRANSPORT_TRADER_STAN_CREW_WOMAN3_PORT_ROBERTS = 15546; + + /** + * Big Evil Chicken + */ + public static final int DEADMAN_BREACH_EVIL_CHICKEN = 15547; + + /** + * Scurrius + */ + public static final int DEADMAN_BREACH_SCURRIUS = 15548; + + /** + * Phantom Muspah + */ + public static final int DEADMAN_BREACH_MUSPAH = 15549; + + /** + * Splatter + */ + public static final int DEADMAN_BREACH_SPLATTER = 15550; + + /** + * Tumeken's Warden + */ + public static final int DEADMAN_BREACH_WARDEN_TUMEKEN_RANGE = 15551; + + /** + * Elidinis' Warden + */ + public static final int DEADMAN_BREACH_WARDEN_TUMEKEN_MAGE = 15552; + + /** + * I DSCIM YOU + */ + public static final int DEADMAN_BREACH_DSCIM_NPC = 15553; + + /** + * Sol Heredit + */ + public static final int DEADMAN_BREACH_SOL_HEREDIT = 15554; + + /** + * Yama + */ + public static final int DEADMAN_BREACH_YAMA = 15555; + + /** + * Pestilent Bloat + */ + public static final int DEADMAN_BREACH_BLOAT = 15556; + + /** + * TzTok-Jad-Rek + */ + public static final int DEADMAN_BREACH_JAD_MINION = 15557; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_MUMMY_MINION = 15558; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_SHADE_MINION = 15559; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_UNDEAD_ONE_MINION = 15560; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_PIRATE_MINION = 15561; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_ULFRIC_MINION = 15562; + + /** + * Zemouregal Summon + */ + public static final int DEADMAN_BREACH_KHAZARD_MINION = 15563; + + /** + * Zemouregal + */ + public static final int DEADMAN_CHEST_ZEMOUREGAL = 15564; + public static final int DEADMAN_GUARD_UNKAH = 15565; + + /** + * Guard + */ + public static final int DEADMAN_GUARD_UNKAH_VIS = 15566; + public static final int DEADMAN_GUARD_WINTERTODT = 15567; + + /** + * Guard + */ + public static final int DEADMAN_GUARD_WINTERTODT_VIS = 15568; + public static final int DEADMAN_THRALL_ZOMBIE_GREATER_ZUK = 15569; + public static final int DEADMAN_THRALL_SKELETAL_GREATER_PRINCESS = 15570; + public static final int DEADMAN_THRALL_GHOSTLY_GREATER_WISP = 15571; + + /** + * Ket-Zek + */ + public static final int TZHAAR_FIGHTPIT_SWARM_4A = 15572; + + /** + * Ket-Zek + */ + public static final int TZHAAR_FIGHTPIT_SWARM_4B = 15573; + + /** + * TzTok-Jad + */ + public static final int TZHAAR_FIGHTPIT_SWARM_BOSS = 15574; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java b/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java index 6c1f7b8c6e8..9129a400bf7 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java @@ -71723,6 +71723,7 @@ class ObjectID1 */ public static final int TOA_ZEBAK_BUBBLES_BLUE = 58525; public static final int BGSOUND_SAILING_OCEAN_WATER_LOOP_01 = 58526; + public static final int CASTLEARROWSLIT_OFFSET = 58527; public static final int BGSOUND_SAILING_COOKING_LOOP_2 = 58528; public static final int BGSOUND_SAILING_NORTHERN_OCEAN_WIND_LOOP = 58529; public static final int BGSOUND_SAILING_CLOCK = 58530; @@ -73137,6 +73138,11 @@ class ObjectID1 */ public static final int NICKELROCK1_EMPTY = 58924; + /** + * Cabinet + */ + public static final int CABINET_OFFSET1 = 58925; + /** * Scoreboard */ @@ -73881,7 +73887,7 @@ class ObjectID1 public static final int SAILING_CHARTING_GENERIC_GLIDER_KHARAZI_STRAIT = 59308; /** - * Tiny briny shrimp + * <col=ffff00>Tiny briny shrimp</col> */ public static final int SAILING_CHARTING_GENERIC_SEA_MONKEYS = 59309; @@ -74056,7 +74062,7 @@ class ObjectID1 public static final int SAILING_CHARTING_GENERIC_SAND_PIT = 59343; /** - * Suspicious eyes + * <col=ffff00>Suspicious eyes</col> */ public static final int SAILING_CHARTING_GENERIC_CRAB_EYES = 59344; @@ -74151,12 +74157,12 @@ class ObjectID1 public static final int SAILING_CHARTING_GENERIC_ATOLL_DICTIONARY = 59362; /** - * Lurking Shadow + * <col=ffff00>Lurking Shadow</col> */ public static final int SAILING_CHARTING_GENERIC_SCARY_SHADOW = 59363; /** - * Horde of tiny sea creatures + * <col=ffff00>Horde of tiny sea creatures</col> */ public static final int SAILING_CHARTING_GENERIC_SEA_SAPPHIRES = 59364; @@ -74599,6 +74605,11 @@ class ObjectID1 */ public static final int SAILING_BOAT_SAILS_COLOSSAL_REGULAR = 59551; + /** + * Crevice + */ + public static final int GRIMSTONE_CAVE_WALL_UPPER_CREVICE = 59552; + /** * Sails */ @@ -76842,216 +76853,60 @@ class ObjectID1 * Sails */ public static final int SAILING_NPC_BOAT_BASIC_MEDIUM_SAIL = 60244; - - /** - * Basic cargo hold - */ public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_RAFT = 60245; /** - * Basic cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_RAFT_OPEN = 60246; - - /** - * Oak cargo hold + * Deadman's chest */ + public static final int DEADMAN_RARE_CHEST_SPAWN = 60246; public static final int SAILING_BOAT_CARGO_HOLD_OAK_RAFT = 60247; /** - * Oak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_OAK_RAFT_OPEN = 60248; - - /** - * Teak cargo hold + * Deadman's chest */ + public static final int DEADMAN_RARE_CHEST_IDLE = 60248; public static final int SAILING_BOAT_CARGO_HOLD_TEAK_RAFT = 60249; /** - * Teak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_TEAK_RAFT_OPEN = 60250; - - /** - * Mahogany cargo hold + * Deadman's chest */ + public static final int DEADMAN_RARE_CHEST_OPENED = 60250; public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_RAFT = 60251; - - /** - * Mahogany cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_RAFT_OPEN = 60252; - - /** - * Camphor cargo hold - */ + public static final int DEADMAN_POH_WALL = 60252; public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_RAFT = 60253; - - /** - * Camphor cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_RAFT_OPEN = 60254; - - /** - * Ironwood cargo hold - */ + public static final int DEADMAN_POH_WINDOW = 60254; public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_RAFT = 60255; - - /** - * Ironwood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_RAFT_OPEN = 60256; - - /** - * Rosewood cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY01_L = 60256; public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_RAFT = 60257; - - /** - * Rosewood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_RAFT_OPEN = 60258; - - /** - * Basic cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY01_R = 60258; public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_2X5 = 60259; - - /** - * Basic cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_2X5_OPEN = 60260; - - /** - * Oak cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY02_L = 60260; public static final int SAILING_BOAT_CARGO_HOLD_OAK_2X5 = 60261; - - /** - * Oak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_OAK_2X5_OPEN = 60262; - - /** - * Teak cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY02_R = 60262; public static final int SAILING_BOAT_CARGO_HOLD_TEAK_2X5 = 60263; - - /** - * Teak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_TEAK_2X5_OPEN = 60264; - - /** - * Mahogany cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY03_L = 60264; public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_2X5 = 60265; - - /** - * Mahogany cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_2X5_OPEN = 60266; - - /** - * Camphor cargo hold - */ + public static final int DEADMAN_POH_WALL_CRUMBLY03_R = 60266; public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_2X5 = 60267; - - /** - * Camphor cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_2X5_OPEN = 60268; - - /** - * Ironwood cargo hold - */ + public static final int DEADMAN_RUBBLE01 = 60268; public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_2X5 = 60269; - - /** - * Ironwood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_2X5_OPEN = 60270; - - /** - * Rosewood cargo hold - */ + public static final int DEADMAN_RUBBLE02 = 60270; public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_2X5 = 60271; - - /** - * Rosewood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_2X5_OPEN = 60272; - - /** - * Basic cargo hold - */ + public static final int POH_FLOORDECOR_DEADMAN = 60272; public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_LARGE = 60273; - - /** - * Basic cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_LARGE_OPEN = 60274; - - /** - * Oak cargo hold - */ + public static final int DEADMAN_DUNGEON_INSIDEWALL_CORNER = 60274; public static final int SAILING_BOAT_CARGO_HOLD_OAK_LARGE = 60275; - - /** - * Oak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_OAK_LARGE_OPEN = 60276; - - /** - * Teak cargo hold - */ + public static final int DEADMAN_DUNGEON_OUTSIDEWALL_CORNER = 60276; public static final int SAILING_BOAT_CARGO_HOLD_TEAK_LARGE = 60277; - - /** - * Teak cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_TEAK_LARGE_OPEN = 60278; - - /** - * Mahogany cargo hold - */ + public static final int DEADMAN_DUNGEON_OUTSIDEWALL_LCORNER = 60278; public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_LARGE = 60279; - - /** - * Mahogany cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_LARGE_OPEN = 60280; - - /** - * Camphor cargo hold - */ + public static final int DEADMAN_DUNGEON_OUTSIDEWALL_RCORNER = 60280; public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_LARGE = 60281; - - /** - * Camphor cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_LARGE_OPEN = 60282; - - /** - * Ironwood cargo hold - */ + public static final int DEADMAN_DUNGEON_WALLTOP = 60282; public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_LARGE = 60283; - - /** - * Ironwood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_LARGE_OPEN = 60284; - - /** - * Rosewood cargo hold - */ + public static final int DEADMAN_DUNGEON_OUTSIDEWALL = 60284; public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_LARGE = 60285; - - /** - * Rosewood cargo hold - */ - public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_LARGE_OPEN = 60286; + public static final int DEADMAN_DUNGEON_INSIDEWALL = 60286; /** * Notice board @@ -77877,5 +77732,402 @@ class ObjectID1 * Tentacle */ public static final int HAZARDOUS_WATER_PROFANE_GHOST = 60575; + + /** + * Table + */ + public static final int XMAS25_TABLE01_EMPTY01 = 60576; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_RAFT_NO_CARGO = 60577; + + /** + * Table + */ + public static final int XMAS25_TABLE01_DRINK01 = 60578; + + /** + * Table + */ + public static final int XMAS25_TABLE01_FOOD01 = 60579; + + /** + * Table + */ + public static final int XMAS25_TABLE01_VEGETABLE01 = 60580; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_RAFT_CARGO = 60581; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_RAFT_NO_CARGO = 60582; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_RAFT_CARGO = 60583; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_RAFT_NO_CARGO = 60584; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_DRINKS_BAR_MIDDLE = 60585; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_RAFT_CARGO = 60586; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_DRINKS_BAR_MIDDLE2 = 60587; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_RAFT_NO_CARGO = 60588; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_DRINKS_BAR_LEFT = 60589; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_RAFT_CARGO = 60590; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_DRINKS_BAR_RIGHT = 60591; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_RAFT_NO_CARGO = 60592; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_BAR_MIDDLE = 60593; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_RAFT_CARGO = 60594; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_BAR_MIDDLE2 = 60595; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_RAFT_NO_CARGO = 60596; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_BAR_MIDDLE3 = 60597; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_RAFT_CARGO = 60598; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_BAR_LEFT = 60599; + + /** + * Bar + */ + public static final int XMAS25_BLUE_INN_BAR_RIGHT = 60600; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_RAFT_NO_CARGO = 60601; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_RAFT_CARGO = 60602; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_2X5_NO_CARGO = 60603; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_2X5_CARGO = 60604; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_2X5_NO_CARGO = 60605; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_2X5_CARGO = 60606; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_2X5_NO_CARGO = 60607; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_CARROT01 = 60608; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_TOMATO01 = 60609; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_VEGETABLE01 = 60610; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_BROCCOLI01 = 60611; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_FRUIT01 = 60612; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_FISH01 = 60613; + + /** + * Crate + */ + public static final int XMAS25_CRATE01_MEAT01 = 60614; + public static final int XMAS22_DECORATION_HOLLYWREATH01_WALL01 = 60615; + + /** + * Snowball pile + */ + public static final int XMAS25_SNOWBALL_PILE = 60616; + public static final int AGILITY_ONEWAY_RIGHT_ICON = 60617; + public static final int AGILITY_ONEWAY_LEFT_ICON = 60618; + + /** + * Shellbane Gryphon display + */ + public static final int POH_DISPLAY_GRYPHON = 60619; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_2X5_CARGO = 60620; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_2X5_NO_CARGO = 60621; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_2X5_CARGO = 60622; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_2X5_NO_CARGO = 60623; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_2X5_CARGO = 60624; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_2X5_NO_CARGO = 60625; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_2X5_CARGO = 60626; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_2X5_NO_CARGO = 60627; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_2X5_CARGO = 60628; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_LARGE_NO_CARGO = 60629; + + /** + * Basic cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_REGULAR_LARGE_CARGO = 60630; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_LARGE_NO_CARGO = 60631; + + /** + * Oak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_OAK_LARGE_CARGO = 60632; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_LARGE_NO_CARGO = 60633; + + /** + * Teak cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_TEAK_LARGE_CARGO = 60634; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_LARGE_NO_CARGO = 60635; + + /** + * Mahogany cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_MAHOGANY_LARGE_CARGO = 60636; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_LARGE_NO_CARGO = 60637; + + /** + * Camphor cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_CAMPHOR_LARGE_CARGO = 60638; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_LARGE_NO_CARGO = 60639; + + /** + * Ironwood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_IRONWOOD_LARGE_CARGO = 60640; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_LARGE_NO_CARGO = 60641; + + /** + * Rosewood cargo hold + */ + public static final int SAILING_BOAT_CARGO_HOLD_ROSEWOOD_LARGE_CARGO = 60642; + public static final int DEADMAN_DUNGEON_CORRIDORFILLER = 60643; + public static final int BLACK_WALL02 = 60646; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_BINGO_01 = 60647; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_BINGO_02 = 60648; + + /** + * Shuttered window + */ + public static final int POH_DEADMAN_WINDOW_SHUTTERS = 60649; + + /** + * Decorative window + */ + public static final int POH_DEADMAN_WINDOW_BOB = 60650; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_BOB2 = 60651; + + /** + * Decorative window + */ + public static final int POH_DEADMAN_WINDOW_GUTHIX = 60652; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_GUTHIX2 = 60653; + + /** + * Decorative window + */ + public static final int POH_DEADMAN_WINDOW_SARADOMIN = 60654; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_SARADOMIN2 = 60655; + + /** + * Decorative window + */ + public static final int POH_DEADMAN_WINDOW_ZAMORAK = 60656; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_ZAMORAK2 = 60657; + + /** + * Decorative window + */ + public static final int POH_DEADMAN_WINDOW_GNOMECHILD = 60658; + + /** + * Stained-glass window + */ + public static final int POH_DEADMAN_WINDOW_GNOMECHILD2 = 60659; + + /** + * Window space + */ + public static final int POH_CHAPELWINDOW_HOTSPOT_DEADMAN = 60660; + public static final int DEADMAN_DUNGEON_INSIDEWALL_SIDER = 60661; + public static final int DEADMAN_DUNGEON_INSIDEWALL_SIDEL = 60662; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java b/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java index bd72fff6a45..aa0d430bc8f 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java @@ -3569,5 +3569,15 @@ public final class SpotanimID public static final int VFX_WIND_SAIL_3X10_01 = 3562; public static final int VFX_WIND_SAIL_3X10_SPEEDBOOST01 = 3563; public static final int SHIPYARD_DOG_BALL = 3564; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_FULL = 3565; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_01 = 3566; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_02 = 3567; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_03 = 3568; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_04 = 3569; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_05 = 3570; + public static final int DEADMAN_2026_HOME_TELE_SPOTANIM_06 = 3571; + public static final int DEADMAN_2026_SOTD_SPECIAL_START = 3572; + public static final int DEADMAN_2026_SOTD_SPECIAL_EXTRA = 3573; + public static final int SARADOMIN_LIGHTNING_DEADMAN = 3574; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java index 94615d9f153..d6085b9ae04 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java @@ -4454,6 +4454,13 @@ public static final class Mapfunction public static final int _144 = 7285; public static final int _145 = 7286; public static final int _146 = 7287; + public static final int _147 = 7311; + public static final int _148 = 7312; + public static final int _149 = 7313; + public static final int _150 = 7314; + public static final int _151 = 7315; + public static final int _152 = 7316; + public static final int _153 = 7317; public static final int GENERAL_STORE = _0; public static final int SWORD_SHOP = _1; @@ -6695,6 +6702,7 @@ public static final class AccountIcons public static final int _2 = 3388; public static final int _3 = 3389; public static final int _4 = 3390; + public static final int _5 = 7318; } public static final class CaProgressBar @@ -10892,4 +10900,131 @@ public static final class HeadbarIce40 public static final int _0 = 6838; public static final int _1 = 6839; } + + public static final class Sideicons18x18 + { + public static final int _0 = 7319; + public static final int _1 = 7320; + public static final int _2 = 7321; + } + + public static final class DeadmanSigilCombatIconsLargeInactive + { + public static final int _0 = 7322; + public static final int _1 = 7323; + public static final int _2 = 7324; + public static final int _3 = 7325; + public static final int _4 = 7326; + public static final int _5 = 7327; + public static final int _6 = 7328; + public static final int _7 = 7329; + public static final int _8 = 7330; + public static final int _9 = 7331; + public static final int _10 = 7332; + public static final int _11 = 7333; + public static final int _12 = 7334; + public static final int _13 = 7335; + public static final int _14 = 7336; + public static final int _15 = 7337; + public static final int _16 = 7338; + public static final int _17 = 7339; + public static final int _18 = 7340; + public static final int _19 = 7341; + public static final int _20 = 7342; + public static final int _21 = 7343; + public static final int _22 = 7344; + public static final int _23 = 7345; + public static final int _24 = 7346; + public static final int _25 = 7347; + public static final int _26 = 7348; + public static final int _27 = 7349; + public static final int _28 = 7350; + public static final int _29 = 7351; + public static final int _30 = 7352; + public static final int _31 = 7353; + } + + public static final class DeadmanSigilSkillingIconsLargeInactive + { + public static final int _0 = 7354; + public static final int _1 = 7355; + public static final int _2 = 7356; + public static final int _3 = 7357; + public static final int _4 = 7358; + public static final int _5 = 7359; + public static final int _6 = 7360; + public static final int _7 = 7361; + public static final int _8 = 7362; + public static final int _9 = 7363; + public static final int _10 = 7364; + public static final int _11 = 7365; + public static final int _12 = 7366; + public static final int _13 = 7367; + public static final int _14 = 7368; + public static final int _15 = 7369; + public static final int _16 = 7370; + public static final int _17 = 7371; + public static final int _18 = 7372; + public static final int _19 = 7373; + public static final int _20 = 7374; + public static final int _21 = 7375; + public static final int _22 = 7376; + public static final int _23 = 7377; + public static final int _24 = 7378; + public static final int _25 = 7379; + public static final int _26 = 7380; + public static final int _27 = 7381; + public static final int _28 = 7382; + public static final int _29 = 7383; + public static final int _30 = 7384; + public static final int _31 = 7385; + } + + public static final class DeadmanSigilUtilityIconsLargeInactive + { + public static final int _0 = 7386; + public static final int _1 = 7387; + public static final int _2 = 7388; + public static final int _3 = 7389; + public static final int _4 = 7390; + public static final int _5 = 7391; + public static final int _6 = 7392; + public static final int _7 = 7393; + public static final int _8 = 7394; + public static final int _9 = 7395; + public static final int _10 = 7396; + public static final int _11 = 7397; + public static final int _12 = 7398; + public static final int _13 = 7399; + public static final int _14 = 7400; + public static final int _15 = 7401; + public static final int _16 = 7402; + public static final int _17 = 7403; + public static final int _18 = 7404; + public static final int _19 = 7405; + public static final int _20 = 7406; + public static final int _21 = 7407; + public static final int _22 = 7408; + public static final int _23 = 7409; + public static final int _24 = 7410; + public static final int _25 = 7411; + public static final int _26 = 7412; + public static final int _27 = 7413; + public static final int _28 = 7414; + public static final int _29 = 7415; + public static final int _30 = 7416; + public static final int _31 = 7417; + } + + public static final class BankStorage + { + public static final int _0 = 7418; + public static final int _1 = 7419; + public static final int _2 = 7420; + public static final int _3 = 7421; + public static final int _4 = 7422; + public static final int _5 = 7423; + public static final int _6 = 7424; + public static final int _7 = 7425; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java index 0fe1e0e9c9b..277e28bb7d7 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java @@ -1347,5 +1347,8 @@ public final class VarClientID public static final int CAMERA_ZOOM_BIG_MIN = 1340; public static final int CAMERA_ZOOM_BIG_MAX = 1341; public static final int SAILING_LAST_BOAT_HP = 1342; + public static final int SETTINGS_DEV_EXAMPLE_INT = 1343; + public static final int FAIRYRINGS_SEARCHSTRING = 1344; + public static final int SKILL_GUIDE_V2_OVERVIEW_CURRENT_TAB = 1345; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java index 451b9cfedf5..3c8a0cbde6e 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java @@ -2582,5 +2582,18 @@ public final class VarPlayerID public static final int SAILING_BOAT_CARGOHOLD_SIDE_WHITELIST = 5205; public static final int PORT_TASKS_COMPLETED = 5207; public static final int SAILING_SHIPWRECK_RAREITEMS = 5208; + public static final int XMAS_25_1 = 5214; + public static final int XMAS_25_2 = 5215; + public static final int XMAS_25_3 = 5216; + public static final int COLLECTION_PERSONAL_BEST_TRANSMIT = 5217; + public static final int COLLECTION_PERSONAL_BEST_TRANSMIT_2 = 5218; + public static final int ERNESTHANDIN = 5219; + public static final int DEADMAN_POINTS_2026 = 5220; + public static final int DEADMAN_TUTORIAL = 5224; + public static final int DEADMAN_SKULL_POINTS = 5225; + public static final int DEADMAN_SKULL_POINTS_USED = 5226; + public static final int DEADMAN_SKULL_GENERAL = 5227; + public static final int SIGIL_STATE_1 = 5228; + public static final int SIGIL_TOGGLE_1 = 5229; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java index 581b2ce6c83..1d71ae1cada 100644 --- a/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java +++ b/runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java @@ -11122,6 +11122,7 @@ public final class VarbitID public static final int SETTINGS_HD_NEW_RENDERER_TOGGLE = 16617; public static final int SETTINGS_HD_WARNING_SHOWN = 16618; public static final int SETTINGS_SD_BETA_ENABLED = 16619; + public static final int SAILING_WARNING_TELEPORTOFFBOAT = 16620; public static final int SETTINGS_WORLD_MAP_HOTKEY_DISABLED = 16621; public static final int CHARGES_EYE_OF_AYAK_QUANTITY = 16623; public static final int PMOON_EYATLALLI_VIS = 16624; @@ -13841,5 +13842,104 @@ public final class VarbitID public static final int SAILING_CREW_GHOST_JENKINS_VISIBILITY_CRANDOR = 19610; public static final int SETTINGS_IRONMAN_CARGO_WARNING_TEMP = 19612; public static final int SAILING_CREW_GHOST_JENKINS_VISIBILITY_CONTROL = 19613; + public static final int SETTINGS_CARGO_HOLD_PRIVACY = 19614; + public static final int SETTINGS_NEW_MENU_INTERFACE = 19615; + public static final int BOAT_REPAIR_COST_WARNING_DISMISSED = 19616; + public static final int XMAS_25_MAIN = 19618; + public static final int XMAS_25_NPC_QUEUE = 19619; + public static final int XMAS_25_SEAT_ID_1 = 19620; + public static final int XMAS_25_SEAT_ID_2 = 19621; + public static final int XMAS_25_SEAT_ID_3 = 19622; + public static final int XMAS_25_SEAT_ID_4 = 19623; + public static final int XMAS25_CURRENT_TABLE = 19624; + public static final int XMAS25_FOOD_CORRECT_MAIN = 19625; + public static final int XMAS25_FOOD_CORRECT_SIDE_1 = 19626; + public static final int XMAS_25_TABLE_ID_1 = 19627; + public static final int XMAS_25_TABLE_ID_2 = 19628; + public static final int XMAS_25_TABLE_ID_3 = 19629; + public static final int XMAS_25_TABLE_ID_4 = 19630; + public static final int XMAS_25_BAR_INTERACTABLE = 19631; + public static final int XMAS_25_BAR_DRINKS = 19632; + public static final int XMAS_25_BAR_CORRECT_DRINK = 19633; + public static final int XMAS25_TABLE_1_STATE = 19634; + public static final int XMAS25_TABLE_2_STATE = 19635; + public static final int XMAS25_TABLE_3_STATE = 19636; + public static final int XMAS25_TABLE_4_STATE = 19637; + public static final int XMAS25_FOOD_CORRECT_SIDE_2 = 19638; + public static final int XMAS25_FOOD_CORRECT_SIDE_3 = 19639; + public static final int XMAS25_FOOD_MAIN = 19640; + public static final int XMAS25_FOOD_SIDE_1 = 19641; + public static final int XMAS25_FOOD_SIDE_2 = 19642; + public static final int XMAS25_FOOD_SIDE_3 = 19643; + public static final int SAILING_UNEXPECTED_INPUT_LOGGED = 19645; + public static final int SETTINGS_NEW_MENU_TRANSPARENT_INTERFACE_DISABLED = 19646; + public static final int SETTINGS_RUNEPOUCH_LOADOUT_NAMES_DISABLED = 19647; + public static final int SETTINGS_FAIRYRING_MOBILE_KEYBOARD_AUTOOPEN_DISABLED = 19648; + public static final int MY2ARM_STRONGHOLD_TELE_TOGGLE = 19649; + public static final int SAILING_SIDEPANEL_BOAT_CRYSTALHELM_RESISTANCE = 19652; + public static final int DRAGONSLAYER_MET_SAWMILL = 19653; + public static final int DRAGONSLAYER_PLANKS_MADE = 19654; + public static final int ERNESTHANDIN_COMPLETE = 19655; + public static final int DEADMAN_FINALE_TELEPORT_BH_COMPLETE = 19656; + public static final int DEADMAN_FINALE_TELEPORT_COLOSSEUM_COMPLETE = 19657; + public static final int DEADMAN_FINALE_TEAM = 19658; + public static final int DEADMAN_QUEST_LAMP_TIER_5 = 19660; + public static final int DEADMAN_QUEST_LAMP_TIER_6 = 19661; + public static final int DEADMAN_QUEST_LAMP_TIER_7 = 19662; + public static final int DEADMAN_QUEST_LAMP_TIER_8 = 19663; + public static final int DEADMAN_QUEST_LAMP_TIER_9 = 19664; + public static final int DEADMAN_QUEST_LAMP_TIER_10 = 19665; + public static final int DEADMAN_RUINOUS_PRAYERS_UNLOCK_CHECK = 19666; + public static final int DEADMAN_2026_WEAPON_ORNAMENT_UNLOCKED = 19671; + public static final int DEADMAN_2026_POH_ORNAMENT_UNLOCKED = 19672; + public static final int DEADMAN_2026_TELEPORT_UNLOCKED = 19673; + public static final int DEADMAN_2026_TUTORIAL_STEP = 19677; + public static final int DEADMAN_2026_INITIAL_SETUP_DONE = 19678; + public static final int DEADMAN_2026_TUTORIAL_END = 19679; + public static final int DEADMAN_2026_TUTORIAL_TELEPORT_DEST = 19680; + public static final int SETTINGS_QUETZALWHISTLE_DEFAULT_TP = 19681; + public static final int DEADMAN_SKULL_TAB = 19682; + public static final int SIGIL_OF_AGILE_FORTUNE_STATE = 19683; + public static final int SIGIL_OF_HOARDING_STATE = 19684; + public static final int SIGIL_OF_DECEPTION_STATE = 19685; + public static final int SIGIL_OF_LITHE_STATE = 19686; + public static final int SIGIL_OF_THE_FOOD_MASTER_STATE = 19687; + public static final int SIGIL_OF_THE_WELL_FED_STATE = 19688; + public static final int SIGIL_OF_THE_POTION_MASTER_STATE = 19689; + public static final int SIGIL_OF_THE_TREASURE_HUNTER_STATE = 19690; + public static final int SIGIL_OF_THE_HUNTER_STATE = 19691; + public static final int SIGIL_OF_THE_INFERNAL_CHEF_STATE = 19692; + public static final int SIGIL_OF_NATURE_STATE = 19693; + public static final int SIGIL_OF_FAITH_STATE = 19694; + public static final int SIGIL_OF_DEVOTION_STATE = 19695; + public static final int SIGIL_OF_THE_ALCHEMANIAC_STATE = 19696; + public static final int SIGIL_OF_RESISTANCE_STATE = 19697; + public static final int SIGIL_OF_DEFT_STRIKES_STATE = 19698; + public static final int SIGIL_OF_THE_AUGMENTED_THRALL_STATE = 19699; + public static final int SIGIL_OF_ONSLAUGHT_STATE = 19700; + public static final int SIGIL_OF_RESTORATION_STATE = 19701; + public static final int SIGIL_OF_TITANIUM_STATE = 19702; + public static final int SIGIL_OF_METICULOUSNESS_STATE = 19703; + public static final int SIGIL_OF_ENHANCED_HARVEST_STATE = 19704; + public static final int SIGIL_OF_MOBILITY_STATE = 19705; + public static final int SIGIL_OF_SLAUGHTER_STATE = 19706; + public static final int SIGIL_OF_WOODCRAFT_STATE = 19707; + public static final int SIGIL_OF_REMOTE_STORAGE_STATE = 19708; + public static final int SIGIL_OF_CONCLUSION_STATE = 19709; + public static final int SIGIL_OF_AUTOMATION_STATE = 19710; + public static final int SIGIL_OF_ETERNAL_BELIEF_STATE = 19711; + public static final int SIGIL_OF_EFFICIENCY_STATE = 19712; + public static final int SIGIL_OF_REVOKED_LIMITATION_STATE = 19713; + public static final int SIGIL_OF_ENHANCED_HARVEST_TOGGLE = 19714; + public static final int SIGIL_OF_MOBILITY_TOGGLE = 19715; + public static final int SIGIL_OF_SLAUGHTER_TOGGLE = 19716; + public static final int SIGIL_OF_WOODCRAFT_TOGGLE = 19717; + public static final int SIGIL_OF_REMOTE_STORAGE_TOGGLE = 19718; + public static final int SIGIL_OF_DEVOTION_TOGGLE = 19719; + public static final int SLAYER_UNLOCK_HELM_HOODED = 19720; + public static final int BANK_HIDEDEPOSITCONTAINERS = 19721; + public static final int BANK_POPUPTAB_OPEN = 19722; + public static final int BANK_SETTING_FORGET_POPUP = 19723; + public static final int DEADMAN_2026_GE_WIPE = 19724; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java index c2dae84e95a..71aa1356b14 100644 --- a/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java +++ b/runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java @@ -68,10 +68,17 @@ public interface DrawCallbacks * Enable the {@link Model#getUnlitFaceColors()} method */ int UNLIT_FACE_COLORS = 0x40; + int RENDER_THREADS_MASK = 15; + int RENDER_THREADS_SHIFT = 7; int PASS_OPAQUE = 0; int PASS_ALPHA = 1; + static int RENDER_THREADS(int num) + { + return (num & RENDER_THREADS_MASK) << RENDER_THREADS_SHIFT; + } + default void draw(Projection projection, Scene scene, Renderable renderable, int orientation, int x, int y, int z, long hash) { } @@ -160,6 +167,11 @@ default void drawDynamic(Projection worldProjection, Scene scene, TileObject til { } + default void drawDynamic(int renderThreadId, Projection worldProjection, Scene scene, TileObject tileObject, Renderable r, Model m, int orient, int x, int y, int z) + { + drawDynamic(worldProjection, scene, tileObject, r, m, orient, x, y, z); + } + default void drawTemp(Projection worldProjection, Scene scene, GameObject gameObject, Model m, int orient, int x, int y, int z) { } diff --git a/runelite-client/build.gradle.kts b/runelite-client/build.gradle.kts new file mode 100644 index 00000000000..9e15e99a385 --- /dev/null +++ b/runelite-client/build.gradle.kts @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.ByteArrayOutputStream + +plugins { + java + `java-library` + `maven-publish` + pmd + alias(libs.plugins.lombok) + + id("net.runelite.runelite-gradle-plugin.assemble") + id("net.runelite.runelite-gradle-plugin.index") + id("net.runelite.runelite-gradle-plugin.jarsign") +} + +lombok.version = libs.versions.lombok.get() + +java { + withJavadocJar() + withSourcesJar() +} + +dependencies { + api("net.runelite:runelite-api:${project.version}") + implementation(project(":jshell")) + runtimeOnly("net.runelite:injected-client:${project.version}") + + api(libs.rl.http.api) + api(libs.rl.discord) + api(libs.rl.awt) + compileOnly(libs.rl.orange) + + api(libs.slf4j.api) + api(libs.logback.classic) { + exclude("org.slf4j", "slf4j-api") + } + api(libs.jopt) + api(libs.guava) { + exclude("com.google.code.findbugs", "jsr305") + exclude("com.google.errorprone", "error_prone_annotations") + exclude("com.google.j2objc", "j2objc-annotations") + exclude("org.codehaus.mojo", "animal-sniffer-annotations") + } + api(variantOf(libs.guice.core) { classifier("no_aop") }) { + exclude("com.google.guava", "guava") + } + api(libs.gson) + api(libs.flatlaf.core) + implementation(libs.flatlaf.extras) + api(libs.commons.text) + api(libs.jna.core) + api(libs.jna.platform) + api(libs.findbugs) + compileOnly(libs.jetbrains.annotations) + api(libs.protobuf) + api(libs.lwjgl.core) + api(libs.lwjgl.opengl) + api(libs.lwjgl.opencl) + + for (platform in listOf( + "linux", + "linux-arm64", + "macos", + "macos-arm64", + "windows-x86", + "windows", + "windows-arm64", + )) { + runtimeOnly(variantOf(libs.lwjgl.core) { classifier("natives-$platform") }) + runtimeOnly(variantOf(libs.lwjgl.opengl) { classifier("natives-$platform") }) + } + + testImplementation(libs.junit) + testImplementation(libs.hamcrest) + testImplementation(libs.mockito) + testImplementation(libs.guice.testlib) + testImplementation(libs.guice.grapher) + testImplementation(libs.okhttp.mockserver) +} + +val shadowJar = tasks.register("shadowJar") { + dependsOn(configurations.runtimeClasspath) + manifest { + attributes["Main-Class"] = "net.runelite.client.RuneLite" + } + + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + from(sourceSets.main.get().output) + from(configurations.runtimeClasspath.map { it.map { if (it.isDirectory) it else zipTree(it) } }) + + exclude( + "META-INF/INDEX.LIST", + "META-INF/*.SF", + "META-INF/*.DSA", + "META-INF/*.RSA", + "**/module-info.class" + ) + + group = BasePlugin.BUILD_GROUP + archiveClassifier = "shadow" + archiveFileName = project.name + "-" + project.version + "-shaded.jar" +} +tasks.assemble { dependsOn(shadowJar) } + +publishing { + publications { + create("runelite-client") { + from(components["java"]) + artifact(shadowJar) { classifier = "shaded" } + } + } +} + +val assemble = tasks.withType { + scriptDirectory = file("src/main/scripts") + outputDirectory = sourceSets.main.map { File(it.output.resourcesDir, "runelite") } + componentsFile = file("../runelite-api/src/main/interfaces/interfaces.toml") +} + +tasks.withType { + archiveOverlayDirectory = assemble.single().outputDirectory + indexFile = archiveOverlayDirectory.file("index") +} + +tasks.processResources { + inputs.property("projectVersion", project.version) + + val commit = ByteArrayOutputStream() + exec { + commandLine("git", "rev-parse", "--short=7", "HEAD") + standardOutput = commit + } + + val dirty = ByteArrayOutputStream() + exec { + commandLine("git", "status", "--short") + standardOutput = dirty + } + + filesMatching("net/runelite/client/runelite.properties") { + filter { it.replace("\${project.version}", project.version.toString()) } + filter { it.replace("\${git.commit.id.abbrev}", commit.toString().trim()) } + filter { it.replace("\${git.dirty}", dirty.toString().isNotBlank().toString()) } + } +} + +tasks.compileJava { + options.isFork = true +} + +tasks.jar { + exclude("**/.clang-format") +} + +pmd { + toolVersion = "7.2.0" + ruleSetFiles("./pmd-ruleset.xml") + isConsoleOutput = true + incrementalAnalysis = true + isIgnoreFailures = false + threads = Runtime.getRuntime().availableProcessors() +} +tasks.pmdMain { + exclude("**/RuntimeTypeAdapterFactory.java") + exclude("**/net/runelite/client/party/Party.java") +} +tasks.pmdTest { enabled = false } + +tasks.checkstyleMain { + exclude("net/runelite/client/util/RuntimeTypeAdapterFactory.java") // vendored + exclude("net/runelite/client/party/Party.java") // generated by protobuf +} + +tasks.withType { + systemProperty("glslang.path", providers.gradleProperty("glslangPath").getOrElse("")) +} + +tasks.javadoc { + title = "RuneLite Client ${project.version} API" +} diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml deleted file mode 100644 index a6e3553bf20..00000000000 --- a/runelite-client/pom.xml +++ /dev/null @@ -1,505 +0,0 @@ - - - - 4.0.0 - - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - - - client - RuneLite Client - - - true - true - nogit - false - false - - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - - net.sf.jopt-simple - jopt-simple - 5.0.1 - - - com.google.guava - guava - - - - com.google.code.findbugs - jsr305 - - - com.google.errorprone - error_prone_annotations - - - com.google.j2objc - j2objc-annotations - - - org.codehaus.mojo - animal-sniffer-annotations - - - - - com.google.inject - guice - no_aop - - - com.google.code.gson - gson - - - net.runelite - flatlaf - ${flatlaf.version} - - - org.projectlombok - lombok - provided - - - org.apache.commons - commons-text - 1.2 - - - net.java.dev.jna - jna - 5.9.0 - - - net.java.dev.jna - jna-platform - 5.9.0 - - - com.google.code.findbugs - jsr305 - - - org.jetbrains - annotations - 23.0.0 - provided - - - com.google.protobuf - protobuf-javalite - 3.21.12 - - - net.runelite - rlawt - 1.5 - - - - - org.lwjgl - lwjgl - - - org.lwjgl - lwjgl - natives-linux - runtime - - - org.lwjgl - lwjgl - natives-macos - runtime - - - org.lwjgl - lwjgl - natives-macos-arm64 - runtime - - - org.lwjgl - lwjgl - natives-windows-x86 - runtime - - - org.lwjgl - lwjgl - natives-windows - runtime - - - org.lwjgl - lwjgl - natives-windows-arm64 - runtime - - - - - org.lwjgl - lwjgl-opengl - - - org.lwjgl - lwjgl-opengl - natives-linux - runtime - - - org.lwjgl - lwjgl-opengl - natives-macos - runtime - - - org.lwjgl - lwjgl-opengl - natives-macos-arm64 - runtime - - - org.lwjgl - lwjgl-opengl - natives-windows-x86 - runtime - - - org.lwjgl - lwjgl-opengl - natives-windows - runtime - - - org.lwjgl - lwjgl-opengl - natives-windows-arm64 - runtime - - - - - org.lwjgl - lwjgl-opencl - - - - net.runelite - runelite-api - ${project.version} - - - net.runelite - jshell - ${project.version} - true - - - net.runelite - injected-client - ${project.version} - runtime - - - net.runelite.arn - http-api - 1.2.21 - - - net.runelite - discord - 1.4 - - - net.runelite - orange-extensions - 1.1 - provided - - - - junit - junit - 4.12 - test - - - org.hamcrest - hamcrest-library - 1.3 - test - - - org.mockito - mockito-core - 3.1.0 - test - - - com.google.inject.extensions - guice-testlib - test - - - com.google.inject.extensions - guice-grapher - test - - - com.squareup.okhttp3 - mockwebserver - 3.14.9 - test - - - - - - - org.lwjgl - lwjgl-bom - 3.3.2 - pom - import - - - - - - - - src/main/resources - - logback.xml - - true - - - src/main/resources - - logback.xml - - false - - - - - org.apache.maven.plugins - maven-jar-plugin - - - **/.clang-format - - - - - - test-jar - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - - ttf - png - gif - wav - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.3.0 - - - package - - shade - - - ${shade.skip} - true - shaded - false - - - *:* - - META-INF/versions/**/module-info.class - - - - - - - - net.runelite.client.RuneLite - true - - - - - - - - - org.apache.maven.plugins - maven-jarsigner-plugin - 1.4 - - - sign - - sign - - - - - ${jarsigner.skip} - ${jarsigner.keystore} - ${jarsigner.alias} - ${jarsigner.storepass} - ${jarsigner.keypass} - - - - net.runelite - runelite-maven-plugin - ${project.version} - - - assemble - - assemble - - - src/main/scripts - ${project.build.outputDirectory}/runelite - ../runelite-api/src/main/interfaces/interfaces.toml - - - - build-index - - build-index - - - ${project.build.outputDirectory}/runelite - ${project.build.outputDirectory}/runelite/index - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - - ${project.build.sourceDirectory} - ${project.basedir}/src/main/java11 - - - - - org.apache.maven.plugins - maven-pmd-plugin - - true - true - - ${basedir}/pmd-ruleset.xml - - false - true - - **/RuntimeTypeAdapterFactory.java - net/runelite/client/party/Party.java - - - - - - check - - - - - - pl.project13.maven - git-commit-id-plugin - 2.2.6 - - - query-git-info - - revision - - - false - false - - true - - - git.commit.id.abbrev - git.dirty - - - - - - - - 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 3d9cf223cb0..05ea29d9ac9 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -32,7 +32,6 @@ import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; -import java.applet.Applet; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; @@ -76,7 +75,6 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; -import net.runelite.api.Constants; import net.runelite.client.account.SessionManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.discord.DiscordService; @@ -155,7 +153,6 @@ public class RuneLite private Gson gson; @Inject - @Nullable private Client client; @Inject @@ -212,7 +209,7 @@ public static void main(String[] args) throws Exception log.error("Uncaught exception:", throwable); if (throwable instanceof AbstractMethodError) { - log.error("Classes are out of date; Build with maven again."); + log.error("Classes are out of date; Build with Gradle again."); } }); @@ -304,15 +301,10 @@ public void start() throws Exception // Start the applet copyJagexCache(); - // Client size must be set prior to init - var applet = (Applet) client; - applet.setSize(Constants.GAME_FIXED_SIZE); - System.setProperty("jagex.disableBouncyCastle", "true"); System.setProperty("jagex.userhome", RUNELITE_DIR.getAbsolutePath()); - applet.init(); - applet.start(); + client.initialize(); SplashScreen.stage(.57, null, "Loading configuration"); @@ -370,6 +362,8 @@ public void start() throws Exception clientUI.show(); + client.unblockStartup(); + if (telemetryClient != null) { scheduledExecutorService.execute(() -> diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 1939ac89011..f4c7bac208d 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -32,7 +32,6 @@ import com.google.inject.binder.ConstantBindingBuilder; import com.google.inject.name.Names; import com.google.inject.util.Providers; -import java.applet.Applet; import java.io.File; import java.io.IOException; import java.util.HashMap; @@ -148,13 +147,6 @@ else if (entry.getValue() instanceof Boolean) .to(DeferredEventBus.class); } - @Provides - @Singleton - Applet provideApplet(Client client) - { - return (Applet) client; - } - @Provides @Singleton Client provideClient() diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index bf79e47f92c..05fd1769b09 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -51,6 +51,8 @@ import net.runelite.api.Player; import net.runelite.api.Renderable; import net.runelite.api.Skill; +import net.runelite.api.WorldView; +import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.FakeXpDrop; @@ -643,12 +645,13 @@ public void error(String message, Throwable reason) } String coord = "unk"; - if (client.getClientThread() == Thread.currentThread()) + Player player = client.getLocalPlayer(); + if (player != null) { - Player player = client.getLocalPlayer(); - if (player != null) + LocalPoint lp = player.getLocalLocation(); + if (lp.getWorldView() == WorldView.TOPLEVEL || client.getClientThread() == Thread.currentThread()) { - WorldPoint p = WorldPoint.fromLocalInstance(client, player.getLocalLocation()); + WorldPoint p = WorldPoint.fromLocalInstance(client, lp); coord = String.format("%d_%d_%d_%d_%d", p.getPlane(), p.getX() / 64, p.getY() / 64, p.getX() & 63, p.getY() & 63); } } diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneScapeProfileType.java b/runelite-client/src/main/java/net/runelite/client/config/RuneScapeProfileType.java index 3978a4ae245..51cb1a9dcc3 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneScapeProfileType.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneScapeProfileType.java @@ -46,7 +46,7 @@ public enum RuneScapeProfileType SHATTERED_RELICS_LEAGUE, TRAILBLAZER_RELOADED_LEAGUE, RAGING_ECHOES_LEAGUE, - GRID_MASTER(client -> client.getWorldType().contains(WorldType.TOURNAMENT_WORLD)), + GRID_MASTER, ; private final Predicate test; diff --git a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreEndpoint.java b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreEndpoint.java index 22808ac867f..29703676da0 100644 --- a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreEndpoint.java +++ b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreEndpoint.java @@ -39,7 +39,7 @@ public enum HiscoreEndpoint ULTIMATE_IRONMAN("Ultimate Ironman", "https://services.runescape.com/m=hiscore_oldschool_ultimate/index_lite.json"), DEADMAN("Deadman", "https://services.runescape.com/m=hiscore_oldschool_deadman/index_lite.json"), SEASONAL("Leagues", "https://services.runescape.com/m=hiscore_oldschool_seasonal/index_lite.json"), - TOURNAMENT("Grid Master", "https://services.runescape.com/m=hiscore_oldschool_tournament/index_lite.json"), + TOURNAMENT("Tournament", "https://services.runescape.com/m=hiscore_oldschool_tournament/index_lite.json"), FRESH_START_WORLD("Fresh Start", "https://secure.runescape.com/m=hiscore_oldschool_fresh_start/index_lite.json"), PURE("1 Defence Pure", "https://secure.runescape.com/m=hiscore_oldschool_skiller_defence/index_lite.json"), LEVEL_3_SKILLER("Level 3 Skiller", "https://secure.runescape.com/m=hiscore_oldschool_skiller/index_lite.json"); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 7b6651574b6..4ab70bd5a2d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -343,8 +343,9 @@ public List loadPlugins(List> plugins, BiConsumer= GameState.LOGGED_IN.getState()) + { + limitsChanged(); + } }); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index 89f23713da9..85cfc867201 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -189,7 +189,7 @@ public class CoordinateClue extends ClueScroll implements LocationClueScroll CoordinateClue.builder() .itemId(ItemID.TRAIL_CLUE_MEDIUM_SEXTANT006) .location(new WorldPoint(2512, 3467, 0)) - .directions("Baxtorian Falls (Bring rope).") + .directionsProvider((plugin) -> "Baxtorian Falls" + getBaxtorianFallsDirections(plugin)) .build(), CoordinateClue.builder() .itemId(ItemID.TRAIL_MEDIUM_SEXTANT_EXP7) @@ -1184,4 +1184,13 @@ private static String getHardwoodGroveCost(ClueScrollPlugin plugin) return " An entry fee of 100 trading sticks is required."; } + + private static String getBaxtorianFallsDirections(ClueScrollPlugin plugin) + { + if (plugin.getClient().getVarbitValue(VarbitID.KANDARIN_DIARY_MEDIUM_COMPLETE) == 1) + { + return ""; + } + return " (Bring rope)"; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 11a4fdd819a..e1b0dd33201 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -1206,7 +1206,7 @@ public class CrypticClue extends ClueScroll implements NpcClueScroll, ObjectClue .text("Robin wishes to see your finest ranged equipment.") .location(new WorldPoint(3673, 3492, 0)) .npc("Robin") - .solution("Robin at the inn in Port Phasmatys. Speak to him with +181 in ranged attack bonus. Bonus granted by the toxic blowpipe is ignored.") + .solution("Robin at the inn in Port Phasmatys. Speak to him with +180 in ranged attack bonus. Bonus granted by the toxic blowpipe is ignored.") .build(), CrypticClue.builder() .itemId(ItemID.TRAIL_CLUE_HARD_RIDDLE001) @@ -2030,7 +2030,7 @@ public class CrypticClue extends ClueScroll implements NpcClueScroll, ObjectClue CrypticClue.builder() .itemId(ItemID.TRAIL_ELITE_RIDDLE_SAIL) .text("Their bane awaits, but don't be going in there without permission.") - .location(new WorldPoint(3120, 2424, 0)) + .location(new WorldPoint(3176, 2478, 0)) .npc("Shellbane gryphon") .solution("Kill the shellbane gryphon.") .build(), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index c3694ac87cc..6b9fb0c0a5d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -152,6 +152,7 @@ public enum HotColdLocation SAIL_GREAT_CONCH(MASTER, new WorldPoint(3249, 2349, 0), OCEAN, "In the south-eastern mine of the Great Conch", BRASSICAN_MAGE), SAIL_ISLE_OF_SERPENTS(MASTER, new WorldPoint(1856, 2415, 0), OCEAN, "On the Isle of Serpents", BRASSICAN_MAGE), SAIL_DRUMSTICK_ISLE(MASTER, new WorldPoint(2139, 3562, 0), OCEAN, "On Drumstick Isle", BRASSICAN_MAGE), + SAIL_BUCCANEERS_HAVEN(MASTER, new WorldPoint(2078, 3665, 0), OCEAN, "On Buccaneers' Haven", BRASSICAN_MAGE), VARLAMORE_BAZAAR(MASTER, new WorldPoint(1680, 3107, 0), VARLAMORE, "In the centre of the Bazaar in Civitas illa Fortis.", BRASSICAN_MAGE), VARLAMORE_LOCUS_OASIS(MASTER, new WorldPoint(1695, 2990, 0), VARLAMORE, "Amongst the trees at the Locus Oasis.", BRASSICAN_MAGE), VARLAMORE_RAINFOREST_CENTRE(MASTER, new WorldPoint(1312, 3108, 0), VARLAMORE, "In the centre of the Tlati Rainforest.", BRASSICAN_MAGE), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index d761da4147f..ec426dab8fe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -164,8 +164,6 @@ public Dimension render(Graphics2D graphics) private void renderTileFlags(WorldView wv, Graphics2D graphics) { - Scene scene = wv.getScene(); - Tile[][][] tiles = scene.getTiles(); byte[][][] settings = wv.getTileSettings(); int z = wv.getPlane(); @@ -173,13 +171,6 @@ private void renderTileFlags(WorldView wv, Graphics2D graphics) { for (int y = 0; y < Constants.SCENE_SIZE; ++y) { - Tile tile = tiles[z][x][y]; - - if (tile == null) - { - continue; - } - boolean isbridge = (settings[1][x][y] & Constants.TILE_FLAG_BRIDGE) != 0; int flag = settings[z][x][y]; boolean isvisbelow = (flag & Constants.TILE_FLAG_VIS_BELOW) != 0; @@ -203,7 +194,8 @@ private void renderTileFlags(WorldView wv, Graphics2D graphics) s += "R"; } - Point loc = Perspective.getCanvasTextLocation(client, graphics, tile.getLocalLocation(), s, z); + LocalPoint lp = new LocalPoint(x << Perspective.LOCAL_COORD_BITS, y << Perspective.LOCAL_COORD_BITS, wv); + Point loc = Perspective.getCanvasTextLocation(client, graphics, lp, s, z); if (loc == null) { continue; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SceneOverlay.java index 06b1f7e2174..7ab426f1084 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SceneOverlay.java @@ -32,15 +32,16 @@ import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.util.List; -import java.util.stream.Stream; import javax.inject.Inject; import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.Constants; +import net.runelite.api.IndexedObjectSet; import net.runelite.api.NPC; import net.runelite.api.Perspective; import net.runelite.api.Player; import net.runelite.api.Point; +import net.runelite.api.WorldView; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; @@ -385,10 +386,22 @@ private void renderLineOfSight(Graphics2D graphics) private void renderInteracting(Graphics2D graphics) { - Stream.concat( - client.getPlayers().stream(), - client.getNpcs().stream() - ).forEach(fa -> + WorldView tlwv = client.getTopLevelWorldView(); + WorldView playerWv = client.getLocalPlayer().getWorldView(); + + renderInteracting(graphics, tlwv.players()); + renderInteracting(graphics, tlwv.npcs()); + + if (playerWv != tlwv) + { + renderInteracting(graphics, playerWv.players()); + renderInteracting(graphics, playerWv.npcs()); + } + } + + private void renderInteracting(Graphics2D graphics, IndexedObjectSet set) + { + for (var fa : set) { Actor ta = fa.getInteracting(); if (ta == null) @@ -426,6 +439,6 @@ private void renderInteracting(Graphics2D graphics) graphics.fill(ARROW_HEAD); graphics.setTransform(ot); - }); + } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index f25ea3b84bc..e9b3a691b5a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -122,13 +122,13 @@ public void onChatMessage(ChatMessage event) return; } - PendingExamine pendingExamine = pending.poll(); + PendingExamine pendingExamine = pending.peek(); if (pendingExamine.getResponseType() != event.getType()) { log.debug("Type mismatch for pending examine: {} != {}", pendingExamine.getResponseType(), event.getType()); - pending.clear(); // eh return; } + pending.pop(); log.debug("Got examine type {} {}: {}", pendingExamine.getResponseType(), pendingExamine.getId(), event.getMessage()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingConfig.java index ddc3ab8c16a..c533fc225ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingConfig.java @@ -26,21 +26,10 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; @ConfigGroup(FairyRingConfig.CONFIG_GROUP) public interface FairyRingConfig extends Config { String CONFIG_GROUP = "fairyrings"; String CONFIG_GROUP_TAGS = "fairyringtags"; - - @ConfigItem( - keyName = "autoOpen", - name = "Open search automatically", - description = "Open the search widget every time you enter a fairy ring." - ) - default boolean autoOpen() - { - return true; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java index 6aba4ce7f0d..3d43ee0379b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java @@ -125,11 +125,6 @@ public void onWidgetLoaded(WidgetLoaded widgetLoaded) if (widgetLoaded.getGroupId() == InterfaceID.FAIRYRINGS_LOG) { setWidgetTextToDestination(); - - if (config.autoOpen()) - { - clientThread.invokeLater(() -> openSearch()); - } } } @@ -156,9 +151,10 @@ private void setWidgetTextToDestination() private void openSearch() { - var widget = client.getWidget(InterfaceID.FairyringsLog.TITLEBOX_GRAPHIC2); + var widget = client.getWidget(InterfaceID.FairyringsLog.SEARCH); if (widget != null) { + client.setVarcStrValue(VarClientID.MESLAYERINPUT, ""); client.createScriptEvent(widget.getOnOpListener()) .setOp(1) .run(); @@ -193,7 +189,7 @@ else if ("fairyringFilterDbrow".equals(ev.getEventName())) tags = ring.getTags(); } - var filter = client.getVarcStrValue(VarClientID.MESLAYERINPUT).toLowerCase(); + var filter = client.getVarcStrValue(VarClientID.FAIRYRINGS_SEARCHSTRING).toLowerCase(); if (code.toLowerCase().contains(filter) || tags != null && tags.contains(filter) @@ -270,10 +266,7 @@ private void setTagMenuOpen(MenuEntry menuEntry) .onDone(s -> { setConfigTags(code, s); - if (config.autoOpen()) - { - clientThread.invokeLater(this::openSearch); - } + clientThread.invokeLater(() -> clientThread.invokeLater(this::openSearch)); }) .build(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java index 62f09394dff..7ac55e8dcb8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java @@ -33,8 +33,7 @@ class FacePrioritySorter { static final int[] distances; - static final char[] distanceFaceCount; - static final char[][] distanceToFaces; + static final char[] zsortHead, zsortTail, zsortNext; private static final float[] modelProjectedX; private static final float[] modelProjectedY; @@ -49,16 +48,20 @@ class FacePrioritySorter private static final int[] lt10; static final int[][] orderedFaces; + private static final int[] vertexBuffer; + static final int MAX_VERTEX_COUNT = 6500; - private static final int MAX_DIAMETER = 6000; - private static final int ZSORT_GROUP_SIZE = 1024; // was 512 + static final int MAX_FACE_COUNT = 8192; // was 6500 + static final int MAX_DIAMETER = 6000; private static final int MAX_FACES_PER_PRIORITY = 4000; // was 2500 + private static final int FACE_SIZE = (VAO.VERT_SIZE >> 2) * 3; static { distances = new int[MAX_VERTEX_COUNT]; - distanceFaceCount = new char[MAX_DIAMETER]; - distanceToFaces = new char[MAX_DIAMETER][ZSORT_GROUP_SIZE]; + zsortHead = new char[MAX_DIAMETER]; + zsortTail = new char[MAX_DIAMETER]; + zsortNext = new char[MAX_FACE_COUNT]; modelProjectedX = new float[MAX_VERTEX_COUNT]; modelProjectedY = new float[MAX_VERTEX_COUNT]; @@ -72,6 +75,8 @@ class FacePrioritySorter eq11 = new int[MAX_FACES_PER_PRIORITY]; lt10 = new int[12]; orderedFaces = new int[12][MAX_FACES_PER_PRIORITY]; + + vertexBuffer = new int[MAX_FACE_COUNT * FACE_SIZE]; } private final SceneUploader sceneUploader; @@ -88,14 +93,21 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int final float[] verticesY = model.getVerticesY(); final float[] verticesZ = model.getVerticesZ(); - final int faceCount = model.getFaceCount(); + final int faceCount = Math.min(model.getFaceCount(), MAX_FACE_COUNT); final int[] indices1 = model.getFaceIndices1(); final int[] indices2 = model.getFaceIndices2(); final int[] indices3 = model.getFaceIndices3(); + final int[] faceColors1 = model.getFaceColors1(); + final int[] faceColors2 = model.getFaceColors2(); final int[] faceColors3 = model.getFaceColors3(); final byte[] faceRenderPriorities = model.getFaceRenderPriorities(); + final short[] faceTextures = model.getFaceTextures(); + + final byte[] transparencies = model.getFaceTransparencies(); + final byte[] bias = model.getFaceBias(); + float orientSine = 0; float orientCosine = 0; if (orientation != 0) @@ -135,27 +147,29 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int return 0; } - modelProjectedX[v] = p[0]; - modelProjectedY[v] = p[1]; + modelProjectedX[v] = p[0] / p[2]; + modelProjectedY[v] = p[1] / p[2]; distances[v] = (int) p[2] - zero; } final int diameter = model.getDiameter(); final int radius = model.getRadius(); - if (diameter >= 6000) + if (diameter >= MAX_DIAMETER) { return 0; } - Arrays.fill(distanceFaceCount, 0, diameter, (char) 0); + Arrays.fill(zsortHead, 0, diameter, (char) -1); + Arrays.fill(zsortTail, 0, diameter, (char) -1); - for (char i = 0; i < faceCount; ++i) + int minFz = diameter, maxFz = 0; + for (char faceIdx = 0; faceIdx < faceCount; ++faceIdx) { - if (faceColors3[i] != -2) + if (faceColors3[faceIdx] != -2) { - final int v1 = indices1[i]; - final int v2 = indices2[i]; - final int v3 = indices3[i]; + final int v1 = indices1[faceIdx]; + final int v2 = indices2[faceIdx]; + final int v3 = indices3[faceIdx]; final float aX = modelProjectedX[v1], @@ -169,7 +183,80 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int { int distance = radius + (distances[v1] + distances[v2] + distances[v3]) / 3; assert distance >= 0 && distance < diameter; - distanceToFaces[distance][distanceFaceCount[distance]++] = i; + + if (zsortTail[distance] == (char) -1) + { + zsortHead[distance] = zsortTail[distance] = faceIdx; + zsortNext[faceIdx] = (char) -1; + } + else + { + char lastFace = zsortTail[distance]; + zsortNext[lastFace] = faceIdx; + zsortNext[faceIdx] = (char) -1; + zsortTail[distance] = faceIdx; + } + + minFz = Math.min(minFz, distance); + maxFz = Math.max(maxFz, distance); + + sceneUploader.computeFaceUvs(model, faceIdx); + + int su0 = (int) (sceneUploader.u0 * 256f); + int sv0 = (int) (sceneUploader.v0 * 256f); + + int su1 = (int) (sceneUploader.u1 * 256f); + int sv1 = (int) (sceneUploader.v1 * 256f); + + int su2 = (int) (sceneUploader.u2 * 256f); + int sv2 = (int) (sceneUploader.v2 * 256f); + + int color1 = faceColors1[faceIdx]; + int color2 = faceColors2[faceIdx]; + int color3 = faceColors3[faceIdx]; + + if (color3 == -1) + { + color2 = color3 = color1; + } + + // HSL override is not applied to textured faces + if (faceTextures == null || faceTextures[faceIdx] == -1) + { + if (model.getOverrideAmount() > 0) + { + color1 = SceneUploader.interpolateHSL(color1, model.getOverrideHue(), model.getOverrideSaturation(), model.getOverrideLuminance(), model.getOverrideAmount()); + color2 = SceneUploader.interpolateHSL(color2, model.getOverrideHue(), model.getOverrideSaturation(), model.getOverrideLuminance(), model.getOverrideAmount()); + color3 = SceneUploader.interpolateHSL(color3, model.getOverrideHue(), model.getOverrideSaturation(), model.getOverrideLuminance(), model.getOverrideAmount()); + } + } + + int alphaBias = 0; + alphaBias |= transparencies != null ? (transparencies[faceIdx] & 0xff) << 24 : 0; + alphaBias |= bias != null ? (bias[faceIdx] & 0xff) << 16 : 0; + int texture = faceTextures != null ? faceTextures[faceIdx] + 1 : 0; + + int vbOff = faceIdx * FACE_SIZE; + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalX[v1]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalY[v1]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalZ[v1]); + vertexBuffer[vbOff++] = alphaBias | color1; + vertexBuffer[vbOff++] = ((su0 & 0xffff) << 16 | (texture & 0xffff)); + vertexBuffer[vbOff++] = sv0 & 0xffff; + + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalX[v2]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalY[v2]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalZ[v2]); + vertexBuffer[vbOff++] = alphaBias | color2; + vertexBuffer[vbOff++] = ((su1 & 0xffff) << 16 | (texture & 0xffff)); + vertexBuffer[vbOff++] = sv1 & 0xffff; + + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalX[v3]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalY[v3]); + vertexBuffer[vbOff++] = Float.floatToIntBits(modelLocalZ[v3]); + vertexBuffer[vbOff++] = alphaBias | color3; + vertexBuffer[vbOff++] = ((su2 & 0xffff) << 16 | (texture & 0xffff)); + vertexBuffer[vbOff++] = sv2 & 0xffff; } } } @@ -177,18 +264,12 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int int len = 0; if (faceRenderPriorities == null) { - for (int i = diameter - 1; i >= 0; --i) + for (int i = maxFz; i >= minFz; --i) { - final int cnt = distanceFaceCount[i]; - if (cnt > 0) + for (char face = zsortHead[i]; face != (char) -1; face = zsortNext[face]) { - final char[] faces = distanceToFaces[i]; - - for (int faceIdx = 0; faceIdx < cnt; ++faceIdx) - { - final int face = faces[faceIdx]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); - } + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); } } } @@ -197,32 +278,25 @@ int uploadSortedModel(Projection proj, Model model, int orientation, int x, int Arrays.fill(numOfPriority, 0); Arrays.fill(lt10, 0); - for (int i = diameter - 1; i >= 0; --i) + for (int i = maxFz; i >= minFz; --i) { - final int cnt = distanceFaceCount[i]; - if (cnt > 0) + for (char face = zsortHead[i]; face != (char) -1; face = zsortNext[face]) { - final char[] faces = distanceToFaces[i]; + final byte pri = faceRenderPriorities[face]; + final int distIdx = numOfPriority[pri]++; - for (int faceIdx = 0; faceIdx < cnt; ++faceIdx) + orderedFaces[pri][distIdx] = face; + if (pri < 10) { - final int face = faces[faceIdx]; - final byte pri = faceRenderPriorities[face]; - final int distIdx = numOfPriority[pri]++; - - orderedFaces[pri][distIdx] = face; - if (pri < 10) - { - lt10[pri] += i; - } - else if (pri == 10) - { - eq10[distIdx] = i; - } - else - { - eq11[distIdx] = i; - } + lt10[pri] += i; + } + else if (pri == 10) + { + eq10[distIdx] = i; + } + else + { + eq11[distIdx] = i; } } } @@ -272,7 +346,8 @@ else if (pri == 10) while (pri == 0 && currFaceDistance > avg12) { final int face = dynFaces[drawnFaces++]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -295,7 +370,8 @@ else if (pri == 10) while (pri == 3 && currFaceDistance > avg34) { final int face = dynFaces[drawnFaces++]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -318,7 +394,8 @@ else if (pri == 10) while (pri == 5 && currFaceDistance > avg68) { final int face = dynFaces[drawnFaces++]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -344,14 +421,16 @@ else if (pri == 10) for (int faceIdx = 0; faceIdx < priNum; ++faceIdx) { final int face = priFaces[faceIdx]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); } } while (currFaceDistance != -1000) { final int face = dynFaces[drawnFaces++]; - len += pushFace(model, face, opaqueBuffer, alphaBuffer); + var b = transparencies != null && transparencies[face] != 0 ? alphaBuffer : opaqueBuffer; + b.put(vertexBuffer, face * FACE_SIZE, FACE_SIZE); if (drawnFaces == numDynFaces && dynFaces != orderedFaces[11]) { @@ -374,92 +453,4 @@ else if (pri == 10) return len; } - - private int pushFace(Model model, int face, IntBuffer opaqueBuffer, IntBuffer alphaBuffer) - { - final int[] indices1 = model.getFaceIndices1(); - final int[] indices2 = model.getFaceIndices2(); - final int[] indices3 = model.getFaceIndices3(); - - final int[] faceColors1 = model.getFaceColors1(); - final int[] faceColors2 = model.getFaceColors2(); - final int[] faceColors3 = model.getFaceColors3(); - - final byte overrideAmount = model.getOverrideAmount(); - final byte overrideHue = model.getOverrideHue(); - final byte overrideSat = model.getOverrideSaturation(); - final byte overrideLum = model.getOverrideLuminance(); - - final short[] faceTextures = model.getFaceTextures(); - - final byte[] transparencies = model.getFaceTransparencies(); - final byte[] bias = model.getFaceBias(); - - final int triangleA = indices1[face]; - final int triangleB = indices2[face]; - final int triangleC = indices3[face]; - - int color1 = faceColors1[face]; - int color2 = faceColors2[face]; - int color3 = faceColors3[face]; - - boolean alpha = (transparencies != null && transparencies[face] != 0); - - if (color3 == -1) - { - color2 = color3 = color1; - } - - // HSL override is not applied to textured faces - if (faceTextures == null || faceTextures[face] == -1) - { - if (overrideAmount > 0) - { - color1 = SceneUploader.interpolateHSL(color1, overrideHue, overrideSat, overrideLum, overrideAmount); - color2 = SceneUploader.interpolateHSL(color2, overrideHue, overrideSat, overrideLum, overrideAmount); - color3 = SceneUploader.interpolateHSL(color3, overrideHue, overrideSat, overrideLum, overrideAmount); - } - } - - float vx1 = modelLocalX[triangleA]; - float vy1 = modelLocalY[triangleA]; - float vz1 = modelLocalZ[triangleA]; - - float vx2 = modelLocalX[triangleB]; - float vy2 = modelLocalY[triangleB]; - float vz2 = modelLocalZ[triangleB]; - - float vx3 = modelLocalX[triangleC]; - float vy3 = modelLocalY[triangleC]; - float vz3 = modelLocalZ[triangleC]; - - sceneUploader.computeFaceUvs(model, face); - - int su0 = (int) (sceneUploader.u0 * 256f); - int sv0 = (int) (sceneUploader.v0 * 256f); - - int su1 = (int) (sceneUploader.u1 * 256f); - int sv1 = (int) (sceneUploader.v1 * 256f); - - int su2 = (int) (sceneUploader.u2 * 256f); - int sv2 = (int) (sceneUploader.v2 * 256f); - - int alphaBias = 0; - alphaBias |= transparencies != null ? (transparencies[face] & 0xff) << 24 : 0; - alphaBias |= bias != null ? (bias[face] & 0xff) << 16 : 0; - int texture = faceTextures != null ? faceTextures[face] + 1 : 0; - - var vb = alpha ? alphaBuffer : opaqueBuffer; - - SceneUploader.putfff4(vb, vx1, vy1, vz1, alphaBias | color1); - SceneUploader.put2222(vb, texture, su0, sv0, 0); - - SceneUploader.putfff4(vb, vx2, vy2, vz2, alphaBias | color2); - SceneUploader.put2222(vb, texture, su1, sv1, 0); - - SceneUploader.putfff4(vb, vx3, vy3, vz3, alphaBias | color3); - SceneUploader.put2222(vb, texture, su2, sv2, 0); - - return 3; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index 24c67b947dc..f9a18cd3c85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -52,7 +52,6 @@ import net.runelite.api.GameState; import net.runelite.api.Model; import net.runelite.api.Perspective; -import net.runelite.api.Player; import net.runelite.api.Projection; import net.runelite.api.Renderable; import net.runelite.api.Scene; @@ -176,10 +175,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks private GpuFloatBuffer uniformBuffer; - private int cameraX, cameraY, cameraZ; private int cameraYaw, cameraPitch; - private int minLevel, level, maxLevel; - private Set hideRoofIds; private VAOList vaoO; private VAOList vaoA; @@ -193,6 +189,10 @@ static class SceneContext final int sizeX, sizeZ; Zone[][] zones; + private int cameraX, cameraY, cameraZ; + private int minLevel, level, maxLevel; + private Set hideRoofIds; + SceneContext(int sizeX, int sizeZ) { this.sizeX = sizeX; @@ -803,18 +803,22 @@ public void preSceneDraw(Scene scene, float cameraX, float cameraY, float cameraZ, float cameraPitch, float cameraYaw, int minLevel, int level, int maxLevel, Set hideRoofIds) { - this.cameraX = (int) cameraX; - this.cameraY = (int) cameraY; - this.cameraZ = (int) cameraZ; - this.cameraYaw = client.getCameraYaw(); - this.cameraPitch = client.getCameraPitch(); - this.minLevel = minLevel; - this.level = level; - this.maxLevel = maxLevel; - this.hideRoofIds = hideRoofIds; + SceneContext ctx = context(scene); + if (ctx != null) + { + ctx.cameraX = (int) cameraX; + ctx.cameraY = (int) cameraY; + ctx.cameraZ = (int) cameraZ; + ctx.minLevel = minLevel; + ctx.level = level; + ctx.maxLevel = maxLevel; + ctx.hideRoofIds = hideRoofIds; + } if (scene.getWorldViewId() == WorldView.TOPLEVEL) { + this.cameraYaw = client.getCameraYaw(); + this.cameraPitch = client.getCameraPitch(); preSceneDrawToplevel(scene, cameraX, cameraY, cameraZ, cameraPitch, cameraYaw); } else @@ -1050,7 +1054,7 @@ public void drawZoneOpaque(Projection entityProjection, Scene scene, int zx, int } int offset = scene.getWorldViewId() == -1 ? (SCENE_OFFSET >> 3) : 0; - z.renderOpaque(zx - offset, zz - offset, minLevel, level, maxLevel, hideRoofIds); + z.renderOpaque(zx - offset, zz - offset, ctx.minLevel, ctx.level, ctx.maxLevel, ctx.hideRoofIds); checkGLErrors(); } @@ -1060,8 +1064,6 @@ public void drawZoneOpaque(Projection entityProjection, Scene scene, int zx, int @Override public void drawZoneAlpha(Projection entityProjection, Scene scene, int level, int zx, int zz) { - updateEntityProjection(entityProjection); - SceneContext ctx = context(scene); if (ctx == null) { @@ -1077,18 +1079,21 @@ public void drawZoneAlpha(Projection entityProjection, Scene scene, int level, i return; } + updateEntityProjection(entityProjection); + glUniform4i(uniEntityTint, scene.getOverrideHue(), scene.getOverrideSaturation(), scene.getOverrideLuminance(), scene.getOverrideAmount()); + int offset = scene.getWorldViewId() == -1 ? (SCENE_OFFSET >> 3) : 0; - int dx = cameraX - ((zx - offset) << 10); - int dz = cameraZ - ((zz - offset) << 10); + int dx = ctx.cameraX - ((zx - offset) << 10); + int dz = ctx.cameraZ - ((zz - offset) << 10); boolean close = dx * dx + dz * dz < ALPHA_ZSORT_CLOSE * ALPHA_ZSORT_CLOSE; if (level == 0) { - z.alphaSort(zx - offset, zz - offset, cameraX, cameraY, cameraZ); - z.multizoneLocs(scene, zx - offset, zz - offset, cameraX, cameraZ, ctx.zones); + z.alphaSort(zx - offset, zz - offset, ctx.cameraX, ctx.cameraY, ctx.cameraZ); + z.multizoneLocs(scene, zx - offset, zz - offset, ctx.cameraX, ctx.cameraZ, ctx.zones); } - z.renderAlpha(zx - offset, zz - offset, cameraYaw, cameraPitch, minLevel, this.level, maxLevel, level, hideRoofIds, !close); + z.renderAlpha(zx - offset, zz - offset, cameraYaw, cameraPitch, ctx.minLevel, ctx.level, ctx.maxLevel, level, ctx.hideRoofIds, !close || (scene.getOverrideAmount() > 0)); checkGLErrors(); } @@ -1202,7 +1207,7 @@ public void drawDynamic(Projection worldProjection, Scene scene, TileObject tile // level is checked prior to this callback being run, in order to cull clickboxes, but // tileObject.getPlane()>maxLevel if visbelow is set - lower the object to the max level - int plane = Math.min(maxLevel, tileObject.getPlane()); + int plane = Math.min(ctx.maxLevel, tileObject.getPlane()); // renderable modelheight is typically not set here because DynamicObject doesn't compute it on the returned model zone.addTempAlphaModel(a.vao, start, end, plane, x & 1023, y, z & 1023); } @@ -1225,12 +1230,13 @@ public void drawTemp(Projection worldProjection, Scene scene, GameObject gameObj Renderable renderable = gameObject.getRenderable(); int size = m.getFaceCount() * 3 * VAO.VERT_SIZE; - if (renderable instanceof Player || m.getFaceTransparencies() != null) + int renderMode = renderable.getRenderMode(); + if (renderMode == Renderable.RENDERMODE_SORTED_NO_DEPTH || m.getFaceTransparencies() != null) { // opaque player faces have their own vao and are drawn in a separate pass from normal opaque faces // because they are not depth tested. transparent player faces don't need their own vao because normal // transparent faces are already not depth tested - VAO o = renderable instanceof Player ? vaoPO.get(size) : vaoO.get(size); + VAO o = renderMode == Renderable.RENDERMODE_SORTED_NO_DEPTH ? vaoPO.get(size) : vaoO.get(size); VAO a = vaoA.get(size); int start = a.vbo.vb.position(); @@ -1251,7 +1257,8 @@ public void drawTemp(Projection worldProjection, Scene scene, GameObject gameObj int zx = (gameObject.getX() >> 10) + offset; int zz = (gameObject.getY() >> 10) + offset; Zone zone = ctx.zones[zx][zz]; - zone.addTempAlphaModel(a.vao, start, end, gameObject.getPlane(), x & 1023, y - renderable.getModelHeight() /* to render players over locs */, z & 1023); + int plane = Math.min(ctx.maxLevel, gameObject.getPlane()); + zone.addTempAlphaModel(a.vao, start, end, plane, x & 1023, y - renderable.getModelHeight() /* to render players over locs */, z & 1023); } } else @@ -1596,7 +1603,39 @@ public void loadScene(WorldView worldView, Scene scene) assert scene.getWorldViewId() == -1; if (nextZones != null) { - throw new RuntimeException("Double zone load!"); + log.debug("Double zone load!"); + // The previous scene load just gets dropped, this is uncommon and requires a back to back map build packet + // while having the first load take more than a full server cycle to complete + CountDownLatch latch = new CountDownLatch(1); + clientThread.invoke(() -> + { + for (int x = 0; x < NUM_ZONES; ++x) + { + for (int z = 0; z < NUM_ZONES; ++z) + { + Zone zone = nextZones[x][z]; + assert !zone.cull; + // anything initialized is a reused zone and so shouldn't be freed + if (!zone.initialized) + { + zone.unmap(); + zone.initialized = true; + zone.free(); + } + } + } + latch.countDown(); + }); + try + { + latch.await(); + } + catch (InterruptedException e) + { + throw new RuntimeException(e); + } + nextZones = null; + nextRoofChanges = null; } SceneContext ctx = root; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java index 65c90c91eda..1989414d130 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java @@ -322,7 +322,7 @@ private int uploadZoneTile(Scene scene, Zone zone, Tile t, GpuIntBuffer vertexBu uploadZoneRenderable(renderable, zone, 0, decorativeObject.getX() + decorativeObject.getXOffset(), decorativeObject.getZ(), decorativeObject.getY() + decorativeObject.getYOffset(), -1, -1, -1, -1, decorativeObject.getId(), vertexBuffer, ab); Renderable renderable2 = decorativeObject.getRenderable2(); - uploadZoneRenderable(renderable2, zone, 0, decorativeObject.getX(), decorativeObject.getZ(), decorativeObject.getY(), -1, -1, -1, -1, decorativeObject.getId(), vertexBuffer, ab); + uploadZoneRenderable(renderable2, zone, 0, decorativeObject.getX() + decorativeObject.getXOffset2(), decorativeObject.getZ(), decorativeObject.getY() + decorativeObject.getYOffset2(), -1, -1, -1, -1, decorativeObject.getId(), vertexBuffer, ab); } GroundObject groundObject = t.getGroundObject(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java index 8e0aa13f361..c20fc96c58c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java @@ -73,7 +73,8 @@ void map() buffer = glMapBufferRange(GL_ARRAY_BUFFER, 0, size, GL_MAP_WRITE_BIT | (usage == GL_STATIC_DRAW ? 0 : (GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_FLUSH_EXPLICIT_BIT)), buffer); if (buffer == null) { - throw new RuntimeException("unable to map GL buffer " + bufId + " size " + size); + int err = glGetError(); + throw new RuntimeException("unable to map GL buffer (bufId: " + bufId + " size: " + size + " renderer: " + glGetString(GL_RENDERER) + " version: " + glGetString(GL_VERSION) + " err: " + err + ")"); } this.vb = buffer.asIntBuffer(); glBindBuffer(GL_ARRAY_BUFFER, 0); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java index 326212b1524..5bc9bed8e19 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java @@ -38,8 +38,10 @@ import net.runelite.api.Model; import net.runelite.api.Perspective; import net.runelite.api.Scene; -import static net.runelite.client.plugins.gpu.FacePrioritySorter.distanceFaceCount; -import static net.runelite.client.plugins.gpu.FacePrioritySorter.distanceToFaces; +import static net.runelite.client.plugins.gpu.FacePrioritySorter.MAX_DIAMETER; +import static net.runelite.client.plugins.gpu.FacePrioritySorter.zsortHead; +import static net.runelite.client.plugins.gpu.FacePrioritySorter.zsortNext; +import static net.runelite.client.plugins.gpu.FacePrioritySorter.zsortTail; import static net.runelite.client.plugins.gpu.GpuPlugin.uniBase; import org.lwjgl.BufferUtils; import static org.lwjgl.opengl.GL33C.*; @@ -311,7 +313,6 @@ static class AlphaModel // only set for static geometry as they require sorting int radius; int[] packedFaces; - byte[] renderPriorities; static final int SKIP = 1; // temporary model is in a closer zone static final int TEMP = 2; // temporary model added to a closer zone @@ -420,7 +421,6 @@ void addAlphaModel(int vao, Model model, int startpos, int endpos, int x, int y, assert radius >= 0; - m.renderPriorities = model.getFaceRenderPriorities(); m.radius = 2 + (int) Math.sqrt(radius); assert packedFaces.length > 0; @@ -460,7 +460,6 @@ void removeTemp() { alphaModels.remove(i); m.packedFaces = null; - m.renderPriorities = null; modelCache.add(m); } m.flags &= ~AlphaModel.SKIP; @@ -494,19 +493,38 @@ static void freeBuffer() elementBufferId = 0; } + static class AlphaModelComparator implements Comparator + { + int zx, zz; + int cx, cy, cz; + + @Override + public int compare(AlphaModel o1, AlphaModel o2) + { + return Integer.compare(z(o2), z(o1)); + } + + private int z(AlphaModel m) + { + final int mx = (m.x + ((zx - m.zofx) << 10)); + final int mz = (m.z + ((zz - m.zofz) << 10)); + return (mx - cx) * (mx - cx) + + (m.y - cy) * (m.y - cy) + + (mz - cz) * (mz - cz); + } + } + + private static final AlphaModelComparator alphaModelComparator = new AlphaModelComparator(); + void alphaSort(int zx, int zz, int cx, int cy, int cz) { - alphaModels.sort(Comparator.comparingInt((AlphaModel m) -> - { - final int mx = (m.x + ((zx - m.zofx) << 10)); - final int mz = (m.z + ((zz - m.zofz) << 10)); - return (mx - cx) * (mx - cx) + - (m.y - cy) * (m.y - cy) + - (mz - cz) * (mz - cz); - } - ) - .reversed() - ); + alphaModelComparator.zx = zx; + alphaModelComparator.zz = zz; + alphaModelComparator.cx = cx; + alphaModelComparator.cy = cy; + alphaModelComparator.cz = cz; + + alphaModels.sort(alphaModelComparator); } void renderAlpha(int zx, int zz, int cyaw, int cpitch, int minLevel, int currentLevel, int maxLevel, int level, Set hiddenRoofIds, boolean useStaticUnsorted) @@ -575,14 +593,15 @@ void renderAlpha(int zx, int zz, int cyaw, int cpitch, int minLevel, int current final int radius = m.radius; int diameter = 1 + radius * 2; final int[] packedFaces = m.packedFaces; - if (diameter >= 6000) + if (diameter >= MAX_DIAMETER) { continue; } - Arrays.fill(distanceFaceCount, 0, diameter, (char) 0); + Arrays.fill(zsortHead, 0, diameter, (char) -1); + Arrays.fill(zsortTail, 0, diameter, (char) -1); - for (int i = 0; i < packedFaces.length; ++i) + for (char i = 0; i < packedFaces.length; ++i) { int pack = packedFaces[i]; @@ -595,7 +614,19 @@ void renderAlpha(int zx, int zz, int cyaw, int cpitch, int minLevel, int current fz += radius; assert fz >= 0 && fz < diameter : fz; - distanceToFaces[fz][distanceFaceCount[fz]++] = (char) i; + + if (zsortTail[fz] == (char) -1) + { + zsortHead[fz] = zsortTail[fz] = i; + zsortNext[i] = (char) -1; + } + else + { + char lastFace = zsortTail[fz]; + zsortNext[lastFace] = i; + zsortNext[i] = (char) -1; + zsortTail[fz] = i; + } } if (packedFaces.length * 3 > alphaElements.remaining()) @@ -609,68 +640,16 @@ void renderAlpha(int zx, int zz, int cyaw, int cpitch, int minLevel, int current flush(); } - byte[] faceRenderPriorities = m.renderPriorities; final int start = m.startpos / (VERT_SIZE >> 2); // ints to verts - if (faceRenderPriorities == null) + for (int i = diameter - 1; i >= 0; --i) { - for (int i = diameter - 1; i >= 0; --i) + for (char face = zsortHead[i]; face != (char) -1; face = zsortNext[face]) { - final int cnt = distanceFaceCount[i]; - if (cnt > 0) - { - final char[] faces = distanceToFaces[i]; - - for (int faceIdx = 0; faceIdx < cnt; ++faceIdx) - { - int face = faces[faceIdx]; - face *= 3; - face += start; - alphaElements.put(face++); - alphaElements.put(face++); - alphaElements.put(face++); - } - } - } - } - else - { - // Vanilla uses priority draw order for alpha faces and not depth draw order - // And since we don't have the full model here, only the alpha faces, we can't compute the - // 10/11 insertion points either. Just ignore those since I think they are mostly for players, - // which are rendered differently anyway. - Arrays.fill(numOfPriority, 0); - - for (int i = diameter - 1; i >= 0; --i) - { - final int cnt = distanceFaceCount[i]; - if (cnt > 0) - { - final char[] faces = distanceToFaces[i]; - - for (int faceIdx = 0; faceIdx < cnt; ++faceIdx) - { - final int face = faces[faceIdx]; - final byte pri = faceRenderPriorities[face]; - final int distIdx = numOfPriority[pri]++; - - orderedFaces[pri][distIdx] = face; - } - } - } - - for (int pri = 0; pri < 12; ++pri) - { - final int priNum = numOfPriority[pri]; - final int[] priFaces = orderedFaces[pri]; - - for (int faceIdx = 0; faceIdx < priNum; ++faceIdx) - { - final int face = priFaces[faceIdx]; - int idx = face * 3 + start; - alphaElements.put(idx++); - alphaElements.put(idx++); - alphaElements.put(idx++); - } + int faceIdx = face * 3; + faceIdx += start; + alphaElements.put(faceIdx++); + alphaElements.put(faceIdx++); + alphaElements.put(faceIdx++); } } } @@ -786,7 +765,6 @@ void multizoneLocs(Scene scene, int zx, int zz, int cx, int cz, Zone[][] zones) m2.zofz = (byte) (closestZoneZ - zz); m2.packedFaces = m.packedFaces; - m2.renderPriorities = m.renderPriorities; m2.radius = m.radius; m2.flags = AlphaModel.TEMP; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index 5e7115e3f2d..e04d3dc41fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -216,6 +216,7 @@ public void onAnimationChanged(AnimationChanged event) case AnimationID.HUMAN_FIRECOOKING: case AnimationID.HUMAN_COOKING: case AnimationID.HUMAN_MAKE_WINE: + case AnimationID.HUMAN_CUT_FOOD: /* Crafting(Gem Cutting, Glassblowing, Spinning, Weaving, Battlestaves, Pottery) */ case AnimationID.HUMAN_OPALCUTTING: case AnimationID.HUMAN_JADECUTTING: @@ -389,6 +390,7 @@ public void onAnimationChanged(AnimationChanged event) case AnimationID.HUMAN_MACHINERY_ALCHEMY01_ALEMBIC01_INTERACT01: case AnimationID.HUMAN_MACHINERY_ALCHEMY01_AGITATOR01_INTERACT01: case AnimationID.HUMAN_ALCHEMY01_MILL01_INTERACT01: + case AnimationID.HUMAN_HERBING_VIAL_RESTART: /* Magic */ case AnimationID.HUMAN_CASTCHARGEORB: case AnimationID.DREAM_PLAYER_MAKE_PLANK_SPELL: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index 213ff355fe7..2f3b6c3bf44 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -133,6 +133,10 @@ enum ItemWithCharge BELLOWS3(BELLOWS, ItemID.FILLED_OGRE_BELLOW3, 3), BLACK_WARLOCK_MIX1(POTION, ItemID.HUNTER_MIX_WARLOCK_1DOSE, 1), BLACK_WARLOCK_MIX2(POTION, ItemID.HUNTER_MIX_WARLOCK_2DOSE, 2), + BLIGHTED_OVERLOAD1(POTION, ItemID.DEADMAN1DOSEOVERLOAD, 1), + BLIGHTED_OVERLOAD2(POTION, ItemID.DEADMAN2DOSEOVERLOAD, 2), + BLIGHTED_OVERLOAD3(POTION, ItemID.DEADMAN3DOSEOVERLOAD, 3), + BLIGHTED_OVERLOAD4(POTION, ItemID.DEADMAN4DOSEOVERLOAD, 4), BLIGHTED_SUPER_REST1(POTION, ItemID.BLIGHTED_1DOSE2RESTORE, 1), BLIGHTED_SUPER_REST2(POTION, ItemID.BLIGHTED_2DOSE2RESTORE, 2), BLIGHTED_SUPER_REST3(POTION, ItemID.BLIGHTED_3DOSE2RESTORE, 3), @@ -640,6 +644,30 @@ enum ItemWithCharge PRAYER_REGENERATION2(POTION, ItemID._2DOSE1PRAYER_REGENERATION, 2), PRAYER_REGENERATION3(POTION, ItemID._3DOSE1PRAYER_REGENERATION, 3), PRAYER_REGENERATION4(POTION, ItemID._4DOSE1PRAYER_REGENERATION, 4), + ARMA_BREW1(POTION, ItemID._1DOSEARMADYLBREW, 1), + ARMA_BREW2(POTION, ItemID._2DOSEARMADYLBREW, 2), + ARMA_BREW3(POTION, ItemID._3DOSEARMADYLBREW, 3), + ARMA_BREW4(POTION, ItemID._4DOSEARMADYLBREW, 4), + EXTENDED_STAM1(POTION, ItemID._1DOSE2STAMINA, 1), + EXTENDED_STAM2(POTION, ItemID._2DOSE2STAMINA, 2), + EXTENDED_STAM3(POTION, ItemID._3DOSE2STAMINA, 3), + EXTENDED_STAM4(POTION, ItemID._4DOSE2STAMINA, 4), + EXTREME_ENERGY1(POTION, ItemID._1DOSE3ENERGY, 1), + EXTREME_ENERGY2(POTION, ItemID._2DOSE3ENERGY, 2), + EXTREME_ENERGY3(POTION, ItemID._3DOSE3ENERGY, 3), + EXTREME_ENERGY4(POTION, ItemID._4DOSE3ENERGY, 4), + HAEMOSTATIC_DRESS1(POTION, ItemID._1DOSEHAEMOSTATICDRESSING, 1), + HAEMOSTATIC_DRESS2(POTION, ItemID._2DOSEHAEMOSTATICDRESSING, 2), + HAEMOSTATIC_DRESS3(POTION, ItemID._3DOSEHAEMOSTATICDRESSING, 3), + HAEMOSTATIC_DRESS4(POTION, ItemID._4DOSEHAEMOSTATICDRESSING, 4), + SUPER_FISHING1(POTION, ItemID._1DOSE2FISHERSPOTION, 1), + SUPER_FISHING2(POTION, ItemID._2DOSE2FISHERSPOTION, 2), + SUPER_FISHING3(POTION, ItemID._3DOSE2FISHERSPOTION, 3), + SUPER_FISHING4(POTION, ItemID._4DOSE2FISHERSPOTION, 4), + SUPER_HUNTER1(POTION, ItemID._1DOSE2HUNTING, 1), + SUPER_HUNTER2(POTION, ItemID._2DOSE2HUNTING, 2), + SUPER_HUNTER3(POTION, ItemID._3DOSE2HUNTING, 3), + SUPER_HUNTER4(POTION, ItemID._4DOSE2HUNTING, 4), ; private final ItemChargeType type; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java index fee3fe1bcb6..93afd60bf68 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java @@ -75,6 +75,9 @@ enum ItemIdentification REDWOOD_SEED(Type.SEED_TREE, "Red", "RED", ItemID.REDWOOD_TREE_SEED), TEAK_SEED(Type.SEED_TREE, "Teak", "TEAK", ItemID.TEAK_SEED), MAHOGANY_SEED(Type.SEED_TREE, "Mahog", "MAH", ItemID.MAHOGANY_SEED), + CAMPHOR_SEED(Type.SEED_TREE, "Camphor", "CAM", ItemID.CAMPHOR_SEED), + IRONWOOD_SEED(Type.SEED_TREE, "Iron", "IRON", ItemID.IRONWOOD_SEED), + ROSEWOOD_SEED(Type.SEED_TREE, "Rose", "ROSE", ItemID.ROSEWOOD_SEED), CRYSTAL_ACORN(Type.SEED_TREE, "Crystal", "CRY", ItemID.CRYSTAL_TREE_SEED), CELASTRUS_SEED(Type.SEED_TREE, "Celas", "CEL", ItemID.CELASTRUS_TREE_SEED), SPIRIT_SEED(Type.SEED_TREE, "Spirit", "SPI", ItemID.SPIRIT_TREE_SEED), @@ -110,8 +113,15 @@ enum ItemIdentification ASGARNIAN_SEED(Type.HOPS_SEED, "Asgar", "ASG", ItemID.ASGARNIAN_HOP_SEED), JUTE_SEED(Type.HOPS_SEED, "Jute", "JUTE", ItemID.JUTE_SEED), YANILLIAN_SEED(Type.HOPS_SEED, "Yani", "YAN", ItemID.YANILLIAN_HOP_SEED), + FLAX_SEED(Type.HOPS_SEED, "Flax", "FLAX", ItemID.FLAX_SEED), KRANDORIAN_SEED(Type.HOPS_SEED, "Krand", "KRA", ItemID.KRANDORIAN_HOP_SEED), WILDBLOOD_SEED(Type.HOPS_SEED, "Wild.B", "WILD", ItemID.WILDBLOOD_HOP_SEED), + HEMP_SEED(Type.HOPS_SEED, "Hemp", "HEMP", ItemID.HEMP_SEED), + COTTON_SEED(Type.HOPS_SEED, "Cotton", "COT", ItemID.COTTON_SEED), + + ELKHORN_FRAG(Type.CORAL_FRAG, "Elk", "ELK", ItemID.CORAL_ELKHORN_FRAG), + PILLAR_FRAG(Type.CORAL_FRAG, "Pillar", "PIL", ItemID.CORAL_PILLAR_FRAG), + UMBRAL_FRAG(Type.CORAL_FRAG, "Umbral", "UMB", ItemID.CORAL_UMBRAL_FRAG), //Sacks SACK(Type.SACK, "Empty", "EMP", ItemID.SACK_EMPTY), @@ -156,14 +166,18 @@ enum ItemIdentification OAK_LOG(Type.LOGS, "Oak", "OAK", ItemID.OAK_LOGS), WILLOW_LOG(Type.LOGS, "Willow", "WIL", ItemID.WILLOW_LOGS), TEAK_LOG(Type.LOGS, "Teak", "TEAK", ItemID.TEAK_LOGS), + JATOBA_LOG(Type.LOGS, "Jatoba", "JAT", ItemID.JATOBA_LOGS), JUNIPER_LOG(Type.LOGS, "Juniper", "JUN", ItemID.JUNIPER_LOGS), MAPLE_LOG(Type.LOGS, "Maple", "MAP", ItemID.MAPLE_LOGS), MAHOGANY_LOG(Type.LOGS, "Mahog", "MAH", ItemID.MAHOGANY_LOGS), ARCTIC_PINE_LOG(Type.LOGS, "Arctic", "ARC", ItemID.ARCTIC_PINE_LOG), YEW_LOG(Type.LOGS, "Yew", "YEW", ItemID.YEW_LOGS), BLISTERWOOD_LOG(Type.LOGS, "Blister", "BLI", ItemID.BLISTERWOOD_LOGS), + CAMPHOR_LOG(Type.LOGS, "Camphor", "CAM", ItemID.CAMPHOR_LOGS), MAGIC_LOG(Type.LOGS, "Magic", "MAG", ItemID.MAGIC_LOGS), + IRONWOOD_LOG(Type.LOGS, "Iron", "IRON", ItemID.IRONWOOD_LOGS), REDWOOD_LOG(Type.LOGS, "Red", "RED", ItemID.REDWOOD_LOGS), + ROSEWOOD_LOG(Type.LOGS, "Rose", "ROSE", ItemID.ROSEWOOD_LOGS), PYRE_LOGS(Type.LOGS_PYRE, "Pyre", "P", ItemID.LOGS_PYRE), ARCTIC_PYRE_LOGS(Type.LOGS_PYRE, "Art P", "AP", ItemID.ARCTIC_PINE_LOGS_PYRE), @@ -173,17 +187,44 @@ enum ItemIdentification MAPLE_PYRE_LOGS(Type.LOGS_PYRE, "Map P", "MAPP", ItemID.MAPLE_LOGS_PYRE), MAHOGANY_PYRE_LOGS(Type.LOGS_PYRE, "Mah P", "MAHP", ItemID.MAHOGANY_LOGS_PYRE), YEW_PYRE_LOGS(Type.LOGS_PYRE, "Yew P", "YEWP", ItemID.YEW_LOGS_PYRE), + CAMPHOR_PYRE_LOGS(Type.LOGS_PYRE, "Cam P", "CAMP", ItemID.CAMPHOR_LOGS_PYRE), MAGIC_PYRE_LOGS(Type.LOGS_PYRE, "Mag P", "MAGP", ItemID.MAGIC_LOGS_PYRE), + IRONWOOD_PYRE_LOGS(Type.LOGS_PYRE, "Iron P", "IRONP", ItemID.IRONWOOD_LOGS_PYRE), REDWOOD_PYRE_LOGS(Type.LOGS_PYRE, "Red P", "REDP", ItemID.REDWOOD_LOGS_PYRE), + ROSEWOOD_PYRE_LOGS(Type.LOGS_PYRE, "Rose P", "ROSEP", ItemID.ROSEWOOD_LOGS_PYRE), + + //Repair Kits + WOODEN_REPAIR_KIT(Type.REPAIR_KIT, "Wooden", "WOOD", ItemID.BOAT_REPAIR_KIT), + OAK_REPAIR_KIT(Type.REPAIR_KIT, "Oak", "OAK", ItemID.BOAT_REPAIR_KIT_OAK), + TEAK_REPAIR_KIT(Type.REPAIR_KIT, "Teak", "TEAK", ItemID.BOAT_REPAIR_KIT_TEAK), + MAHOGANY_REPAIR_KIT(Type.REPAIR_KIT, "Mahog", "MAH", ItemID.BOAT_REPAIR_KIT_MAHOGANY), + CAMPHOR_REPAIR_KIT(Type.REPAIR_KIT, "Camphor", "CAM", ItemID.BOAT_REPAIR_KIT_CAMPHOR), + IRONWOOD_REPAIR_KIT(Type.REPAIR_KIT, "Iron", "IRON", ItemID.BOAT_REPAIR_KIT_IRONWOOD), + ROSEWOOD_REPAIR_KIT(Type.REPAIR_KIT, "Rose", "ROSE", ItemID.BOAT_REPAIR_KIT_ROSEWOOD), //Planks PLANK(Type.PLANK, "Plank", "PLANK", ItemID.WOODPLANK), OAK_PLANK(Type.PLANK, "Oak", "OAK", ItemID.PLANK_OAK), TEAK_PLANK(Type.PLANK, "Teak", "TEAK", ItemID.PLANK_TEAK), MAHOGANY_PLANK(Type.PLANK, "Mahog", "MAH", ItemID.PLANK_MAHOGANY), + CAMPHOR_PLANK(Type.PLANK, "Camphor", "CAM", ItemID.PLANK_CAMPHOR), + IRONWOOD_PLANK(Type.PLANK, "Iron", "IRON", ItemID.PLANK_IRONWOOD), + ROSEWOOD_PLANK(Type.PLANK, "Rose", "ROSE", ItemID.PLANK_ROSEWOOD), WAXWOOD_PLANK(Type.PLANK, "Wax", "WAX", ItemID.DADDYSHOME_WAXWOOD_PLANK), MALLIGNUM_ROOT_PLANK(Type.PLANK, "Mallig", "MALL", ItemID.RAIDS_PLANK), + //Yarn + BALL_OF_WOOL(Type.YARN, "Wool", "WOOL", ItemID.BALL_OF_WOOL), + LINEN_YARN(Type.YARN, "Linen", "LIN", ItemID.LINEN_YARN), + HEMP_YARN(Type.YARN, "Hemp", "HEMP", ItemID.HEMP_YARN), + COTTON_YARN(Type.YARN, "Cotton", "COT", ItemID.COTTON_YARN), + + //Cloth + BOLT_OF_CLOTH(Type.CLOTH, "Cloth", "CLO", ItemID.CLOTH), + BOLT_OF_LINEN(Type.CLOTH, "Linen", "LIN", ItemID.BOLT_OF_LINEN), + BOLT_OF_CANVAS(Type.CLOTH, "Canvas", "CAN", ItemID.BOLT_OF_CANVAS), + BOLT_OF_COTTON(Type.CLOTH, "Cotton", "COT", ItemID.BOLT_OF_COTTON), + //Saplings OAK_SAPLING(Type.SAPLING, "Oak", "OAK", ItemID.PLANTPOT_OAK_SAPLING, ItemID.PLANTPOT_ACORN, ItemID.PLANTPOT_ACORN_WATERED), WILLOW_SAPLING(Type.SAPLING, "Willow", "WIL", ItemID.PLANTPOT_WILLOW_SAPLING, ItemID.PLANTPOT_WILLOW_SEED, ItemID.PLANTPOT_WILLOW_SEED_WATERED), @@ -205,6 +246,9 @@ enum ItemIdentification TEAK_SAPLING(Type.SAPLING, "Teak", "TEAK", ItemID.PLANTPOT_TEAK_SAPLING, ItemID.PLANTPOT_TEAK_SEED, ItemID.PLANTPOT_TEAK_SEED_WATERED), MAHOGANY_SAPLING(Type.SAPLING, "Mahog", "MAHOG", ItemID.PLANTPOT_MAHOGANY_SAPLING, ItemID.PLANTPOT_MAHOGANY_SEED, ItemID.PLANTPOT_MAHOGANY_SEED_WATERED), + CAMPHOR_SAPLING(Type.SAPLING, "Camphor", "CAM", ItemID.PLANTPOT_CAMPHOR_SAPLING, ItemID.PLANTPOT_CAMPHOR_SEED, ItemID.PLANTPOT_CAMPHOR_SEED_WATERED), + IRONWOOD_SAPLING(Type.SAPLING, "Iron", "IRON", ItemID.PLANTPOT_IRONWOOD_SAPLING, ItemID.PLANTPOT_IRONWOOD_SEED, ItemID.PLANTPOT_IRONWOOD_SEED_WATERED), + ROSEWOOD_SAPLING(Type.SAPLING, "Rose", "ROSE", ItemID.PLANTPOT_ROSEWOOD_SAPLING, ItemID.PLANTPOT_ROSEWOOD_SEED, ItemID.PLANTPOT_ROSEWOOD_SEED_WATERED), CALQUAT_SAPLING(Type.SAPLING, "Calquat", "CALQ", ItemID.PLANTPOT_CALQUAT_SAPLING, ItemID.PLANTPOT_CALQUAT_SEED, ItemID.PLANTPOT_CALQUAT_SEED_WATERED), CELASTRUS_SAPLING(Type.SAPLING, "Celas", "CEL", ItemID.PLANTPOT_CELASTRUS_TREE_SAPLING, ItemID.PLANTPOT_CELASTRUS_TREE_SEED, ItemID.PLANTPOT_CELASTRUS_TREE_SEED_WATERED), @@ -218,10 +262,12 @@ enum ItemIdentification TIN_ORE(Type.ORE, "Tin", "TIN", ItemID.TIN_ORE), IRON_ORE(Type.ORE, "Iron", "IRO", ItemID.IRON_ORE), SILVER_ORE(Type.ORE, "Silver", "SIL", ItemID.SILVER_ORE), + LEAD_ORE(Type.ORE, "Lead", "LEA", ItemID.LEAD_ORE), COAL_ORE(Type.ORE, "Coal", "COA", ItemID.COAL), GOLD_ORE(Type.ORE, "Gold", "GOL", ItemID.GOLD_ORE), MITHRIL_ORE(Type.ORE, "Mithril", "MIT", ItemID.MITHRIL_ORE), ADAMANTITE_ORE(Type.ORE, "Adaman", "ADA", ItemID.ADAMANTITE_ORE), + NICKEL_ORE(Type.ORE, "Nickel", "NIC", ItemID.NICKEL_ORE), RUNITE_ORE(Type.ORE, "Runite", "RUN", ItemID.RUNITE_ORE), RUNE_ESSENCE(Type.ORE, "R.Ess", "R.E.", ItemID.BLANKRUNE), @@ -239,10 +285,12 @@ enum ItemIdentification BRONZE_BAR(Type.BAR, "Bronze", "BRO", ItemID.BRONZE_BAR), IRON_BAR(Type.BAR, "Iron", "IRO", ItemID.IRON_BAR), SILVER_BAR(Type.BAR, "Silver", "SIL", ItemID.SILVER_BAR), + LEAD_BAR(Type.BAR, "Lead", "LEA", ItemID.LEAD_BAR), STEEL_BAR(Type.BAR, "Steel", "STE", ItemID.STEEL_BAR), GOLD_BAR(Type.BAR, "Gold", "GOL", ItemID.GOLD_BAR), MITHRIL_BAR(Type.BAR, "Mithril", "MIT", ItemID.MITHRIL_BAR), ADAMANTITE_BAR(Type.BAR, "Adaman", "ADA", ItemID.ADAMANTITE_BAR), + CUPRONICKEL_BAR(Type.BAR, "Cupro", "CUP", ItemID.CUPRONICKEL_BAR), RUNITE_BAR(Type.BAR, "Runite", "RUN", ItemID.RUNITE_BAR), BLURITE_BAR(Type.BAR, "Blurite", "BLU", ItemID.BLURITE_BAR), @@ -312,7 +360,9 @@ enum ItemIdentification ENERGY_MIX(Type.POTION, "Energy", "En", ItemID.BRUTAL_1DOSE1ENERGY, ItemID.BRUTAL_2DOSE1ENERGY), SUPER_ENERGY(Type.POTION, "S.Energ", "S.En", ItemID._4DOSE2ENERGY, ItemID._3DOSE2ENERGY, ItemID._2DOSE2ENERGY, ItemID._1DOSE2ENERGY), SUPER_ENERGY_MIX(Type.POTION, "S.Energ", "S.En", ItemID.BRUTAL_1DOSE2ENERGY, ItemID.BRUTAL_2DOSE2ENERGY), + EXTREME_ENERGY(Type.POTION, "E.Energy", "E.En", ItemID._4DOSE3ENERGY, ItemID._3DOSE3ENERGY, ItemID._2DOSE3ENERGY, ItemID._1DOSE3ENERGY), STAMINA(Type.POTION, "Stamina", "St", ItemID._4DOSESTAMINA, ItemID._3DOSESTAMINA, ItemID._2DOSESTAMINA, ItemID._1DOSESTAMINA), + EXTENDED_STAMINA(Type.POTION, "E.Stamina", "E.St", ItemID._4DOSE2STAMINA, ItemID._3DOSE2STAMINA, ItemID._2DOSE2STAMINA, ItemID._1DOSE2STAMINA), STAMINA_MIX(Type.POTION, "Stamina", "Sta", ItemID.BRUTAL_1DOSESTAMINA, ItemID.BRUTAL_2DOSESTAMINA), OVERLOAD(Type.POTION, "Overloa", "OL", ItemID.NZONE4DOSEOVERLOADPOTION, ItemID.NZONE3DOSEOVERLOADPOTION, ItemID.NZONE2DOSEOVERLOADPOTION, ItemID.NZONE1DOSEOVERLOADPOTION), ABSORPTION(Type.POTION, "Absorb", "Ab", ItemID.NZONE4DOSEABSORPTIONPOTION, ItemID.NZONE3DOSEABSORPTIONPOTION, ItemID.NZONE2DOSEABSORPTIONPOTION, ItemID.NZONE1DOSEABSORPTIONPOTION), @@ -324,6 +374,7 @@ enum ItemIdentification SARADOMIN_BREW(Type.POTION, "SaraBr", "Sa", ItemID._4DOSEPOTIONOFSARADOMIN, ItemID._3DOSEPOTIONOFSARADOMIN, ItemID._2DOSEPOTIONOFSARADOMIN, ItemID._1DOSEPOTIONOFSARADOMIN), ANCIENT_BREW(Type.POTION, "AncBr", "A.Br", ItemID._4DOSEANCIENTBREW, ItemID._3DOSEANCIENTBREW, ItemID._2DOSEANCIENTBREW, ItemID._1DOSEANCIENTBREW), ANCIENT_MIX(Type.POTION, "AncBr", "Anc", ItemID.BRUTAL_1DOSEANCIENTBREW, ItemID.BRUTAL_2DOSEANCIENTBREW), + ARMADYL_BREW(Type.POTION, "Armadyl", "Arm", ItemID._4DOSEARMADYLBREW, ItemID._3DOSEARMADYLBREW, ItemID._2DOSEARMADYLBREW, ItemID._1DOSEARMADYLBREW), FORGOTTEN_BREW(Type.POTION, "ForgBr", "F.Br", ItemID._4DOSEFORGOTTENBREW, ItemID._3DOSEFORGOTTENBREW, ItemID._2DOSEFORGOTTENBREW, ItemID._1DOSEFORGOTTENBREW), SURGE_POTION(Type.POTION, "Surge", "Sur", ItemID._4DOSESURGE, ItemID._3DOSESURGE, ItemID._2DOSESURGE, ItemID._1DOSESURGE), @@ -362,6 +413,8 @@ enum ItemIdentification FISHING_MIX(Type.POTION, "Fishing", "Fi", ItemID.BRUTAL_1DOSEFISHERSPOTION, ItemID.BRUTAL_2DOSEFISHERSPOTION), HUNTER(Type.POTION, "Hunter", "Hu", ItemID._4DOSEHUNTING, ItemID._3DOSEHUNTING, ItemID._2DOSEHUNTING, ItemID._1DOSEHUNTING), HUNTING_MIX(Type.POTION, "Hunter", "Hu", ItemID.BRUTAL_1DOSE1HUNTING, ItemID.BRUTAL_2DOSE1HUNTING), + SUPER_FISHING(Type.POTION, "S.Fishing", "S.Fi", ItemID._4DOSE2FISHERSPOTION, ItemID._3DOSE2FISHERSPOTION, ItemID._2DOSE2FISHERSPOTION, ItemID._1DOSE2FISHERSPOTION), + SUPER_HUNTING(Type.POTION, "S.Hunter", "S.Hu", ItemID._4DOSE2HUNTING, ItemID._3DOSE2HUNTING, ItemID._2DOSE2HUNTING, ItemID._1DOSE2HUNTING), GOBLIN(Type.POTION, "Goblin", "G", ItemID.LOTG_4DOSEGOBLIN, ItemID.LOTG_3DOSEGOBLIN, ItemID.LOTG_2DOSEGOBLIN, ItemID.LOTG_1DOSEGOBLIN), MAGIC_ESS(Type.POTION, "MagEss", "M.E", ItemID._4DOSEMAGICESS, ItemID._3DOSEMAGICESS, ItemID._2DOSEMAGICESS, ItemID._1DOSEMAGICESS), @@ -394,11 +447,15 @@ enum ItemIdentification IRIT_POTION(Type.POTION, "Irit", "I", ItemID.IRITVIAL), AVANTOE_POTION(Type.POTION, "Avan", "A", ItemID.AVANTOEVIAL), KWUARM_POTION(Type.POTION, "Kwuarm", "K", ItemID.KWUARMVIAL), + ELKHORN_POTION(Type.POTION, "Elkhorn", "ELK", ItemID.ELKHORNVIAL), + HAEMOSTATIC_POULTICE(Type.POTION, "Haem.P.", "HAEM", ItemID.HAEMOSTATIC_POULTICE), + PILLAR_POTION(Type.POTION, "Pillar", "PIL", ItemID.PILLARVIAL), SNAPDRAGON_POTION(Type.POTION, "Snap", "S", ItemID.SNAPDRAGONVIAL), CADANTINE_POTION(Type.POTION, "Cadan", "C", ItemID.CADANTINEVIAL), LANTADYME_POTION(Type.POTION, "Lanta", "L", ItemID.LANTADYMEVIAL), DWARF_WEED_POTION(Type.POTION, "Dwarf", "D", ItemID.DWARFWEEDVIAL), TORSTOL_POTION(Type.POTION, "Torstol", "TOR", ItemID.TORSTOLVIAL), + UMBRAL_POTION(Type.POTION, "Umbral", "UMB", ItemID.UMBRALVIAL), HUASCA_POTION(Type.POTION, "Huasca", "HUA", ItemID.HUASCAVIAL), // Moth & butterfly jars @@ -642,11 +699,15 @@ enum Type SEED_FRUIT_TREE(ItemIdentificationConfig::showFruitTreeSeeds), SEED_FLOWER(ItemIdentificationConfig::showFlowerSeeds), HOPS_SEED(ItemIdentificationConfig::showHopsSeeds), + CORAL_FRAG(ItemIdentificationConfig::showCoralFrags), SACK(ItemIdentificationConfig::showSacks), HERB(ItemIdentificationConfig::showHerbs), LOGS(ItemIdentificationConfig::showLogs), LOGS_PYRE(ItemIdentificationConfig::showPyreLogs), PLANK(ItemIdentificationConfig::showPlanks), + REPAIR_KIT(ItemIdentificationConfig::showRepairKits), + YARN(ItemIdentificationConfig::showYarn), + CLOTH(ItemIdentificationConfig::showCloth), SAPLING(ItemIdentificationConfig::showSaplings), COMPOST(ItemIdentificationConfig::showComposts), ORE(ItemIdentificationConfig::showOres), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java index acc2f336061..27d712034b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java @@ -150,6 +150,17 @@ default boolean showHopsSeeds() return false; } + @ConfigItem( + keyName = "showCoralFrags", + name = "Coral Frags", + description = "Show identification on coral frags.", + section = identificationSection + ) + default boolean showCoralFrags() + { + return false; + } + @ConfigItem( keyName = "showSacks", name = "Sacks", @@ -205,6 +216,39 @@ default boolean showPlanks() return false; } + @ConfigItem( + keyName = "showRepairKits", + name = "Repair Kits", + description = "Show identification on repair kits.", + section = identificationSection + ) + default boolean showRepairKits() + { + return false; + } + + @ConfigItem( + keyName = "showYarn", + name = "Yarn", + description = "Show identification on yarns.", + section = identificationSection + ) + default boolean showYarn() + { + return false; + } + + @ConfigItem( + keyName = "showCloth", + name = "Cloth", + description = "Show identification on bolts of cloth.", + section = identificationSection + ) + default boolean showCloth() + { + return false; + } + @ConfigItem( keyName = "showSaplings", name = "Saplings", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java index b49130403a3..9acd04a10f4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java @@ -91,7 +91,7 @@ private void init() add(food(7), ItemID.ELID_CHOC_ICE, ItemID.TROUT, ItemID.COD, ItemID.PLAIN_PIZZA, ItemID.HALF_PLAIN_PIZZA, ItemID.APPLE_PIE, ItemID.HALF_AN_APPLE_PIE, ItemID.SPIT_ROASTED_RABBIT_MEAT, ItemID.PREMADE_CHOCCHIP_CRUNCHIES, ItemID.CHOCCHIP_CRUNCHIES, ItemID.PREMADE_SPICY_CRUNCHIES, ItemID.SPICY_CRUNCHIES); add(food(8), ItemID.PIKE, ItemID.SPIT_ROASTED_BEAST_MEAT, ItemID.MEAT_PIZZA, ItemID.HALF_MEAT_PIZZA, ItemID.PREMADE_WORM_CRUNCHIES, ItemID.WORM_CRUNCHIES, ItemID.PREMADE_TOAD_CRUNCHIES, - ItemID.TOAD_CRUNCHIES, ItemID.BOWL_EGG_TOMATO, ItemID.RAIDS_BAT1_COOKED, ItemID.PEACH, ItemID.RAIDS_FISH1_COOKED); + ItemID.TOAD_CRUNCHIES, ItemID.BOWL_EGG_TOMATO, ItemID.RAIDS_BAT1_COOKED, ItemID.PEACH, ItemID.RAIDS_FISH1_COOKED, ItemID.RED_CRAB_MEAT); add(food(9), ItemID.PREMADE_PINEAPPLE_PUNCH, ItemID.PINEAPPLE_PUNCH, ItemID.PREMADE_FRUIT_BLAST, ItemID.FRUIT_BLAST, ItemID.SALMON, ItemID.ANCHOVIE_PIZZA, ItemID.HALF_ANCHOVIE_PIZZA); add(food(10), ItemID.TUNA, ItemID.HUNDRED_PIRATE_GIANT_CRAB_MEAT_5, ItemID.BOWL_TUNA, ItemID.COOKED_CHOMPY, ItemID.PEST_FIELD_RATION, ItemID.DRAGONFRUIT, @@ -102,16 +102,17 @@ private void init() add(food(12), ItemID.LOBSTER, ItemID.PREMADE_WORM_HOLE, ItemID.WORM_HOLE, ItemID.PREMADE_VEG_BALL, ItemID.VEG_BALL); add(food(13), ItemID.BASS, ItemID.BOWL_TUNA_SWEETCORN); add(food(14), ItemID.POTATO_BUTTER, ItemID.POTATO_CHILLI_CARNE, ItemID.SWORDFISH, ItemID.RAIDS_BAT3_COOKED, ItemID.PUMPKIN, ItemID.EASTER_EGG, ItemID.RAIDS_FISH3_COOKED, - ItemID.COOKED_OOMLIE); - add(food(15), ItemID.PREMADE_TANGLED_TOADS_LEGS, ItemID.TANGLED_TOADS_LEGS, ItemID.PREMADE_CHOCOLATE_BOMB, ItemID.CHOCOLATE_BOMB, ItemID._100_JUBBLY_MEAT_COOKED); + ItemID.COOKED_OOMLIE, ItemID.BLUE_CRAB_MEAT); + add(food(15), ItemID.PREMADE_TANGLED_TOADS_LEGS, ItemID.TANGLED_TOADS_LEGS, ItemID.PREMADE_CHOCOLATE_BOMB, ItemID.CHOCOLATE_BOMB, ItemID._100_JUBBLY_MEAT_COOKED, ItemID.SWORDTIP_SQUID); add(food(16), ItemID.MONKFISH, ItemID.POTATO_CHEESE, ItemID.POTATO_EGG_TOMATO, ItemID.GAUNTLET_COMBO_FOOD, ItemID.GAUNTLET_COMBO_FOOD_HM); - add(food(17), ItemID.RAIDS_FISH4_COOKED, ItemID.RAIDS_BAT4_COOKED); + add(food(17), ItemID.RAIDS_FISH4_COOKED, ItemID.RAIDS_BAT4_COOKED, ItemID.GIANT_KRILL, ItemID.JUMBO_SQUID); add(food(18), ItemID.TBWT_COOKED_KARAMBWAN, ItemID.BLIGHTED_KARAMBWAN, ItemID.BR_TBWT_COOKED_KARAMBWAN /* LMS */); - add(food(19), ItemID.CURRY, ItemID.UGTHANKI_KEBAB_BAD, ItemID.UGTHANKI_KEBAB); - add(food(20), ItemID.POTATO_MUSHROOM_ONION, ItemID.SHARK, ItemID.RAIDS_FISH5_COOKED, ItemID.RAIDS_BAT5_COOKED, ItemID.HUNDRED_ILM_COOKED_STUFFED_SNAKE, ItemID.BR_SHARK /* LMS */, ItemID.GAUNTLET_FOOD, ItemID.EVENT_CORRUPTED_SHARK); + add(food(19), ItemID.CURRY, ItemID.UGTHANKI_KEBAB_BAD, ItemID.UGTHANKI_KEBAB, ItemID.RAINBOW_CRAB_MEAT); + add(food(20), ItemID.POTATO_MUSHROOM_ONION, ItemID.SHARK, ItemID.RAIDS_FISH5_COOKED, ItemID.RAIDS_BAT5_COOKED, ItemID.HUNDRED_ILM_COOKED_STUFFED_SNAKE, ItemID.BR_SHARK /* LMS */, ItemID.GAUNTLET_FOOD, ItemID.EVENT_CORRUPTED_SHARK, ItemID.HALIBUT); add(food(21), ItemID.SEATURTLE); add(food(22), ItemID.MANTARAY, ItemID.BLIGHTED_MANTARAY, ItemID.DARK_CRAB, ItemID.POTATO_TUNA_SWEETCORN); add(food(23), ItemID.RAIDS_FISH6_COOKED, ItemID.RAIDS_BAT6_COOKED); + add(food(24), ItemID.MARLIN); add(new Anglerfish(), ItemID.ANGLERFISH, ItemID.BLIGHTED_ANGLERFISH); add(food(maxHP -> (int) Math.ceil(maxHP * .06)), ItemID.STRAWBERRY); add(food(maxHP -> (int) Math.ceil(maxHP * .05)), ItemID.WATERMELON_SLICE); @@ -132,6 +133,9 @@ private void init() add(combo(food(13), food(10), heal(RUN_ENERGY, 10)), ItemID.DASHINGKEBBIT_COOKED); add(combo(food(12), food(9)), ItemID.ANTELOPESUN_COOKED); add(combo(food(14), food(12)), ItemID.ANTELOPEMOON_COOKED); + add(new CappedStatBoost(HITPOINTS, max -> 18, max -> Math.min((int) (max * 0.2), 10)), ItemID.HADDOCK); + add(combo(food(19), heal(RUN_ENERGY, 20)), ItemID.YELLOWFIN); + add(combo(food(22), heal(PRAYER, 5)), ItemID.BLUEFIN); // Dorgeshuun Cuisine add(food(2), ItemID.DORGESH_BAT_SHISH, ItemID.DORGESH_CRISPY_FROGLEGS, ItemID.DORGESH_CAVE_CRAWLER_FILLETS, ItemID.DORGESH_WALL_BEAST_FINGERS, ItemID.DORGESH_FROG_BURGER, ItemID.DORGESH_FROG_SPAWN_GUMBO, ItemID.DORGESH_GREEN_GLOOP_SOUP, @@ -195,6 +199,14 @@ private void init() add(combo(food(16), boost(PRAYER, 1), dec(ATTACK, 5), dec(THIEVING, 1)), ItemID.TONAMEYO_WHITE); add(combo(food(16), boost(HERBLORE, 1), dec(ATTACK, 5), dec(FARMING, 1)), ItemID.CHICHILIHUI_ROSE); add(combo(food(16), boost(SLAYER, 1), dec(ATTACK, 5), dec(AGILITY, 1)), ItemID.IMPERIAL_ROSE); + add(combo(boost(SAILING, 1), boost(MAGIC, 2), dec(ATTACK, 2)), ItemID.KRAKEN_INK_STOUT); + add(combo(boost(SAILING, 1), boost(RANGED, 2), boost(STRENGTH, 2), dec(MAGIC, 2)), ItemID.PERILDANCE_BITTER); + add(combo(boost(SAILING, 2), boost(FISHING, 2), dec(ATTACK, 2)), ItemID.TRAWLERS_TRUST); + add(combo(boost(SAILING, 3), boost(COOKING, 2), dec(AGILITY, 2)), ItemID.WHIRLPOOL_SURPRISE); + add(combo(boost(SAILING, 4), dec(THIEVING, 2)), ItemID.HORIZONS_LURE); + add(combo(boost(SLAYER, 1), new BoostedStatBoost(SAILING, false, perc(.02, -2)), new BoostedStatBoost(ATTACK, false, perc(.02, -2)), new BoostedStatBoost(STRENGTH, false, perc(.02, -2)), new BoostedStatBoost(DEFENCE, false, perc(.02, -2))), ItemID.KRAKEN_COLADA); + add(combo(boost(FISHING, 1), new BoostedStatBoost(SAILING, false, perc(.02, -2)), new BoostedStatBoost(ATTACK, false, perc(.02, -2)), new BoostedStatBoost(STRENGTH, false, perc(.02, -2)), new BoostedStatBoost(DEFENCE, false, perc(.02, -2))), ItemID.BARNACLE_BLASTER); + add(combo(boost(HUNTER, 1), new BoostedStatBoost(SAILING, false, perc(.02, -2)), new BoostedStatBoost(ATTACK, false, perc(.02, -2)), new BoostedStatBoost(STRENGTH, false, perc(.02, -2)), new BoostedStatBoost(DEFENCE, false, perc(.02, -2))), ItemID.SAILORS_MIRAGE); // Sq'irk Juice add(heal(RUN_ENERGY, 5), ItemID.OSMAN_SQUIRK_J_WINTER); @@ -248,6 +260,8 @@ private void init() add(ancientBrew, ItemID._1DOSEANCIENTBREW, ItemID._2DOSEANCIENTBREW, ItemID._3DOSEANCIENTBREW, ItemID._4DOSEANCIENTBREW); add(new AncientBrew(.08, 3), ItemID._1DOSEFORGOTTENBREW, ItemID._2DOSEFORGOTTENBREW, ItemID._3DOSEFORGOTTENBREW, ItemID._4DOSEFORGOTTENBREW); add(new MoonlightPotion(), ItemID._1DOSEMOONLIGHTPOTION, ItemID._2DOSEMOONLIGHTPOTION, ItemID._3DOSEMOONLIGHTPOTION, ItemID._4DOSEMOONLIGHTPOTION); + add(combo(boost(HITPOINTS, perc(.10, 2)), boost(RANGED, perc(.10, 4)), new BoostedStatBoost(ATTACK, false, perc(.10, -2)), new BoostedStatBoost(STRENGTH, false, perc(.10, -2)), new BoostedStatBoost(DEFENCE, false, perc(.10, -2)), new BoostedStatBoost(MAGIC, false, perc(.10, -2))), + ItemID._1DOSEARMADYLBREW, ItemID._2DOSEARMADYLBREW, ItemID._3DOSEARMADYLBREW, ItemID._4DOSEARMADYLBREW); // Mixed combat potions add(new MixedPotion(3, ATTACK_POT), ItemID.BRUTAL_1DOSE1ATTACK, ItemID.BRUTAL_2DOSE1ATTACK); @@ -265,6 +279,8 @@ private void init() // Regular overload (NMZ) add(combo(SUPER_ATTACK_POT, SUPER_STRENGTH_POT, SUPER_DEFENCE_POT, superRangingPot, superMagicPot, heal(HITPOINTS, -50)), ItemID.NZONE1DOSEOVERLOADPOTION, ItemID.NZONE2DOSEOVERLOADPOTION, ItemID.NZONE3DOSEOVERLOADPOTION, ItemID.NZONE4DOSEOVERLOADPOTION); + // Blighted overload (DMM) + add(combo(boost(ATTACK, perc(.15, 8)), boost(STRENGTH, perc(.15, 8)), new BoostedStatBoost(DEFENCE, false, perc(.1, -1)), boost(RANGED, perc(.1, 7)), boost(MAGIC, perc(.1, 1)), heal(HITPOINTS, -10)), ItemID.DEADMAN1DOSEOVERLOAD, ItemID.DEADMAN2DOSEOVERLOAD, ItemID.DEADMAN3DOSEOVERLOAD, ItemID.DEADMAN4DOSEOVERLOAD); // Bandages (Castle Wars) add(new CastleWarsBandage(), ItemID.CASTLEWARS_BANDAGES); @@ -278,7 +294,7 @@ private void init() final SingleEffect prayerPot = new PrayerPotion(7); final Effect superEnergyPot = heal(RUN_ENERGY, 20); final Effect superRestorePot = new SuperRestore(.25, 8); - final SingleEffect staminaPot = new StaminaPotion(); + final SingleEffect staminaPot = new StaminaPotion(20); final DeltaPercentage remedyHeal = perc(0.16, 6); add(restorePot, ItemID._1DOSESTATRESTORE, ItemID._2DOSESTATRESTORE, ItemID._3DOSESTATRESTORE, ItemID._4DOSESTATRESTORE); add(energyPot, ItemID._1DOSE1ENERGY, ItemID._2DOSE1ENERGY, ItemID._3DOSE1ENERGY, ItemID._4DOSE1ENERGY); @@ -291,6 +307,8 @@ private void init() ItemID.BR_SANFEW_SALVE_4_DOSE, ItemID.BR_SANFEW_SALVE_3_DOSE, ItemID.BR_SANFEW_SALVE_2_DOSE, ItemID.BR_SANFEW_SALVE_1_DOSE /* LMS */); add(combo(heal(ATTACK, remedyHeal), heal(STRENGTH, remedyHeal), heal(DEFENCE, remedyHeal), heal(RANGED, remedyHeal), heal(MAGIC, remedyHeal)), ItemID._1DOSESTATRENEWAL, ItemID._2DOSESTATRENEWAL, ItemID._3DOSESTATRENEWAL, ItemID._4DOSESTATRENEWAL); add(staminaPot, ItemID._1DOSESTAMINA, ItemID._2DOSESTAMINA, ItemID._3DOSESTAMINA, ItemID._4DOSESTAMINA); + add(new StaminaPotion(40), ItemID._1DOSE2STAMINA, ItemID._2DOSE2STAMINA, ItemID._3DOSE2STAMINA, ItemID._4DOSE2STAMINA); + add(heal(RUN_ENERGY, 40), ItemID._1DOSE3ENERGY, ItemID._2DOSE3ENERGY, ItemID._3DOSE3ENERGY, ItemID._4DOSE3ENERGY); // Mixed recovery potions add(new MixedPotion(3, restorePot), ItemID.BRUTAL_1DOSESTATRESTORE, ItemID.BRUTAL_2DOSESTATRESTORE); @@ -341,7 +359,9 @@ private void init() final Effect hunterPot = boost(HUNTER, 3); add(agilityPot, ItemID._1DOSE1AGILITY, ItemID._2DOSE1AGILITY, ItemID._3DOSE1AGILITY, ItemID._4DOSE1AGILITY); add(fishingPot, ItemID._1DOSEFISHERSPOTION, ItemID._2DOSEFISHERSPOTION, ItemID._3DOSEFISHERSPOTION, ItemID._4DOSEFISHERSPOTION); + add(boost(FISHING, 6), ItemID._1DOSE2FISHERSPOTION, ItemID._2DOSE2FISHERSPOTION, ItemID._3DOSE2FISHERSPOTION, ItemID._4DOSE2FISHERSPOTION); add(hunterPot, ItemID._1DOSEHUNTING, ItemID._2DOSEHUNTING, ItemID._3DOSEHUNTING, ItemID._4DOSEHUNTING); + add(boost(HUNTER, 6), ItemID._1DOSE2HUNTING, ItemID._2DOSE2HUNTING, ItemID._3DOSE2HUNTING, ItemID._4DOSE2HUNTING); add(combo(boost(HITPOINTS, 5), heal(RUN_ENERGY, 5)), ItemID.CUP_GUTHIX_REST_1, ItemID.CUP_GUTHIX_REST_2, ItemID.CUP_GUTHIX_REST_3, ItemID.CUP_GUTHIX_REST_4); // Mixed skill potions diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/StaminaPotion.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/StaminaPotion.java index 4f4611dad96..987ac97fdd3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/StaminaPotion.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/StaminaPotion.java @@ -36,9 +36,12 @@ public class StaminaPotion extends StatBoost { - public StaminaPotion() + private final int baseRestore; + + public StaminaPotion(int baseRestore) { super(RUN_ENERGY, false); + this.baseRestore = baseRestore; } @Override @@ -50,9 +53,9 @@ public int heals(Client client) Item ring = equipContainer.getItem(EquipmentInventorySlot.RING.getSlotIdx()); if (ring != null && ring.getId() == ItemID.RING_OF_ENDURANCE) { - return 40; + return baseRestore * 2; } } - return 20; + return baseRestore; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootReceived.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootReceived.java index ecaa869a2a0..7cfaae0f5f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootReceived.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootReceived.java @@ -42,4 +42,5 @@ public class LootReceived private LootRecordType type; private Collection items; private int amount; + private Object metadata; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index dcba540882d..e00ba619928 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -204,6 +204,12 @@ public class LootTrackerPlugin extends Plugin put(5422, "Chest (Aldarin Villas)"). put(6550, "Chest (Moon key)"). put(5521, "Chest (Alchemist's signet)"). + put(12073, "Rusty chest"). + put(7470, "Rusty chest"). + put(6187, "Tarnished chest"). + put(6953, "Tarnished chest"). + put(7743, "Reinforced chest"). + put(8758, "Reinforced chest"). build(); // Chests opened with keys from slayer tasks @@ -675,7 +681,7 @@ void addLoot(@NonNull String name, int combatLevel, LootRecordType type, Object queuedLoots.add(lootRecord); } - eventBus.post(new LootReceived(name, combatLevel, type, items, amount)); + eventBus.post(new LootReceived(name, combatLevel, type, items, amount, metadata)); } private Integer getLootWorldId() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 676abc7fc96..74321af9b6c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -1602,7 +1602,7 @@ else if (parent != null && menuEntry.getOption().hashCode() == wornItemSwapConfi { final int componentId = w.getId(); // on dynamic components, this is the parent layer id final int itemId = w.getIndex() == -1 ? -1 : ItemVariationMapping.map(w.getItemId()); - final Integer op = getUiSwapConfig(shiftModifier(), componentId, itemId); + final Integer op = getMigratedUiSwapConfig(shiftModifier(), componentId, itemId); if (op != null && op == menuEntry.getIdentifier()) { swap(menu, menuEntries, index, menuEntries.length - 1); @@ -1982,6 +1982,30 @@ private int defaultOp(ItemComposition itemComposition, boolean shift) return -1; // use } + private Integer getMigratedUiSwapConfig(boolean shift, int componentId, int itemId) + { + Integer swap = getUiSwapConfig(shift, componentId, itemId); + if (componentId == InterfaceID.Bankmain.ITEMS) + { + // remap 12.13 -> 12.12 for 1/28/2026 game update + if (swap == null) + { + swap = getUiSwapConfig(shift, InterfaceID.Bankmain.SCROLLBAR, itemId); + if (swap != null) + { + unsetUiSwapConfig(shift, InterfaceID.Bankmain.SCROLLBAR, itemId); + setUiSwapConfig(shift, InterfaceID.Bankmain.ITEMS, itemId, swap); + log.debug("Migrated swap {} for {} from scrollbar to items", swap, itemId); + } + } + else + { + unsetUiSwapConfig(shift, InterfaceID.Bankmain.SCROLLBAR, itemId); + } + } + return swap; + } + private Integer getUiSwapConfig(boolean shift, int componentId, int itemId) { String config = configManager.getConfiguration(MenuEntrySwapperConfig.GROUP, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java index b41c8c893e2..dcf08f32660 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java @@ -26,6 +26,7 @@ import com.google.inject.Provides; import java.awt.Color; +import java.time.temporal.ChronoUnit; import java.util.Arrays; import javax.inject.Inject; import net.runelite.api.Client; @@ -43,6 +44,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.task.Schedule; @PluginDescriptor( name = "Minimap", @@ -68,6 +70,9 @@ public class MinimapPlugin extends Plugin @Inject private ClientThread clientThread; + @Inject + private ConfigManager configManager; + private SpritePixels[] originalDotSprites; @Provides @@ -83,6 +88,11 @@ protected void startUp() storeOriginalDots(); replaceMapDots(); client.setMinimapZoom(config.zoom()); + Double zoomLevel = configManager.getConfiguration(MinimapConfig.GROUP, "zoomLevel", double.class); + if (zoomLevel != null && zoomLevel > 0d) + { + client.setMinimapZoom(zoomLevel); + } } @Override @@ -131,6 +141,13 @@ else if (event.getKey().equals("zoom")) replaceMapDots(); } + @Schedule(period = 11, unit = ChronoUnit.SECONDS, asynchronous = true) + public void saveZoom() + { + double zoom = client.getMinimapZoom(); + configManager.setConfiguration(MinimapConfig.GROUP, "zoomLevel", zoom); + } + @Subscribe public void onScriptPostFired(ScriptPostFired scriptPostFired) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index 1e2381f6db5..92273b527ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -157,7 +157,7 @@ protected void shutDown() @Subscribe public void onVarbitChanged(VarbitChanged event) { - if (inMlm) + if (inMlm && event.getVarbitId() == VarbitID.MOTHERLODE_SACK_TRANSMIT) { int lastSackValue = curSackSize; refreshSackValues(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index 4acd0053c5a..9e7b89204fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -211,6 +211,11 @@ private void loadPoints() points.clear(); WorldView wv = client.getTopLevelWorldView(); + if (wv == null) + { + return; + } + loadPoints(wv); for (WorldEntity we : wv.worldEntities()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java index b12fc4a75a6..ec56fb5f183 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roofremoval/RoofRemovalPlugin.java @@ -273,17 +273,16 @@ private void applyRoofOverrides(Scene scene) return; } - Tile[][][] tiles = scene.getTiles(); + Tile[][][] tiles = scene.getExtendedTiles(); // the extended tile settings control what is actually drawn, the normal // tile settings are just a copy byte[][][] settings = scene.getExtendedTileSettings(); - final int SCENE_OFFSET = (Constants.EXTENDED_SCENE_SIZE - Constants.SCENE_SIZE) / 2; for (int z = 0; z < Constants.MAX_Z; z++) { - for (int x = 0; x < Constants.SCENE_SIZE; x++) + for (int x = 0; x < Constants.EXTENDED_SCENE_SIZE; x++) { - for (int y = 0; y < Constants.SCENE_SIZE; y++) + for (int y = 0; y < Constants.EXTENDED_SCENE_SIZE; y++) { Tile tile = tiles[z][x][y]; if (tile == null) @@ -297,7 +296,7 @@ private void applyRoofOverrides(Scene scene) int regionAndPlane = wp.getRegionID() << 2 | wp.getPlane(); if (configOverrideRegions.contains(wp.getRegionID())) { - settings[z][x + SCENE_OFFSET][y + SCENE_OFFSET] |= Constants.TILE_FLAG_UNDER_ROOF; + settings[z][x][y] |= Constants.TILE_FLAG_UNDER_ROOF; } else if (overrides.containsKey(regionAndPlane)) { @@ -306,7 +305,7 @@ else if (overrides.containsKey(regionAndPlane)) long[] region = overrides.get(regionAndPlane); if ((region[ry] & (1L << rx)) != 0) { - settings[z][x + SCENE_OFFSET][y + SCENE_OFFSET] |= Constants.TILE_FLAG_UNDER_ROOF; + settings[z][x][y] |= Constants.TILE_FLAG_UNDER_ROOF; } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java index 43bb5f59912..ab54f738aaf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java @@ -50,7 +50,8 @@ enum CalculatorType RUNECRAFT(Skill.RUNECRAFT, RunecraftBonus.values(), RunecraftAction.values()), FARMING(Skill.FARMING, FarmingBonus.values(), FarmingAction.values()), CONSTRUCTION(Skill.CONSTRUCTION, ConstructionBonus.values(), ConstructionAction.values()), - HUNTER(Skill.HUNTER, null, HunterAction.values()); + HUNTER(Skill.HUNTER, null, HunterAction.values()), + SAILING(Skill.SAILING, null, SailingAction.values()); private final Skill skill; @Nullable diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java index e0bf79698b1..fa74f628af8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java @@ -608,6 +608,8 @@ public void focusLost(FocusEvent e) return VarPlayerID.XPDROPS_CRAFTING_END; case SMITHING: return VarPlayerID.XPDROPS_SMITHING_END; + case SAILING: + return VarPlayerID.XPDROPS_SAILING_END; case THIEVING: return VarPlayerID.XPDROPS_THIEVING_END; case FLETCHING: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java index 5b37a806f71..0ea83977790 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java @@ -38,7 +38,9 @@ public enum ConstructionAction implements NamedSkillAction FERN_BIG_PLANT("Fern (big plant)", 1, 31, ItemID.POH_PLANTBIG1A), PLANT("Plant", 1, 31, ItemID.POH_PLANTSMALL1A), SHORT_PLANT("Short Plant", 1, 31, ItemID.POH_PLANTBIG2A), + REPAIR_KIT("Repair Kit", 1, 43.5f, ItemID.BOAT_REPAIR_KIT), CRUDE_WOODEN_CHAIR("Crude Wooden Chair", 1, 58, ItemID.POH_ARMCHAIR_1), + WOODEN_HULL_PARTS("Wooden Hull Parts", 1, 72.5f, ItemID.SAILING_BOAT_HULL_PART_WOODEN), EXIT_PORTAL("Exit Portal", 1, 100, ItemID.POH_GARDEN_CENTREPIECE_1), BROWN_RUG("Brown Rug", 2, 30, ItemID.POH_RUG_1), TORN_CURTAINS("Torn Curtains", 2, 132, ItemID.POH_CURTAINS_1), @@ -56,6 +58,7 @@ public enum ConstructionAction implements NamedSkillAction BEER_BARREL("Beer Barrel", 7, 87, ItemID.POH_BARREL_1), PUMP_AND_DRAIN("Pump and Drain", 7, 100, ItemID.POH_SINK_1), WOODEN_CHAIR("Wooden Chair", 8, 87, ItemID.POH_ARMCHAIR_2), + OAK_HULL_PARTS("Oak Hull Parts", 8, 150, ItemID.SAILING_BOAT_HULL_PART_OAK), WOODEN_LARDER("Wooden Larder", 9, 228, ItemID.POH_LARDER_1), NICE_TREE("Nice Tree", 10, 44, ItemID.POH_TREE_2), POND("Pond", 10, 100, ItemID.POH_GARDEN_CENTREPIECE_3), @@ -79,6 +82,7 @@ public enum ConstructionAction implements NamedSkillAction ASGARNIAN_ALE("Asgarnian Ale", 18, 184, ItemID.ASGARNIAN_ALE), CURTAINS("Curtains", 18, 225, ItemID.POH_CURTAINS_2), CAT_BASKET("Cat Basket", 19, 58, ItemID.POH_CAT_BASKET_2), + OAK_REPAIR_KIT("Oak Repair Kit", 19, 90, ItemID.BOAT_REPAIR_KIT_OAK), OAK_CHAIR("Oak Chair", 19, 120, ItemID.POH_ARMCHAIR_4), SHOE_BOX("Shoe Box", 20, 58, ItemID.POH_WARDROBE_1), WOODEN_BED("Wooden Bed", 20, 117, ItemID.POH_BED_1), @@ -86,6 +90,7 @@ public enum ConstructionAction implements NamedSkillAction OAK_BENCH("Oak Bench", 22, 240, ItemID.POH_DINING_CHAIRS_2), OAK_DINING_TABLE("Oak Dining Table", 22, 240, ItemID.POH_DINING_TABLE_2), WOODEN_SHELVES_3("Wooden Shelves 3", 23, 147, ItemID.POH_KITCHEN_SHELVES_3), + TEAK_HULL_PARTS("Teak Hull Parts", 23, 225, ItemID.SAILING_BOAT_HULL_PART_TEAK), SMALL_OVEN("Small Oven", 24, 80, ItemID.POH_STOVE_4), OAK_CLOCK("Oak Clock", 25, 142, ItemID.POH_CLOCK_1), ROPE_BELL_PULL("Rope Bell-Pull", 26, 64, ItemID.POH_BELLPULL_1), @@ -98,6 +103,7 @@ public enum ConstructionAction implements NamedSkillAction LARGE_OVEN("Large Oven", 29, 100, ItemID.POH_STOVE_5), OAK_BOOKCASE("Oak Bookcase", 29, 180, ItemID.POH_BOOKCASE_2), WILLOW_TREE("Willow Tree", 30, 100, ItemID.POH_TREE_4), + TEAK_REPAIR_KIT("Teak Repair Kit", 30, 135, ItemID.BOAT_REPAIR_KIT_TEAK), OAK_BED("Oak Bed", 30, 210, ItemID.POH_BED_2), LONG_BONE("Long Bone", 30, 4500, ItemID.DORGESH_CONSTRUCTION_BONE), CURVED_BONE("Curved Bone", 30, 6750, ItemID.DORGESH_CONSTRUCTION_BONE_CURVED), @@ -127,6 +133,7 @@ public enum ConstructionAction implements NamedSkillAction OPULENT_CURTAINS("Opulent Curtains", 40, 315, ItemID.POH_CURTAINS_3), MAHOGANY_BOOKCASE("Mahogany Bookcase", 40, 420, ItemID.POH_BOOKCASE_3), GLOBE("Globe", 41, 180, ItemID.POH_GLOBE_1), + MAHOGANY_HULL_PARTS("Mahogany Hull Parts", 41, 350, ItemID.SAILING_BOAT_HULL_PART_MAHOGANY), FENCING_RING("Fencing Ring", 41, 570, ItemID.POH_COMBAT_RING_2), FANCY_RANGE("Fancy Range", 42, 160, ItemID.POH_STOVE_7), CRYSTAL_BALL("Crystal Ball", 42, 280, ItemID.POH_CRYSTALBALL_1), @@ -142,6 +149,7 @@ public enum ConstructionAction implements NamedSkillAction TEAK_DRESSER("Teak Dresser", 46, 181, ItemID.POH_MIRROR_4), DEMON_LECTERN("Demon Lectern", 47, 120, ItemID.POH_LECTERN_3), EAGLE_LECTERN("Eagle Lectern", 47, 120, ItemID.POH_LECTERN_2), + MAHOGANY_REPAIR_KIT("Mahogany Repair Kit", 47, 210, ItemID.BOAT_REPAIR_KIT_MAHOGANY), SINK("Sink", 47, 300, ItemID.POH_SINK_3), MOUNTED_MYTHICAL_CAPE("Mounted Mythical Cape", 47, 370, ItemID.POH_TROPHY_MYTHICAL_CAPE), GOLD_SINK("Gold Sink", 47, 11144, ItemID.POH_SINK_4), @@ -165,12 +173,14 @@ public enum ConstructionAction implements NamedSkillAction TEAK_DEMON_LECTERN("Teak Demon Lectern", 57, 180, ItemID.POH_LECTERN_5), TEAK_EAGLE_LECTERN("Teak Eagle Lectern", 57, 180, ItemID.POH_LECTERN_4), LIMESTONE_ATTACK_STONE("Limestone attack stone", 59, 200, ItemID.POH_ATTACK_STONE_2), + CAMPHOR_HULL_PARTS("Camphor Hull Parts", 59, 400, ItemID.SAILING_BOAT_HULL_PART_CAMPHOR), LUNAR_GLOBE("Lunar Globe", 59, 570, ItemID.POH_GLOBE_3), YEW_TREE("Yew Tree", 60, 141, ItemID.POH_TREE_6), SPICE_RACK("Spice Rack", 60, 374, ItemID.POH_KITCHEN_RACK_1), POSH_BELL_PULL("Posh Bell-Pull", 60, 420, ItemID.POH_BELLPULL_3), GILDED_FOUR_POSTER_BED("Gilded 4-Poster Bed", 60, 1330, ItemID.POH_BED_7), GILDED_BENCH("Gilded Bench", 61, 1760, ItemID.POH_DINING_CHAIRS_7), + CAMPHOR_CRATE("Camphor Crate", 62, 50, ItemID.CAMPHOR_CRATE), ASTRONOMICAL_CHART("Astronomical Chart", 63, 45, ItemID.POH_WALLCHART_2), TEAK_WARDROBE("Teak Wardrobe", 63, 270, ItemID.POH_WARDROBE_5), MARBLE_FIREPLACE("Marble Fireplace", 63, 500, ItemID.POH_FIREPLACE_3), @@ -179,6 +189,7 @@ public enum ConstructionAction implements NamedSkillAction OPULENT_RUG("Opulent Rug", 65, 360, ItemID.POH_RUG_3), MAHOGANY_PORTAL("Mahogany Portal", 65, 420, ItemID.POH_PORTAL_FRAME_2), GREATER_FOCUS("Greater Focus", 65, 500, ItemID.POH_TELEPORT_CENTREPIECE_2), + CAMPHOR_REPAIR_KIT("Camphor Repair Kit", 66, 255, ItemID.BOAT_REPAIR_KIT_CAMPHOR), TEAK_GARDEN_BENCH("Teak Garden Bench", 66, 540, ItemID.POH_SUPERIOR_GARDEN_BENCH_TEAK), CRYSTAL_OF_POWER("Crystal of Power", 66, 890, ItemID.POH_CRYSTALBALL_3), MAHOGANY_DEMON_LECTERN("Mahogany Demon Lectern", 67, 580, ItemID.POH_LECTERN_7), @@ -192,17 +203,21 @@ public enum ConstructionAction implements NamedSkillAction OAK_DOOR("Oak Door", 74, 600, ItemID.POH_DUNGEON_DOOR_OAK), MAGIC_TREE("Magic Tree", 75, 223, ItemID.POH_TREE_7), MAHOGANY_WARDROBE("Mahogany Wardrobe", 75, 420, ItemID.POH_WARDROBE_6), + IRONWOOD_HULL_PARTS("Ironwood Hull Parts", 77, 437.5f, ItemID.SAILING_BOAT_HULL_PART_IRONWOOD), GNOME_BENCH("Gnome Bench", 77, 840, ItemID.POH_SUPERIOR_GARDEN_BENCH_MAHOGANY), ARMILLARY_GLOBE("Armillary Globe", 77, 960, ItemID.POH_GLOBE_1), MARBLE_WALL("Marble Wall", 79, 4000, ItemID.POH_FENCING7), + IRONWOOD_REPAIR_KIT("Ironwood Repair Kit", 80, 300, ItemID.BOAT_REPAIR_KIT_IRONWOOD), MARBLE_PORTAL("Marble Portal", 80, 1500, ItemID.POH_PORTAL_FRAME_3), SCRYING_POOL("Scrying Pool", 80, 2000, ItemID.POH_TELEPORT_CENTREPIECE_3), BALANCE_BEAM("Balance Beam", 81, 1000, ItemID.POH_COMBAT_RING_5), INFERNAL_CHART("Infernal Chart", 83, 60, ItemID.POH_WALLCHART_3), MAHOGANY_TELESCOPE("Mahogany Telescope", 84, 281, ItemID.POH_TELESCOPE_3), + ROSEWOOD_HULL_PARTS("Rosewood Hull Parts", 84, 475, ItemID.SAILING_BOAT_HULL_PART_ROSEWOOD), GILDED_CLOCK("Gilded Clock", 85, 602, ItemID.POH_CLOCK_3), SMALL_ORRERY("Small Orrery", 86, 1320, ItemID.POH_GLOBE_6), GILDED_WARDROBE("Gilded Wardrobe", 87, 720, ItemID.POH_WARDROBE_7), + ROSEWOOD_REPAIR_KIT("Rosewood Repair Kit", 92, 330, ItemID.BOAT_REPAIR_KIT_ROSEWOOD), LARGE_ORRERY("Large Orrery", 95, 1420, ItemID.POH_GLOBE_7), CRYSTAL_THRONE("Crystal Throne", 95, 15000, ItemID.POH_THRONE_6), DEMONIC_THRONE("Demonic Throne", 99, 25000, ItemID.POH_THRONE_7), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java index bce36e86feb..52df99ad120 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java @@ -76,6 +76,7 @@ public enum CookingAction implements ItemSkillAction SERVERY_MEAT_PIE(ItemID.HOSIDIUS_SERVERY_MEAT_PIE, 20, 160), POT_OF_CREAM(ItemID.POT_OF_CREAM, 21, 18), ROAST_BEAST_MEAT(ItemID.SPIT_ROASTED_BEAST_MEAT, 21, 82.5f), + RED_CRAB_MEAT(ItemID.RED_CRAB_MEAT, 21, 90), COOKED_CRAB_MEAT(ItemID.HUNDRED_PIRATE_GIANT_CRAB_MEAT_5, 21, 100), FAT_SNAIL_MEAT(ItemID.SNAIL_CORPSE_COOKED3, 22, 95), EGG_AND_TOMATO(ItemID.BOWL_EGG_TOMATO, 23, 50), @@ -134,6 +135,7 @@ public enum CookingAction implements ItemSkillAction POTATO_WITH_CHEESE(ItemID.POTATO_CHEESE, 47, 40), FISH_PIE(ItemID.FISH_PIE, 47, 164), CHEESE(ItemID.CHEESE, 48, 64, true), + BLUE_CRAB_MEAT(ItemID.BLUE_CRAB_MEAT, 48, 153), AXEMANS_FOLLY(ItemID.AXEMANS_FOLLY, 49, 413), COOKED_OOMLIE_WRAP(ItemID.COOKED_OOMLIE, 50, 30), CHOCOLATE_CAKE(ItemID.CHOCOLATE_CAKE, 50, 210), @@ -143,6 +145,7 @@ public enum CookingAction implements ItemSkillAction LAVA_EEL(ItemID.LAVA_EEL, 53, 30), CHEFS_DELIGHT(ItemID.CHEFS_DELIGHT, 54, 446), ANCHOVY_PIZZA(ItemID.ANCHOVIE_PIZZA, 55, 182), + SWORDTIP_SQUID(ItemID.SWORDTIP_SQUID, 56, 150), MUSHROOM_AND_ONION(ItemID.BOWL_MUSHROOM_ONION, 57, 120), PITTA_BREAD(ItemID.PITTA_BREAD, 58, 40), UGTHANKI_KEBAB_FRESH(ItemID.UGTHANKI_KEBAB_BAD, 58, 80), @@ -158,17 +161,25 @@ public enum CookingAction implements ItemSkillAction TUNA_AND_CORN(ItemID.BOWL_TUNA_SWEETCORN, 67, 204), COOKED_SUNLIGHT_ANTELOPE(ItemID.ANTELOPESUN_COOKED, 68, 175), TUNA_POTATO(ItemID.POTATO_TUNA_SWEETCORN, 68, 309.5f), + GIANT_KRILL(ItemID.GIANT_KRILL, 69, 177.5f), ADMIRAL_PIE(ItemID.ADMIRAL_PIE, 70, 210), + JUMBO_SQUID(ItemID.JUMBO_SQUID, 71, 180), SACRED_EEL(ItemID.SNAKEBOSS_EEL, 72, 109), + HADDOCK(ItemID.HADDOCK, 73, 180), DRAGONFRUIT_PIE(ItemID.DRAGONFRUIT_PIE, 73, 220), + RAINBOW_CRAB_MEAT(ItemID.RAINBOW_CRAB_MEAT, 77, 212), + YELLOWFIN(ItemID.YELLOWFIN, 79, 200), SHARK(ItemID.SHARK, 80, 210), SEA_TURTLE(ItemID.SEATURTLE, 82, 211.3f), COOKED_DASHING_KEBBIT(ItemID.DASHINGKEBBIT_COOKED, 82, 215), + HALIBUT(ItemID.HALIBUT, 83, 212.5f), ANGLERFISH(ItemID.ANGLERFISH, 84, 230), WILD_PIE(ItemID.WILD_PIE, 85, 240), + BLUEFIN(ItemID.BLUEFIN, 87, 215), DARK_CRAB(ItemID.DARK_CRAB, 90, 215), MANTA_RAY(ItemID.MANTARAY, 91, 216.3f), COOKED_MOONLIGHT_ANTELOPE(ItemID.ANTELOPEMOON_COOKED, 92, 220), + MARLIN(ItemID.MARLIN, 93, 225), SUMMER_PIE(ItemID.SUMMER_PIE, 95, 260), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java index 40a8c80d03c..d9bf4672097 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java @@ -56,6 +56,8 @@ public enum CraftingAction implements ItemSkillAction BOW_STRING(ItemID.BOW_STRING, 10, 15), CROSSBOW_STRING(ItemID.XBOWS_CROSSBOW_STRING, 10, 15), LEATHER_VAMBRACES(ItemID.LEATHER_VAMBRACES, 11, 22), + LINEN_YARN(ItemID.LINEN_YARN, 12, 16), + BOLT_OF_LINEN(ItemID.BOLT_OF_LINEN, 12, 20), EMPTY_OIL_LAMP(ItemID.OIL_LAMP_EMPTY, 12, 25), JADE(ItemID.JADE, 13, 20), JADE_RING(ItemID.JADE_RING, 13, 32), @@ -103,6 +105,8 @@ public enum CraftingAction implements ItemSkillAction BASKET(ItemID.BASKET_EMPTY, 36, 56), COIF(ItemID.COIF, 38, 37, true), TOPAZ_BRACELET(ItemID.TOPAZ_BRACELET, 38, 75), + HEMP_YARN(ItemID.HEMP_YARN, 39, 60), + BOLT_OF_CANVAS(ItemID.BOLT_OF_CANVAS, 39, 75), RUBY_NECKLACE(ItemID.RUBY_NECKLACE, 40, 75), HARD_LEATHER_SHIELD(ItemID.LEATHER_SHIELD, 41, 70), GOLD_TIARA(ItemID.TIARA_GOLD, 42, 35), @@ -144,6 +148,8 @@ public enum CraftingAction implements ItemSkillAction BLUE_DHIDE_BODY(ItemID.BLUE_DRAGONHIDE_BODY, 71, 210), DRAGONSTONE_NECKLACE(ItemID.DRAGONSTONE_NECKLACE, 72, 105), RED_DHIDE_VAMB(ItemID.RED_DRAGON_VAMBRACES, 73, 78), + COTTON_YARN(ItemID.COTTON_YARN, 73, 105), + BOLT_OF_COTTON(ItemID.BOLT_OF_COTTON, 73, 132), DRAGONSTONE_BRACELET(ItemID.JEWL_DRAGONSTONE_BRACELET, 74, 110), MAGIC_BIRD_HOUSE(ItemID.BIRDHOUSE_MAGIC, 75, 50), RED_DHIDE_CHAPS(ItemID.RED_DRAGONHIDE_CHAPS, 75, 156), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java index 6f02fe8c21c..024a2510310 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java @@ -56,18 +56,21 @@ public enum FarmingAction implements NamedSkillAction TOMATOES("Tomatoes", 12, 12.5f, ItemID.TOMATO), MARRENTILL("Marrentill", 14, 13.5f, ItemID.MARENTILL), OAK_TREE("Oak Tree", 15, 481.3f, ItemID.OAK_LOGS), + FLAX("Flax", 18, 16, ItemID.FLAX), TARROMIN("Tarromin", 19, 16, ItemID.TARROMIN), SWEETCORN("Sweetcorn", 20, 17, ItemID.SWEETCORN), GIANT_SEAWEED("Giant seaweed", 23, 21, ItemID.GIANT_SEAWEED), HARRALANDER("Harralander", 26, 21.5f, ItemID.HARRALANDER), LIMPWURT_PLANT("Limpwurt Plant", 26, 40, ItemID.LIMPWURT_ROOT), APPLE_TREE("Apple Tree", 27, 1221.5f, ItemID.COOKING_APPLE), + ELKHRON_CORAL("Elkhorn Coral", 28, 20.5f, ItemID.CORAL_ELKHORN), GOUTWEED("Goutweed", 29, 105, ItemID.EADGAR_GOUTWEED_HERB), WILLOW_TREE("Willow Tree", 30, 1481.5f, ItemID.WILLOW_LOGS), STRAWBERRIES("Strawberries", 31, 26, ItemID.STRAWBERRY), RANARR_WEED("Ranarr Weed", 32, 27, ItemID.RANARR_WEED), BANANA_TREE("Banana Tree", 33, 1778.5f, ItemID.BANANA), TEAK_TREE("Teak Tree", 35, 7315, ItemID.TEAK_LOGS), + HEMP("Hemp", 37, 33, ItemID.HEMP), TOADFLAX("Toadflax", 38, 34, ItemID.TOADFLAX), ORANGE_TREE("Orange Tree", 39, 2505.7f, ItemID.ORANGE), CURRY_TREE("Curry Tree", 42, 2946.9f, ItemID.CURRY_LEAF), @@ -76,6 +79,7 @@ public enum FarmingAction implements NamedSkillAction WATERMELONS("Watermelons", 47, 49, ItemID.WATERMELON), AVANTOE("Avantoe", 50, 54.5f, ItemID.AVANTOE), PINEAPPLE_PLANT("Pineapple Plant", 51, 4662.7f, ItemID.PINEAPPLE), + PILLAR_CORAL("Pillar Coral", 52, 52, ItemID.CORAL_PILLAR), MAHOGANY_TREE("Mahogany Tree", 55, 15783, ItemID.MAHOGANY_LOGS), KWUARM("Kwuarm", 56, 69, ItemID.KWUARM), PAPAYA_TREE("Papaya Tree", 57, 6218.4f, ItemID.PAPAYA), @@ -85,18 +89,23 @@ public enum FarmingAction implements NamedSkillAction SNAPDRAGON("Snapdragon", 62, 87.5f, ItemID.SNAPDRAGON), HUASCA("Huasca", 65, 86.5f, ItemID.HUASCA), HESPORI("Hespori", 65, 12662, ItemID.HESPORI), + CAMPHOR_TREE("Camphor Tree", 66, 17928, ItemID.CAMPHOR_LOGS), CADANTINE("Cadantine", 67, 106.5f, ItemID.CADANTINE), PALM_TREE("Palm Tree", 68, 10260.6f, ItemID.COCONUT), + COTTON_BOLL("Cotton Boll", 71, 72, ItemID.COTTON_BOLL), CALQUAT_TREE("Calquat Tree", 72, 12225.5f, ItemID.CALQUAT_FRUIT), LANTADYME("Lantadyme", 73, 134.5f, ItemID.LANTADYME), CRYSTAL_TREE("Crystal Tree", 74, 13366, ItemID.PRIF_CRYSTAL_SHARD), MAGIC_TREE("Magic Tree", 75, 13913.8f, ItemID.MAGIC_LOGS), + UMBRAL_CORAL("Umbral Coral", 77, 136, ItemID.CORAL_UMBRAL), DWARF_WEED("Dwarf Weed", 79, 170.5f, ItemID.DWARF_WEED), + IRONWOOD_TREE("Ironwood Tree", 80, 20525, ItemID.IRONWOOD_LOGS), DRAGONFRUIT_TREE("Dragonfruit Tree", 81, 17895, ItemID.DRAGONFRUIT), SPIRIT_TREE("Spirit Tree", 83, 19501.3f, ItemID.SPIRIT_TREE_DUMMY), TORSTOL("Torstol", 85, 199.5f, ItemID.TORSTOL), CELASTRUS_TREE("Celastrus Tree", 85, 14334, ItemID.CELASTRUS_WOOD), REDWOOD_TREE("Redwood Tree", 90, 22680, ItemID.REDWOOD_LOGS), + ROSEWOOD_TREE("Rosewood Tree", 92, 23352, ItemID.ROSEWOOD_LOGS), ; private final String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java index 0d4f7607c3c..f3b51a2edb5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java @@ -47,6 +47,7 @@ public enum FiremakingAction implements ItemSkillAction WILLOW_LOGS(ItemID.WILLOW_LOGS, 30, 90, FiremakingMethod.NORMAL_LOGS), WILLOW_PYRE_LOGS(ItemID.WILLOW_LOGS_PYRE, 35, 100, FiremakingMethod.PYRE_LOGS), TEAK_LOGS(ItemID.TEAK_LOGS, 35, 105, FiremakingMethod.NORMAL_LOGS), + JATOBA_LOGS(ItemID.JATOBA_LOGS, 40, 120, FiremakingMethod.NORMAL_LOGS), TEAK_PYRE_LOGS(ItemID.TEAK_LOGS_PYRE, 40, 120, FiremakingMethod.PYRE_LOGS), ARCTIC_PINE_LOGS(ItemID.ARCTIC_PINE_LOG, 42, 125, FiremakingMethod.NORMAL_LOGS), MAPLE_LOGS(ItemID.MAPLE_LOGS, 45, 135, FiremakingMethod.NORMAL_LOGS), @@ -57,10 +58,40 @@ public enum FiremakingAction implements ItemSkillAction YEW_LOGS(ItemID.YEW_LOGS, 60, 202.5f, FiremakingMethod.NORMAL_LOGS), BLISTERWOOD_LOGS(ItemID.BLISTERWOOD_LOGS, 62, 96, FiremakingMethod.NORMAL_LOGS), YEW_PYRE_LOGS(ItemID.YEW_LOGS_PYRE, 65, 255, FiremakingMethod.PYRE_LOGS), + CAMPHOR_LOGS(ItemID.CAMPHOR_LOGS, 66, 180, FiremakingMethod.NORMAL_LOGS), + CAMPHOR_PYRE_LOGS(ItemID.CAMPHOR_LOGS_PYRE, 71, 320, FiremakingMethod.PYRE_LOGS), MAGIC_LOGS(ItemID.MAGIC_LOGS, 75, 303.8f, FiremakingMethod.NORMAL_LOGS), + IRONWOOD_LOGS(ItemID.IRONWOOD_LOGS, 80, 220.5f, FiremakingMethod.NORMAL_LOGS), MAGIC_PYRE_LOGS(ItemID.MAGIC_LOGS_PYRE, 80, 404.5f, FiremakingMethod.PYRE_LOGS), + IRONWOOD_PYRE_LOGS(ItemID.IRONWOOD_LOGS_PYRE, 85, 435, FiremakingMethod.PYRE_LOGS), + CAMPHOR_LOGS_BARBARIAN(ItemID.CAMPHOR_LOGS, 86, 245, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Camphor logs (barbarian)"; + } + }, REDWOOD_LOGS(ItemID.REDWOOD_LOGS, 90, 350, FiremakingMethod.NORMAL_LOGS), + ROSEWOOD_LOGS(ItemID.ROSEWOOD_LOGS, 92, 268, FiremakingMethod.NORMAL_LOGS), REDWOOD_PYRE_LOGS(ItemID.REDWOOD_LOGS_PYRE, 95, 500, FiremakingMethod.PYRE_LOGS), + ROSEWOOD_PYRE_LOGS(ItemID.ROSEWOOD_LOGS_PYRE, 97, 580, FiremakingMethod.PYRE_LOGS), + IRONWOOD_LOGS_BARBARIAN(ItemID.IRONWOOD_LOGS, 99, 320, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Ironwood logs (barbarian)"; + } + }, + ROSEWOOD_LOGS_BARBARIAN(ItemID.ROSEWOOD_LOGS, 99, 420, FiremakingMethod.NORMAL_LOGS) + { + @Override + public String getName(final ItemManager itemManager) + { + return "Rosewood logs (barbarian)"; + } + }, ; private final int itemId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java index b6007121da5..489dbe82c7a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java @@ -24,9 +24,12 @@ */ package net.runelite.client.plugins.skillcalculator.skills; +import java.util.Collections; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.gameval.ItemID; +import static net.runelite.client.plugins.skillcalculator.skills.FishingBonus.ANGLERS_OUTFIT; @AllArgsConstructor @Getter @@ -55,21 +58,47 @@ public enum FishingAction implements ItemSkillAction RAW_BASS(ItemID.RAW_BASS, 46, 100), LEAPING_TROUT(ItemID.BRUT_SPAWNING_TROUT, 48, 50), RAW_SWORDFISH(ItemID.RAW_SWORDFISH, 50, 100), + RAW_SWORDTIP_SQUID(ItemID.RAW_SWORDTIP_SQUID, 52, 55), LEAPING_SALMON(ItemID.BRUT_SPAWNING_SALMON, 58, 70), RAW_MONKFISH(ItemID.RAW_MONKFISH, 62, 120), RAW_KARAMBWAN(ItemID.TBWT_RAW_KARAMBWAN, 65, 50), + RAW_JUMBO_SQUID(ItemID.RAW_JUMBO_SQUID, 69, 75), + RAW_GIANT_KRILL(ItemID.RAW_GIANT_KRILL, 69, 112.5f), LEAPING_STURGEON(ItemID.BRUT_STURGEON, 70, 80), + RAW_HADDOCK(ItemID.RAW_HADDOCK, 73, 128.5f), RAW_SHARK(ItemID.RAW_SHARK, 76, 110), RAW_SEA_TURTLE(ItemID.RAW_SEATURTLE, 79, 38), + RAW_YELLOWFIN(ItemID.RAW_YELLOWFIN, 79, 155.5f), INFERNAL_EEL(ItemID.INFERNAL_EEL, 80, 95), RAW_MANTA_RAY(ItemID.RAW_MANTARAY, 81, 46), MINNOW(ItemID.MINNOW, 82, 26.5f), RAW_ANGLERFISH(ItemID.RAW_ANGLERFISH, 82, 120), + RAW_HALIBUT(ItemID.RAW_HALIBUT, 83, 195.5f), RAW_DARK_CRAB(ItemID.RAW_DARK_CRAB, 85, 130), SACRED_EEL(ItemID.SNAKEBOSS_EEL, 87, 105), + RAW_BLUEFIN(ItemID.RAW_BLUEFIN, 87, 220.5f), + RAW_MARLIN(ItemID.RAW_MARLIN, 91, 265.5f), ; private final int itemId; private final int level; private final float xp; + + @Override + public Set getExcludedSkillBonuses() + { + switch (this) + { + case RAW_GIANT_KRILL: + case RAW_HADDOCK: + case RAW_YELLOWFIN: + case RAW_HALIBUT: + case RAW_BLUEFIN: + case RAW_MARLIN: + return Set.of(ANGLERS_OUTFIT); + default: + return Collections.emptySet(); + } + } + } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java index 31ffc5edcbe..eae56a5b8e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java @@ -122,6 +122,7 @@ public String getName(final ItemManager itemManager) SAPPHIRE_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_MITHRIL_TIPPED_SAPPHIRE, 56, 4.7f), MAPLE_SHIELD(ItemID.MAPLE_SHIELD, 57, 116.5f), EMERALD_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_MITHRIL_TIPPED_EMERALD, 58, 5.5f), + CAMPHOR_BLOWPIPE(ItemID.CAMPHOR_BLOWPIPE, 58, 140), HUNTERS_SPEAR(ItemID.HG_HUNTER_SPEAR, 60, 9.5f), ADAMANT_ARROW(ItemID.ADAMANT_ARROW, 60, 10), ADAMANT_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_ADAMANTITE, 61, 7), @@ -150,6 +151,7 @@ public String getName(final ItemManager itemManager) YEW_LONGBOW_U(ItemID.UNSTRUNG_YEW_LONGBOW, 70, 75), DRAGONSTONE_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_TIPPED_DRAGONSTONE, 71, 8.2f), YEW_SHIELD(ItemID.YEW_SHIELD, 72, 150), + IRONWOOD_BLOWPIPE(ItemID.IRONWOOD_BLOWPIPE, 72, 170), ONYX_BOLTS(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_TIPPED_ONYX, 73, 9.4f), ATLATL_DART_TIPS(ItemID.ATLATL_DART_TIPS, 74, 0.1f), ATLATL_DART_SHAFT(ItemID.ATLATL_DART_SHAFT, 74, 0.3f), @@ -184,6 +186,7 @@ public String getName(final ItemManager itemManager) AMETHYST_ARROW(ItemID.AMETHYST_ARROW, 82, 13.5f), DRAGON_BOLTS(ItemID.DRAGON_BOLTS_UNFEATHERED, 84, 12), AMETHYST_JAVELIN(ItemID.AMETHYST_JAVELIN, 84, 13.5f), + ROSEWOOD_BLOWPIPE(ItemID.ROSEWOOD_BLOWPIPE, 84, 200), MAGIC_LONGBOW(ItemID.MAGIC_LONGBOW, 85, 91.5f), MAGIC_LONGBOW_U(ItemID.UNSTRUNG_MAGIC_LONGBOW, 85, 91.5f), MAGIC_SHIELD(ItemID.MAGIC_SHIELD, 87, 183), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java index 7ae81e989f0..5aa5be17644 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java @@ -60,6 +60,7 @@ public enum HerbloreAction implements ItemSkillAction SUPER_ATTACK_3(ItemID._3DOSE2ATTACK, 45, 100), AVANTOE(ItemID.AVANTOE, 48, 10), SUPERANTIPOISON_3(ItemID._3DOSE2ANTIPOISON, 48, 106.3f), + ANTI_ODOUR_SALT(ItemID.ANTI_ODOUR_SALT, 49, 11), FISHING_POTION_3(ItemID._3DOSEFISHERSPOTION, 50, 112.5f), SUPER_ENERGY_3(ItemID._3DOSE2ENERGY, 52, 117.5f), HUNTER_POTION_3(ItemID._3DOSEHUNTING, 53, 120), @@ -67,6 +68,8 @@ public enum HerbloreAction implements ItemSkillAction GOADING_POTION_3(ItemID._3DOSEGOADING, 54, 132), IRIT_TAR(ItemID.SALAMANDER_TAR_MOUNTAIN, 55, 85), SUPER_STRENGTH_3(ItemID._3DOSE2STRENGTH, 55, 125), + HAEMOSTATIC_POULTICE(ItemID.HAEMOSTATIC_POULTICE, 56, 27), + HAEMOSTATIC_DRESSING_3(ItemID._3DOSEHAEMOSTATICDRESSING, 56, 100), MAGIC_ESSENCE_POTION_3(ItemID._3DOSEMAGICESS, 57, 130), HUASCA(ItemID.HUASCA, 58, 11.8f), PRAYER_REGENERATION_POTION(ItemID._3DOSE1PRAYER_REGENERATION, 58, 132), @@ -75,13 +78,16 @@ public enum HerbloreAction implements ItemSkillAction ALCOAUGMENTATOR(ItemID.MM_POTION_AAA_UNFINISHED, 60, 190), LIPLACK_LIQUOR(ItemID.MM_POTION_LLL_UNFINISHED, 60, 190), MAMMOTHMIGHT_MIX(ItemID.MM_POTION_MMM_UNFINISHED, 60, 190), + SUPER_FISHING_POTION_3(ItemID._3DOSE2FISHERSPOTION, 62, 140.5f), SUPER_RESTORE_3(ItemID._3DOSE2RESTORE, 63, 142.5f), MYSTIC_MANA_AMALGAM(ItemID.MM_POTION_MMA_UNFINISHED, 63, 215), CADANTINE(ItemID.CADANTINE, 65, 12.5f), SANFEW_SERUM_3(ItemID.SANFEW_SALVE_3_DOSE, 65, 160), + EXTREME_ENERGY_POTION_4(ItemID._4DOSE3ENERGY, 66, 84), SUPER_DEFENCE_3(ItemID._3DOSE2DEFENSE, 66, 150), MARLEYS_MOONLIGHT(ItemID.MM_POTION_MML_UNFINISHED, 66, 240), LANTADYME(ItemID.LANTADYME, 67, 13.1f), + SUPER_HUNTER_POTION_3(ItemID._3DOSE2HUNTING, 67, 154), ANTIDOTE_PLUS_4(ItemID.ANTIDOTE_4, 68, 155), ANTIFIRE_POTION_3(ItemID._3DOSE1ANTIDRAGON, 69, 157.5f), AZURE_AURA_MIX(ItemID.MM_POTION_AAM_UNFINISHED, 69, 265), @@ -96,7 +102,6 @@ public enum HerbloreAction implements ItemSkillAction TORSTOL(ItemID.TORSTOL, 75, 15), MEGALITE_LIQUID(ItemID.MM_POTION_LLM_UNFINISHED, 75, 315), MAGIC_POTION_3(ItemID._3DOSE1MAGIC, 76, 172.5f), - STAMINA_POTION_3(ItemID._3DOSESTAMINA, 77, 76.5f), STAMINA_POTION_4(ItemID._4DOSESTAMINA, 77, 102), DIVINE_MAGIC_POTION_4(ItemID._4DOSEDIVINEMAGIC, 78, 2), ZAMORAK_BREW_3(ItemID._3DOSEPOTIONOFZAMORAK, 78, 175), @@ -108,21 +113,20 @@ public enum HerbloreAction implements ItemSkillAction SURGE_POTION_3(ItemID._3DOSESURGE, 81, 185), MIXALOT(ItemID.MM_POTION_MAL_UNFINISHED, 81, 365), WEAPON_POISON_PLUS_PLUS(ItemID.WEAPON_POISON__, 82, 190), - EXTENDED_ANTIFIRE_3(ItemID._3DOSE2ANTIDRAGON, 84, 82.5f), EXTENDED_ANTIFIRE_4(ItemID._4DOSE2ANTIDRAGON, 84, 110), + EXTENDED_STAMINA_POTION_4(ItemID._4DOSE2STAMINA, 85, 110), ANCIENT_BREW_4(ItemID._4DOSEANCIENTBREW, 85, 190), DIVINE_BASTION_POTION_4(ItemID._4DOSEDIVINEBASTION, 86, 2), DIVINE_BATTLEMAGE_POTION_4(ItemID._4DOSEDIVINEBATTLEMAGE, 86, 2), - ANTIVENOM_3(ItemID.ANTIVENOM3, 87, 90), ANTIVENOM_4(ItemID.ANTIVENOM4, 87, 120), MENAPHITE_REMEDY_3(ItemID._3DOSESTATRENEWAL, 88, 200), + ARMADYL_BREW_3(ItemID._3DOSEARMADYLBREW, 89, 205), SUPER_COMBAT_POTION_4(ItemID._4DOSE2COMBAT, 90, 150), FORGOTTEN_BREW_4(ItemID._4DOSEFORGOTTENBREW, 91, 145), SUPER_ANTIFIRE_4(ItemID._4DOSE3ANTIDRAGON, 92, 130), EXTENDED_ANTIVENOM_PLUS_4(ItemID.EXTENDED_ANTIVENOM_4, 94, 80), ANTIVENOM_PLUS_4(ItemID.ANTIVENOM_4, 94, 125), DIVINE_SUPER_COMBAT_POTION_4(ItemID._4DOSEDIVINECOMBAT, 97, 2), - EXTENDED_SUPER_ANTIFIRE_3(ItemID._3DOSE4ANTIDRAGON, 98, 120), EXTENDED_SUPER_ANTIFIRE_4(ItemID._4DOSE4ANTIDRAGON, 98, 160), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java index d33f2ba61f3..a0f547f1011 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java @@ -47,6 +47,7 @@ public enum HunterAction implements NamedSkillAction BABY_IMPLING("Baby Impling", 17, 18, ItemID.II_CAPTURED_IMPLING_1), TROPICAL_WAGTAIL("Tropical Wagtail", 19, 95, ItemID.HUNTGUIDE_COLOURED_BIRD), MOSS_LIZARD("Moss Lizard", 20, 90, ItemID.RAW_LIZARD), + RED_CRAB("Red Crab", 21, 64, ItemID.RED_CRAB), YOUNG_IMPLING("Young Impling", 22, 20, ItemID.II_CAPTURED_IMPLING_2), WILD_KEBBIT("Wild Kebbit", 23, 128, ItemID.HUNTGUIDE_POLAR_BEAST), WILLOW_BIRD_HOUSE("Willow Bird House", 24, 560, ItemID.BIRDHOUSE_WILLOW), @@ -68,6 +69,7 @@ public enum HunterAction implements NamedSkillAction MAPLE_BIRD_HOUSE("Maple Bird House", 44, 820, ItemID.BIRDHOUSE_MAPLE), BLACK_WARLOCK("Black Warlock", 45, 54, ItemID.HUNTGUIDE_BLACK_BUTTERFLY), ORANGE_SALAMANDER("Orange Salamander", 47, 224, ItemID.ORANGE_SALAMANDER), + BLUE_CRAB("Blue Crab", 48, 136, ItemID.BLUE_CRAB), RAZOR_BACKED_KEBBIT("Razor-backed Kebbit", 49, 348, ItemID.HUNTGUIDE_RAZOR2_BEAST), MAHOGANY_BIRD_HOUSE("Mahogany Bird House", 49, 960, ItemID.BIRDHOUSE_MAHOGANY), ECLECTIC_IMPLING("Eclectic Impling", 50, 32, ItemID.II_CAPTURED_IMPLING_6), @@ -92,6 +94,7 @@ public enum HunterAction implements NamedSkillAction NINJA_IMPLING_GIELINOR("Ninja Impling (Gielinor)", 74, 240, ItemID.II_CAPTURED_IMPLING_9), MAGIC_BIRD_HOUSE("Magic Bird House", 74, 1140, ItemID.BIRDHOUSE_MAGIC), MOONLIGHT_MOTH("Moonlight Moth", 75, 84, ItemID.HUNTGUIDE_MOONLIGHT_MOTH), + RAINBOW_CRAB("Rainbow Crab", 77, 216, ItemID.RAINBOW_CRAB_C), TECU_SALAMANDER("Tecu Salamander", 79, 344, ItemID.MOUNTAIN_SALAMANDER), CRYSTAL_IMPLING("Crystal Impling", 80, 280, ItemID.II_CAPTURED_IMPLING_12), DRAGON_IMPLING("Dragon Impling", 83, 65, ItemID.II_CAPTURED_IMPLING_10), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java index 61611dd47cb..3ddb7be3692 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java @@ -49,6 +49,7 @@ public String getName(final ItemManager itemManager) BARRONITE_DEPOSIT(ItemID.CAMDOZAAL_BARRONITE_DEPOSIT, 14, 32), IRON_ORE(ItemID.IRON_ORE, 15, 35), SILVER_ORE(ItemID.SILVER_ORE, 20, 40), + LEAD_ORE(ItemID.LEAD_ORE, 25, 40.5f), PURE_ESSENCE(ItemID.BLANKRUNE_HIGH, 30, 5) { @Override @@ -77,12 +78,13 @@ public String getName(final ItemManager itemManager) @Override public String getName(final ItemManager itemManager) { - return "Calcified Rocks"; + return "Calcified rocks"; } }, GRANITE_500G(ItemID.ENAKH_GRANITE_TINY, 45, 50), GRANITE_2KG(ItemID.ENAKH_GRANITE_SMALL, 45, 60), GRANITE_5KG(ItemID.ENAKH_GRANITE_MEDIUM, 45, 75), + RUBIUM_SPLINTERS(ItemID.RUBIUM_SPLINTERS, 48, 72), MITHRIL_ORE(ItemID.MITHRIL_ORE, 55, 80), SOFT_CLAY(ItemID.SOFTCLAY, 70, 5) { @@ -93,6 +95,7 @@ public boolean isMembers(final ItemManager itemManager) } }, ADAMANTITE_ORE(ItemID.ADAMANTITE_ORE, 70, 95), + NICKEL_ORE(ItemID.NICKEL_ORE, 74, 80.5f), RUNITE_ORE(ItemID.RUNITE_ORE, 85, 125), AMETHYST(ItemID.AMETHYST, 92, 240), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java index 934a2375773..cb19a2b23da 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java @@ -60,6 +60,7 @@ public enum PrayerAction implements ItemSkillAction PHRIN_REMAINS(ItemID.SHADE_BONES2, 1, 46.5f, PrayerMethod.SHADE_REMAINS), WYRM_BONES(ItemID.WYRM_BONES, 1, 50, PrayerMethod.BONES), RIYL_REMAINS(ItemID.SHADE_BONES3, 1, 59.5f, PrayerMethod.SHADE_REMAINS), + STRYKEWYRM_BONES(ItemID.STRYKEWYRM_BONES, 1, 60, PrayerMethod.BONES), MALICIOUS_ASHES(ItemID.MALICIOUS_ASHES, 1, 65, PrayerMethod.DEMONIC_ASHES), DRAGON_BONES(ItemID.DRAGON_BONES, 1, 72, PrayerMethod.BONES), WYVERN_BONES(ItemID.WYVERN_BONES, 1, 72, PrayerMethod.BONES), @@ -70,6 +71,7 @@ public enum PrayerAction implements ItemSkillAction ABYSSAL_ASHES(ItemID.ABYSSAL_ASHES, 1, 85, PrayerMethod.DEMONIC_ASHES), LAVA_DRAGON_BONES(ItemID.LAVA_DRAGON_BONES, 1, 85, PrayerMethod.BONES), RAURG_BONES(ItemID.ZOGRE_ANCESTRAL_BONES_RAURG, 1, 96, PrayerMethod.BONES), + FROST_DRAGON_BONES(ItemID.FROST_DRAGON_BONES, 1, 100, PrayerMethod.BONES), HYDRA_BONES(ItemID.HYDRA_BONES, 1, 110, PrayerMethod.BONES), INFERNAL_ASHES(ItemID.INFERNAL_ASHES, 1, 110, PrayerMethod.DEMONIC_ASHES), URIUM_REMAINS(ItemID.SHADE_BONES6, 1, 120.5f, PrayerMethod.SHADE_REMAINS), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingAction.java new file mode 100644 index 00000000000..66f0b700f85 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingAction.java @@ -0,0 +1,64 @@ +package net.runelite.client.plugins.skillcalculator.skills; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.runelite.api.gameval.ItemID; +import net.runelite.client.game.ItemManager; + +@AllArgsConstructor +@Getter +public enum SailingAction implements NamedSkillAction +{ + SMALL_SHIPWRECK_SORTING("Small Shipwreck Salvage (Sorting)", 15, 5, ItemID.SAILING_SMALL_SHIPWRECK_SALVAGE), + SMALL_SHIPWRECK_SALVAGE("Small Shipwreck Salvage (Salvaging)", 15, 10, ItemID.SAILING_SMALL_SHIPWRECK_SALVAGE), + FISHY_SHIPWRECK_SORTING("Fishy Shipwreck Salvage (Sorting)", 26, 9, ItemID.SAILING_FISHERMAN_SHIPWRECK_SALVAGE), + FISHY_SHIPWRECK_SALVAGE("Fishy Shipwreck Salvage (Salvaging)", 26, 17, ItemID.SAILING_FISHERMAN_SHIPWRECK_SALVAGE), + TEMPEST_TRIAL_UNRANKED("Unranked Tempor Trial", 30, 300, ItemID.RALPHS_FABRIC_ROLL), + TEMPEST_TRIAL_SWORDFISH("Swordfish Tempor Trial", 30, 595, ItemID.RALPHS_FABRIC_ROLL), + TEMPEST_TRIAL_SHARK("Shark Tempor Trial", 30, 1025, ItemID.RALPHS_FABRIC_ROLL), + TEMPEST_TRIAL_MARLIN("Marlin Tempor Trial", 30, 1790, ItemID.RALPHS_FABRIC_ROLL), + TEST_BOUNTY_30("Level 30 Bounty", 30, 1790, ItemID.SAILING_BULL_SHARK_JAW), + BARRACUDA_SHIPWRECK_SORTING("Barracuda Shipwreck Salvage (Sorting)", 35, 15.5f, ItemID.SAILING_BARRACUDA_SHIPWRECK_SALVAGE), + BARRACUDA_SHIPWRECK_SALVAGE("Barracuda Shipwreck Salvage (Salvaging)", 35, 31, ItemID.SAILING_BARRACUDA_SHIPWRECK_SALVAGE), + BOUNTY_38("Level 38 Bounty", 38, 2020, ItemID.SAILING_BULL_SHARK_JAW), + BOUNTY_40("Level 40 Bounty", 40, 3400, ItemID.SAILING_BULL_SHARK_JAW), + BOUNTY_45_48("Level 45-48 Bounty", 45, 3650, ItemID.SAILING_BULL_SHARK_JAW), + BOUNTY_50("Level 50 Bounty", 50, 4390, ItemID.SAILING_BULL_SHARK_JAW), + LARGE_SHIPWRECK_SORTING("Large Shipwreck Salvage (Sorting)", 53, 24, ItemID.SAILING_LARGE_SHIPWRECK_SALVAGE), + LARGE_SHIPWRECK_SALVAGE("Large Shipwreck Salvage (Salvaging)", 53, 48, ItemID.SAILING_LARGE_SHIPWRECK_SALVAGE), + JIVE_TRIAL_UNRANKED("Unranked Jubbly Jive Trial", 55, 1400, ItemID.GURTOBS_FABRIC_ROLL), + JIVE_TRIAL_SWORDFISH("Swordfish Jubbly Jive Trial", 55, 2200, ItemID.GURTOBS_FABRIC_ROLL), + JIVE_TRIAL_SHARK("Shark Jubbly Jive Trial", 55, 3950, ItemID.GURTOBS_FABRIC_ROLL), + JEST_BOUNTY_55("Level 50 Bounty", 55, 6360, ItemID.SAILING_BULL_SHARK_JAW), + JIVE_TRIAL_MARLIN("Marlin Jubbly Jive Trial", 55, 7500, ItemID.GURTOBS_FABRIC_ROLL), + BOUNTY_60_62("Level 60-62 Bounty", 60, 6760, ItemID.SAILING_BULL_SHARK_JAW), + PLUNDERED_SHIPWRECK_SORTING("Plundered Shipwreck Salvage (Sorting)", 64, 31.5f, ItemID.SAILING_PIRATE_SHIPWRECK_SALVAGE), + PLUNDERED_SHIPWRECK_SALVAGE("Plundered Shipwreck Salvage (Salvaging)", 64, 63, ItemID.SAILING_PIRATE_SHIPWRECK_SALVAGE), + BOUNTY_65_67("Level 65-67 Bounty", 65, 7500, ItemID.SAILING_BULL_SHARK_JAW), + BOUNTY_70("Level 70 Bounty", 70, 7730, ItemID.SAILING_BULL_SHARK_JAW), + GLIDE_TRIAL_UNRANKED("Unranked Gwenith Glide Trial", 72,3100, ItemID.GWYNAS_FABRIC_ROLL), + GLIDE_TRIAL_SWORDFISH("Swordfish Gwenith Glide Trial", 72,4100, ItemID.GWYNAS_FABRIC_ROLL), + GLIDE_TRIAL_SHARK("Shark Gwenith Glide Trial", 72, 9315, ItemID.GWYNAS_FABRIC_ROLL), + GLIDE_TRIAL_MARLIN("Marlin Gwenith Glide Trial", 72, 18160, ItemID.GWYNAS_FABRIC_ROLL), + MARTIAL_SHIPWRECK_SORTING("Martial Shipwreck Salvage (Sorting)", 73, 63.5f, ItemID.SAILING_MERCENARY_SHIPWRECK_SALVAGE), + MARTIAL_SHIPWRECK_SALVAGE("Martial Shipwreck Salvage (Salvaging)", 73, 127, ItemID.SAILING_MERCENARY_SHIPWRECK_SALVAGE), + BOUNTY_75_76("Level 75-76 Bounty", 75, 8540, ItemID.SAILING_BULL_SHARK_JAW), + FREMENNIK_SHIPWRECK_SORTING("Fremennik Shipwreck Salvage (Sorting)", 80, 75, ItemID.SAILING_FREMENNIK_SHIPWRECK_SALVAGE), + FREMENNIK_SHIPWRECK_SALVAGE("Fremennik Shipwreck Salvage (Salvaging)", 80, 150, ItemID.SAILING_FREMENNIK_SHIPWRECK_SALVAGE), + ARMOURED_KRAKEN_BOUNTY("Level 80 Bounty", 80, 9540, ItemID.SAILING_BULL_SHARK_JAW), + OPULENT_SHIPWRECK_SORTING("Opulent Shipwreck Salvage (Sorting)", 87, 95, ItemID.SAILING_MERCHANT_SHIPWRECK_SALVAGE), + OPULENT_SHIPWRECK_SALVAGE("Opulent Shipwreck Salvage (Salvaging)", 87, 190, ItemID.SAILING_MERCHANT_SHIPWRECK_SALVAGE), + + ; + + private final String name; + private final int level; + private final float xp; + private final int icon; + + @Override + public boolean isMembers(final ItemManager itemManager) + { + return true; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingBonus.java new file mode 100644 index 00000000000..46c7c486f2b --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SailingBonus.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021, Jordan Atwood + * 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.client.plugins.skillcalculator.skills; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter(onMethod_ = @Override) +public enum SailingBonus implements SkillBonus +{ + HORIZONS_LURE("Horizon's Lure", 1.025f), + ; + + private final String name; + private final float value; +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java index 88c9c03b7f3..9c79ba936a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java @@ -44,6 +44,7 @@ public enum SmithingAction implements ItemSkillAction BRONZE_NAILS(ItemID.NAILS_BRONZE, 4, 12.5f), BRONZE_SWORD(ItemID.BRONZE_SWORD, 4, 12.5f), BRONZE_WIRE(ItemID.BRONZECRAFTWIRE, 4, 12.5f), + BRONZE_CANNONBALL(ItemID.BRONZE_CANNONBALL, 5, 9), BRONZE_ARROWTIPS(ItemID.BRONZE_ARROWHEADS, 5, 12.5f), BRONZE_HASTA(ItemID.BRUT_BRONZE_SPEAR, 5, 25), BRONZE_SCIMITAR(ItemID.BRONZE_SCIMITAR, 5, 25), @@ -56,6 +57,7 @@ public enum SmithingAction implements ItemSkillAction BRONZE_SQ_SHIELD(ItemID.BRONZE_SQ_SHIELD, 8, 25), BRONZE_WARHAMMER(ItemID.BRONZE_WARHAMMER, 9, 37.5f), BRONZE_BATTLEAXE(ItemID.BRONZE_BATTLEAXE, 10, 37.5f), + BRONZE_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_BRONZE, 10, 62.5f), BRONZE_CHAINBODY(ItemID.BRONZE_CHAINBODY, 11, 37.5f), BRONZE_KITESHIELD(ItemID.BRONZE_KITESHIELD, 12, 37.5f), BRONZE_CLAWS(ItemID.BRONZE_CLAWS, 13, 25), @@ -75,6 +77,7 @@ public enum SmithingAction implements ItemSkillAction IRON_NAILS(ItemID.NAILS_IRON, 19, 25), IRON_SWORD(ItemID.IRON_SWORD, 19, 25), SILVER_BAR(ItemID.SILVER_BAR, 20, 13.7f), + IRON_CANNONBALL(ItemID.IRON_CANNONBALL, 20, 17), IRON_ARROWTIPS(ItemID.IRON_ARROWHEADS, 20, 25), IRON_HASTA(ItemID.BRUT_IRON_SPEAR, 20, 50), IRON_SCIMITAR(ItemID.IRON_SCIMITAR, 20, 50), @@ -83,9 +86,11 @@ public enum SmithingAction implements ItemSkillAction IRON_LONGSWORD(ItemID.IRON_LONGSWORD, 21, 50), IRON_KNIFE(ItemID.IRON_KNIFE, 22, 25), IRON_FULL_HELM(ItemID.IRON_FULL_HELM, 22, 50), + IRON_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_IRON, 22, 125f), IRON_LIMBS(ItemID.XBOWS_CROSSBOW_LIMBS_IRON, 23, 25), IRON_SQ_SHIELD(ItemID.IRON_SQ_SHIELD, 23, 50), IRON_WARHAMMER(ItemID.IRON_WARHAMMER, 24, 75), + LEAD_BAR(ItemID.LEAD_BAR, 25, 15.5f), IRON_BATTLEAXE(ItemID.IRON_BATTLEAXE, 25, 75), OIL_LANTERN_FRAME(ItemID.OIL_LANTERN_FRAME, 26, 25), IRON_CHAINBODY(ItemID.IRON_CHAINBODY, 26, 75), @@ -104,7 +109,7 @@ public enum SmithingAction implements ItemSkillAction STEEL_DART_TIP(ItemID.STEEL_DART_TIP, 34, 37.5f), STEEL_NAILS(ItemID.NAILS, 34, 37.5f), STEEL_SWORD(ItemID.STEEL_SWORD, 34, 37.5f), - CANNONBALL(ItemID.MCANNONBALL, 35, 25.6f), + STEEL_CANNONBALL(ItemID.MCANNONBALL, 35, 25.6f), STEEL_ARROWTIPS(ItemID.STEEL_ARROWHEADS, 35, 37.5f), STEEL_HASTA(ItemID.BRUT_STEEL_SPEAR, 35, 75), STEEL_SCIMITAR(ItemID.STEEL_SCIMITAR, 35, 75), @@ -116,6 +121,7 @@ public enum SmithingAction implements ItemSkillAction STEEL_KNIFE(ItemID.STEEL_KNIFE, 37, 37.5f), STEEL_FULL_HELM(ItemID.STEEL_FULL_HELM, 37, 75), STEEL_SQ_SHIELD(ItemID.STEEL_SQ_SHIELD, 38, 75), + STEEL_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_STEEL, 38, 187.5f), STEEL_WARHAMMER(ItemID.STEEL_WARHAMMER, 39, 112.5f), GOLD_BAR(ItemID.GOLD_BAR, 40, 22.5f), STEEL_BATTLEAXE(ItemID.STEEL_BATTLEAXE, 40, 112.5f), @@ -136,6 +142,7 @@ public enum SmithingAction implements ItemSkillAction MITHRIL_DART_TIP(ItemID.MITHRIL_DART_TIP, 54, 50), MITHRIL_NAILS(ItemID.NAILS_MITHRIL, 54, 50), MITHRIL_SWORD(ItemID.MITHRIL_SWORD, 54, 50), + MITHRIL_CANNONBALL(ItemID.MITHRIL_CANNONBALL, 55, 34), MITHRIL_ARROWTIPS(ItemID.MITHRIL_ARROWHEADS, 55, 50), MITHRIL_HASTA(ItemID.BRUT_MITHRIL_SPEAR, 55, 100), MITHRIL_SCIMITAR(ItemID.MITHRIL_SCIMITAR, 55, 100), @@ -143,6 +150,7 @@ public enum SmithingAction implements ItemSkillAction MITHRIL_JAVELIN_HEADS(ItemID.MITHRIL_JAVELIN_HEAD, 56, 50), MITHRIL_LIMBS(ItemID.XBOWS_CROSSBOW_LIMBS_MITHRIL, 56, 50), MITHRIL_LONGSWORD(ItemID.MITHRIL_LONGSWORD, 56, 100), + MITHRIL_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_MITHRIL, 56, 250), MITHRIL_KNIFE(ItemID.MITHRIL_KNIFE, 57, 50), MITHRIL_FULL_HELM(ItemID.MITHRIL_FULL_HELM, 57, 100), MITHRIL_SQ_SHIELD(ItemID.MITHRIL_SQ_SHIELD, 58, 100), @@ -163,9 +171,12 @@ public enum SmithingAction implements ItemSkillAction ADAMANT_MACE(ItemID.ADAMANT_MACE, 72, 62.5f), ADAMANT_BOLTS_UNF(ItemID.XBOWS_CROSSBOW_BOLTS_ADAMANTITE_UNFEATHERED, 73, 62.5f), ADAMANT_MED_HELM(ItemID.ADAMANT_MED_HELM, 73, 62.5f), + CUPRONICKEL_BAR(ItemID.CUPRONICKEL_BAR, 74, 42), ADAMANTITE_NAILS(ItemID.NAILS_ADAMANT, 74, 62.5f), ADAMANT_DART_TIP(ItemID.ADAMANT_DART_TIP, 74, 62.5f), ADAMANT_SWORD(ItemID.ADAMANT_SWORD, 74, 62.5f), + ADAMANT_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_ADAMANT, 74, 312.5f), + ADAMANT_CANNONBALL(ItemID.ADAMANT_CANNONBALL, 75, 42.5f), ADAMANT_ARROWTIPS(ItemID.ADAMANT_ARROWHEADS, 75, 62.5f), ADAMANT_HASTA(ItemID.BRUT_ADAMANT_SPEAR, 75, 125), ADAMANT_SCIMITAR(ItemID.ADAMANT_SCIMITAR, 75, 125), @@ -187,6 +198,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_AXE(ItemID.RUNE_AXE, 86, 75), ADAMANT_PLATELEGS(ItemID.ADAMANT_PLATELEGS, 86, 187.5f), ADAMANT_PLATESKIRT(ItemID.ADAMANT_PLATESKIRT, 86, 187.5f), + RUNE_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_RUNE, 86, 375), RUNE_MACE(ItemID.RUNE_MACE, 87, 75), RUNE_MED_HELM(ItemID.RUNE_MED_HELM, 88, 75), RUNITE_BOLTS_UNF(ItemID.XBOWS_CROSSBOW_BOLTS_RUNITE_UNFEATHERED, 88, 75), @@ -194,6 +206,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_DART_TIP(ItemID.RUNE_DART_TIP, 89, 75), RUNE_NAILS(ItemID.NAILS_RUNE, 89, 75), RUNE_SWORD(ItemID.RUNE_SWORD, 89, 75), + RUNE_CANNONBALL(ItemID.RUNE_CANNONBALL, 90, 50.5f), RUNE_ARROWTIPS(ItemID.RUNE_ARROWHEADS, 90, 75), RUNE_HASTA(ItemID.BRUT_RUNE_SPEAR, 90, 150), RUNE_SCIMITAR(ItemID.RUNE_SCIMITAR, 90, 150), @@ -206,6 +219,7 @@ public enum SmithingAction implements ItemSkillAction RUNE_FULL_HELM(ItemID.RUNE_FULL_HELM, 92, 150), RUNE_SQ_SHIELD(ItemID.RUNE_SQ_SHIELD, 93, 150), RUNE_WARHAMMER(ItemID.RUNE_WARHAMMER, 94, 225), + DRAGON_KEEL_PARTS(ItemID.SAILING_BOAT_KEEL_PART_DRAGON, 94, 700), RUNE_BATTLEAXE(ItemID.RUNE_BATTLEAXE, 95, 225), RUNE_CHAINBODY(ItemID.RUNE_CHAINBODY, 96, 225), RUNE_KITESHIELD(ItemID.RUNE_KITESHIELD, 97, 225), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java index 7f10c88be23..169aa752679 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java @@ -53,6 +53,7 @@ public enum ThievingAction implements NamedSkillAction NATURE_RUNE_CHEST("Nature Rune Chest", 28, 25, ItemID.NATURERUNE), ISLE_OF_SOULS_CHEST("Isle of Souls Dungeon Chest", 28, 150, ItemID.SW_DUNGEON_CHEST_KEY), ROGUE("Rogue", 32, 36.5f, ItemID.PICKPOCKET_GUIDE_ROGUE), + RUSTY_CHEST("Rusty Chest", 33, 90, ItemID.BRONZE_CANNONBALL), FUR_STALL("Fur Stall", 35, 45, ItemID.GREY_WOLF_FUR), CAVE_GOBLIN("Cave Goblin", 36, 40, ItemID.PICKPOCKET_GUIDE_DORGESH), MASTER_FARMER("Master Farmer", 38, 43, ItemID.PICKPOCKET_GUIDE_MASTER_FARMER), @@ -69,8 +70,10 @@ public enum ThievingAction implements NamedSkillAction SILVER_STALL("Silver Stall", 50, 205, ItemID.SILVER_BAR), DORGESH_KAAN_AVERAGE_CHEST("Dorgesh-Kaan Average Chest", 52, 200, ItemID.OIL_LANTERN_UNLIT), DESERT_BANDIT("Desert Bandit", 53, 79.4f, ItemID.PICKPOCKET_GUIDE_DESERT_BANDIT), + TARNISHED_CHEST("Tarnished Chest", 54, 122.5f, ItemID.MCANNONBALL), KNIGHT("Knight", 55, 84.3f, ItemID.PICKPOCKET_GUIDE_KNIGHT), POLLNIVNIAN_BANDIT("Pollnivnian Bandit", 55, 84.3f, ItemID.PICKPOCKET_GUIDE_FEUD_ARABIAN_GUARD1), + PIRATE("Pirate", 60, 72, ItemID.PICKPOCKET_GUIDE_PIRATE), STONE_CHEST("Stone Chest", 64, 280, ItemID.XERIC_FABRIC), MAGIC_STALL("Magic Stall", 65, 90, ItemID.ROGUETRADER_AIRRUNE), SPICE_STALL("Spice Stall", 65, 92, ItemID.SPICESPOT), @@ -81,12 +84,14 @@ public enum ThievingAction implements NamedSkillAction PALADIN("Paladin", 70, 131.8f, ItemID.PICKPOCKET_GUIDE_PALADIN), GNOME("Gnome", 75, 133.5f, ItemID.PICKPOCKET_GUIDE_GNOME), GEM_STALL("Gem Stall", 75, 408, ItemID.SAPPHIRE), + REINFORCED_CHEST("Reinforced Chest", 76, 182.5f, ItemID.ADAMANT_CANNONBALL), DORGESH_KAAN_RICH_CHEST("Dorgesh-Kaan Rich Chest", 78, 650, ItemID.CAVE_GOBLIN_MINING_HELMET_LIT), HERO("Hero", 80, 163.3f, ItemID.PICKPOCKET_GUIDE_HERO), VYRE("Vyre", 82, 306.9f, ItemID.PICKPOCKET_GUIDE_VYRE), ORE_STALL("Ore Stall", 82, 350, ItemID.RUNITE_ORE), ROGUES_CASTLE_CHEST("Wilderness Rogues' Chest", 84, 701.7f, ItemID.DRAGONSTONE), ELF("Elf", 85, 353.3f, ItemID.PICKPOCKET_GUIDE_WOODELF), + CANNONBALL_STALL("Cannonball Stall", 87, 223, ItemID.MCANNONBALL), TZHAAR_HUR("TzHaar-Hur", 90, 103.4f, ItemID.PICKPOCKET_GUIDE_TZHAAR), ; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java index 0032e6aa3ab..0022730b09e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java @@ -38,6 +38,7 @@ public enum WoodcuttingAction implements ItemSkillAction OAK_LOGS(ItemID.OAK_LOGS, 15, 37.5f), WILLOW_LOGS(ItemID.WILLOW_LOGS, 30, 67.5f), TEAK_LOGS(ItemID.TEAK_LOGS, 35, 85), + JATOBA_lOGS(ItemID.JATOBA_LOGS, 40, 92), JUNIPER_LOGS(ItemID.JUNIPER_LOGS, 42, 35), BARK(ItemID.HOLLOW_BARK, 45, 82.5f), MAPLE_LOGS(ItemID.MAPLE_LOGS, 45, 100), @@ -53,8 +54,11 @@ public String getName(final ItemManager itemManager) return "Sulliusceps"; } }, + CAMPHOR_LOGS(ItemID.CAMPHOR_LOGS, 66, 143.5f), MAGIC_LOGS(ItemID.MAGIC_LOGS, 75, 250), + IRONWOOD_LOGS(ItemID.IRONWOOD_LOGS, 80, 175), REDWOOD_LOGS(ItemID.REDWOOD_LOGS, 90, 380), + ROSEWOOD_LOGS(ItemID.ROSEWOOD_LOGS, 92, 212.5f), ; private final int itemId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index 7d4eb238c5b..b5b032111b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -41,6 +41,7 @@ enum Task ABYSSAL_SIRE("The Abyssal Sire", ItemID.ABYSSALSIRE_PET), ALCHEMICAL_HYDRA("The Alchemical Hydra", ItemID.HYDRAPET), ANKOU("Ankou", ItemID.ANKOU_HEAD), + AQUANITES("Aquanite", ItemID.SLAYERGUIDE_AQUANITE), ARAXXOR("Araxxor", ItemID.ARAXXORPET), ARAXYTES("Araxytes", ItemID.POH_ARAXYTE_HEAD, "Araxxor"), AVIANSIES("Aviansies", ItemID.ARCEUUS_CORPSE_AVIANSIE_INITIAL, "Kree'arra", "Flight Kilisa", "Flockleader Geerin", "Wingman Skree"), @@ -92,6 +93,7 @@ enum Task FIRE_GIANTS("Fire giants", ItemID.RTBRANDAPET, "Branda the Fire Queen"), FLESH_CRAWLERS("Fleshcrawlers", ItemID.ARCEUUS_CORPSE_SCORPION_INITIAL, "Flesh crawler"), FOSSIL_ISLAND_WYVERNS("Fossil island wyverns", ItemID.SLAYERGUIDE_FOSSILWYVERN, "Ancient wyvern", "Long-tailed wyvern", "Spitting wyvern", "Taloned wyvern"), + FROST_DRAGONS("Frost dragons", ItemID.FROST_DRAGON_BONES), GARGOYLES("Gargoyles", ItemID.SLAYERGUIDE_GARGOYLE, 9, ItemID.SLAYER_ROCK_HAMMER, "Dusk", "Dawn"), GENERAL_GRAARDOR("General Graardor", ItemID.BANDOSPET), GHOSTS("Ghosts", ItemID.AMULET_OF_GHOSTSPEAK, "Death wing", "Tortured soul", "Forgotten Soul", "Revenant"), @@ -101,6 +103,7 @@ enum Task GREATER_DEMONS("Greater demons", ItemID.GREATER_DEMON_MASK, "K'ril Tsutsaroth", "Tstanon Karlak", "Skotizo", "Tormented Demon"), GREEN_DRAGONS("Green dragons", ItemID.DRAGONMASK_GREEN, "Elvarg"), GROTESQUE_GUARDIANS("The Grotesque Guardians", ItemID.DUSKPET, 0, ItemID.SLAYER_ROCK_HAMMER, "Dusk", "Dawn"), + GRYPHONS("Gryphons", ItemID.SLAYERGUIDE_GRYPHON), HARPIE_BUG_SWARMS("Harpie bug swarms", ItemID.SLAYERGUIDE_SWARM), HELLHOUNDS("Hellhounds", ItemID.POH_HELLHOUND, "Cerberus"), HILL_GIANTS("Hill giants", ItemID.ARCEUUS_CORPSE_GIANT_INITIAL, "Cyclops", "Reanimated giant", "Obor"), @@ -153,6 +156,7 @@ enum Task SEA_SNAKES("Sea snakes", ItemID.HUNDRED_ILM_SNAKE_CORPSE), SHADES("Shades", ItemID.BLACKROBETOP, "Loar", "Phrin", "Riyl", "Asyn", "Fiyr", "Urium"), SHADOW_WARRIORS("Shadow warriors", ItemID.BLACK_FULL_HELM), + SHELLBANE_GRYPHON("Shellbane Gryphon", ItemID.GRYPHONBOSSPET_ADULT), SKELETAL_WYVERNS("Skeletal wyverns", ItemID.SLAYERGUIDE_SKELETALWYVERN), SKELETONS("Skeletons", ItemID.POH_SKELETON_GUARD, "Vet'ion", "Calvar'ion", "Skeletal Mystic"), SMOKE_DEVILS("Smoke devils", ItemID.CERT_GUIDE_ICON_DUMMY), @@ -177,7 +181,7 @@ enum Task WATERFIENDS("Waterfiends", ItemID.WATER_ORB), WEREWOLVES("Werewolves", ItemID.DAGGER_WOLFBANE, "Werewolf"), WOLVES("Wolves", ItemID.GREY_WOLF_FUR, "Wolf"), - WYRMS("Wyrms", ItemID.SLAYERGUIDE_WYRM, "Wyrmling"), + WYRMS("Wyrms", ItemID.SLAYERGUIDE_WYRM, "Wyrmling", "Strykewyrm"), ZILYANA("Commander Zilyana", ItemID.SARADOMINPET), ZOMBIES("Zombies", ItemID.TRICK_OR_TREAT_HEAD, "Undead", "Vorkath", "Zogre"), ZUK("TzKal-Zuk", ItemID.INFERNOPET_ZUK), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/GameTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/GameTimer.java index c38d3529fe4..a0f69c2408e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/GameTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/GameTimer.java @@ -103,6 +103,7 @@ enum GameTimer GOADING(ItemID._4DOSEGOADING, GameTimerImageType.ITEM, "Goading potion", false), PRAYER_REGENERATION(ItemID._4DOSE1PRAYER_REGENERATION, GameTimerImageType.ITEM, "Prayer regeneration", false), SURGE_POTION(ItemID._4DOSESURGE, GameTimerImageType.ITEM, "Surge potion", false), + BLIGHTED_OVERLOAD(ItemID.DEADMAN4DOSEOVERLOAD, GameTimerImageType.ITEM, "Blighted Overload", false), ; @Nullable diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java index 6c5160fbc1c..c26ca978b6e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java @@ -362,7 +362,8 @@ else if (nextPoisonTick - tickCount <= 0) } if ((event.getVarbitId() == VarbitID.NZONE_OVERLOAD_POTION_EFFECTS - || event.getVarbitId() == VarbitID.RAIDS_OVERLOAD_TIMER) && config.showOverload()) + || event.getVarbitId() == VarbitID.RAIDS_OVERLOAD_TIMER + || event.getVarbitId() == VarbitID.DEADMAN_OVERLOAD_POTION_EFFECTS) && config.showOverload()) { final int overloadVarb = event.getValue(); final int tickCount = client.getTickCount(); @@ -376,7 +377,16 @@ else if (nextOverloadRefreshTick - tickCount <= 0) nextOverloadRefreshTick = tickCount + OVERLOAD_TICK_LENGTH; } - GameTimer overloadTimer = client.getVarbitValue(VarbitID.RAIDS_CLIENT_INDUNGEON) == 1 ? OVERLOAD_RAID : OVERLOAD; + GameTimer overloadTimer; + if (event.getVarbitId() == VarbitID.DEADMAN_OVERLOAD_POTION_EFFECTS) + { + overloadTimer = BLIGHTED_OVERLOAD; + } + else + { + overloadTimer = client.getVarbitValue(VarbitID.RAIDS_CLIENT_INDUNGEON) == 1 ? OVERLOAD_RAID : OVERLOAD; + } + updateVarTimer(overloadTimer, overloadVarb, i -> nextOverloadRefreshTick - tickCount + (i - 1) * OVERLOAD_TICK_LENGTH); } @@ -705,6 +715,7 @@ else if (client.getGameState() == GameState.LOGGED_IN) { removeGameTimer(OVERLOAD); removeGameTimer(OVERLOAD_RAID); + removeGameTimer(BLIGHTED_OVERLOAD); removeGameTimer(SMELLING_SALTS); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PaymentTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PaymentTracker.java index 46731a69ae6..e90bb529972 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PaymentTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PaymentTracker.java @@ -31,9 +31,11 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.MenuAction; import net.runelite.api.ScriptID; +import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.ScriptPreFired; @@ -60,6 +62,8 @@ public class PaymentTracker "Alright, leave it with me. I'll look after that nursery for
    you." ); + private static final String FALADOR_DIARY_TEXT = "The gardener protects your tree for you, free of charge, as a token of gratitude for completing the Falador elite diary."; + private final Client client; private final ConfigManager configManager; private final FarmingWorld farmingWorld; @@ -120,6 +124,35 @@ else if ((action == MenuAction.NPC_THIRD_OPTION || action == MenuAction.NPC_FOUR } } + @Subscribe + public void onChatMessage(ChatMessage event) + { + if (event.getType() != ChatMessageType.GAMEMESSAGE || !event.getMessage().equals(FALADOR_DIARY_TEXT)) + { + return; + } + + FarmingPatch p = null; + for (FarmingRegion region : farmingWorld.getRegionsForLocation(client.getLocalPlayer().getWorldLocation())) + { + for (FarmingPatch patch : region.getPatches()) + { + if (region.getName().equals("Falador") && patch.getImplementation() == PatchImplementation.TREE) + { + p = patch; + } + } + } + + if (p == null || getProtectedState(p)) + { + return; + } + + log.debug("Detected patch protection for {}", p); + setProtectedState(p, true); + } + @Subscribe public void onScriptPreFired(ScriptPreFired scriptPreFired) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index 13b972f579b..e54cb22e7fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -563,6 +563,12 @@ public void onScriptPreFired(ScriptPreFired scriptPreFired) case ObjectID.FARMING_REDWOOD_TREE_PATCH_1_4: case ObjectID.FARMING_REDWOOD_TREE_PATCH_1_6: case ObjectID.FARMING_REDWOOD_TREE_PATCH_1_8: + + // sailing trees + case ObjectID.JATOBA_TREE_STUMP: + case ObjectID.CAMPHOR_TREE_UPDATE_STUMP: + case ObjectID.IRONWOOD_TREE_UPDATE_STUMP: + case ObjectID.ROSEWOOD_TREE_UPDATE_STUMP: { WorldPoint worldPoint = WorldPoint.fromCoord(locCoord); GameObject gameObject = findObject(worldPoint); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java index 9f2ecf24067..b080b9d5719 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPingOverlay.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2019, gregg1494 + * Copyright (c) 2026, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,6 +27,7 @@ import java.awt.Color; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics2D; import javax.inject.Inject; import net.runelite.api.Client; @@ -65,27 +67,36 @@ public Dimension render(Graphics2D graphics) return null; } - final int ping = worldHopperPlugin.getCurrentPing(); - if (ping < 0) - { - return null; - } - - final String text = ping + " ms"; - final int textWidth = graphics.getFontMetrics().stringWidth(text); - final int textHeight = graphics.getFontMetrics().getAscent() - graphics.getFontMetrics().getDescent(); + int xOffset = X_OFFSET; - // Adjust ping offset for logout button + // Adjust offset for logout button Widget logoutButton = client.getWidget(InterfaceID.ToplevelPreEoc.ICON10); - int xOffset = X_OFFSET; if (logoutButton != null && !logoutButton.isHidden()) { xOffset += logoutButton.getWidth(); } + final FontMetrics fm = graphics.getFontMetrics(); + final int textHeight = fm.getAscent() - fm.getDescent(); final int width = (int) client.getRealDimensions().getWidth(); - final Point point = new Point(width - textWidth - xOffset, textHeight + Y_OFFSET); - OverlayUtil.renderTextLocation(graphics, point, text, Color.YELLOW); + + final int ping = worldHopperPlugin.getCurrentPing(); + if (ping >= 0) + { + String text = ping + " ms"; + int textWidth = fm.stringWidth(text); + Point point = new Point(width - textWidth - xOffset, textHeight + Y_OFFSET); + OverlayUtil.renderTextLocation(graphics, point, text, Color.YELLOW); + xOffset += textWidth + fm.stringWidth(" "); + } + + int percRetransmit = worldHopperPlugin.retransmitCalculator.getRetransmitPercent(); + if (percRetransmit > 0) + { + String text = percRetransmit + "% loss"; + Point point = new Point(width - fm.stringWidth(text) - xOffset, textHeight + Y_OFFSET); + OverlayUtil.renderTextLocation(graphics, point, text, Color.RED); + } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index bf330c3c01e..7805e0cc9be 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Provides; import java.awt.image.BufferedImage; +import java.io.FileDescriptor; import java.time.Instant; import java.util.EnumSet; import java.util.HashMap; @@ -81,6 +82,8 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.worldhopper.ping.Ping; +import net.runelite.client.plugins.worldhopper.ping.RetransmitCalculator; +import net.runelite.client.plugins.worldhopper.ping.TCP_INFO_v0; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; @@ -163,6 +166,8 @@ public class WorldHopperPlugin extends Plugin private final Map storedPings = new HashMap<>(); + final RetransmitCalculator retransmitCalculator = new RetransmitCalculator(); + private final HotkeyListener previousKeyListener = new HotkeyListener(() -> config.previousKey()) { @Override @@ -445,13 +450,17 @@ else if (BEFORE_OPTIONS.contains(option)) @Subscribe public void onGameStateChanged(GameStateChanged gameStateChanged) { - // If the player has disabled the side bar plugin panel, do not update the UI - if (config.showSidebar() && gameStateChanged.getGameState() == GameState.LOGGED_IN) + if (gameStateChanged.getGameState() == GameState.LOGGED_IN) { if (lastWorld != client.getWorld()) { int newWorld = client.getWorld(); - panel.switchCurrentHighlight(newWorld, lastWorld); + // If the player has disabled the side bar plugin panel, do not update the UI + if (config.showSidebar()) + { + panel.switchCurrentHighlight(newWorld, lastWorld); + } + currentPing = -1; lastWorld = newWorld; } } @@ -505,8 +514,14 @@ private void updateList() { clientThread.invokeLater(() -> { - var locationEnum = client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState() ? client.getEnum(EnumID.WORLD_LOCATIONS) : null; + if (client.getGameState().getState() < GameState.LOGIN_SCREEN.getState()) + { + return false; + } + + var locationEnum = client.getEnum(EnumID.WORLD_LOCATIONS); SwingUtilities.invokeLater(() -> panel.populate(worldResult.getWorlds(), locationEnum)); + return true; }); } } @@ -821,7 +836,7 @@ private void pingInitialWorlds() for (World world : worldResult.getWorlds()) { - int ping = ping(world); + int ping = ping(world, false); SwingUtilities.invokeLater(() -> panel.updatePing(world.getId(), ping)); } @@ -862,7 +877,7 @@ private void pingNextWorld() return; } - int ping = ping(world); + int ping = ping(world, false); log.trace("Ping for world {} is: {}", world.getId(), ping); if (panel.isActive()) @@ -890,8 +905,26 @@ private void pingCurrentWorld() return; } - int ping = ping(currentWorld); - log.trace("Ping for current world is: {}", currentPing); + int ping = ping(currentWorld, true); + log.trace("Ping for current world is: {}", ping); + + FileDescriptor fd = client.getSocketFD(); + int rtt = -1; + if (fd != null) + { + TCP_INFO_v0 tcpInfo = Ping.getTcpInfo(fd); + if (tcpInfo != null) + { + rtt = (int) (tcpInfo.RttUs.longValue() / 1000L); + retransmitCalculator.record(tcpInfo); + } + } + + if (ping < 0) + { + ping = rtt; // use rtt for ping if icmp is blocked + storedPings.put(currentWorld.getId(), rtt); + } if (ping < 0) { @@ -916,9 +949,9 @@ Integer getStoredPing(World world) return storedPings.get(world.getId()); } - private int ping(World world) + private int ping(World world, boolean isCurrentWorld) { - int ping = Ping.ping(world); + int ping = Ping.ping(world, !isCurrentWorld); storedPings.put(world.getId(), ping); return ping; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTypeFilter.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTypeFilter.java index 6972a1c1d46..ad96367b214 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTypeFilter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTypeFilter.java @@ -94,7 +94,7 @@ boolean matches(Set types) @Override boolean matches(Set types) { - return types.contains(WorldType.HIGH_RISK); + return types.contains(WorldType.HIGH_RISK) && !types.contains(WorldType.PVP); } }, BOUNTY_HUNTER diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ping.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ping.java index cd542567d72..8c11174ab33 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ping.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ping.java @@ -29,7 +29,11 @@ import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.ptr.IntByReference; +import java.io.FileDescriptor; import java.io.IOException; +import java.lang.reflect.Field; import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -49,7 +53,13 @@ public class Ping private static short seq; + @Deprecated public static int ping(World world) + { + return ping(world, false); + } + + public static int ping(World world, boolean useTcpPing) { InetAddress inetAddress; try @@ -73,14 +83,19 @@ public static int ping(World world) switch (OSType.getOSType()) { case Windows: - return windowsPing(inetAddress); + int p = windowsPing(inetAddress); + if (p == -1 && useTcpPing) + { + p = tcpPing(inetAddress); + } + return p; case MacOS: case Linux: try { return icmpPing(inetAddress, OSType.getOSType() == OSType.MacOS); } - catch (Exception ex) + catch (IOException ex) { log.debug("error during icmp ping", ex); return tcpPing(inetAddress); @@ -269,4 +284,58 @@ private static int tcpPing(InetAddress inetAddress) throws IOException return (int) ((end - start) / 1000000L); } } + + public static TCP_INFO_v0 getTcpInfo(FileDescriptor fd) + { + if (OSType.getOSType() != OSType.Windows) + { + return null; + } + + int handle; + try + { + Field f = FileDescriptor.class.getDeclaredField("fd"); + f.setAccessible(true); + handle = f.getInt(fd); + } + catch (NoSuchFieldException | IllegalAccessException ex) + { + log.debug(null, ex); + return null; + } + + IntByReference tcpInfoVersion = new IntByReference(0); // Version 0 of TCP_INFO + TCP_INFO_v0 info = new TCP_INFO_v0(); + IntByReference bytesReturned = new IntByReference(); + + Ws2_32 winsock = Ws2_32.INSTANCE; + int rc; + try + { + rc = winsock.WSAIoctl( + new WinNT.HANDLE(Pointer.createConstant(handle)), + Ws2_32.SIO_TCP_INFO, + tcpInfoVersion.getPointer(), Integer.BYTES, + info.getPointer(), info.size(), + bytesReturned, + Pointer.NULL, + Pointer.NULL + ); + } + catch (UnsatisfiedLinkError ex) + { + // probably Windows 7 + log.debug("WSAIoctl()", ex); + return null; + } + if (rc != 0) + { + log.debug("WSAIoctl(SIO_TCP_INFO) error"); // WSAGetLastError() seems to always be 0? + return null; + } + + info.read(); + return info; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java new file mode 100644 index 00000000000..3ced1859c3e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/RetransmitCalculator.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2026, 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.client.plugins.worldhopper.ping; + +import java.util.Arrays; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class RetransmitCalculator +{ + private static final int SAMPLES = 16; + + private int index; + private long connectionTime; + private final long[] bytesOut = new long[SAMPLES]; + private final long[] bytesRetrans = new long[SAMPLES]; + private int loss; + + public void record(TCP_INFO_v0 info) + { + int nextIndex = index++ & (SAMPLES - 1); + + long connectionTime = info.ConnectionTimeMs.longValue(); + long out = info.BytesOut.longValue(); + long rt = info.BytesRetrans.longValue(); + + log.trace("rtt: {}us bytes out: {} retrans: {}", info.RttUs.longValue(), out, rt); + + if (connectionTime < this.connectionTime) + { + Arrays.fill(bytesOut, 0L); + Arrays.fill(bytesRetrans, 0L); + } + + this.connectionTime = connectionTime; + bytesOut[nextIndex] = out; + bytesRetrans[nextIndex] = rt; + + loss = computeRetransmitPercent(); + } + + private int computeRetransmitPercent() + { + int startIndex = (index - 1) & (SAMPLES - 1); + int endIndex = index & (SAMPLES - 1); + + long deltaOut = bytesOut[startIndex] - bytesOut[endIndex]; + long deltaRt = bytesRetrans[startIndex] - bytesRetrans[endIndex]; + + if (deltaOut == 0) + { + return 0; + } + + return (int) (deltaRt * 100L / deltaOut); + } + + public int getRetransmitPercent() + { + return loss; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java new file mode 100644 index 00000000000..a4596729087 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/TCP_INFO_v0.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2026, 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.client.plugins.worldhopper.ping; + +import com.sun.jna.Structure; +import com.sun.jna.platform.win32.WinDef; +import java.util.List; + +public class TCP_INFO_v0 extends Structure +{ + public WinDef.ULONG State; + public WinDef.ULONG Mss; + public WinDef.ULONGLONG ConnectionTimeMs; + public WinDef.BOOL TimestampsEnabled; + public WinDef.ULONG RttUs; + public WinDef.ULONG MinRttUs; + public WinDef.ULONG BytesInFlight; + public WinDef.ULONG Cwnd; + public WinDef.ULONG SndWnd; + public WinDef.ULONG RcvWnd; + public WinDef.ULONG RcvBuf; + public WinDef.ULONGLONG BytesOut; + public WinDef.ULONGLONG BytesIn; + public WinDef.ULONG BytesReordered; + public WinDef.ULONG BytesRetrans; + public WinDef.ULONG FastRetrans; + public WinDef.ULONG DupAcksIn; + public WinDef.ULONG TimeoutEpisodes; + public WinDef.UCHAR SynRetrans; + + @Override + protected List getFieldOrder() + { + return List.of( + "State", + "Mss", + "ConnectionTimeMs", + "TimestampsEnabled", + "RttUs", + "MinRttUs", + "BytesInFlight", + "Cwnd", + "SndWnd", + "RcvWnd", + "RcvBuf", + "BytesOut", + "BytesIn", + "BytesReordered", + "BytesRetrans", + "FastRetrans", + "DupAcksIn", + "TimeoutEpisodes", + "SynRetrans" + ); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java new file mode 100644 index 00000000000..1026f7fc859 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ws2_32.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2026, 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.client.plugins.worldhopper.ping; + +import com.sun.jna.Library; +import com.sun.jna.Native; +import com.sun.jna.Pointer; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.ptr.IntByReference; + +interface Ws2_32 extends Library +{ + Ws2_32 INSTANCE = Native.loadLibrary("Ws2_32", Ws2_32.class); + + int SIO_TCP_INFO = 0xD800_0027; + + int WSAIoctl(WinNT.HANDLE socket, int dwIoControlCode, Pointer lpvInBuffer, int cbInBuffer, Pointer lpvOutBuffer, int cbOutBuffer, IntByReference lpcbBytesReturned, Pointer lpOverlapped, Pointer lpCompletionRoutine); +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java index 0b209f21285..a2ebc2a877a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java @@ -62,11 +62,15 @@ enum FarmingPatchLocation ), CALQUAT("Calquat", new WorldPoint(2793, 3099, 0), - new WorldPoint(1365, 3035, 0) + new WorldPoint(1365, 3035, 0), + new WorldPoint(3125, 2403, 0) ), CELASTRUS_FRUIT_TREE("Celastrus/Fruit Tree", new WorldPoint(1242, 3755, 0) ), + CORAL("Coral", + new WorldPoint(3296, 8861, 0) + ), CRYSTAL_TREE("Crystal Tree", new WorldPoint(3292, 6120, 0) ), @@ -82,7 +86,8 @@ enum FarmingPatchLocation GRAPES("Grapes", new WorldPoint(1807, 3555, 0)), HARDWOOD("Hardwood", new WorldPoint(3707, 3838, 0), - new WorldPoint(1683, 2971, 0) + new WorldPoint(1683, 2971, 0), + new WorldPoint(2472, 2705, 0) ), HERB("Herb", new WorldPoint(3789, 2840, 0), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MooringLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MooringLocation.java index 57761953381..794acbd8edc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MooringLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MooringLocation.java @@ -50,7 +50,7 @@ public enum MooringLocation CAIRN_ISLE("Cairn Isle", 42, new WorldPoint(2749, 2951, 0)), CHINCHOMPA_ISLAND("Chinchompa Island", 42, new WorldPoint(1892, 3429, 0)), SUNSET_COAST("Sunset Coast", 44, new WorldPoint(1511, 2975, 0)), - REMOTE_ISLAND("Remote Island", 45, new WorldPoint(2791, 2603, 0)), + REMOTE_ISLAND("Remote Island", 45, new WorldPoint(2971, 2603, 0)), THE_SUMMER_SHORE("The Summer Shore", 45, new WorldPoint(3174, 2367, 0)), THE_LITTLE_PEARL("The Little Pearl", 45, new WorldPoint(3354, 2216, 0)), ALDARIN("Aldarin", 46, new WorldPoint(1452, 2970, 0)), @@ -75,7 +75,7 @@ public enum MooringLocation LLEDRITH_ISLAND("Lledrith Island", 66, new WorldPoint(2097, 3188, 0)), DEEPFIN_POINT("Deepfin Point", 67, new WorldPoint(1923, 2758, 0)), JATIZSO("Jatizso", 68, new WorldPoint(2412, 3780, 0)), - NETIZNOT("Netiznot", 68, new WorldPoint(2308, 3783, 0)), + NEITIZNOT("Neitiznot", 68, new WorldPoint(2308, 3783, 0)), RAINBOWS_END("Rainbow's End", 69, new WorldPoint(2344, 2270, 0)), PRIFDDINAS("Prifddinas", 70, new WorldPoint(2158, 3324, 0)), SUNBLEAK_ISLAND("Sunbleak Island", 72, new WorldPoint(2189, 2327, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java index 083b2b15959..2abd402748d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java @@ -43,6 +43,9 @@ enum RareTreeLocation new WorldPoint(3510, 3073, 0), new WorldPoint(3440, 2789, 0), + // Great Conch + new WorldPoint(3129, 2446, 0), + // Mos Le'Harmless new WorldPoint(3832, 3067, 0), @@ -56,6 +59,9 @@ enum RareTreeLocation // Prifddinas new WorldPoint(3309, 6123, 0), + // Shimmering Atoll + new WorldPoint(1540, 2802, 0), + // Varlamore new WorldPoint(1694, 2989, 0), new WorldPoint(1363, 3143, 0), @@ -124,6 +130,9 @@ enum RareTreeLocation // Prifddinas new WorldPoint(3301, 6129, 0), + // Shimmering Atoll + new WorldPoint(1586, 2786, 0), + // Tlati Rainforest new WorldPoint(1249, 3077, 0), new WorldPoint(1263, 3002, 0)), @@ -226,11 +235,34 @@ enum RareTreeLocation new WorldPoint(2147, 2972, 0), new WorldPoint(2165, 2863, 0), + // Tear of the Soul + new WorldPoint(2340, 2762, 0), + + // Shipyard + new WorldPoint(2077, 2707, 0), + + // Deepfin Point + new WorldPoint(1950, 2786, 0), + + // Laguna Aurorae + new WorldPoint(1224, 2781, 0), + + // Great Conch + new WorldPoint(3276, 2339, 0), + // Zanaris new WorldPoint(2412, 4464, 0), new WorldPoint(2465, 4427, 0), new WorldPoint(2491, 4426, 0)), + YEW_JATOBA("Yew/Jatoba trees", 60, + // Great Conch + new WorldPoint(3144, 2520, 0)), + + WILLOW_YEW("Willow/Yew trees", 60, + // Anglers' Retreat + new WorldPoint(2476, 2707, 0)), + MAPLE_YEW("Maple/Yew trees", 60, // Feldip Hills new WorldPoint(2476, 2893, 0), @@ -238,6 +270,11 @@ enum RareTreeLocation // Aldarin new WorldPoint(1379, 2876, 0), + // Shipyard + new WorldPoint(2086, 2737, 0), + new WorldPoint(2074, 2723, 0), + new WorldPoint(2061, 2720, 0), + // Auburnvale new WorldPoint(1358, 3302, 0)), @@ -254,6 +291,19 @@ enum RareTreeLocation new WorldPoint(3682, 3775, 0), new WorldPoint(3682, 3758, 0)), + CAMPHOR("Camphor tree", 66, + // Great Conch + new WorldPoint(3192, 2487, 0), + new WorldPoint(3204, 2481, 0)), + + CAMPHOR_MAHOGANY("Camphor/Mahogany trees", 66, + // Great Conch + new WorldPoint(3245, 2397, 0)), + + CAMPHOR_JATOBA("Camphor/Jatoba trees", 66, + // Great Conch + new WorldPoint(3109, 2413, 0)), + MAGIC("Magic tree", 75, // Zeah new WorldPoint(1373, 3821, 0), @@ -299,13 +349,32 @@ enum RareTreeLocation // Feldip Hills new WorldPoint(2443, 2845, 0), + // Dognose Island + new WorldPoint(3043, 2640, 0), + + // Lledrith Island + new WorldPoint(2090, 3178, 0), + // Wilderness new WorldPoint(3175, 3931, 0)), + IRONWOOD("Ironwood tree", 80, + // Sunbleak Island + new WorldPoint(2223, 2341, 0), + new WorldPoint(2221, 2322, 0), + new WorldPoint(2205, 2321, 0)), + REDWOOD("Redwood tree", 90, // Zeah new WorldPoint(1569, 3493, 0), - new WorldPoint(1569, 3483, 0)); + new WorldPoint(1569, 3483, 0)), + + ROSEWOOD("Rosewood tree", 92, + // Drumstick Isle + new WorldPoint(2152, 3540, 0), + new WorldPoint(2136, 3546, 0), + new WorldPoint(2149, 3557, 0)), + ; private final String tooltip; private final WorldPoint[] locations; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java index 4db8f34dabf..20646032186 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java @@ -116,7 +116,7 @@ enum TransportationPointLocation SMALL_BOAT_KASTORI("Rowboat to Tal Teklan/Gloomthorn Trail", new WorldPoint(1389, 3074, 0)), OGRE_BOAT_FELDIP("Ogre Boat to Karamja", new WorldPoint(2653, 2964, 0), new WorldPoint(2757, 3085, 0)), OGRE_BOAT_KARAMJA("Ogre Boat to Feldip", new WorldPoint(2757, 3085, 0), new WorldPoint(2653, 2964, 0)), - ROW_BOAT_CONCH_NORTH("Rowboat to The Summer Short/Eastern Coast", new WorldPoint(3196, 2532, 0), new WorldPoint(3264, 2462, 0)), + ROW_BOAT_CONCH_NORTH("Rowboat to The Summer Shore/Eastern Coast", new WorldPoint(3196, 2532, 0), new WorldPoint(3264, 2462, 0)), ROW_BOAT_CONCH_EAST("Rowboat to The Summer Shore/Northern Coast", new WorldPoint(3264, 2462, 0), new WorldPoint(3190, 2371, 0)), ROW_BOAT_CONCH_SUMMER_SHORE("Rowboat to The Northern Coast/Eastern Coast", new WorldPoint(3190, 2371, 0), new WorldPoint(3196, 2532, 0)), ROW_BOAT_TEAR_OF_THE_SOUL("Rowboat to Isle of Souls", new WorldPoint(2320, 2780, 0), new WorldPoint(2291, 2796, 0)), 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 563f29019af..02b2cedf6f9 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 @@ -27,7 +27,6 @@ package net.runelite.client.rs; import com.google.common.base.Strings; -import java.applet.Applet; import java.io.IOException; import java.util.Map; import java.util.function.Supplier; @@ -193,7 +192,7 @@ private Client loadClient(RSConfig config) throws ClassNotFoundException, Illega .loadClass(initialClass); Client rs = (Client) clientClass.newInstance(); - ((Applet) rs).setStub(new RSAppletStub(config, runtimeConfigLoader)); + rs.setConfiguration(new RSAppletStub(config, runtimeConfigLoader)); log.info("injected-client {}", rs.getBuildID()); 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 327526ba4fd..54adf8c5818 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 @@ -25,42 +25,22 @@ */ package net.runelite.client.rs; -import java.applet.Applet; -import java.applet.AppletContext; -import java.applet.AppletStub; -import java.applet.AudioClip; -import java.awt.Image; -import java.io.IOException; -import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.util.Enumeration; -import java.util.Iterator; import javax.swing.SwingUtilities; import lombok.RequiredArgsConstructor; +import net.runelite.api.ClientConfiguration; import net.runelite.client.RuntimeConfig; import net.runelite.client.RuntimeConfigLoader; import net.runelite.client.ui.FatalErrorDialog; import net.runelite.client.util.LinkBrowser; @RequiredArgsConstructor -class RSAppletStub implements AppletStub +class RSAppletStub implements ClientConfiguration { private final RSConfig config; private final RuntimeConfigLoader runtimeConfigLoader; - @Override - public boolean isActive() - { - return true; - } - - @Override - public URL getDocumentBase() - { - return getCodeBase(); - } - @Override public URL getCodeBase() { @@ -81,129 +61,58 @@ public String getParameter(String name) } @Override - public AppletContext getAppletContext() + public void onError(String code) { - return new AppletContext() + try { - @Override - public AudioClip getAudioClip(URL url) - { - return null; - } - - @Override - public Image getImage(URL url) - { - return null; - } - - @Override - public Applet getApplet(String name) - { - return null; - } - - @Override - public Enumeration getApplets() - { - return null; - } - - @Override - public void showDocument(URL url) - { - if (url.getPath().startsWith("/error_game_")) - { - try - { - RuntimeConfig rtc = runtimeConfigLoader.get(); - if (rtc.showOutageMessage()) - { - return; - } - } - catch (Exception e) - { - } - - String code = url.getPath() - .replace("/", "") - .replace(".ws", ""); - - if (code.equals("error_game_js5connect")) - { - SwingUtilities.invokeLater(() -> - new FatalErrorDialog("RuneLite is unable to connect to the RuneScape update server. " + - "RuneScape might be offline for an update, check the game status page. If the game " + - "is online, then either a firewall is blocking RuneLite, or you don't have internet access.") - .setTitle("RuneLite", "Unable to connect to update server") - .addButton("Game Status", () -> LinkBrowser.browse("https://secure.runescape.com/m=news/game-status-information-centre?oldschool=1")) - .open()); - } - else if (code.equals("error_game_js5io")) - { - SwingUtilities.invokeLater(() -> - new FatalErrorDialog("OldSchool RuneScape is unable to retrieve updates from its update server. " + - "This is likely due to a firewall blocking the RuneScape server. Try disabling your firewall, or use " + - "a different network.") - .setTitle("RuneLite", "Unable to connect to update server") - .addHelpButtons() - .open()); - } - else if (code.equals("error_game_crash")) - { - SwingUtilities.invokeLater(() -> - new FatalErrorDialog("OldSchool RuneScape has crashed. Crashes are most commonly caused by plugin hub plugins, " + - "but can also be caused by RuneLite or Jagex client bugs. If you receive this message commonly, try playing in " + - "safe mode to eliminate the potential of plugins causing the crash. The client log file will contain additional " + - "information about the crash.") - .setTitle("RuneLite", "OldSchool RuneScape has crashed") - .addHelpButtons() - .open()); - } - else - { - SwingUtilities.invokeLater(() -> - new FatalErrorDialog("OldSchool RuneScape has crashed with the message: " + code) - .setTitle("RuneLite", "OldSchool RuneScape has crashed") - .addHelpButtons() - .open()); - } - } - } - - @Override - public void showDocument(URL url, String target) + RuntimeConfig rtc = runtimeConfigLoader.get(); + if (rtc.showOutageMessage()) { - showDocument(url); + return; } + } + catch (Exception e) + { + } - @Override - public void showStatus(String status) - { - } - - @Override - public void setStream(String key, InputStream stream) throws IOException - { - } - - @Override - public InputStream getStream(String key) - { - return null; - } - - @Override - public Iterator getStreamKeys() - { - return null; - } - }; - } - - @Override - public void appletResize(int width, int height) - { + if (code.equals("error_game_js5connect")) + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("RuneLite is unable to connect to the RuneScape update server. " + + "RuneScape might be offline for an update, check the game status page. If the game " + + "is online, then either a firewall is blocking RuneLite, or you don't have internet access.") + .setTitle("RuneLite", "Unable to connect to update server") + .addButton("Game Status", () -> LinkBrowser.browse("https://secure.runescape.com/m=news/game-status-information-centre?oldschool=1")) + .open()); + } + else if (code.equals("error_game_js5io")) + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("OldSchool RuneScape is unable to retrieve updates from its update server. " + + "This is likely due to a firewall blocking the RuneScape server. Try disabling your firewall, or use " + + "a different network.") + .setTitle("RuneLite", "Unable to connect to update server") + .addHelpButtons() + .open()); + } + else if (code.equals("error_game_crash")) + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("OldSchool RuneScape has crashed. Crashes are most commonly caused by plugin hub plugins, " + + "but can also be caused by RuneLite or Jagex client bugs. If you receive this message commonly, try playing in " + + "safe mode to eliminate the potential of plugins causing the crash. The client log file will contain additional " + + "information about the crash.") + .setTitle("RuneLite", "OldSchool RuneScape has crashed") + .addHelpButtons() + .open()); + } + else + { + SwingUtilities.invokeLater(() -> + new FatalErrorDialog("OldSchool RuneScape has crashed with the message: " + code) + .setTitle("RuneLite", "OldSchool RuneScape has crashed") + .addHelpButtons() + .open()); + } } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index f1e947e6c1f..60181428de9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -747,8 +747,14 @@ else if (position == OverlayPosition.TOOLTIP) return; } - final Dimension dimension = MoreObjects.firstNonNull(overlayDimension, new Dimension()); - overlay.getBounds().setSize(dimension); + if (overlayDimension != null) + { + overlay.getBounds().setSize(overlayDimension); + } + else + { + overlay.getBounds().setSize(0, 0); + } } private OverlayPosition getCorrectedOverlayPosition(final Overlay overlay) @@ -906,20 +912,30 @@ private OverlayBounds buildSnapCorners() */ private Point clampOverlayLocation(int overlayX, int overlayY, int overlayWidth, int overlayHeight, Overlay overlay) { + int px, py, pw, ph; Rectangle parentBounds = overlay.getParentBounds(); if (parentBounds == null || parentBounds.isEmpty()) { // If no bounds are set, use the full client bounds Dimension dim = client.getRealDimensions(); - parentBounds = new Rectangle(0, 0, dim.width, dim.height); + px = py = 0; + pw = dim.width; + ph = dim.height; + } + else + { + px = parentBounds.x; + py = parentBounds.y; + pw = parentBounds.width; + ph = parentBounds.height; } // Constrain overlay position to be within the parent bounds return new Point( - Ints.constrainToRange(overlayX, parentBounds.x, - Math.max(parentBounds.x, parentBounds.x + parentBounds.width - overlayWidth)), - Ints.constrainToRange(overlayY, parentBounds.y, - Math.max(parentBounds.y, parentBounds.y + parentBounds.height - overlayHeight)) + Ints.constrainToRange(overlayX, px, + Math.max(px, px + pw - overlayWidth)), + Ints.constrainToRange(overlayY, py, + Math.max(py, py + ph - overlayHeight)) ); } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 8c001f25492..f34bd50c554 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -202,7 +202,7 @@ private Rectangle getParentBounds(final Widget widget) { if (widget == null || widget.isHidden()) { - parentBounds.setBounds(new Rectangle()); + parentBounds.setBounds(0, 0, 0, 0); return parentBounds; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java index e8e341de50b..bb14510775a 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java @@ -99,7 +99,7 @@ public Dimension render(Graphics2D graphics) textComponent.setColor(color); textComponent.setOutline(outline); textComponent.setText(text); - textComponent.setPosition(new Point(baseX + ((size - metrics.stringWidth(text)) / 2), baseY + size - SEPARATOR)); + textComponent.setPosition(baseX + ((size - metrics.stringWidth(text)) / 2), baseY + size - SEPARATOR); textComponent.render(graphics); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java index 02ff566f4e1..58b675d7895 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java @@ -105,7 +105,7 @@ public Dimension render(Graphics2D graphics) if (i < leftSplitLines.length) { final String leftText = leftSplitLines[i]; - textComponent.setPosition(new Point(x, y)); + textComponent.setPosition(x, y); textComponent.setText(leftText); textComponent.setColor(leftColor); textComponent.setFont(leftFont); @@ -115,7 +115,7 @@ public Dimension render(Graphics2D graphics) if (i < rightSplitLines.length) { final String rightText = rightSplitLines[i]; - textComponent.setPosition(new Point(x + preferredSize.width - getLineWidth(rightText, rfm), y)); + textComponent.setPosition(x + preferredSize.width - getLineWidth(rightText, rfm), y); textComponent.setText(rightText); textComponent.setColor(rightColor); textComponent.setFont(rightFont); @@ -133,7 +133,7 @@ public Dimension render(Graphics2D graphics) if (!left.isEmpty()) { - textComponent.setPosition(new Point(x, y)); + textComponent.setPosition(x, y); textComponent.setText(left); textComponent.setColor(leftColor); textComponent.setFont(leftFont); @@ -142,7 +142,7 @@ public Dimension render(Graphics2D graphics) if (!right.isEmpty()) { - textComponent.setPosition(new Point(x + preferredSize.width - rightFullWidth, y)); + textComponent.setPosition(x + preferredSize.width - rightFullWidth, y); textComponent.setText(right); textComponent.setColor(rightColor); textComponent.setFont(rightFont); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java index 8ad38171ae0..6ef5b0eac06 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java @@ -119,7 +119,7 @@ public Dimension render(Graphics2D graphics) graphics.fillRect(barX, barY, progressFill, height); final TextComponent textComponent = new TextComponent(); - textComponent.setPosition(new Point(progressTextX, progressTextY)); + textComponent.setPosition(progressTextX, progressTextY); textComponent.setColor(fontColor); textComponent.setText(textToWrite); textComponent.render(graphics); @@ -127,7 +127,7 @@ public Dimension render(Graphics2D graphics) if (leftLabel != null) { final TextComponent leftTextComponent = new TextComponent(); - leftTextComponent.setPosition(new Point(barX + SIDE_LABEL_OFFSET, progressTextY)); + leftTextComponent.setPosition(barX + SIDE_LABEL_OFFSET, progressTextY); leftTextComponent.setColor(fontColor); leftTextComponent.setText(leftLabel); leftTextComponent.render(graphics); @@ -136,7 +136,7 @@ public Dimension render(Graphics2D graphics) if (rightLabel != null) { final TextComponent leftTextComponent = new TextComponent(); - leftTextComponent.setPosition(new Point(barX + width - metrics.stringWidth(rightLabel) - SIDE_LABEL_OFFSET, progressTextY)); + leftTextComponent.setPosition(barX + width - metrics.stringWidth(rightLabel) - SIDE_LABEL_OFFSET, progressTextY); leftTextComponent.setColor(fontColor); leftTextComponent.setText(rightLabel); leftTextComponent.render(graphics); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java index 28b5fc6809f..1857e9991e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java @@ -36,21 +36,36 @@ import lombok.Setter; import net.runelite.client.ui.overlay.RenderableEntity; -@Setter public class TextComponent implements RenderableEntity { private static final Pattern COL_TAG_PATTERN = Pattern.compile(""); + @Setter private String text; - private Point position = new Point(); + private int positionX; + private int positionY; + @Setter private Color color = Color.WHITE; + @Setter private boolean outline; /** * The text font. */ + @Setter @Nullable private Font font; + public void setPosition(Point position) + { + setPosition(position.x, position.y); + } + + public void setPosition(int x, int y) + { + this.positionX = x; + this.positionY = y; + } + @Override public Dimension render(Graphics2D graphics) { @@ -73,7 +88,7 @@ public Dimension render(Graphics2D graphics) String s = text.substring(idx, matcher.start()); idx = matcher.end(); - renderText(graphics, textColor, position.x + width, position.y, s); + renderText(graphics, textColor, positionX + width, positionY, s); width += fontMetrics.stringWidth(s); textColor = Color.decode("#" + color); @@ -81,7 +96,7 @@ public Dimension render(Graphics2D graphics) { String s = text.substring(idx); - renderText(graphics, textColor, position.x + width, position.y, s); + renderText(graphics, textColor, positionX + width, positionY, s); width += fontMetrics.stringWidth(s); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java index fa4c9bc3bb9..be38fee7623 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java @@ -62,9 +62,9 @@ public Dimension render(Graphics2D graphics) final TextComponent titleComponent = new TextComponent(); titleComponent.setText(text); titleComponent.setColor(color); - titleComponent.setPosition(new Point( + titleComponent.setPosition( baseX + ((preferredSize.width - metrics.stringWidth(text)) / 2), - baseY + metrics.getHeight())); + baseY + metrics.getHeight()); final Dimension rendered = titleComponent.render(graphics); final Dimension dimension = new Dimension(preferredSize.width, rendered.height); bounds.setLocation(preferredLocation); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java index b181494975d..da1bae0e14f 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java @@ -105,7 +105,7 @@ public Dimension render(Graphics2D graphics) textComponent.setColor(nextColor); String text = line.substring(begin, j); textComponent.setText(text); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(lineX, textY + (i + 1) * textHeight - textDescent); textComponent.render(graphics); lineX += metrics.stringWidth(text); @@ -143,7 +143,7 @@ else if (subLine.startsWith("img=")) textComponent.setColor(nextColor); String text = line.substring(begin, j + 1); textComponent.setText(text); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(lineX, textY + (i + 1) * textHeight - textDescent); textComponent.render(graphics); lineX += metrics.stringWidth(text); @@ -158,7 +158,7 @@ else if (subLine.startsWith("img=")) final TextComponent textComponent = new TextComponent(); textComponent.setColor(nextColor); textComponent.setText(line.substring(begin)); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(lineX, textY + (i + 1) * textHeight - textDescent); textComponent.render(graphics); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java index 1b9e90ba78e..f7d0a6a4b6f 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java @@ -1092,7 +1092,10 @@ private void drawOutline(DecorativeObject decorativeObject, int outlineWidth, Co if (model != null) { // Offset is not used for the second model - drawModelOutline(decorativeObject.getWorldView(), model, decorativeObject.getX(), decorativeObject.getY(), decorativeObject.getZ() - renderable2.getAnimationHeightOffset(), + drawModelOutline(decorativeObject.getWorldView(), model, + decorativeObject.getX() + decorativeObject.getXOffset2(), + decorativeObject.getY() + decorativeObject.getYOffset2(), + decorativeObject.getZ() - renderable2.getAnimationHeightOffset(), 0, outlineWidth, color, feather); } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java index fe8902d6637..0e8439466e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java @@ -77,6 +77,18 @@ public void execute(Runnable command) service.execute(monitor(command)); } + @Override + public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) + { + return service.scheduleAtFixedRate(monitor(command), initialDelay, period, unit); + } + + @Override + public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) + { + return service.scheduleWithFixedDelay(monitor(command), initialDelay, delay, unit); + } + // Everything below is direct proxy to provided executor service @Override @@ -144,16 +156,4 @@ public ScheduledFuture schedule(Callable callable, long delay, TimeUni { return service.schedule(callable, delay, unit); } - - @Override - public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) - { - return service.scheduleAtFixedRate(command, initialDelay, period, unit); - } - - @Override - public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) - { - return service.scheduleWithFixedDelay(command, initialDelay, delay, unit); - } } diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 9041037e8b6..783391818c0 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -1620,6 +1620,10 @@ 1536, 1537 ], + "steel nails": [ + 1539, + 32923 + ], "antidragon shield": [ 1540, 8282, @@ -7971,7 +7975,11 @@ 29816, 29818, 29820, - 29822 + 29822, + 33066, + 33068, + 33070, + 33072 ], "slayer ring": [ 11866, @@ -8454,7 +8462,9 @@ ], "toxic staff": [ 12902, - 12904 + 12904, + 33035, + 33036 ], "antivenom": [ 12905, @@ -10301,7 +10311,9 @@ 27765, 27767, 27777, - 27779 + 27779, + 33031, + 33033 ], "crystal body": [ 23889, @@ -10323,7 +10335,9 @@ 27757, 27759, 27769, - 27771 + 27771, + 33023, + 33025 ], "crystal legs": [ 23892, @@ -10345,7 +10359,9 @@ 27761, 27763, 27773, - 27775 + 27775, + 33027, + 33029 ], "crystal staff": [ 23898, @@ -10986,7 +11002,8 @@ 25892, 25894, 25896, - 27187 + 27187, + 33021 ], "ghommals hilt": [ 25926, @@ -11943,7 +11960,7 @@ 28495, 28496 ], - "sigil of the wellfed": [ + "sigil of the well fed": [ 28498, 28499 ], @@ -11995,11 +12012,9 @@ 28547, 28549 ], - "quest lamp": [ - 28551, - 28552, - 28553, - 28554 + "mahjarrat quest lamp": [ + 28554, + 33007 ], "warped sceptre": [ 28583, @@ -12050,6 +12065,10 @@ 28733, 28745 ], + "ruinous powers": [ + 28775, + 33010 + ], "trailblazer reloaded relic hunter armour set": [ 28777, 28780, @@ -12303,7 +12322,7 @@ 29651, 29652 ], - "sigil of rampart": [ + "sigil of the rampart": [ 29654, 29655 ], @@ -12311,11 +12330,11 @@ 29657, 29658 ], - "sigil of lithe": [ + "sigil of litheness": [ 29660, 29661 ], - "sigil of adroit": [ + "sigil of the adroit": [ 29663, 29664 ], @@ -12327,11 +12346,11 @@ 29669, 29670 ], - "sigil of swashbuckler": [ + "sigil of the swashbuckler": [ 29672, 29673 ], - "sigil of gunslinger": [ + "sigil of the gunslinger": [ 29675, 29676 ], @@ -12587,10 +12606,18 @@ 30334, 30337 ], + "the dogsword": [ + 30367, + 33038 + ], "drygore blowpipe": [ 30373, 30374 ], + "thunder khopesh": [ + 30388, + 33041 + ], "natures reprisal": [ 30390, 30392 @@ -12989,7 +13016,8 @@ 32167, 32168 ], - "mahogany mast and linen sails": [ + "mahogany mast and canvas sails": [ + 32169, 32170, 32171 ], @@ -13141,7 +13169,10 @@ 32638, 32657, 32699, - 32725 + 32725, + 32936, + 32964, + 32972 ], "crate of jewellery": [ 32441, @@ -13151,7 +13182,10 @@ 32642, 32660, 32682, - 32784 + 32784, + 32944, + 32969, + 32970 ], "crate of lead ore": [ 32442, @@ -13182,7 +13216,8 @@ 32646, 32703, 32773, - 32801 + 32801, + 32983 ], "crate of spears": [ 32447, @@ -13195,7 +13230,9 @@ 32519, 32613, 32693, - 32764 + 32764, + 32924, + 32947 ], "crate of bananas": [ 32449, @@ -13224,7 +13261,23 @@ 32724, 32738, 32752, - 32760 + 32760, + 32937, + 32938, + 32939, + 32942, + 32958, + 32959, + 32961, + 32962, + 32973, + 32974, + 32976, + 32979, + 32980, + 32988, + 32989, + 32991 ], "crate of gold ore": [ 32453, @@ -13242,7 +13295,8 @@ 32626, 32647, 32665, - 32687 + 32687, + 32941 ], "crate of runes": [ 32459, @@ -13251,19 +13305,23 @@ 32688, 32731, 32756, - 32803 + 32803, + 32990, + 32994 ], "crate of sand": [ 32461, 32549, - 32605 + 32605, + 32940 ], "crate of silk": [ 32462, 32497, 32602, 32668, - 32718 + 32718, + 32975 ], "crate of spices": [ 32463, @@ -13272,7 +13330,8 @@ 32690, 32719, 32733, - 32776 + 32776, + 32943 ], "crate of bear meat": [ 32464, @@ -13304,7 +13363,8 @@ 32570, 32639, 32658, - 32782 + 32782, + 32960 ], "crate of machinery parts": [ 32473, @@ -13313,7 +13373,8 @@ "crate of rum": [ 32474, 32528, - 32774 + 32774, + 32997 ], "crate of sandstone": [ 32475, @@ -13346,15 +13407,21 @@ 32600, 32628 ], + "crate of bait": [ + 32483, + 32945 + ], "crate of coconuts": [ 32486, - 32678 + 32678, + 32946 ], "crate of javelins": [ 32491, 32538, 32754, - 32783 + 32783, + 32998 ], "crate of karambwans": [ 32493, @@ -13364,7 +13431,8 @@ 32494, 32510, 32772, - 32789 + 32789, + 32948 ], "crate of seeds": [ 32496, @@ -13373,7 +13441,8 @@ 32667, 32689, 32704, - 32804 + 32804, + 32981 ], "crate of astral runes": [ 32500, @@ -13385,7 +13454,9 @@ 32501, 32634, 32675, - 32710 + 32710, + 32967, + 32968 ], "crate of coral": [ 32502, @@ -13408,7 +13479,9 @@ 32702, 32716, 32729, - 32800 + 32800, + 32985, + 33000 ], "crate of ship parts": [ 32514, @@ -13417,7 +13490,8 @@ 32732, 32746, 32757, - 32807 + 32807, + 32996 ], "crate of staffs": [ 32516, @@ -13437,7 +13511,14 @@ 32557, 32575, 32692, - 32707 + 32707, + 32978, + 32982, + 32984 + ], + "crate of alpaca wool": [ + 32532, + 32952 ], "crate of fabrics": [ 32534, @@ -13446,7 +13527,8 @@ 32654, 32696, 32737, - 32759 + 32759, + 32954 ], "crate of granite": [ 32537, @@ -13462,7 +13544,12 @@ 32661, 32684, 32715, - 32798 + 32798, + 32949, + 32951, + 32956, + 32977, + 32986 ], "crate of mahogany logs": [ 32541, @@ -13476,7 +13563,14 @@ 32624, 32645, 32743, - 32755 + 32755, + 32950, + 32953, + 32955, + 32957, + 32966, + 32971, + 32992 ], "crate of warhammers": [ 32546, @@ -13531,11 +13625,16 @@ 32610, 32717, 32790, - 32802 + 32802, + 32963, + 32987, + 32999, + 33001 ], "crate of cocktails": [ 32590, - 32750 + 32750, + 32995 ], "crate of honey": [ 32594, @@ -13556,16 +13655,22 @@ ], "crate of swamp paste": [ 32630, - 32778 + 32778, + 32965 ], "crate of teak logs": [ 32671, - 32747 + 32747, + 32993 ], "crate of shields": [ 32705, 32793 ], + "crate of clothes": [ + 32711, + 32925 + ], "crate of battleaxes": [ 32722, 32766 @@ -13573,5 +13678,33 @@ "crate of maces": [ 32761, 32799 + ], + "trinket of fortuity": [ + 33047, + 33050 + ], + "sigil of the gods": [ + 33053, + 33054 + ], + "sigil of conclusion": [ + 33055, + 33056 + ], + "sigil of automation": [ + 33057, + 33058 + ], + "sigil of eternal belief": [ + 33059, + 33060 + ], + "sigil of efficiency": [ + 33061, + 33062 + ], + "facility bottle": [ + 33074, + 33077 ] } \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/tournament.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/tournament.png index 6d74c4f5797..4a2128fa999 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/tournament.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/tournament.png differ diff --git a/runelite-client/src/main/scripts/BankMainBuild.hash b/runelite-client/src/main/scripts/BankMainBuild.hash index b073bcae513..0ad6262f609 100644 --- a/runelite-client/src/main/scripts/BankMainBuild.hash +++ b/runelite-client/src/main/scripts/BankMainBuild.hash @@ -1 +1 @@ -7C5AA581E28A0D5C2F402A968C596C2AE6717EFB51AC15530F6D74AFA209FEC9 \ No newline at end of file +1E188C47BE23BDDA6760D0F9E0F5F718657668683D350283CD5094FCB2ECBF97 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/BankMainBuild.rs2asm b/runelite-client/src/main/scripts/BankMainBuild.rs2asm index bfc4b89847f..5cefcb3fead 100644 --- a/runelite-client/src/main/scripts/BankMainBuild.rs2asm +++ b/runelite-client/src/main/scripts/BankMainBuild.rs2asm @@ -1,5 +1,5 @@ .id 277 -.int_arg_count 17 +.int_arg_count 20 .obj_arg_count 0 get_varbit 5102 iconst 1 @@ -7,421 +7,493 @@ jump LABEL8 LABEL4: iconst 0 - iload 9 + iload 10 if_sethide jump LABEL13 LABEL8: iconst 1 - iload 9 + iload 10 if_sethide - iload 11 + iload 12 invoke 41 LABEL13: - get_varbit 5364 + iload 10 + invoke 9219 + iconst 0 + istore 20 + get_varbit 19721 iconst 1 - if_icmpeq LABEL17 + if_icmpeq LABEL21 jump LABEL24 -LABEL17: +LABEL21: iconst 1 - iload 14 - if_sethide - iconst 1 - iload 15 - if_sethide - jump LABEL30 + istore 20 + jump LABEL26 LABEL24: iconst 0 - iload 14 - if_sethide - iconst 0 + istore 20 +LABEL26: + iload 20 iload 15 if_sethide -LABEL30: + iload 20 + iload 16 + if_sethide get_varbit 8352 iconst 1 - if_icmpeq LABEL34 - jump LABEL41 -LABEL34: - iconst 1 - iload 12 - if_sethide + if_icmpeq LABEL36 + jump LABEL39 +LABEL36: iconst 1 + istore 20 + jump LABEL41 +LABEL39: + iconst 0 + istore 20 +LABEL41: + iload 20 iload 13 if_sethide - jump LABEL47 -LABEL41: - iconst 0 - iload 12 + iload 20 + iload 14 if_sethide + get_varbit 5364 + iconst 1 + if_icmpeq LABEL51 + jump LABEL54 +LABEL51: + iconst 1 + istore 20 + jump LABEL56 +LABEL54: iconst 0 - iload 13 + istore 20 +LABEL56: + iload 20 + iload 17 + if_sethide + iload 20 + iload 18 if_sethide -LABEL47: iconst 3368 - iload 16 + iload 19 iconst 1141 iconst 1 sconst "iY" - iload 16 + iload 19 if_setonvartransmit - iconst 441 + iconst 439 iconst 0 iconst 0 iconst 0 - iload 14 + iload 17 if_setposition - iconst 444 + iconst 442 iconst 7 iconst 0 iconst 0 - iload 15 + iload 18 if_setposition - get_varbit 8352 - iconst 1 - if_icmpeq LABEL70 - jump LABEL97 -LABEL70: - get_varbit 5364 - iconst 0 - if_icmpeq LABEL74 - jump LABEL97 -LABEL74: - iload 12 - if_getx - iload 12 - if_gety - iconst 0 + iconst 3 + define_array 73 + iconst 3 + define_array 65609 iconst 0 - iload 14 - if_setposition - iload 13 - if_getx - iload 13 - if_gety + istore 21 iconst 0 + istore 22 + get_varbit 19721 iconst 0 + if_icmpeq LABEL93 + jump LABEL103 +LABEL93: + iload 21 iload 15 - if_setposition - iconst 37 - iconst 37 + set_array_int + iload 21 + iload 16 + set_array_int 1 + iload 21 iconst 1 - iconst 0 - iload 4 - if_setsize - jump LABEL133 -LABEL97: + add + istore 21 +LABEL103: get_varbit 8352 iconst 0 - if_icmpeq LABEL101 - jump LABEL112 -LABEL101: + if_icmpeq LABEL107 + jump LABEL117 +LABEL107: + iload 21 + iload 13 + set_array_int + iload 21 + iload 14 + set_array_int 1 + iload 21 + iconst 1 + add + istore 21 +LABEL117: get_varbit 5364 + iconst 0 + if_icmpeq LABEL121 + jump LABEL131 +LABEL121: + iload 21 + iload 17 + set_array_int + iload 21 + iload 18 + set_array_int 1 + iload 21 iconst 1 - if_icmpeq LABEL105 - jump LABEL112 -LABEL105: + add + istore 21 +LABEL131: iconst 37 + iconst 3 + iload 21 + sub + multiply iconst 37 iconst 1 iconst 0 - iload 4 + iload 5 if_setsize - jump LABEL133 -LABEL112: - get_varbit 8352 - iconst 1 - if_icmpeq LABEL116 - jump LABEL127 -LABEL116: - get_varbit 5364 + iload 21 + iconst 0 + if_icmpeq LABEL145 + jump LABEL149 +LABEL145: iconst 1 - if_icmpeq LABEL120 - jump LABEL127 -LABEL120: - iconst 74 + iconst 786470 + if_sethide + jump LABEL152 +LABEL149: + iconst 0 + iconst 786470 + if_sethide +LABEL152: + iload 22 + iload 21 + if_icmplt LABEL156 + jump LABEL187 +LABEL156: + iconst 366 + iload 22 iconst 37 - iconst 1 + multiply + add + iload 22 + get_array_int + if_gety iconst 0 - iload 4 - if_setsize - jump LABEL133 -LABEL127: iconst 0 + iload 22 + get_array_int + if_setposition + iconst 369 + iload 22 iconst 37 - iconst 1 + multiply + add + iload 22 + get_array_int 1 + if_gety iconst 0 - iload 4 - if_setsize -LABEL133: + iconst 0 + iload 22 + get_array_int 1 + if_setposition + iload 22 iconst 1 - iload 10 + add + istore 22 + jump LABEL152 +LABEL187: + iconst 1 + iload 11 if_sethide - iload 10 + iload 11 cc_deleteall iconst 0 - istore 17 + istore 23 get_varbit 4170 iconst 3 - if_icmpeq LABEL144 - jump LABEL177 -LABEL144: + if_icmpeq LABEL198 + jump LABEL231 +LABEL198: get_varbit 4171 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4172 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4173 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4174 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4175 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4176 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4177 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4178 iconst 0 - if_icmpgt LABEL172 + if_icmpgt LABEL226 get_varbit 4179 iconst 0 - if_icmpgt LABEL172 - jump LABEL175 -LABEL172: + if_icmpgt LABEL226 + jump LABEL229 +LABEL226: iconst 0 - istore 17 - jump LABEL177 -LABEL175: + istore 23 + jump LABEL231 +LABEL229: iconst 1 - istore 17 -LABEL177: + istore 23 +LABEL231: iconst 0 - istore 18 - iload 17 + istore 24 + iload 23 iconst 1 - if_icmpeq LABEL183 - jump LABEL213 -LABEL183: + if_icmpeq LABEL237 + jump LABEL255 +LABEL237: iconst 1 - iload 8 + iload 9 if_sethide iconst 2 - istore 18 + istore 24 iconst 460 iconst 39 iconst 0 iconst 1 - iload 2 - if_setsize - iconst 16 - iconst 39 - iconst 0 - iconst 1 iload 3 if_setsize iconst 53 iconst 39 iconst 1 iconst 1 - iconst 786447 + iconst 786446 if_setsize - iconst 28 - iconst 42 - iconst 2 - iconst 0 - iload 1 - if_setposition - jump LABEL240 -LABEL213: + jump LABEL276 +LABEL255: iconst 0 - iload 8 + iload 9 if_sethide iconst 460 iconst 81 iconst 0 iconst 1 - iload 2 + iload 3 if_setsize iconst 16 iconst 81 iconst 0 iconst 1 - iload 3 + iload 4 if_setsize iconst 53 iconst 81 iconst 1 iconst 1 - iconst 786447 + iconst 786446 if_setsize - iconst 12 - iconst 42 - iconst 2 - iconst 0 - iload 1 - if_setposition -LABEL240: +LABEL276: get_varbit 4150 iconst 15 - if_icmpeq LABEL244 - jump LABEL249 -LABEL244: + if_icmpeq LABEL280 + jump LABEL300 +LABEL280: iconst 0 - iconst 786447 + iconst 786446 if_sethide + iload 23 + iconst 1 + if_icmpeq LABEL287 + jump LABEL290 +LABEL287: + iconst 1 + iload 2 + if_sethide +LABEL290: + iconst 786551 + iconst 0 + cc_find + iconst 1 + if_icmpeq LABEL296 + jump LABEL298 +LABEL296: + iconst 179 + cc_setgraphic +LABEL298: invoke 6080 - jump LABEL252 -LABEL249: + jump LABEL314 +LABEL300: iconst 1 - iconst 786447 + iconst 786446 if_sethide -LABEL252: - iload 3 + iconst 786551 + iconst 0 + cc_find + iconst 1 + if_icmpeq LABEL309 + jump LABEL311 +LABEL309: + iconst 170 + cc_setgraphic +LABEL311: + iconst 0 iload 2 + if_sethide +LABEL314: + iload 4 + iload 3 invoke 231 iconst 1410 - istore 19 + istore 25 iconst 1410 iconst 9 iconst 3 multiply add - istore 20 -LABEL263: - iload 19 - iload 20 - if_icmple LABEL267 - jump LABEL280 -LABEL267: - iload 2 - iload 19 + istore 26 +LABEL325: + iload 25 + iload 26 + if_icmple LABEL329 + jump LABEL342 +LABEL329: + iload 3 + iload 25 cc_find iconst 1 - if_icmpeq LABEL273 - jump LABEL275 -LABEL273: + if_icmpeq LABEL335 + jump LABEL337 +LABEL335: iconst 1 cc_sethide -LABEL275: - iload 19 +LABEL337: + iload 25 iconst 1 add - istore 19 - jump LABEL263 -LABEL280: + istore 25 + jump LABEL325 +LABEL342: iconst 0 - istore 19 + istore 25 iconst 8 iconst 1 sub - istore 21 - iload 2 + istore 27 + iload 3 if_getwidth iconst 51 sub iconst 35 sub - istore 22 - iload 22 + istore 28 + iload 28 iconst 8 iconst 36 multiply sub - iload 21 + iload 27 div - istore 23 + istore 29 iconst -1 - istore 24 + istore 30 iconst 0 - istore 25 + istore 31 iconst 0 - istore 26 + istore 32 iconst 0 - istore 27 + istore 33 iconst 0 - istore 28 + istore 34 iconst -1 - istore 29 + istore 35 iconst 0 - istore 30 + istore 36 invoke 514 - istore 31 + istore 37 get_varc_string 359 ; Skip truncating of meslayerinput by not calling bankmain_filterstring lowercase ; instead get the var directly and lowercase it - ostore 0 - jump LABEL325 ; + ostore 2 + jump LABEL387 ; sconst "" - ostore 0 - iload 31 + ostore 2 + iload 37 iconst 1 - if_icmpeq LABEL323 - jump LABEL325 -LABEL323: + if_icmpeq LABEL385 + jump LABEL387 +LABEL385: invoke 280 - ostore 0 -LABEL325: + ostore 2 +LABEL387: iconst 0 ; sconst "bankBuildTab" ; runelite_callback ; - istore 36 ; whether to use the single tab building mode instead of the whole bank - iload 36 ; + istore 42 ; whether to use the single tab building mode instead of the whole bank + iload 42 ; iconst 1 ; if_icmpeq singletabbuildmode ; get_varbit 4150 iconst 0 - if_icmple LABEL332 + if_icmple LABEL394 get_varbit 4150 iconst 9 - if_icmpgt LABEL332 - jump LABEL807 -LABEL332: + if_icmpgt LABEL394 + jump LABEL872 +LABEL394: get_varbit 4150 iconst 15 - if_icmpne LABEL336 - jump LABEL807 -LABEL336: - iload 19 + if_icmpne LABEL398 + jump LABEL872 +LABEL398: + iload 25 iconst 1410 - if_icmplt LABEL340 - jump LABEL365 -LABEL340: - iload 2 - iload 19 + if_icmplt LABEL402 + jump LABEL427 +LABEL402: + iload 3 + iload 25 cc_find iconst 1 - if_icmpeq LABEL346 - jump LABEL348 -LABEL346: + if_icmpeq LABEL408 + jump LABEL410 +LABEL408: iconst 1 cc_sethide -LABEL348: +LABEL410: iconst 95 - iload 19 + iload 25 inv_getobj iconst -1 - if_icmpne LABEL354 - jump LABEL360 -LABEL354: - iload 28 + if_icmpne LABEL416 + jump LABEL422 +LABEL416: + iload 34 iconst 1 add - iload 19 - istore 29 - istore 28 -LABEL360: - iload 19 + iload 25 + istore 35 + istore 34 +LABEL422: + iload 25 iconst 1 add - istore 19 - jump LABEL336 -LABEL365: + istore 25 + jump LABEL398 +LABEL427: get_varbit 4171 get_varbit 4172 add @@ -439,445 +511,445 @@ LABEL365: add get_varbit 4179 add - istore 30 - iload 30 + istore 36 + iload 36 iconst 0 - if_icmple LABEL387 - jump LABEL391 -LABEL387: + if_icmple LABEL449 + jump LABEL453 +LABEL449: iconst 1410 iconst 1 sub - istore 29 -LABEL391: - iload 30 - iload 29 + istore 35 +LABEL453: + iload 36 + iload 35 iconst 1 add iconst 0 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 + istore 32 iconst 0 - istore 19 + istore 25 get_varbit 4171 iconst 0 - if_icmpgt LABEL420 - jump LABEL452 -LABEL420: + if_icmpgt LABEL482 + jump LABEL514 +LABEL482: iconst 1 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4171 add iconst 1 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4171 add - istore 19 -LABEL452: + istore 25 +LABEL514: get_varbit 4172 iconst 0 - if_icmpgt LABEL456 - jump LABEL488 -LABEL456: + if_icmpgt LABEL518 + jump LABEL550 +LABEL518: iconst 2 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4172 add iconst 2 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4172 add - istore 19 -LABEL488: + istore 25 +LABEL550: get_varbit 4173 iconst 0 - if_icmpgt LABEL492 - jump LABEL524 -LABEL492: + if_icmpgt LABEL554 + jump LABEL586 +LABEL554: iconst 3 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4173 add iconst 3 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4173 add - istore 19 -LABEL524: + istore 25 +LABEL586: get_varbit 4174 iconst 0 - if_icmpgt LABEL528 - jump LABEL560 -LABEL528: + if_icmpgt LABEL590 + jump LABEL622 +LABEL590: iconst 4 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4174 add iconst 4 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4174 add - istore 19 -LABEL560: + istore 25 +LABEL622: get_varbit 4175 iconst 0 - if_icmpgt LABEL564 - jump LABEL596 -LABEL564: + if_icmpgt LABEL626 + jump LABEL658 +LABEL626: iconst 5 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4175 add iconst 5 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4175 add - istore 19 -LABEL596: + istore 25 +LABEL658: get_varbit 4176 iconst 0 - if_icmpgt LABEL600 - jump LABEL632 -LABEL600: + if_icmpgt LABEL662 + jump LABEL694 +LABEL662: iconst 6 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4176 add iconst 6 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4176 add - istore 19 -LABEL632: + istore 25 +LABEL694: get_varbit 4177 iconst 0 - if_icmpgt LABEL636 - jump LABEL668 -LABEL636: + if_icmpgt LABEL698 + jump LABEL730 +LABEL698: iconst 7 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4177 add iconst 7 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4177 add - istore 19 -LABEL668: + istore 25 +LABEL730: get_varbit 4178 iconst 0 - if_icmpgt LABEL672 - jump LABEL704 -LABEL672: + if_icmpgt LABEL734 + jump LABEL766 +LABEL734: iconst 8 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4178 add iconst 8 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4178 add - istore 19 -LABEL704: + istore 25 +LABEL766: get_varbit 4179 iconst 0 - if_icmpgt LABEL708 - jump LABEL740 -LABEL708: + if_icmpgt LABEL770 + jump LABEL802 +LABEL770: iconst 9 - iload 2 - iload 27 + iload 3 + iload 33 invoke 510 - istore 18 - iload 19 - iload 19 + istore 24 + iload 25 + iload 25 get_varbit 4179 add iconst 9 - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 - iload 18 + iload 12 + iload 24 + iload 29 + iload 27 iload 23 - iload 21 - iload 17 - iload 31 - oload 0 + iload 37 + oload 2 invoke 509 - istore 25 - istore 27 - iload 26 - iload 25 + istore 31 + istore 33 + iload 32 + iload 31 add - istore 26 - iload 19 + istore 32 + iload 25 get_varbit 4179 add - istore 19 -LABEL740: - iload 31 + istore 25 +LABEL802: + iload 37 iconst 1 - if_icmpeq LABEL744 - jump LABEL783 -LABEL744: - oload 0 + if_icmpeq LABEL806 + jump LABEL845 +LABEL806: + oload 2 string_length iconst 0 - if_icmpgt LABEL749 - jump LABEL768 -LABEL749: + if_icmpgt LABEL811 + jump LABEL830 +LABEL811: sconst "Showing items: " sconst "" - oload 0 + oload 2 sconst "" join_string 4 - iload 5 + iload 6 if_settext get_varc_int 5 iconst 11 - if_icmpeq LABEL760 - jump LABEL767 -LABEL760: + if_icmpeq LABEL822 + jump LABEL829 +LABEL822: sconst "Show items whose names contain the following text: (" - iload 26 + iload 32 tostring sconst " found)" join_string 3 - iload 26 ; load number of matches + iload 32 ; load number of matches sconst "setSearchBankInputTextFound" ; load event name runelite_callback ; invoke callback pop_int ; pop number of matches iconst 10616874 if_settext -LABEL767: - jump LABEL782 -LABEL768: +LABEL829: + jump LABEL844 +LABEL830: sconst "Showing items: " sconst "" sconst "*" sconst "" join_string 4 - iload 5 + iload 6 if_settext get_varc_int 5 iconst 11 - if_icmpeq LABEL779 - jump LABEL782 -LABEL779: + if_icmpeq LABEL841 + jump LABEL844 +LABEL841: sconst "Show items whose names contain the following text:" sconst "setSearchBankInputText" ; load event name runelite_callback ; invoke callback iconst 10616874 if_settext -LABEL782: - jump LABEL786 -LABEL783: +LABEL844: + jump LABEL848 +LABEL845: sconst "The Bank of Gielinor" - iload 5 + iload 6 if_settext -LABEL786: +LABEL848: iload 0 iload 1 iload 2 @@ -890,13 +962,16 @@ LABEL786: iload 9 iload 10 iload 11 - iload 27 - iload 28 iload 12 + iload 33 + iload 34 iload 13 iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 505 ; [proc,bankmain_finishbuilding] return singletabbuildmode: @@ -920,184 +995,178 @@ singletabbuildmode: add ; get_varbit 4179 ; add ; - istore 30 ; store start to the first item in the "All items" tab -LABEL807: + istore 36 ; store start to the first item in the "All items" tab +LABEL872: ; if (~bankmain_searching = 1) { - iload 31 + iload 37 iconst 1 - if_icmpeq LABEL811 - jump LABEL815 -LABEL811: + if_icmpeq LABEL876 + jump LABEL880 +LABEL876: iconst 1 iconst 1 iconst 1 invoke 299 -LABEL815: +LABEL880: ; after ~meslayer close iconst -1 - istore 32 + istore 38 iconst -1 - istore 33 + istore 39 get_varbit 4150 invoke 513 - istore 33 - istore 32 + istore 39 + istore 38 iconst 0 - istore 34 + istore 40 iconst 0 - istore 35 -LABEL827: - iload 19 + istore 41 +LABEL892: + iload 25 iconst 1410 - if_icmplt LABEL831 - jump LABEL907 -LABEL831: + if_icmplt LABEL896 + jump LABEL972 +LABEL896: ; item index = (loop index + offset) % bank size - iload 19 ; loop index - iload 30 ; offset + iload 25 ; loop index + iload 36 ; offset add ; iconst 1410 ; bank size mod ; - istore 29 ; store index - iload 2 + istore 35 ; store index + iload 3 jump LOAD_ITEM_INDEX - iload 19 + iload 25 LOAD_ITEM_INDEX: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index cc_find iconst 1 - if_icmpeq LABEL837 - jump LABEL902 -LABEL837: + if_icmpeq LABEL902 + jump LABEL967 +LABEL902: iconst 95 jump LOAD_ITEM_INDEX2 - iload 19 + iload 25 LOAD_ITEM_INDEX2: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index inv_getobj - istore 24 - iload 24 + istore 30 + iload 30 iconst -1 - if_icmpne LABEL845 - jump LABEL849 -LABEL845: - iload 28 + if_icmpne LABEL910 + jump LABEL914 +LABEL910: + iload 34 iconst 1 add - istore 28 -LABEL849: - iload 36 ; overriding single tab building mode? + istore 34 +LABEL914: + iload 42 ; overriding single tab building mode? iconst 1 ; if_icmpeq filtertest ; - iload 19 - iload 32 - if_icmpge LABEL853 - jump LABEL900 -LABEL853: - iload 19 - iload 33 - if_icmplt LABEL857 - jump LABEL900 + iload 25 + iload 38 + if_icmpge LABEL918 + jump LABEL965 +LABEL918: + iload 25 + iload 39 + if_icmplt LABEL922 + jump LABEL965 filtertest: - iload 24 ; obj - iload 31 ; bankmain_searching - oload 0 ; bankmain_filterstring + iload 30 ; obj + iload 37 ; bankmain_searching + oload 2 ; bankmain_filterstring invoke 279 ; ~bankmain_filteritem iconst 1 ; - if_icmpne LABEL900 ; -LABEL857: + if_icmpne LABEL965 ; +LABEL922: iconst 0 cc_sethide - iload 24 + iload 30 iconst 95 jump LOAD_ITEM_INDEX3 - iload 19 + iload 25 LOAD_ITEM_INDEX3: - iload 29 ; use item index instead of loop index + iload 35 ; use item index instead of loop index inv_getnum - iload 2 iload 3 - iload 9 + iload 4 iload 10 iload 11 + iload 12 invoke 278 iconst 51 - iload 34 + iload 40 iconst 36 - iload 23 + iload 29 add multiply add - iload 27 + iload 33 iconst 0 iconst 0 cc_setposition - iload 34 - iload 21 - if_icmplt LABEL884 - jump LABEL889 -LABEL884: - iload 34 + iload 40 + iload 27 + if_icmplt LABEL949 + jump LABEL954 +LABEL949: + iload 40 iconst 1 add - istore 34 - jump LABEL899 -LABEL889: + istore 40 + jump LABEL964 +LABEL954: iconst 0 - iload 35 + iload 41 iconst 1 add - istore 35 - istore 34 - iload 35 + istore 41 + istore 40 + iload 41 iconst 36 multiply - istore 27 -LABEL899: - jump LABEL902 -LABEL900: + istore 33 +LABEL964: + jump LABEL967 +LABEL965: iconst 1 cc_sethide -LABEL902: - iload 19 +LABEL967: + iload 25 iconst 1 add - istore 19 - jump LABEL827 -LABEL907: - iload 27 + istore 25 + jump LABEL892 +LABEL972: + iload 33 iconst 32 add - istore 27 - iconst 1 - iconst 786447 - if_sethide + istore 33 get_varbit 4150 iconst 15 - if_icmpeq LABEL918 - jump LABEL925 -LABEL918: - sconst "Potion store" - iload 5 + if_icmpeq LABEL980 + jump LABEL984 +LABEL980: + sconst "Potion storage" + iload 6 if_settext - iconst 0 - iconst 786447 - if_sethide - jump LABEL945 -LABEL925: - iload 36 ; overriding single tab building mode? + jump LABEL1004 +LABEL984: + iload 42 ; overriding single tab building mode? iconst 1 ; if_icmpne tabtitle ; set normal "Tab" title sconst "The Bank of Gielinor" ; bank title - iload 5 ; bank title component + iload 6 ; bank title component if_settext ; jump FinishBuilding ; tabtitle: ; get_varbit 4170 iconst 2 - if_icmpeq LABEL929 - jump LABEL939 -LABEL929: + if_icmpeq LABEL988 + jump LABEL998 +LABEL988: sconst "Tab " iconst 105 iconst 115 @@ -1105,18 +1174,18 @@ LABEL929: get_varbit 4150 enum join_string 2 - iload 5 + iload 6 if_settext - jump LABEL945 -LABEL939: + jump LABEL1004 +LABEL998: sconst "Tab " get_varbit 4150 tostring join_string 2 - iload 5 + iload 6 if_settext FinishBuilding: -LABEL945: +LABEL1004: iload 0 iload 1 iload 2 @@ -1129,12 +1198,15 @@ LABEL945: iload 9 iload 10 iload 11 - iload 27 - iload 28 iload 12 + iload 33 + iload 34 iload 13 iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 505 return diff --git a/runelite-client/src/main/scripts/ChatBuilder.hash b/runelite-client/src/main/scripts/ChatBuilder.hash index 13c2eb7a01e..7475f5b8703 100644 --- a/runelite-client/src/main/scripts/ChatBuilder.hash +++ b/runelite-client/src/main/scripts/ChatBuilder.hash @@ -1 +1 @@ -F0103CEB37BECA33FD56D8BE41B8E88CA4D8E44EC1C4F688563E6AF2E4F1E9CC \ No newline at end of file +28EC734FE4D8A8E219E8DBD6AD85925BDA0135B9926B81687D99883FF3C4E494 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/ChatBuilder.rs2asm b/runelite-client/src/main/scripts/ChatBuilder.rs2asm index f9264304d77..d4d11f7fa1f 100644 --- a/runelite-client/src/main/scripts/ChatBuilder.rs2asm +++ b/runelite-client/src/main/scripts/ChatBuilder.rs2asm @@ -431,12 +431,12 @@ LABEL411: iload 10 iconst -1 if_icmpne LABEL415 - jump LABEL2313 + jump LABEL2273 LABEL415: iload 9 iconst -1 if_icmpne LABEL419 - jump LABEL2313 + jump LABEL2273 LABEL419: iload 10 chat_gethistoryex_byuid @@ -455,7 +455,7 @@ LABEL419: invoke 193 iconst 1 if_icmpeq CHAT_FILTER - jump LABEL2309 + jump LABEL2269 CHAT_FILTER: oload 21 ; Load the message iconst 1 ; Gets changed to 0 if message is blocked @@ -468,7 +468,7 @@ CHAT_FILTER: iconst 1 ; 2nd half of conditional ostore 21 ; Override the message with our filtered message if_icmpeq LABEL437 ; Check if we are building this message - jump LABEL2309 ; continue to next message, skipping this + jump LABEL2269 ; continue to next message, skipping this LABEL437: iload 11 oload 19 @@ -484,7 +484,7 @@ LABEL437: invoke 90 iconst 1 if_icmpeq LABEL452 - jump LABEL2309 + jump LABEL2269 LABEL452: iconst 0 ; splitpmbox iload 10 ; message uid @@ -1851,16 +1851,16 @@ LABEL1671: 41: LABEL1676 44: LABEL1676 0: LABEL1793 - 101: LABEL1921 - 103: LABEL1973 - 104: LABEL1973 - 110: LABEL1973 - 14: LABEL2016 - 109: LABEL2077 - 111: LABEL2120 - 112: LABEL2163 - 43: LABEL2206 - jump LABEL2283 + 101: LABEL1901 + 103: LABEL1953 + 104: LABEL1953 + 110: LABEL1953 + 14: LABEL1996 + 109: LABEL2057 + 111: LABEL2100 + 112: LABEL2143 + 43: LABEL2186 + jump LABEL2243 LABEL1676: sconst "" oload 19 @@ -1996,7 +1996,7 @@ LABEL1788: iload 9 if_setop LABEL1792: - jump LABEL2295 + jump LABEL2255 LABEL1793: oload 19 string_length @@ -2037,13 +2037,13 @@ LABEL1805: sconst "" iload 9 if_setonmouseleave - jump LABEL1920 + jump LABEL1900 LABEL1831: oload 25 string_length iconst 0 if_icmpne LABEL1836 - jump LABEL1908 + jump LABEL1888 LABEL1836: oload 25 sconst "CA_ID:" @@ -2053,11 +2053,13 @@ LABEL1836: iload 22 iconst -1 if_icmpne LABEL1845 - jump LABEL1907 + jump LABEL1887 LABEL1845: oload 25 + iload 22 sconst "CA_ID:" string_length + add oload 25 string_length substring @@ -2069,28 +2071,6 @@ LABEL1845: sconst "View" iload 9 if_setop - sconst "" - sconst "Task" - sconst "" - join_string 3 - iload 9 - if_setopbase - iconst 7821 - iconst -2147483644 - sconst "event_opbase" - iload 11 - iload 22 - sconst "isii" - iload 9 - if_setonop - iconst -1 - sconst "" - iload 9 - if_setonmouseover - iconst -1 - sconst "" - iload 9 - if_setonmouseleave iconst 7 sconst "Open" iload 9 @@ -2117,9 +2097,9 @@ LABEL1845: sconst "" iload 9 if_setonmouseleave -LABEL1907: - jump LABEL1920 -LABEL1908: +LABEL1887: + jump LABEL1900 +LABEL1888: iconst -1 sconst "" iload 9 @@ -2132,9 +2112,9 @@ LABEL1908: sconst "" iload 9 if_setonmouseleave -LABEL1920: - jump LABEL2295 -LABEL1921: +LABEL1900: + jump LABEL2255 +LABEL1901: sconst "" oload 19 sconst "" @@ -2158,31 +2138,31 @@ LABEL1921: if_setonmouseleave invoke 5548 iconst 1 - if_icmpeq LABEL1946 - jump LABEL1951 -LABEL1946: + if_icmpeq LABEL1926 + jump LABEL1931 +LABEL1926: iconst 1 sconst "Accept invitation" iload 9 if_setop - jump LABEL1955 -LABEL1951: + jump LABEL1935 +LABEL1931: iconst 1 sconst "Accept trade" iload 9 if_setop -LABEL1955: +LABEL1935: iload 15 iconst 1 - if_icmpeq LABEL1959 - jump LABEL1964 -LABEL1959: + if_icmpeq LABEL1939 + jump LABEL1944 +LABEL1939: iconst 6 sconst "Message" iload 9 if_setop - jump LABEL1972 -LABEL1964: + jump LABEL1952 +LABEL1944: iconst 6 sconst "Add friend" iload 9 @@ -2191,9 +2171,9 @@ LABEL1964: sconst "Add ignore" iload 9 if_setop -LABEL1972: - jump LABEL2295 -LABEL1973: +LABEL1952: + jump LABEL2255 +LABEL1953: sconst "" oload 19 sconst "" @@ -2221,15 +2201,15 @@ LABEL1973: if_setop iload 15 iconst 1 - if_icmpeq LABEL2002 - jump LABEL2007 -LABEL2002: + if_icmpeq LABEL1982 + jump LABEL1987 +LABEL1982: iconst 6 sconst "Message" iload 9 if_setop - jump LABEL2015 -LABEL2007: + jump LABEL1995 +LABEL1987: iconst 6 sconst "Add friend" iload 9 @@ -2238,20 +2218,20 @@ LABEL2007: sconst "Add ignore" iload 9 if_setop -LABEL2015: - jump LABEL2295 -LABEL2016: +LABEL1995: + jump LABEL2255 +LABEL1996: oload 22 string_length iconst 0 - if_icmpgt LABEL2021 - jump LABEL2050 -LABEL2021: + if_icmpgt LABEL2001 + jump LABEL2030 +LABEL2001: iload 13 iconst -1 - if_icmpne LABEL2025 - jump LABEL2050 -LABEL2025: + if_icmpne LABEL2005 + jump LABEL2030 +LABEL2005: iconst 6 sconst "Open" iload 9 @@ -2276,8 +2256,8 @@ LABEL2025: sconst "iii" iload 9 if_setonmouseleave - jump LABEL2058 -LABEL2050: + jump LABEL2038 +LABEL2030: iconst -1 sconst "" iload 9 @@ -2286,7 +2266,7 @@ LABEL2050: sconst "" iload 9 if_setonmouseleave -LABEL2058: +LABEL2038: iconst 9 sconst "Clear history" iload 9 @@ -2305,8 +2285,8 @@ LABEL2058: sconst "iisi" iload 9 if_setonop - jump LABEL2295 -LABEL2077: + jump LABEL2255 +LABEL2057: sconst "" oload 19 sconst "" @@ -2334,15 +2314,15 @@ LABEL2077: if_setonmouseleave iload 15 iconst 1 - if_icmpeq LABEL2106 - jump LABEL2111 -LABEL2106: + if_icmpeq LABEL2086 + jump LABEL2091 +LABEL2086: iconst 6 sconst "Message" iload 9 if_setop - jump LABEL2119 -LABEL2111: + jump LABEL2099 +LABEL2091: iconst 6 sconst "Add friend" iload 9 @@ -2351,9 +2331,9 @@ LABEL2111: sconst "Add ignore" iload 9 if_setop -LABEL2119: - jump LABEL2295 -LABEL2120: +LABEL2099: + jump LABEL2255 +LABEL2100: sconst "" oload 19 sconst "" @@ -2381,15 +2361,15 @@ LABEL2120: if_setonmouseleave iload 15 iconst 1 - if_icmpeq LABEL2149 - jump LABEL2154 -LABEL2149: + if_icmpeq LABEL2129 + jump LABEL2134 +LABEL2129: iconst 6 sconst "Message" iload 9 if_setop - jump LABEL2162 -LABEL2154: + jump LABEL2142 +LABEL2134: iconst 6 sconst "Add friend" iload 9 @@ -2398,9 +2378,9 @@ LABEL2154: sconst "Add ignore" iload 9 if_setop -LABEL2162: - jump LABEL2295 -LABEL2163: +LABEL2142: + jump LABEL2255 +LABEL2143: sconst "" oload 19 sconst "" @@ -2428,15 +2408,15 @@ LABEL2163: if_setonmouseleave iload 15 iconst 1 - if_icmpeq LABEL2192 - jump LABEL2197 -LABEL2192: + if_icmpeq LABEL2172 + jump LABEL2177 +LABEL2172: iconst 6 sconst "Message" iload 9 if_setop - jump LABEL2205 -LABEL2197: + jump LABEL2185 +LABEL2177: iconst 6 sconst "Add friend" iload 9 @@ -2445,15 +2425,15 @@ LABEL2197: sconst "Add ignore" iload 9 if_setop -LABEL2205: - jump LABEL2295 -LABEL2206: +LABEL2185: + jump LABEL2255 +LABEL2186: oload 25 string_length iconst 0 - if_icmpne LABEL2211 - jump LABEL2282 -LABEL2211: + if_icmpne LABEL2191 + jump LABEL2242 +LABEL2191: oload 25 sconst "CA_ID:" iconst 0 @@ -2461,12 +2441,14 @@ LABEL2211: istore 22 iload 22 iconst -1 - if_icmpne LABEL2220 - jump LABEL2282 -LABEL2220: + if_icmpne LABEL2200 + jump LABEL2242 +LABEL2200: oload 25 + iload 22 sconst "CA_ID:" string_length + add oload 25 string_length substring @@ -2478,28 +2460,6 @@ LABEL2220: sconst "View" iload 9 if_setop - sconst "" - sconst "Task" - sconst "" - join_string 3 - iload 9 - if_setopbase - iconst 7821 - iconst -2147483644 - sconst "event_opbase" - iload 11 - iload 22 - sconst "isii" - iload 9 - if_setonop - iconst -1 - sconst "" - iload 9 - if_setonmouseover - iconst -1 - sconst "" - iload 9 - if_setonmouseleave iconst 7 sconst "Open" iload 9 @@ -2526,9 +2486,9 @@ LABEL2220: sconst "" iload 9 if_setonmouseleave -LABEL2282: - jump LABEL2295 -LABEL2283: +LABEL2242: + jump LABEL2255 +LABEL2243: iconst -1 sconst "" iload 9 @@ -2541,7 +2501,7 @@ LABEL2283: sconst "" iload 9 if_setonmouseleave -LABEL2295: +LABEL2255: iload 6 iload 7 sub @@ -2556,20 +2516,20 @@ LABEL2295: iload 8 enum istore 9 -LABEL2309: +LABEL2269: iload 10 chat_getprevuid istore 10 jump LABEL411 -LABEL2313: +LABEL2273: iload 8 istore 23 -LABEL2315: +LABEL2275: iload 9 iconst -1 - if_icmpne LABEL2319 - jump LABEL2402 -LABEL2319: + if_icmpne LABEL2279 + jump LABEL2362 +LABEL2279: iload 9 if_clearops iconst -1 @@ -2596,14 +2556,14 @@ LABEL2319: multiply cc_find iconst 1 - if_icmpeq LABEL2347 - jump LABEL2351 -LABEL2347: + if_icmpeq LABEL2307 + jump LABEL2311 +LABEL2307: sconst "" cc_settext iconst 1 cc_sethide -LABEL2351: +LABEL2311: iconst 10616889 iload 8 iconst 4 @@ -2612,14 +2572,14 @@ LABEL2351: add cc_find iconst 1 - if_icmpeq LABEL2361 - jump LABEL2365 -LABEL2361: + if_icmpeq LABEL2321 + jump LABEL2325 +LABEL2321: sconst "" cc_settext iconst 1 cc_sethide -LABEL2365: +LABEL2325: iconst 10616889 iload 8 iconst 4 @@ -2628,14 +2588,14 @@ LABEL2365: add cc_find iconst 1 - if_icmpeq LABEL2375 - jump LABEL2379 -LABEL2375: + if_icmpeq LABEL2335 + jump LABEL2339 +LABEL2335: sconst "" cc_settext iconst 1 cc_sethide -LABEL2379: +LABEL2339: iconst 10616889 iload 8 iconst 4 @@ -2644,12 +2604,12 @@ LABEL2379: add cc_find iconst 1 - if_icmpeq LABEL2389 - jump LABEL2391 -LABEL2389: + if_icmpeq LABEL2349 + jump LABEL2351 +LABEL2349: iconst 1 cc_sethide -LABEL2391: +LABEL2351: iload 8 iconst 1 add @@ -2660,8 +2620,8 @@ LABEL2391: iload 8 enum istore 9 - jump LABEL2315 -LABEL2402: + jump LABEL2275 +LABEL2362: iload 6 iconst 2 sub @@ -2675,20 +2635,20 @@ LABEL2402: istore 24 iload 6 iload 24 - if_icmpgt LABEL2417 - jump LABEL2419 -LABEL2417: + if_icmpgt LABEL2377 + jump LABEL2379 +LABEL2377: iload 6 istore 24 -LABEL2419: +LABEL2379: iload 23 istore 8 -LABEL2421: +LABEL2381: iload 8 iconst 0 - if_icmpgt LABEL2425 - jump LABEL2508 -LABEL2425: + if_icmpgt LABEL2385 + jump LABEL2468 +LABEL2385: iload 8 iconst 1 sub @@ -2719,15 +2679,15 @@ LABEL2425: multiply cc_find iconst 1 - if_icmpeq LABEL2457 - jump LABEL2462 -LABEL2457: + if_icmpeq LABEL2417 + jump LABEL2422 +LABEL2417: cc_getx iload 6 iconst 0 iconst 0 cc_setposition -LABEL2462: +LABEL2422: iconst 10616889 iload 8 iconst 4 @@ -2736,15 +2696,15 @@ LABEL2462: add cc_find iconst 1 - if_icmpeq LABEL2472 - jump LABEL2477 -LABEL2472: + if_icmpeq LABEL2432 + jump LABEL2437 +LABEL2432: cc_getx iload 6 iconst 0 iconst 0 cc_setposition -LABEL2477: +LABEL2437: iconst 10616889 iload 8 iconst 4 @@ -2753,15 +2713,15 @@ LABEL2477: add cc_find iconst 1 - if_icmpeq LABEL2487 - jump LABEL2492 -LABEL2487: + if_icmpeq LABEL2447 + jump LABEL2452 +LABEL2447: cc_getx iload 6 iconst 0 iconst 0 cc_setposition -LABEL2492: +LABEL2452: iconst 10616889 iload 8 iconst 4 @@ -2770,17 +2730,17 @@ LABEL2492: add cc_find iconst 1 - if_icmpeq LABEL2502 - jump LABEL2507 -LABEL2502: + if_icmpeq LABEL2462 + jump LABEL2467 +LABEL2462: cc_getx iload 6 iconst 0 iconst 0 cc_setposition -LABEL2507: - jump LABEL2421 -LABEL2508: +LABEL2467: + jump LABEL2381 +LABEL2468: iconst 0 iload 24 iconst 10616889 diff --git a/runelite-client/src/main/scripts/MagicSpellbookRedraw.hash b/runelite-client/src/main/scripts/MagicSpellbookRedraw.hash index 719d4ce0623..d9a9de12656 100644 --- a/runelite-client/src/main/scripts/MagicSpellbookRedraw.hash +++ b/runelite-client/src/main/scripts/MagicSpellbookRedraw.hash @@ -1 +1 @@ -973BEC2DE26EF911FD097FB168CB4B58B5F6FDF739AA11700CEA7B1A74040B0A \ No newline at end of file +7E3E372CFE585F4F2FF4ABF6720B2E25623A3E4F6233F13307BC07AD10E7DB95 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/MagicSpellbookRedraw.rs2asm b/runelite-client/src/main/scripts/MagicSpellbookRedraw.rs2asm index e7e6f2aa2df..a55f35e4f66 100644 --- a/runelite-client/src/main/scripts/MagicSpellbookRedraw.rs2asm +++ b/runelite-client/src/main/scripts/MagicSpellbookRedraw.rs2asm @@ -519,33 +519,38 @@ LABEL448: multiply add istore 31 - jump LABEL642 + jump LABEL646 LABEL459: get_varbit 6548 iconst 1 - if_icmpeq LABEL473 + if_icmpeq LABEL477 iload 10 iconst 0 if_icmpeq LABEL466 - jump LABEL553 + jump LABEL557 LABEL466: + invoke 1138 + iconst 0 + if_icmpeq LABEL470 + jump LABEL557 +LABEL470: get_varbit 8121 iconst 1 - if_icmpeq LABEL473 + if_icmpeq LABEL477 get_varbit 6549 iconst 1 - if_icmpeq LABEL473 - jump LABEL553 -LABEL473: + if_icmpeq LABEL477 + jump LABEL557 +LABEL477: iload 22 iconst 28 - if_icmple LABEL477 - jump LABEL480 -LABEL477: + if_icmple LABEL481 + jump LABEL484 +LABEL481: iconst 4 istore 27 - jump LABEL490 -LABEL480: + jump LABEL494 +LABEL484: iconst 4 iconst 7 iload 22 @@ -556,7 +561,7 @@ LABEL480: invoke 1046 invoke 1045 istore 27 -LABEL490: +LABEL494: iconst 0 iload 26 iload 11 @@ -583,9 +588,9 @@ LABEL490: istore 28 iload 28 iconst 2 - if_icmpge LABEL518 - jump LABEL532 -LABEL518: + if_icmpge LABEL522 + jump LABEL536 +LABEL522: iconst 0 iload 30 iload 12 @@ -600,7 +605,7 @@ LABEL518: invoke 1046 invoke 1045 istore 29 -LABEL532: +LABEL536: iload 28 iload 26 multiply @@ -621,30 +626,30 @@ LABEL532: iconst 1 iload 0 if_setposition - jump LABEL642 -LABEL553: + jump LABEL646 +LABEL557: iload 22 iconst 15 - if_icmple LABEL557 - jump LABEL562 -LABEL557: + if_icmple LABEL561 + jump LABEL566 +LABEL561: iconst 40 iconst 3 istore 27 istore 26 - jump LABEL581 -LABEL562: + jump LABEL585 +LABEL566: iload 22 iconst 20 - if_icmple LABEL566 - jump LABEL571 -LABEL566: + if_icmple LABEL570 + jump LABEL575 +LABEL570: iconst 40 iconst 4 istore 27 istore 26 - jump LABEL581 -LABEL571: + jump LABEL585 +LABEL575: iconst 4 iconst 7 iload 22 @@ -655,7 +660,7 @@ LABEL571: invoke 1046 invoke 1045 istore 27 -LABEL581: +LABEL585: iconst 0 iconst 5 iconst 7 @@ -685,9 +690,9 @@ LABEL581: istore 28 iload 28 iconst 2 - if_icmpge LABEL612 - jump LABEL626 -LABEL612: + if_icmpge LABEL616 + jump LABEL630 +LABEL616: iconst 0 iload 30 iload 12 @@ -702,7 +707,7 @@ LABEL612: invoke 1046 invoke 1045 istore 29 -LABEL626: +LABEL630: iload 28 iload 26 multiply @@ -719,7 +724,7 @@ LABEL626: iconst 1 iload 0 if_setposition -LABEL642: +LABEL646: iload 27 iload 26 multiply @@ -754,12 +759,12 @@ LABEL642: istore 38 iconst 0 istore 24 -LABEL676: +LABEL680: iload 24 iload 22 - if_icmplt LABEL680 - jump LABEL859 -LABEL680: + if_icmplt LABEL684 + jump LABEL863 +LABEL684: iconst 105 iconst 111 iload 14 @@ -769,13 +774,13 @@ LABEL680: istore 23 invoke 3160 iconst 1 - if_icmpeq LABEL691 - jump LABEL694 -LABEL691: + if_icmpeq LABEL695 + jump LABEL698 +LABEL695: iload 23 invoke 3159 istore 23 -LABEL694: +LABEL698: iload 23 iconst 596 oc_param @@ -812,52 +817,52 @@ LABEL694: istore 32 iload 32 iconst 1 - if_icmpeq LABEL732 - jump LABEL748 -LABEL732: + if_icmpeq LABEL736 + jump LABEL752 +LABEL736: iload 26 iconst 40 - if_icmpge LABEL736 - jump LABEL742 -LABEL736: + if_icmpge LABEL740 + jump LABEL746 +LABEL740: iload 23 iconst 599 oc_param iload 33 if_setgraphic - jump LABEL747 -LABEL742: + jump LABEL751 +LABEL746: iload 23 iconst 597 oc_param iload 33 if_setgraphic -LABEL747: - jump LABEL788 -LABEL748: +LABEL751: + jump LABEL792 +LABEL752: iload 26 iconst 40 - if_icmpge LABEL752 - jump LABEL758 -LABEL752: + if_icmpge LABEL756 + jump LABEL762 +LABEL756: iload 23 iconst 600 oc_param iload 33 if_setgraphic - jump LABEL763 -LABEL758: + jump LABEL767 +LABEL762: iload 23 iconst 598 oc_param iload 33 if_setgraphic -LABEL763: +LABEL767: iload 36 iconst -1 - if_icmpne LABEL767 - jump LABEL788 -LABEL767: + if_icmpne LABEL771 + jump LABEL792 +LABEL771: iload 0 iconst 5 iload 25 @@ -879,14 +884,14 @@ LABEL767: iconst 1 add istore 25 -LABEL788: +LABEL792: iload 33 invoke 2615 iload 10 iconst 1 - if_icmpeq LABEL794 - jump LABEL822 -LABEL794: + if_icmpeq LABEL798 + jump LABEL826 +LABEL798: iload 1 iconst 5 iload 24 @@ -914,8 +919,8 @@ LABEL794: iload 12 sconst "iiii" cc_setonclick - jump LABEL854 -LABEL822: + jump LABEL858 +LABEL826: iconst 2622 iconst 1 iload 23 @@ -948,11 +953,11 @@ LABEL822: sconst "iiiiiiii" iload 33 if_setonmouseleave -LABEL854: +LABEL858: iload 24 iconst 1 add istore 24 - jump LABEL676 -LABEL859: + jump LABEL680 +LABEL863: return diff --git a/runelite-client/src/main/scripts/TriggerBankLayout.hash b/runelite-client/src/main/scripts/TriggerBankLayout.hash index e4d5241bf65..e124d99905b 100644 --- a/runelite-client/src/main/scripts/TriggerBankLayout.hash +++ b/runelite-client/src/main/scripts/TriggerBankLayout.hash @@ -1 +1 @@ -DC2D875DFF91D7D0184670EC9CD4E5980C051D8D4BD0F591935FD603409A7369 \ No newline at end of file +5318C120955D6D3B0283BBAB3F46EACE6672675F8A6464C36DB64AC4618DAF91 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm b/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm index beba5961b65..fe705afe10d 100644 --- a/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm +++ b/runelite-client/src/main/scripts/TriggerBankLayout.rs2asm @@ -1,5 +1,5 @@ .id 276 -.int_arg_count 17 +.int_arg_count 20 .obj_arg_count 0 ; Check if we should allow server to relayout bank @@ -40,5 +40,8 @@ RELAYOUT: iload 14 iload 15 iload 16 + iload 17 + iload 18 + iload 19 invoke 277 return diff --git a/runelite-client/src/main/scripts/fairyrings_sort_update.hash b/runelite-client/src/main/scripts/fairyrings_sort_update.hash index 68dda177ddc..7d63867f61f 100644 --- a/runelite-client/src/main/scripts/fairyrings_sort_update.hash +++ b/runelite-client/src/main/scripts/fairyrings_sort_update.hash @@ -1 +1 @@ -7245804424EB949F248D65FB11DDA8AB75D26B7390D2F7C4BD8FABB15F2FCF62 \ No newline at end of file +7ED1D781716DC9AF9DEE535F03E7FEAFF265EEC4839EAF4937636FC5B3CC096C \ No newline at end of file diff --git a/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm b/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm index be44b65293e..031199f2082 100644 --- a/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm +++ b/runelite-client/src/main/scripts/fairyrings_sort_update.rs2asm @@ -38,24 +38,29 @@ LABEL22: iconst 773 iconst 788 invoke 31 - jump LABEL45 + jump LABEL49 LABEL32: + iload 3 + iconst 0 + if_icmpeq LABEL36 + jump LABEL49 +LABEL36: iconst 2266 iconst 1 iconst 0 sound_synth get_varc_int 54 iconst 1 - if_icmpeq LABEL40 - jump LABEL43 -LABEL40: + if_icmpeq LABEL44 + jump LABEL47 +LABEL44: iconst 0 set_varc_int 54 - jump LABEL45 -LABEL43: + jump LABEL49 +LABEL47: iconst 1 set_varc_int 54 -LABEL45: +LABEL49: iconst -1 istore 6 iconst -1 @@ -69,15 +74,15 @@ LABEL45: istore 9 iload 9 iconst 0 - if_icmple LABEL60 - jump LABEL62 -LABEL60: + if_icmple LABEL64 + jump LABEL66 +LABEL64: iconst 143 istore 9 -LABEL62: +LABEL66: iload 0 cc_deleteall - iload 4 + iload 5 cc_deleteall iconst 17 istore 10 @@ -91,12 +96,12 @@ LABEL62: istore 14 invoke 8081 ostore 0 -LABEL78: +LABEL82: iload 12 iconst 10 - if_icmplt LABEL82 + if_icmplt LABEL86 jump LABEL241 -LABEL82: +LABEL86: iconst 105 iconst 73 iconst 1297 @@ -115,16 +120,11 @@ LABEL82: iload 12 enum istore 7 - iload 5 - iconst 1 - if_icmpeq LABEL104 - jump LABEL126 -LABEL104: oload 0 string_length iconst 0 if_icmpgt LABEL109 - jump LABEL125 + jump LABEL126 LABEL109: iload 6 if_gettext @@ -275,7 +275,7 @@ LABEL236: iconst 1 add istore 12 - jump LABEL78 + jump LABEL82 LABEL241: iload 13 iconst 0 @@ -288,13 +288,13 @@ LABEL245: istore 11 LABEL249: iload 13 - iload 3 + iload 4 if_sethide iconst 0 iload 11 iconst 1 iconst 0 - iload 4 + iload 5 if_setsize iconst -1 istore 15 @@ -315,7 +315,7 @@ LABEL273: iload 17 iconst -1 if_icmpne LABEL277 - jump LABEL360 + jump LABEL356 LABEL277: iload 17 iconst 364608 @@ -325,19 +325,14 @@ LABEL277: iload 15 iconst -1 if_icmpne LABEL286 - jump LABEL357 + jump LABEL353 LABEL286: - iload 5 - iconst 1 - if_icmpeq LABEL290 - jump LABEL312 -LABEL290: oload 0 string_length iconst 0 - if_icmpgt LABEL295 - jump LABEL311 -LABEL295: + if_icmpgt LABEL291 + jump LABEL308 +LABEL291: iload 15 if_gettext lowercase @@ -347,27 +342,27 @@ LABEL295: iconst 0 string_indexof_string iconst -1 - if_icmpne LABEL306 - jump LABEL309 -LABEL306: + if_icmpne LABEL302 + jump LABEL305 +LABEL302: iconst 1 istore 14 - jump LABEL311 -LABEL309: + jump LABEL307 +LABEL305: iconst 0 istore 14 -LABEL311: +LABEL307: iload 17 ; iload 14 ; sconst "fairyringFilterDbrow" ; runelite_callback ; istore 14 ; pop_int ; - jump LABEL314 -LABEL312: + jump LABEL310 +LABEL308: iconst 1 istore 14 -LABEL314: +LABEL310: iload 17 iconst 364624 iconst 0 @@ -377,26 +372,26 @@ LABEL314: if_gettext string_length iconst 0 - if_icmpgt LABEL325 - jump LABEL347 -LABEL325: + if_icmpgt LABEL321 + jump LABEL343 +LABEL321: iload 14 iconst 1 - if_icmpeq LABEL329 - jump LABEL347 -LABEL329: + if_icmpeq LABEL325 + jump LABEL343 +LABEL325: iconst 0 iload 15 if_sethide iload 7 iconst -1 - if_icmpne LABEL336 - jump LABEL339 -LABEL336: + if_icmpne LABEL332 + jump LABEL335 +LABEL332: iconst 0 iload 7 if_sethide -LABEL339: +LABEL335: iload 16 iload 15 set_array_int 1 @@ -404,42 +399,42 @@ LABEL339: iconst 1 add istore 16 - jump LABEL357 -LABEL347: + jump LABEL353 +LABEL343: iconst 1 iload 15 if_sethide iload 7 iconst -1 - if_icmpne LABEL354 - jump LABEL357 -LABEL354: + if_icmpne LABEL350 + jump LABEL353 +LABEL350: iconst 1 iload 7 if_sethide -LABEL357: +LABEL353: db_findnext istore 17 jump LABEL273 -LABEL360: +LABEL356: iload 16 iconst 0 - if_icmpgt LABEL364 - jump LABEL382 -LABEL364: + if_icmpgt LABEL360 + jump LABEL378 +LABEL360: get_varc_int 54 iconst 1 - if_icmpeq LABEL368 - jump LABEL375 -LABEL368: + if_icmpeq LABEL364 + jump LABEL371 +LABEL364: oload 1 iconst 0 iload 16 iconst 1 sub invoke 1341 - jump LABEL382 -LABEL375: + jump LABEL378 +LABEL371: oload 1 iconst 0 iload 16 @@ -447,15 +442,15 @@ LABEL375: sub iconst 823 invoke 1342 -LABEL382: +LABEL378: iload 0 cc_deleteall -LABEL384: +LABEL380: iload 18 iload 16 - if_icmplt LABEL388 - jump LABEL508 -LABEL388: + if_icmplt LABEL384 + jump LABEL504 +LABEL384: iconst 364608 iload 18 get_array_int 1 @@ -466,9 +461,9 @@ LABEL388: istore 17 iload 17 iconst -1 - if_icmpne LABEL400 - jump LABEL410 -LABEL400: + if_icmpne LABEL396 + jump LABEL406 +LABEL396: iload 17 iconst 364624 iconst 0 @@ -479,7 +474,7 @@ LABEL400: iconst 0 db_getfield ostore 2 -LABEL410: +LABEL406: iload 18 get_array_int 1 if_gettext @@ -493,16 +488,16 @@ LABEL410: istore 10 iload 7 iconst -1 - if_icmpne LABEL425 - jump LABEL431 -LABEL425: + if_icmpne LABEL421 + jump LABEL427 +LABEL421: iconst 2 iload 11 iconst 0 iconst 0 iload 7 if_setposition -LABEL431: +LABEL427: iload 9 iload 10 iconst 0 @@ -579,22 +574,17 @@ LABEL431: iconst 1 add istore 18 - jump LABEL384 -LABEL508: + jump LABEL380 +LABEL504: iconst 24969356 if_gettext ostore 2 - iload 5 - iconst 1 - if_icmpeq LABEL515 - jump LABEL536 -LABEL515: oload 0 string_length iconst 0 - if_icmpgt LABEL520 - jump LABEL536 -LABEL520: + if_icmpgt LABEL512 + jump LABEL528 +LABEL512: iconst 24969356 if_gettext lowercase @@ -604,27 +594,27 @@ LABEL520: iconst 0 string_indexof_string iconst -1 - if_icmpne LABEL531 - jump LABEL534 -LABEL531: + if_icmpne LABEL523 + jump LABEL526 +LABEL523: iconst 1 istore 14 - jump LABEL536 -LABEL534: + jump LABEL528 +LABEL526: iconst 0 istore 14 -LABEL536: +LABEL528: oload 2 string_length iconst 0 - if_icmpgt LABEL541 - jump LABEL591 -LABEL541: + if_icmpgt LABEL533 + jump LABEL583 +LABEL533: iload 14 iconst 1 - if_icmpeq LABEL545 - jump LABEL591 -LABEL545: + if_icmpeq LABEL537 + jump LABEL583 +LABEL537: iconst 0 iconst 24969356 if_sethide @@ -670,30 +660,30 @@ LABEL545: iconst 3 add istore 11 - jump LABEL594 -LABEL591: + jump LABEL586 +LABEL583: iconst 1 iconst 24969356 if_sethide -LABEL594: +LABEL586: iload 11 iconst 0 - if_icmpgt LABEL598 - jump LABEL602 -LABEL598: + if_icmpgt LABEL590 + jump LABEL594 +LABEL590: iload 11 iconst 3 sub istore 11 -LABEL602: +LABEL594: iload 0 if_getheight istore 10 iload 11 iconst 0 - if_icmple LABEL609 - jump LABEL640 -LABEL609: + if_icmple LABEL601 + jump LABEL632 +LABEL601: iload 0 iconst 4 iload 18 @@ -725,12 +715,12 @@ LABEL609: iconst 1 add istore 18 -LABEL640: +LABEL632: iload 11 iload 10 - if_icmpgt LABEL644 - jump LABEL659 -LABEL644: + if_icmpgt LABEL636 + jump LABEL651 +LABEL636: iconst 0 iload 11 iload 0 @@ -741,21 +731,21 @@ LABEL644: istore 10 get_varc_int iload 10 - if_icmpgt LABEL656 - jump LABEL658 -LABEL656: + if_icmpgt LABEL648 + jump LABEL650 +LABEL648: iload 10 set_varc_int -LABEL658: - jump LABEL665 -LABEL659: +LABEL650: + jump LABEL657 +LABEL651: iconst 0 iconst 0 iload 0 if_setscrollsize iconst 0 set_varc_int -LABEL665: +LABEL657: iload 1 iload 0 get_varc_int diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/itemstats/ItemStatEffectTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/itemstats/ItemStatEffectTest.java index 07d98081436..e2a46141603 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/itemstats/ItemStatEffectTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/itemstats/ItemStatEffectTest.java @@ -506,6 +506,57 @@ public void sunlitBracerHealingBoost() assertEquals(35, skillChange(Skill.HITPOINTS, 99, 99, saradominBrew)); } + @Test + public void testHaddock() + { + final Effect haddock = itemStats.get(ItemID.HADDOCK); + + assertEquals(10, skillChange(Skill.HITPOINTS, 99, 99, haddock)); + assertEquals(11, skillChange(Skill.HITPOINTS, 99, 98, haddock)); + assertEquals(18, skillChange(Skill.HITPOINTS, 99, 1, haddock)); + } + + @Test + public void testBlightedOverload() + { + final Effect blightedOverload = new ItemStatChanges().get(ItemID.DEADMAN4DOSEOVERLOAD); + + assertEquals(-10, skillChange(Skill.HITPOINTS, 49, 44, blightedOverload)); + assertEquals(-10, skillChange(Skill.HITPOINTS, 64, 64, blightedOverload)); + assertEquals(-10, skillChange(Skill.HITPOINTS, 99, 77, blightedOverload)); + + assertEquals(13, skillChange(Skill.STRENGTH, 36, 36, blightedOverload)); + assertEquals(17, skillChange(Skill.STRENGTH, 66, 66, blightedOverload)); + assertEquals(19, skillChange(Skill.STRENGTH, 74, 74, blightedOverload)); + assertEquals(20, skillChange(Skill.STRENGTH, 83, 83, blightedOverload)); + assertEquals(22, skillChange(Skill.STRENGTH, 99, 99, blightedOverload)); + + assertEquals(0, skillChange(Skill.DEFENCE, 1, 0, blightedOverload)); + assertEquals(-1, skillChange(Skill.DEFENCE, 1, 1, blightedOverload)); + assertEquals(-3, skillChange(Skill.DEFENCE, 29, 29, blightedOverload)); + assertEquals(-6, skillChange(Skill.DEFENCE, 54, 54, blightedOverload)); + assertEquals(-8, skillChange(Skill.DEFENCE, 71, 71, blightedOverload)); + assertEquals(-10, skillChange(Skill.DEFENCE, 90, 90, blightedOverload)); + assertEquals(-9, skillChange(Skill.DEFENCE, 99, 89, blightedOverload)); + assertEquals(-10, skillChange(Skill.DEFENCE, 99, 99, blightedOverload)); + assertEquals(-11, skillChange(Skill.DEFENCE, 99, 101, blightedOverload)); + assertEquals(-12, skillChange(Skill.DEFENCE, 99, 113, blightedOverload)); + + assertEquals(7, skillChange(Skill.RANGED, 3, 3, blightedOverload)); + assertEquals(11, skillChange(Skill.RANGED, 49, 49, blightedOverload)); + assertEquals(14, skillChange(Skill.RANGED, 72, 72, blightedOverload)); + assertEquals(15, skillChange(Skill.RANGED, 87, 87, blightedOverload)); + assertEquals(16, skillChange(Skill.RANGED, 99, 99, blightedOverload)); + + assertEquals(1, skillChange(Skill.MAGIC, 8, 8, blightedOverload)); + assertEquals(3, skillChange(Skill.MAGIC, 28, 28, blightedOverload)); + assertEquals(7, skillChange(Skill.MAGIC, 68, 68, blightedOverload)); + assertEquals(9, skillChange(Skill.MAGIC, 80, 80, blightedOverload)); + assertEquals(9, skillChange(Skill.MAGIC, 89, 89, blightedOverload)); + assertEquals(10, skillChange(Skill.MAGIC, 99, 89, blightedOverload)); + assertEquals(9, skillChange(Skill.MAGIC, 99, 100, blightedOverload)); + } + private int skillChange(Skill skill, int maxValue, int currentValue, Effect effect) { if (effect == null) diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java index 45d96bc4cc5..3b8be817e6c 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java @@ -103,8 +103,10 @@ public void testOreCounter() motherlodePlugin.onGameStateChanged(gameStateChanged); // Initial sack count + VarbitChanged sackVarbit = new VarbitChanged(); + sackVarbit.setVarbitId(VarbitID.MOTHERLODE_SACK_TRANSMIT); when(client.getVarbitValue(VarbitID.MOTHERLODE_SACK_TRANSMIT)).thenReturn(42); - motherlodePlugin.onVarbitChanged(new VarbitChanged()); + motherlodePlugin.onVarbitChanged(sackVarbit); // Create before inventory ItemContainer inventory = mock(ItemContainer.class); @@ -123,7 +125,7 @@ public void testOreCounter() // Withdraw 20 when(client.getVarbitValue(VarbitID.MOTHERLODE_SACK_TRANSMIT)).thenReturn(22); - motherlodePlugin.onVarbitChanged(new VarbitChanged()); + motherlodePlugin.onVarbitChanged(sackVarbit); inventory = mock(ItemContainer.class); // +1 rune, +4 nugget, +2 coal, +1 addy diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index 5eaa28b0b89..903e4b88d94 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -283,6 +283,15 @@ public void npcMatching() assertTrue(matches("Mature custodian stalker", Task.CUSTODIAN_STALKERS)); assertTrue(matches("Elder custodian stalker", Task.CUSTODIAN_STALKERS)); assertTrue(matches("Ancient Custodian", Task.CUSTODIAN_STALKERS)); + assertTrue(matches("Gryphon", Task.GRYPHONS)); + assertTrue(matches("Dire gryphon", Task.GRYPHONS)); + assertTrue(matches("Shellbane Gryphon", Task.GRYPHONS)); + assertTrue(matches("Shellbane Gryphon", Task.SHELLBANE_GRYPHON)); + assertTrue(matches("Lava Strykewyrm", Task.WYRMS)); + assertTrue(matches("Magma strykewyrm", Task.WYRMS)); + assertTrue(matches("Aquanite", Task.AQUANITES)); + assertTrue(matches("Elder Aquanite", Task.AQUANITES)); + assertTrue(matches("Frost dragon", Task.FROST_DRAGONS)); assertFalse(matches("Rat", Task.PIRATES)); assertFalse(matches("Wolf", Task.WEREWOLVES)); diff --git a/runelite-gradle-plugin/build.gradle.kts b/runelite-gradle-plugin/build.gradle.kts new file mode 100644 index 00000000000..4f3e5384c2f --- /dev/null +++ b/runelite-gradle-plugin/build.gradle.kts @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +plugins { + `java-gradle-plugin` + pmd +} + +dependencies { + implementation("net.runelite:cache:${project.version}") + + implementation(libs.guava) + implementation(libs.tomlj) + implementation(libs.javapoet) +} + +gradlePlugin { + plugins { + create("rl-assemble") { + id = "net.runelite.runelite-gradle-plugin.assemble" + implementationClass = "net.runelite.gradle.assemble.AssemblePlugin" + } + create("rl-component") { + id = "net.runelite.runelite-gradle-plugin.component" + implementationClass = "net.runelite.gradle.component.ComponentPlugin" + } + create("rl-index") { + id = "net.runelite.runelite-gradle-plugin.index" + implementationClass = "net.runelite.gradle.index.IndexPlugin" + } + create("rl-jarsign") { + id = "net.runelite.runelite-gradle-plugin.jarsign" + implementationClass = "net.runelite.gradle.jarsign.JarsignPlugin" + } + } +} + +pmd { + toolVersion = "7.2.0" + ruleSetFiles("./pmd-ruleset.xml") + isConsoleOutput = true + incrementalAnalysis = true + isIgnoreFailures = false + threads = Runtime.getRuntime().availableProcessors() +} diff --git a/runelite-maven-plugin/pmd-ruleset.xml b/runelite-gradle-plugin/pmd-ruleset.xml similarity index 97% rename from runelite-maven-plugin/pmd-ruleset.xml rename to runelite-gradle-plugin/pmd-ruleset.xml index d269a39b8f4..d060dd1b2ac 100644 --- a/runelite-maven-plugin/pmd-ruleset.xml +++ b/runelite-gradle-plugin/pmd-ruleset.xml @@ -29,7 +29,7 @@ xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> - RuneLite Maven Plugin PMD ruleset + RuneLite PMD ruleset diff --git a/runelite-gradle-plugin/settings.gradle.kts b/runelite-gradle-plugin/settings.gradle.kts new file mode 100644 index 00000000000..54a1fadafbf --- /dev/null +++ b/runelite-gradle-plugin/settings.gradle.kts @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +rootProject.name = "runelite-gradle-plugin" +apply(from = "../common.settings.gradle.kts") + +includeBuild("../cache") diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssemblePlugin.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssemblePlugin.java new file mode 100644 index 00000000000..dfe30339389 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssemblePlugin.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.assemble; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.tasks.TaskProvider; + +public abstract class AssemblePlugin implements Plugin +{ + + @Override + public void apply(Project project) + { + TaskProvider assembleRs2asm = project.getTasks() + .register("assembleRs2asm", AssembleTask.class, (task) -> task.setGroup("build")); + + project.getTasks() + .getByName("processResources") + .dependsOn(assembleRs2asm); + } + +} diff --git a/runelite-maven-plugin/src/main/java/net/runelite/mvn/AssembleMojo.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssembleTask.java similarity index 68% rename from runelite-maven-plugin/src/main/java/net/runelite/mvn/AssembleMojo.java rename to runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssembleTask.java index 22acaf4806b..9e35283fe95 100644 --- a/runelite-maven-plugin/src/main/java/net/runelite/mvn/AssembleMojo.java +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/assemble/AssembleTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Adam + * Copyright (c) 2024, LlemonDuck * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,11 +22,13 @@ * (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.mvn; + +package net.runelite.gradle.assemble; import com.google.common.io.Files; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Locale; @@ -36,38 +38,45 @@ 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; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.logging.Logger; +import org.gradle.api.tasks.CacheableTask; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; +import org.gradle.api.tasks.TaskAction; import org.tomlj.Toml; import org.tomlj.TomlParseError; import org.tomlj.TomlParseResult; import org.tomlj.TomlTable; -@Mojo( - name = "assemble", - defaultPhase = LifecyclePhase.GENERATE_RESOURCES -) -public class AssembleMojo extends AbstractMojo +@CacheableTask +public abstract class AssembleTask extends DefaultTask { - @Parameter(required = true) - private File scriptDirectory; + @InputDirectory + @PathSensitive(PathSensitivity.RELATIVE) + public abstract DirectoryProperty getScriptDirectory(); - @Parameter(required = true) - private File outputDirectory; + @OutputDirectory + public abstract DirectoryProperty getOutputDirectory(); - @Parameter(required = true) - private File componentsFile; + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + public abstract RegularFileProperty getComponentsFile(); - private final Log log = getLog(); + private final Logger log = getLogger(); - @Override - public void execute() throws MojoExecutionException, MojoFailureException + @TaskAction + public void assembleRs2Asm() throws IOException { + File scriptDirectory = getScriptDirectory().getAsFile().get(); + File outputDirectory = getOutputDirectory().getAsFile().get(); + File componentsFile = getComponentsFile().getAsFile().get(); + RuneLiteInstructions instructions = new RuneLiteInstructions(); instructions.init(); @@ -80,7 +89,7 @@ public void execute() throws MojoExecutionException, MojoFailureException for (File scriptFile : scriptDirectory.listFiles((dir, name) -> name.endsWith(".rs2asm"))) { - log.debug("Assembling " + scriptFile); + log.debug("Assembling {}", scriptFile); try (FileInputStream fin = new FileInputStream(scriptFile)) { @@ -99,21 +108,17 @@ public void execute() throws MojoExecutionException, MojoFailureException } 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); + throw new FileNotFoundException("Unable to find hash file for " + scriptFile); } ++count; } - catch (IOException ex) - { - throw new MojoFailureException("unable to open file", ex); - } } - log.info("Assembled " + count + " scripts"); + log.lifecycle("Assembled {} scripts", count); } - private Map buildComponentSymbols(File file) throws MojoExecutionException + private Map buildComponentSymbols(File file) { TomlParseResult result; try @@ -122,7 +127,7 @@ private Map buildComponentSymbols(File file) throws MojoExecutio } catch (IOException e) { - throw new MojoExecutionException("unable to read component file " + file.getName(), e); + throw new RuntimeException("unable to read component file " + file.getName(), e); } if (result.hasErrors()) @@ -131,7 +136,7 @@ private Map buildComponentSymbols(File file) throws MojoExecutio { log.error(err.toString()); } - throw new MojoExecutionException("unable to parse component file " + file.getName()); + throw new RuntimeException("unable to parse component file " + file.getName()); } Map symbols = new HashMap<>(); @@ -142,13 +147,13 @@ private Map buildComponentSymbols(File file) throws MojoExecutio if (!tbl.contains("id")) { - throw new MojoExecutionException("interface " + interfaceName + " has no id"); + throw new RuntimeException("interface " + interfaceName + " has no id"); } int interfaceId = (int) (long) tbl.getLong("id"); if (interfaceId < 0 || interfaceId > 0xffff) { - throw new MojoExecutionException("interface id out of range for " + interfaceName); + throw new RuntimeException("interface id out of range for " + interfaceName); } for (var entry2 : tbl.entrySet()) @@ -162,7 +167,7 @@ private Map buildComponentSymbols(File file) throws MojoExecutio int id = (int) (long) entry2.getValue(); if (id < 0 || id > 0xffff) { - throw new MojoExecutionException("component id out of range for " + componentName); + throw new RuntimeException("component id out of range for " + componentName); } var fullName = interfaceName.toLowerCase(Locale.ENGLISH) + ":" + componentName.toLowerCase(Locale.ENGLISH); diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentPlugin.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentPlugin.java new file mode 100644 index 00000000000..a30a6a4c260 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentPlugin.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.component; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.TaskProvider; + +public class ComponentPlugin implements Plugin +{ + + @Override + public void apply(Project project) + { + TaskProvider packComponents = project.getTasks() + .register("packComponents", ComponentTask.class, (task) -> task.setGroup("build")); + + project.getTasks() + .getByName("compileJava") + .dependsOn(packComponents); + + project.getExtensions() + .getByType(SourceSetContainer.class) + .getByName(SourceSet.MAIN_SOURCE_SET_NAME) + .getJava() + .srcDir(packComponents.map(ComponentTask::getOutputDirectory)); + } + +} diff --git a/runelite-maven-plugin/src/main/java/net/runelite/mvn/ComponentMojo.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentTask.java similarity index 62% rename from runelite-maven-plugin/src/main/java/net/runelite/mvn/ComponentMojo.java rename to runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentTask.java index 619fa273b65..e7458a962f5 100644 --- a/runelite-maven-plugin/src/main/java/net/runelite/mvn/ComponentMojo.java +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/component/ComponentTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Adam + * Copyright (c) 2024, LlemonDuck * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,7 +22,7 @@ * (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.mvn; +package net.runelite.gradle.component; import com.squareup.javapoet.FieldSpec; import com.squareup.javapoet.JavaFile; @@ -33,74 +33,61 @@ import java.util.Locale; import java.util.Set; import javax.lang.model.element.Modifier; -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; -import org.apache.maven.project.MavenProject; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.logging.Logger; +import org.gradle.api.tasks.CacheableTask; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; +import org.gradle.api.tasks.TaskAction; import org.tomlj.Toml; import org.tomlj.TomlParseError; import org.tomlj.TomlParseResult; import org.tomlj.TomlTable; -@Mojo( - name = "pack-components", - defaultPhase = LifecyclePhase.GENERATE_SOURCES -) -public class ComponentMojo extends AbstractMojo +@CacheableTask +public abstract class ComponentTask extends DefaultTask { - @Parameter(defaultValue = "${project}") - private MavenProject project; - @Parameter(required = true) - private File inputDirectory; + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + public abstract RegularFileProperty getInputFile(); - @Parameter(required = true) - private File outputDirectory; + @OutputDirectory + public abstract DirectoryProperty getOutputDirectory(); - private final Log log = getLog(); + private final Logger log = getLogger(); private final Set seenInterfaces = new HashSet<>(); private final Set seenComponents = new HashSet<>(); - @Override - public void execute() throws MojoExecutionException, MojoFailureException + @TaskAction + public void packComponents() throws IOException { + File inputFile = getInputFile().getAsFile().get(); + File outputDirectory = getOutputDirectory().getAsFile().get(); + TypeSpec.Builder interfaceType = TypeSpec.classBuilder("InterfaceID") .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .addAnnotation(Deprecated.class) - .addJavadoc("@deprecated Use {@link net.runelite.api.gameval.InterfaceID} instead"); + .addJavadoc("@deprecated Use {@link net.runelite.api.gameval.InterfaceID} instead");; TypeSpec.Builder componentType = TypeSpec.classBuilder("ComponentID") .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .addAnnotation(Deprecated.class) .addJavadoc("@deprecated Use nested classes of {@link net.runelite.api.gameval.InterfaceID} instead"); - for (File file : inputDirectory.listFiles((dir, name) -> name.endsWith(".toml"))) - { - executeOne(file, interfaceType, componentType); - } - - writeClass("net.runelite.api.widgets", interfaceType.build()); - writeClass("net.runelite.api.widgets", componentType.build()); + executeOne(inputFile, interfaceType, componentType); - // https://stackoverflow.com/a/30760908 - project.addCompileSourceRoot(outputDirectory.getAbsolutePath()); + writeClass(outputDirectory, "net.runelite.api.widgets", interfaceType.build()); + writeClass(outputDirectory, "net.runelite.api.widgets", componentType.build()); } - private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Builder componentType) throws MojoExecutionException + private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Builder componentType) throws IOException { - TomlParseResult result; - try - { - result = Toml.parse(file.toPath()); - } - catch (IOException e) - { - throw new MojoExecutionException("unable to read component file " + file.getName(), e); - } + TomlParseResult result = Toml.parse(file.toPath()); if (result.hasErrors()) { @@ -108,7 +95,7 @@ private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Buil { log.error(err.toString()); } - throw new MojoExecutionException("unable to parse component file " + file.getName()); + throw new RuntimeException("unable to parse component file " + file.getName()); } for (var entry : result.entrySet()) @@ -118,18 +105,18 @@ private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Buil if (!tbl.contains("id")) { - throw new MojoExecutionException("interface " + interfaceName + " has no id"); + throw new RuntimeException("interface " + interfaceName + " has no id"); } int interfaceId = (int) (long) tbl.getLong("id"); if (interfaceId < 0 || interfaceId > 0xffff) { - throw new MojoExecutionException("interface id out of range for " + interfaceName); + throw new RuntimeException("interface id out of range for " + interfaceName); } if (seenInterfaces.contains(interfaceId)) { - throw new MojoExecutionException("duplicate interface id " + interfaceId); + throw new RuntimeException("duplicate interface id " + interfaceId); } seenInterfaces.add(interfaceId); @@ -146,7 +133,7 @@ private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Buil int id = (int) (long) entry2.getValue(); if (id < 0 || id > 0xffff) { - throw new MojoExecutionException("component id out of range for " + componentName); + throw new RuntimeException("component id out of range for " + componentName); } var fullName = interfaceName.toUpperCase(Locale.ENGLISH) + "_" + componentName.toUpperCase(Locale.ENGLISH); @@ -155,7 +142,7 @@ private void executeOne(File file, TypeSpec.Builder interfaceType, TypeSpec.Buil if (seenComponents.contains(componentId)) { - throw new MojoExecutionException("duplicate component id " + comment); + throw new RuntimeException("duplicate component id " + comment); } seenComponents.add(componentId); @@ -176,18 +163,10 @@ private static void addField(TypeSpec.Builder type, String name, int value, Stri type.addField(field.build()); } - private void writeClass(String pkg, TypeSpec type) throws MojoExecutionException + private void writeClass(File outputDirectory, String pkg, TypeSpec type) throws IOException { - JavaFile javaFile = JavaFile.builder(pkg, type) - .build(); - - try - { - javaFile.writeTo(outputDirectory); - } - catch (IOException e) - { - throw new MojoExecutionException("unable to write java class", e); - } + JavaFile.builder(pkg, type) + .build() + .writeToFile(outputDirectory); } } diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexPlugin.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexPlugin.java new file mode 100644 index 00000000000..8e9de3e6f99 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexPlugin.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.index; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.tasks.TaskProvider; + +public abstract class IndexPlugin implements Plugin +{ + + @Override + public void apply(Project project) + { + TaskProvider buildRs2asmIndex = project.getTasks() + .register("buildRs2asmIndex", IndexTask.class, (task) -> task.setGroup("build")); + + project.getTasks() + .getByName("processResources") + .dependsOn(buildRs2asmIndex); + } +} diff --git a/runelite-maven-plugin/src/main/java/net/runelite/mvn/IndexMojo.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexTask.java similarity index 69% rename from runelite-maven-plugin/src/main/java/net/runelite/mvn/IndexMojo.java rename to runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexTask.java index 63cbb6dbcc0..494b0ec9d9e 100644 --- a/runelite-maven-plugin/src/main/java/net/runelite/mvn/IndexMojo.java +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/index/IndexTask.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Adam + * Copyright (c) 2024, LlemonDuck * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,35 +22,40 @@ * (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.mvn; +package net.runelite.gradle.index; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import static java.lang.Integer.parseInt; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugins.annotations.LifecyclePhase; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.tasks.CacheableTask; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; +import org.gradle.api.tasks.TaskAction; -@Mojo( - name = "build-index", - defaultPhase = LifecyclePhase.GENERATE_RESOURCES -) -public class IndexMojo extends AbstractMojo +@CacheableTask +public abstract class IndexTask extends DefaultTask { - @Parameter(required = true) - private File archiveOverlayDirectory; - @Parameter(required = true) - private File indexFile; + @InputDirectory + @PathSensitive(PathSensitivity.RELATIVE) + public abstract DirectoryProperty getArchiveOverlayDirectory(); - @Override - public void execute() throws MojoExecutionException, MojoFailureException + @OutputFile + public abstract RegularFileProperty getIndexFile(); + + @TaskAction + public void buildRs2Index() throws IOException { + File archiveOverlayDirectory = getArchiveOverlayDirectory().getAsFile().get(); + File indexFile = getIndexFile().getAsFile().get(); + try (DataOutputStream fout = new DataOutputStream(new FileOutputStream(indexFile))) { for (File indexFolder : archiveOverlayDirectory.listFiles()) @@ -77,10 +82,6 @@ public void execute() throws MojoExecutionException, MojoFailureException fout.writeInt(-1); } - catch (IOException ex) - { - throw new MojoExecutionException("error build index file", ex); - } } } diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignExtension.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignExtension.java new file mode 100644 index 00000000000..ded3cbc88d3 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignExtension.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.jarsign; + +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; + +public interface JarsignExtension +{ + + RegularFileProperty getKeystore(); + + Property getStorePass(); + + Property getKeyPass(); + + Property getAlias(); + +} diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignPlugin.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignPlugin.java new file mode 100644 index 00000000000..f252fdf90e3 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignPlugin.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.jarsign; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.plugins.BasePlugin; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.jvm.tasks.Jar; + +public abstract class JarsignPlugin implements Plugin +{ + + @Override + public void apply(Project project) + { + JarsignExtension ext = project.getExtensions() + .create(JarsignExtension.class, "jarsign", JarsignExtension.class); + ext.getKeystore().convention(toRegularFileProvider(project, propProvider(project, "jarsignerKeystore"))); + ext.getStorePass().convention(propProvider(project, "jarsignerStorepass")); + ext.getKeyPass().convention(propProvider(project, "jarsignerKeypass")); + ext.getAlias().convention(propProvider(project, "jarsignerAlias")); + + project.getTasks() + .withType(Jar.class, jarTask -> registerSignTask(project, jarTask, ext)); + } + + private void registerSignTask(Project project, Jar jarTask, JarsignExtension ext) + { + TaskProvider signTask = project.getTasks().register( + jarTask.getName() + "Sign", JarsignTask.class, (jarsignTask) -> + { + jarsignTask.setGroup(BasePlugin.BUILD_GROUP); + + jarsignTask.getBuildTask().convention(jarTask); + jarsignTask.getArchive().convention(jarTask.getArchiveFile()); + jarsignTask.getKeystore().convention(ext.getKeystore()); + jarsignTask.getStorePass().convention(ext.getStorePass()); + jarsignTask.getKeyPass().convention(ext.getKeyPass()); + jarsignTask.getAlias().convention(ext.getAlias()); + } + ); + jarTask.finalizedBy(signTask); + } + + private static Provider propProvider(Project project, String key) + { + return project.provider(() -> + (String) project.findProperty(key)); + } + + private static RegularFileProperty toRegularFileProvider(Project project, Provider propProvider) + { + return project.getObjects() + .fileProperty() + .fileProvider(propProvider.map(project::file)); + } +} diff --git a/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignTask.java b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignTask.java new file mode 100644 index 00000000000..8acb891db71 --- /dev/null +++ b/runelite-gradle-plugin/src/main/java/net/runelite/gradle/jarsign/JarsignTask.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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.gradle.jarsign; + +import org.gradle.api.DefaultTask; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.CacheableTask; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; +import org.gradle.api.tasks.TaskAction; +import org.gradle.jvm.tasks.Jar; + +@CacheableTask +public abstract class JarsignTask extends DefaultTask +{ + + public JarsignTask() + { + dependsOn(getBuildTask()); + onlyIf( + "target archive must be specified", + _t -> getArchive().getAsFile().get().exists() + ); + + onlyIf( + "keystore properties are set", + _t -> + getKeystore().isPresent() && + getStorePass().isPresent() && + getKeyPass().isPresent() && + getAlias().isPresent() + ); + } + + @Input + public abstract Property getBuildTask(); + + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + public abstract RegularFileProperty getArchive(); + + @InputFile + @PathSensitive(PathSensitivity.RELATIVE) + public abstract RegularFileProperty getKeystore(); + + @Input + public abstract Property getStorePass(); + + @Input + public abstract Property getKeyPass(); + + @Input + public abstract Property getAlias(); + + @TaskAction + public void signArtifact() + { + getProject().exec(exec -> + exec.commandLine( + "jarsigner", + "-keystore", getKeystore().getAsFile().get().getAbsolutePath(), + "-storepass", getStorePass().get(), + "-keypass", getKeyPass().get(), + getArchive().getAsFile().get().getAbsolutePath(), + getAlias().get() + )); + } + +} diff --git a/runelite-jshell/build.gradle.kts b/runelite-jshell/build.gradle.kts new file mode 100644 index 00000000000..9cec5126597 --- /dev/null +++ b/runelite-jshell/build.gradle.kts @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +plugins { + java + `maven-publish` + alias(libs.plugins.lombok) +} + +lombok.version = libs.versions.lombok.get() + +java { + withJavadocJar() + withSourcesJar() +} + +dependencies { + implementation(libs.slf4j.api) + implementation(libs.guava) { + exclude("com.google.code.findbugs", "jsr305") + exclude("com.google.errorprone", "error_prone_annotations") + exclude("com.google.j2objc", "j2objc-annotations") + exclude("org.codehaus.mojo", "animal-sniffer-annotations") + } + implementation(variantOf(libs.guice.core) { classifier("no_aop") }) { + exclude("com.google.guava", "guava") + } + implementation(libs.findbugs) + implementation(libs.fife.rsyntaxtextarea) + implementation(libs.fife.autocomplete) +} + +publishing { + publications { + create("jshell") { + from(components["java"]) + } + } +} diff --git a/runelite-jshell/pom.xml b/runelite-jshell/pom.xml deleted file mode 100644 index 67a8ed3c423..00000000000 --- a/runelite-jshell/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - 4.0.0 - - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - - - jshell - RuneLite JShell - - - - org.slf4j - slf4j-api - - - com.google.inject - guice - no_aop - - - org.projectlombok - lombok - provided - - - com.google.code.findbugs - jsr305 - - - com.fifesoft - rsyntaxtextarea - 3.1.2 - - - com.fifesoft - autocomplete - 3.1.1 - - - - net.runelite - flatlaf-extras - ${flatlaf.version} - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 11 - - - - - diff --git a/runelite-maven-plugin/pom.xml b/runelite-maven-plugin/pom.xml deleted file mode 100644 index ee335ca1866..00000000000 --- a/runelite-maven-plugin/pom.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - 4.0.0 - - - net.runelite - runelite-parent - 1.12.7-SNAPSHOT - - - runelite-maven-plugin - RuneLite Maven Plugin - maven-plugin - - - true - - - - - net.runelite - cache - ${project.version} - - - - org.apache.maven - maven-plugin-api - 3.0.5 - - - org.apache.maven.plugin-tools - maven-plugin-annotations - 3.4 - - - org.apache.maven - maven-core - 3.0.5 - - - - org.tomlj - tomlj - 1.1.0 - - - com.squareup - javapoet - 1.13.0 - - - - - - - org.apache.maven.plugins - maven-pmd-plugin - - true - true - - ${project.basedir}/pmd-ruleset.xml - - false - true - - - - - check - - - - - - org.apache.maven.plugins - maven-plugin-plugin - - - default-descriptor - process-classes - - - - - - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000000..102e7cc8084 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024, LlemonDuck + * 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. + */ + +rootProject.name = "runelite" + +// these two have artifact ids that don't match their project directory names +// and so they are done without includeBuild so that intellij can resolve them properly +include("jshell") +project(":jshell").projectDir = file("./runelite-jshell") +include("client") +project(":client").projectDir = file("./runelite-client") +apply(from = "./common.settings.gradle.kts") + +includeBuild("cache") +includeBuild("runelite-api") +includeBuild("runelite-gradle-plugin")