diff --git a/build.gradle.kts b/build.gradle.kts index 646866cf75..d9da869564 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,7 +36,7 @@ buildscript { dependencies { classpath("org.ajoberstar.grgit:grgit-core:4.1.0") classpath("com.github.ben-manes:gradle-versions-plugin:0.36.0") - classpath("com.openosrs:injector-plugin:1.1.7") + classpath("com.openosrs:injector-plugin:1.2.0") } } diff --git a/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java b/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java index 769c4be24a..08ffbfb3ba 100644 --- a/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java +++ b/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java @@ -24,7 +24,6 @@ */ package net.runelite.cache.util; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import net.runelite.http.api.RuneLiteAPI; @@ -42,14 +41,7 @@ public class XteaKeyManager { XteaClient xteaClient = new XteaClient(RuneLiteAPI.CLIENT); - try - { - keys = xteaClient.get(); - } - catch (IOException e) - { - e.printStackTrace(); - } + keys = null; logger.info("Loaded {} keys", keys.size()); } diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java index 0f11fccc92..0b017518c8 100644 --- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java +++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java @@ -25,6 +25,10 @@ package net.runelite.http.api; import com.google.gson.Gson; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.concurrent.TimeUnit; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.MediaType; @@ -33,21 +37,6 @@ import okhttp3.Request; import okhttp3.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.Properties; -import java.util.concurrent.TimeUnit; public class RuneLiteAPI { @@ -64,36 +53,27 @@ public class RuneLiteAPI private static final String BASE = "https://api.runelite.net"; private static final String WSBASE = "https://api.runelite.net/ws"; private static final String STATICBASE = "https://static.runelite.net"; - - private static final String OPENOSRS_SESSION = "http://session.openosrs.dev"; - private static final String OPENOSRS_XTEA = "http://xtea.openosrs.dev"; - private static final String MAVEN_METADATA = "https://repo.runelite.net/net/runelite/runelite-parent/maven-metadata.xml"; - private static final Properties properties = new Properties(); private static String version; - private static String upstreamVersion; private static int rsVersion; static { - try (InputStream in = RuneLiteAPI.class.getResourceAsStream("/runelite.properties")) + try { + InputStream in = RuneLiteAPI.class.getResourceAsStream("/runelite.properties"); properties.load(in); version = properties.getProperty("runelite.version"); + rsVersion = Integer.parseInt(properties.getProperty("rs.version")); String commit = properties.getProperty("runelite.commit"); boolean dirty = Boolean.parseBoolean(properties.getProperty("runelite.dirty")); - userAgent = "OpenOSRS/" + version + "-" + commit + (dirty ? "+" : ""); - - rsVersion = Integer.parseInt(properties.getProperty("rs.version")); - - parseMavenVersion(); + userAgent = "RuneLite/" + version + "-" + commit + (dirty ? "+" : ""); } catch (NumberFormatException e) { - e.printStackTrace(); - throw new RuntimeException("Version string has not been substituted; Re-run Gradle"); + throw new RuntimeException("Version string has not been substituted; Re-run maven"); } catch (IOException ex) { @@ -104,6 +84,7 @@ public class RuneLiteAPI .pingInterval(30, TimeUnit.SECONDS) .addNetworkInterceptor(new Interceptor() { + @Override public Response intercept(Chain chain) throws IOException { @@ -119,12 +100,14 @@ public class RuneLiteAPI public static HttpUrl getSessionBase() { - return HttpUrl.parse(OPENOSRS_SESSION); - } + final String prop = System.getProperty("runelite.session.url"); - public static HttpUrl getXteaBase() - { - return HttpUrl.parse(OPENOSRS_XTEA); + if (prop != null && !prop.isEmpty()) + { + return HttpUrl.parse(prop); + } + + return HttpUrl.parse(BASE + "/session"); } public static HttpUrl getApiBase() @@ -165,7 +148,12 @@ public class RuneLiteAPI public static String getVersion() { - return upstreamVersion; + return version; + } + + public static void setVersion(String version) + { + RuneLiteAPI.version = version; } public static int getRsVersion() @@ -173,60 +161,4 @@ public class RuneLiteAPI return rsVersion; } - public static String getRlpVersion() - { - return version; - } - - private static byte[] downloadUrl(URL toDownload) - { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - InputStream stream; - try - { - byte[] chunk = new byte[4096]; - int bytesRead; - URLConnection conn = toDownload.openConnection(); - conn.setRequestProperty("User-Agent", userAgent); - stream = conn.getInputStream(); - - while ((bytesRead = stream.read(chunk)) > 0) - { - outputStream.write(chunk, 0, bytesRead); - } - stream.close(); - } - catch (IOException e) - { - e.printStackTrace(); - return null; - } - - return outputStream.toByteArray(); - } - - private static void parseMavenVersion() - { - try (ByteArrayInputStream fis = new ByteArrayInputStream(downloadUrl(new URL(MAVEN_METADATA)))) - { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setValidating(false); - factory.setIgnoringElementContentWhitespace(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(fis); - NodeList versionList = doc.getElementsByTagName("version"); - for (int i = 0; i != versionList.getLength(); i++) - { - Node node = versionList.item(i); - if (node.getTextContent() != null && !node.getTextContent().endsWith("SNAPSHOT")) - { - upstreamVersion = node.getTextContent(); - } - } - } - catch (ParserConfigurationException | IOException | SAXException ex) - { - logger.error(null, ex); - } - } } diff --git a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java index ae56263c4e..ff999c6d71 100644 --- a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java +++ b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java @@ -25,7 +25,6 @@ package net.runelite.http.api.account; import com.google.gson.JsonParseException; -import io.reactivex.rxjava3.core.Observable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -96,7 +95,7 @@ public class AccountClient } } - public Observable sessionCheck() + public boolean sessionCheck() { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("account") @@ -104,23 +103,20 @@ public class AccountClient .build(); log.debug("Built URI: {}", url); - - return Observable.fromCallable(() -> - { - Request request = new Request.Builder() - .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) - .url(url) - .build(); - try (Response response = client.newCall(request).execute()) - { - return response.isSuccessful(); - } - catch (IOException ex) - { - log.debug("Unable to verify session", ex); - return true; // assume it is still valid if the server is unreachable - } - }); + Request request = new Request.Builder() + .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) + .url(url) + .build(); + + try (Response response = client.newCall(request).execute()) + { + return response.isSuccessful(); + } + catch (IOException ex) + { + log.debug("Unable to verify session", ex); + return true; // assume it is still valid if the server is unreachable + } } } diff --git a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java index 82a869568c..63ca36407a 100644 --- a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java +++ b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java @@ -40,7 +40,6 @@ import okhttp3.Response; @AllArgsConstructor public class ChatClient { - private static final RequestBody body = RequestBody.Companion.create(new byte[0], null); private final OkHttpClient client; public boolean submitKc(String username, String boss, int kc) throws IOException @@ -289,7 +288,6 @@ public class ChatClient } } - public Duels getDuels(String username) throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() diff --git a/http-api/src/main/java/net/runelite/http/api/chat/House.java b/http-api/src/main/java/net/runelite/http/api/chat/House.java deleted file mode 100644 index 5ae614e129..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/chat/House.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2019, Spedwards - * 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.http.api.chat; - -import lombok.Data; -import net.runelite.http.api.RuneLiteAPI; - -@Data -public class House -{ - private String owner; - private boolean guildedAltarPresent; - private boolean occultAltarPresent; - private boolean spiritTreePresent; - private boolean fairyRingPresent; - private boolean wildernessObeliskPresent; - private boolean repairStandPresent; - private boolean combatDummyPresent; - - @Override - public String toString() - { - return RuneLiteAPI.GSON.toJson(this); - } -} \ No newline at end of file diff --git a/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java b/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java index cdb6abc555..b66b802399 100644 --- a/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java +++ b/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java @@ -24,6 +24,7 @@ */ package net.runelite.http.api.config; +import com.google.gson.Gson; import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; @@ -48,6 +49,7 @@ import okhttp3.Response; public class ConfigClient { private static final MediaType TEXT_PLAIN = MediaType.parse("text/plain"); + private static final Gson GSON = RuneLiteAPI.GSON; private final OkHttpClient client; private final UUID uuid; @@ -114,6 +116,59 @@ public class ConfigClient return future; } + public CompletableFuture patch(Configuration configuration) + { + CompletableFuture future = new CompletableFuture<>(); + + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("config") + .build(); + + log.debug("Built URI: {}", url); + + Request request = new Request.Builder() + .patch(RequestBody.create(RuneLiteAPI.JSON, GSON.toJson(configuration))) + .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) + .url(url) + .build(); + + client.newCall(request).enqueue(new Callback() + { + @Override + public void onFailure(Call call, IOException e) + { + log.warn("Unable to synchronize configuration item", e); + future.completeExceptionally(e); + } + + @Override + public void onResponse(Call call, Response response) + { + if (response.code() != 200) + { + String body = "bad response"; + try + { + body = response.body().string(); + } + catch (IOException ignored) + { + } + + log.warn("failed to synchronize some of {} configuration values: {}", configuration.getConfig().size(), body); + } + else + { + log.debug("Synchronized {} configuration values", configuration.getConfig().size()); + } + response.close(); + future.complete(null); + } + }); + + return future; + } + public CompletableFuture unset(String key) { CompletableFuture future = new CompletableFuture<>(); @@ -151,4 +206,4 @@ public class ConfigClient return future; } -} \ No newline at end of file +} diff --git a/http-api/src/main/java/net/runelite/http/api/config/ConfigEntry.java b/http-api/src/main/java/net/runelite/http/api/config/ConfigEntry.java index 33db4064e9..d8b69dae72 100644 --- a/http-api/src/main/java/net/runelite/http/api/config/ConfigEntry.java +++ b/http-api/src/main/java/net/runelite/http/api/config/ConfigEntry.java @@ -24,28 +24,15 @@ */ package net.runelite.http.api.config; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor public class ConfigEntry { private String key; private String value; - - public String getKey() - { - return key; - } - - public void setKey(String key) - { - this.key = key; - } - - public String getValue() - { - return value; - } - - public void setValue(String value) - { - this.value = value; - } -} \ No newline at end of file +} diff --git a/http-api/src/main/java/net/runelite/http/api/config/Configuration.java b/http-api/src/main/java/net/runelite/http/api/config/Configuration.java index 7d5b86d9b2..44269b735a 100644 --- a/http-api/src/main/java/net/runelite/http/api/config/Configuration.java +++ b/http-api/src/main/java/net/runelite/http/api/config/Configuration.java @@ -26,18 +26,12 @@ package net.runelite.http.api.config; import java.util.ArrayList; import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; +@Data +@AllArgsConstructor public class Configuration { private List config = new ArrayList<>(); - - public Configuration(List config) - { - this.config = config; - } - - public List getConfig() - { - return config; - } -} \ No newline at end of file +} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/DiscordClient.java b/http-api/src/main/java/net/runelite/http/api/discord/DiscordClient.java deleted file mode 100644 index 0640494a62..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/DiscordClient.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord; - -import com.google.gson.Gson; -import java.io.IOException; -import lombok.extern.slf4j.Slf4j; -import net.runelite.http.api.RuneLiteAPI; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.MediaType; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - -@Slf4j -public class DiscordClient -{ - public static final Gson gson = new Gson(); - private static final MediaType JSON = MediaType.parse("application/json"); - - public void message(HttpUrl url, DiscordMessage discordMessage) - { - log.debug("Message being sent"); - message(url, discordMessage, 0, 5); - } - - private void message(HttpUrl url, DiscordMessage discordMessage, int retryAttempt, int maxAttempts) - { - RequestBody body = RequestBody.Companion.create(gson.toJson(discordMessage), JSON); - Request request = new Request.Builder() - .post(body) - .url(url) - .build(); - - log.debug("Attempting to message with {}", discordMessage); - - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() - { - - @Override - public void onFailure(Call call, IOException e) - { - log.warn("Unable to submit discord post.", e); - if (retryAttempt < maxAttempts) - { - message(url, discordMessage, retryAttempt + 1, maxAttempts); - } - } - - @Override - public void onResponse(Call call, Response response) throws IOException - { - try - { - if (response.body() == null) - { - log.debug("API Call - Reponse was null."); - return; - } - if (response.body().string().contains("You are being rate limited") && retryAttempt < maxAttempts) - { - log.debug("You are being rate limited, retrying..."); - message(url, discordMessage, retryAttempt + 1, maxAttempts); - } - } - finally - { - response.close(); - log.debug("Submitted discord log record"); - } - } - }); - } -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/DiscordEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/DiscordEmbed.java deleted file mode 100644 index d702a0d82d..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/DiscordEmbed.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord; - -import java.util.ArrayList; -import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; -import net.runelite.http.api.discord.embed.AuthorEmbed; -import net.runelite.http.api.discord.embed.FieldEmbed; -import net.runelite.http.api.discord.embed.FooterEmbed; -import net.runelite.http.api.discord.embed.ImageEmbed; -import net.runelite.http.api.discord.embed.ProviderEmbed; -import net.runelite.http.api.discord.embed.ThumbnailEmbed; -import net.runelite.http.api.discord.embed.VideoEmbed; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@ToString -public class DiscordEmbed -{ - String title; - String type; - String description; - String url; - String timestamp; - String iconurl; - String color; - FooterEmbed footer; - ImageEmbed image; - ThumbnailEmbed thumbnail; - VideoEmbed video; - ProviderEmbed provider; - AuthorEmbed author; - final List fields = new ArrayList<>(); - - public DiscordEmbed(AuthorEmbed author, ThumbnailEmbed thumb, String description, FooterEmbed footer, String color, List fields) - { - this.author = author; - this.thumbnail = thumb; - this.description = description; - this.footer = footer; - this.color = color; - this.fields.addAll(fields); - } - - public DiscordMessage toDiscordMessage(String username, String content, String avatarUrl) - { - return new DiscordMessage(username, content, avatarUrl, this); - } -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/AuthorEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/AuthorEmbed.java deleted file mode 100644 index 46d1f34213..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/AuthorEmbed.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class AuthorEmbed -{ - String name; - String url; - String icon_url; - String proxy_icon_url; -} \ No newline at end of file diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/FieldEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/FieldEmbed.java deleted file mode 100644 index 7abf9c3832..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/FieldEmbed.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class FieldEmbed -{ - @NonNull - String name; - @NonNull - String value; - boolean inline; -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/FooterEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/FooterEmbed.java deleted file mode 100644 index 73185c0d7f..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/FooterEmbed.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class FooterEmbed -{ - String text; - String icon_url; - String proxy_icon_url; -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/ProviderEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/ProviderEmbed.java deleted file mode 100644 index 0ac555189e..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/ProviderEmbed.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class ProviderEmbed -{ - String name; - String url; -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/ThumbnailEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/ThumbnailEmbed.java deleted file mode 100644 index 8c17e4dfc8..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/ThumbnailEmbed.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class ThumbnailEmbed -{ - String url; - String proxy_url; - int height; - int width; -} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/VideoEmbed.java b/http-api/src/main/java/net/runelite/http/api/discord/embed/VideoEmbed.java deleted file mode 100644 index af396f0ebf..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/VideoEmbed.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2018, Forsco - * 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.http.api.discord.embed; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@ToString -public class VideoEmbed -{ - String url; - int height; - int width; -} diff --git a/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java b/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java index 6d28ef7c46..3271f9994e 100644 --- a/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java +++ b/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java @@ -70,10 +70,9 @@ public class ExamineClient log.debug("Built URI: {}", url); - RequestBody body = RequestBody.Companion.create(text, TEXT); Request request = new Request.Builder() .url(url) - .post(body) + .post(RequestBody.create(TEXT, text)) .build(); client.newCall(request).enqueue(new Callback() diff --git a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java index 18204f6a56..1d898ccf27 100644 --- a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java +++ b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java @@ -59,7 +59,6 @@ public class GrandExchangeClient .addPathSegment("ge") .build(); - RequestBody body = RequestBody.Companion.create(GSON.toJson(grandExchangeTrade), JSON); Request.Builder builder = new Request.Builder(); if (uuid != null) { @@ -71,7 +70,7 @@ public class GrandExchangeClient } Request request = builder - .post(body) + .post(RequestBody.create(JSON, GSON.toJson(grandExchangeTrade))) .url(url) .build(); diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java index 1e376204da..37fb27fc24 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java @@ -24,18 +24,14 @@ */ package net.runelite.http.api.item; -import com.google.common.collect.ImmutableMap; import com.google.gson.JsonParseException; -import com.google.gson.stream.JsonReader; -import io.reactivex.rxjava3.core.Observable; -import java.awt.image.BufferedImage; +import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.Arrays; -import javax.imageio.ImageIO; -import javax.naming.directory.SearchResult; +import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.util.Map; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; @@ -50,13 +46,13 @@ public class ItemClient { private final OkHttpClient client; - public ItemPrice lookupItemPrice(int itemId) throws IOException + public ItemPrice[] getPrices() throws IOException { - HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("item") - .addPathSegment("" + itemId) - .addPathSegment("price") - .build(); + .addPathSegment("prices.js"); + + HttpUrl url = urlBuilder.build(); log.debug("Built URI: {}", url); @@ -68,43 +64,7 @@ public class ItemClient { if (!response.isSuccessful()) { - log.debug("Error looking up item {}: {}", itemId, response); - return null; - } - - InputStream in = response.body().byteStream(); - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), ItemPrice.class); - } - catch (JsonParseException ex) - { - throw new IOException(ex); - } - } - - public ItemPrice[] lookupItemPrice(Integer[] itemIds) throws IOException - { - HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() - .addPathSegment("item") - .addPathSegment("price"); - - for (int itemId : itemIds) - { - urlBuilder.addQueryParameter("id", String.valueOf(itemId)); - } - - HttpUrl url = urlBuilder.build(); - - log.debug("Built URI: {}", url); - - Request request = new Request.Builder() - .url(url) - .build(); - - try (Response response = client.newCall(request).execute()) - { - if (!response.isSuccessful()) - { - log.debug("Error looking up items {}: {}", Arrays.toString(itemIds), response); + log.warn("Error looking up prices: {}", response); return null; } @@ -117,13 +77,14 @@ public class ItemClient } } - public Observable getIcon(int itemId) + public Map getStats() throws IOException { - HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + HttpUrl.Builder urlBuilder = RuneLiteAPI.getStaticBase().newBuilder() .addPathSegment("item") - .addPathSegment("" + itemId) - .addPathSegment("icon") - .build(); + // TODO: Change this to stats.min.json later after release is undeployed + .addPathSegment("stats.ids.min.json"); + + HttpUrl url = urlBuilder.build(); log.debug("Built URI: {}", url); @@ -131,128 +92,23 @@ public class ItemClient .url(url) .build(); - return Observable.defer(() -> + try (Response response = client.newCall(request).execute()) { - try (Response response = client.newCall(request).execute()) + if (!response.isSuccessful()) { - if (!response.isSuccessful()) - { - log.debug("Error grabbing icon {}: {}", itemId, response); - return Observable.just(null); - } - - InputStream in = response.body().byteStream(); - synchronized (ImageIO.class) - { - return Observable.just(ImageIO.read(in)); - } + log.warn("Error looking up item stats: {}", response); + return null; } - }); - } - public Observable search(String itemName) - { - HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() - .addPathSegment("item") - .addPathSegment("search") - .addQueryParameter("query", itemName) - .build(); - - log.debug("Built URI: {}", url); - - return Observable.defer(() -> + InputStream in = response.body().byteStream(); + final Type typeToken = new TypeToken>() + { + }.getType(); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), typeToken); + } + catch (JsonParseException ex) { - Request request = new Request.Builder() - .url(url) - .build(); - - try (Response response = client.newCall(request).execute()) - { - if (!response.isSuccessful()) - { - log.debug("Error looking up item {}: {}", itemName, response); - return Observable.just(null); - } - - InputStream in = response.body().byteStream(); - return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), SearchResult.class)); - } - catch (JsonParseException ex) - { - return Observable.error(ex); - } - }); - } - - public Observable> getPrices() - { - HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() - .addPathSegment("item") - .addPathSegment("prices.js"); - - HttpUrl url = urlBuilder.build(); - - log.debug("Built URI: {}", url); - - return Observable.fromCallable(() -> - { - Request request = new Request.Builder() - .url(url) - .build(); - - try (JsonReader reader = new JsonReader(client.newCall(request).execute().body().charStream())) - { - ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(3666); - reader.beginArray(); - - while (reader.hasNext()) - { - ItemPrice price = RuneLiteAPI.GSON.fromJson(reader, ItemPrice.class); - - builder.put( - price.getId(), - price - ); - } - - reader.endArray(); - return builder.build(); - } - }); - } - - public Observable> getStats() - { - HttpUrl url = RuneLiteAPI.getStaticBase() - .newBuilder() - .addPathSegment("item") - .addPathSegment("stats.ids.min.json") - .build(); - - log.debug("Built URI {}", url); - return Observable.fromCallable(() -> - { - Request request = new Request.Builder() - .url(url) - .build(); - - try (JsonReader reader = new JsonReader(client.newCall(request).execute().body().charStream())) - { - // This is the size the items are as I wrote this. the builder gets increased by 1 every time otherwise - ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(7498); - reader.beginObject(); - - while (reader.hasNext()) - { - builder.put( - Integer.parseInt(reader.nextName()), - RuneLiteAPI.GSON.fromJson(reader, ItemStats.class) - ); - } - - reader.endObject(); - return builder.build(); - } - }); + throw new IOException(ex); + } } } diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemEquipmentStats.java b/http-api/src/main/java/net/runelite/http/api/item/ItemEquipmentStats.java index 0afdce988e..5848513c00 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemEquipmentStats.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemEquipmentStats.java @@ -29,7 +29,7 @@ import lombok.Builder; import lombok.Value; @Value -@Builder(builderClassName = "Builder") +@Builder public class ItemEquipmentStats { private int slot; diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemStats.java b/http-api/src/main/java/net/runelite/http/api/item/ItemStats.java index 2ae616f703..55a1bf76dd 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemStats.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemStats.java @@ -24,14 +24,10 @@ */ package net.runelite.http.api.item; -import lombok.AllArgsConstructor; -import lombok.Builder; import com.google.gson.annotations.SerializedName; import lombok.Value; @Value -@AllArgsConstructor -@Builder(builderClassName = "Builder") public class ItemStats { private boolean quest; @@ -57,9 +53,9 @@ public class ItemStats { final ItemEquipmentStats equipment = this.equipment != null ? this.equipment - : new ItemEquipmentStats.Builder().build(); + : new ItemEquipmentStats.ItemEquipmentStatsBuilder().build(); - newEquipment = new ItemEquipmentStats.Builder() + newEquipment = new ItemEquipmentStats.ItemEquipmentStatsBuilder() .slot(equipment.getSlot()) .astab(equipment.getAstab() - other.equipment.getAstab()) .aslash(equipment.getAslash() - other.equipment.getAslash()) diff --git a/http-api/src/main/java/net/runelite/http/api/discord/embed/ImageEmbed.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootAggregate.java similarity index 79% rename from http-api/src/main/java/net/runelite/http/api/discord/embed/ImageEmbed.java rename to http-api/src/main/java/net/runelite/http/api/loottracker/LootAggregate.java index df8c511384..a5437226cc 100644 --- a/http-api/src/main/java/net/runelite/http/api/discord/embed/ImageEmbed.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootAggregate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Forsco + * Copyright (c) 2020, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -7,7 +7,6 @@ * * 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. @@ -23,26 +22,23 @@ * (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.http.api.loottracker; -package net.runelite.http.api.discord.embed; - +import java.time.Instant; +import java.util.Collection; import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; -@Getter -@Setter -@Builder +@Data @AllArgsConstructor @NoArgsConstructor -@ToString -public class ImageEmbed +public class LootAggregate { - String url; - String proxy_url; - int height; - int width; + private String eventId; + private LootRecordType type; + private Collection drops; + private Instant first_time; + private Instant last_time; + private int amount; } diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java index 18f41fc0f0..01e180c55b 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecord.java @@ -26,10 +26,8 @@ package net.runelite.http.api.loottracker; import java.time.Instant; import java.util.Collection; -import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; -import lombok.Getter; import lombok.NoArgsConstructor; @Data @@ -38,27 +36,8 @@ import lombok.NoArgsConstructor; public class LootRecord { private String eventId; - @Getter - private String username; private LootRecordType type; private Object metadata; private Collection drops; private Instant time; - - /** - * constructor for lootRecords retrieved by http api (doesn't store/retrieve username) - * @param eventId - the eventID or the name/title of the LootRecord - * @param type - The LootRecordType - * @param gameItems - the list of items/quantities - * @param time - the Instant that the Loot Record was received - */ - public LootRecord(String eventId, LootRecordType type, List gameItems, Instant time) - { - // Insert blank username - this.username = ""; - this.eventId = eventId; - this.type = type; - this.drops = gameItems; - this.time = time; - } } diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecordType.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecordType.java index 94535413ea..33e622de45 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecordType.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootRecordType.java @@ -29,7 +29,6 @@ public enum LootRecordType NPC, PLAYER, EVENT, - DEATH, PICKPOCKET, UNKNOWN } diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java index 4a66d04a2a..4fc68a6ba5 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java @@ -64,13 +64,18 @@ public class LootTrackerClient { CompletableFuture future = new CompletableFuture<>(); - RequestBody body = RequestBody.Companion.create(GSON.toJson(lootRecords), JSON); + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("loottracker") + .build(); + Request.Builder requestBuilder = new Request.Builder(); if (uuid != null) { requestBuilder.header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()); } - requestBuilder.post(body); + requestBuilder.post(RequestBody.create(JSON, GSON.toJson(lootRecords))) + .url(url) + .build(); client.newCall(requestBuilder.build()).enqueue(new Callback() { @@ -100,7 +105,7 @@ public class LootTrackerClient return future; } - public Collection get() throws IOException + public Collection get() throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("loottracker") @@ -120,7 +125,9 @@ public class LootTrackerClient } InputStream in = response.body().byteStream(); - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), new TypeToken>() {}.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), new TypeToken>() + { + }.getType()); } catch (JsonParseException ex) { diff --git a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java index 697c8a0d44..7bd1706cf4 100644 --- a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java +++ b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java @@ -25,7 +25,6 @@ package net.runelite.http.api.osbuddy; import com.google.gson.JsonParseException; -import io.reactivex.rxjava3.core.Observable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -44,7 +43,7 @@ public class OSBGrandExchangeClient { private final OkHttpClient client; - public Observable lookupItem(int itemId) + public OSBGrandExchangeResult lookupItem(int itemId) throws IOException { final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("osb") @@ -54,26 +53,23 @@ public class OSBGrandExchangeClient log.debug("Built URI: {}", url); - return Observable.defer(() -> + final Request request = new Request.Builder() + .url(url) + .build(); + + try (final Response response = client.newCall(request).execute()) { - final Request request = new Request.Builder() - .url(url) - .build(); - - try (final Response response = client.newCall(request).execute()) + if (!response.isSuccessful()) { - if (!response.isSuccessful()) - { - return Observable.error(new IOException("Error looking up item id: " + response)); - } - - final InputStream in = response.body().byteStream(); - return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), OSBGrandExchangeResult.class)); + throw new IOException("Error looking up item id: " + response); } - catch (JsonParseException ex) - { - return Observable.error(ex); - } - }); + + final InputStream in = response.body().byteStream(); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), OSBGrandExchangeResult.class); + } + catch (JsonParseException ex) + { + throw new IOException(ex); + } } } diff --git a/http-api/src/main/java/net/runelite/http/api/util/TypeAdapters.java b/http-api/src/main/java/net/runelite/http/api/util/TypeAdapters.java deleted file mode 100644 index e85f024df5..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/util/TypeAdapters.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2019, Lucas - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package net.runelite.http.api.util; - -import com.google.gson.TypeAdapter; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonToken; -import com.google.gson.stream.JsonWriter; -import java.io.IOException; -import java.time.Instant; -import net.runelite.http.api.item.ItemEquipmentStats; -import net.runelite.http.api.item.ItemPrice; -import net.runelite.http.api.item.ItemStats; - -/** - * A class to put GSON TypeAdapters. These make just as fast the first time you - * deserialize something as it would otherwise be after creating these itself. - * Kinda funny actually, cause the first time probably matters the most, especially - * for jsons that only get deserialized once. - */ -public class TypeAdapters -{ - public static final TypeAdapter ITEMSTATS = new TypeAdapter() - { - @Deprecated - @Override - public void write(JsonWriter out, ItemStats value) - { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public ItemStats read(JsonReader in) throws IOException - { - in.beginObject(); - - boolean quest = false; - boolean equip = false; - double weight = 0; - ItemEquipmentStats stats = null; - while (in.peek() != JsonToken.END_OBJECT) - { - switch (in.nextName()) - { - case "quest": - quest = in.nextBoolean(); - break; - case "equipable": - equip = in.nextBoolean(); - break; - case "weight": - weight = in.nextDouble(); - break; - case "equipment": - stats = EQUIPMENTSTATS.read(in); - break; - } - } - in.endObject(); - - return new ItemStats(quest, equip, weight, 0, stats); - } - }; - - public static final TypeAdapter EQUIPMENTSTATS = new TypeAdapter() - { - @Deprecated - @Override - public void write(JsonWriter out, ItemEquipmentStats value) - { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public ItemEquipmentStats read(JsonReader in) throws IOException - { - ItemEquipmentStats.Builder builder = ItemEquipmentStats.builder(); - - in.beginObject(); - while (in.peek() != JsonToken.END_OBJECT) - { - String name = in.nextName(); - int val = in.nextInt(); - switch (name) - { - case "slot": - builder.slot(val); - break; - case "astab": - builder.astab(val); - break; - case "aslash": - builder.aslash(val); - break; - case "acrush": - builder.acrush(val); - break; - case "amagic": - builder.amagic(val); - break; - case "arange": - builder.arange(val); - break; - case "dstab": - builder.dstab(val); - break; - case "dslash": - builder.dslash(val); - break; - case "dcrush": - builder.dcrush(val); - break; - case "dmagic": - builder.dmagic(val); - break; - case "drange": - builder.drange(val); - break; - case "str": - builder.str(val); - break; - case "rstr": - builder.rstr(val); - break; - case "mdmg": - builder.mdmg(val); - break; - case "prayer": - builder.prayer(val); - break; - case "aspeed": - builder.aspeed(val); - break; - } - } - in.endObject(); - - return builder.build(); - } - }; - - public static final TypeAdapter ITEMPRICE = new TypeAdapter() - { - @Override - public void write(JsonWriter out, ItemPrice value) - { - throw new UnsupportedOperationException("Not supported"); - } - - @Override - public ItemPrice read(JsonReader in) throws IOException - { - /* - * The ItemPrice json hosted by runelite is 'perfect' - * by that I mean every field always exists, even with value 0. - * This is why we can skip names and known-0 values - */ - ItemPrice ret = new ItemPrice(); - - in.beginObject(); - - // ID - in.skipValue(); - ret.setId(in.nextInt()); - - // Name - in.skipValue(); - ret.setName(in.nextString()); - - // Price - in.skipValue(); - ret.setPrice(in.nextInt()); - - // Time - in.skipValue(); - in.beginObject(); - - // Secs - in.skipValue(); - ret.setTime(Instant.ofEpochSecond(in.nextLong())); - - // Nanos - in.skipValue(); - in.skipValue(); - - in.endObject(); - in.endObject(); - - return ret; - } - }; -} diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java index fc8e859a4b..d6e0865f14 100644 --- a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java @@ -33,7 +33,6 @@ import java.nio.charset.StandardCharsets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; -import okhttp3.CacheControl; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -55,7 +54,6 @@ public class WorldClient Request request = new Request.Builder() .url(url) - .cacheControl(CacheControl.FORCE_NETWORK) .build(); try (Response response = client.newCall(request).execute()) diff --git a/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java b/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java index e99fe5cd0b..2819c92ceb 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java @@ -16,6 +16,10 @@ package net.runelite.http.api.ws; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -27,9 +31,6 @@ import com.google.gson.internal.Streams; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; /** * Adapts values whose runtime type may differ from their declaration type. This diff --git a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketMessage.java b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketMessage.java index 227e61eb56..d732c110cd 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketMessage.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketMessage.java @@ -24,9 +24,7 @@ */ package net.runelite.http.api.ws; -import net.runelite.api.events.Event; - -public class WebsocketMessage implements Event +public class WebsocketMessage { protected boolean _party; diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/Handshake.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/Handshake.java index 0d7363a260..557f8f524b 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/Handshake.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/Handshake.java @@ -25,10 +25,9 @@ package net.runelite.http.api.ws.messages; import java.util.UUID; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; -public class Handshake extends WebsocketMessage implements Event +public class Handshake extends WebsocketMessage { private UUID session; diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/LoginResponse.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/LoginResponse.java index 588736887d..b517e773a2 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/LoginResponse.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/LoginResponse.java @@ -24,14 +24,13 @@ */ package net.runelite.http.api.ws.messages; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; /** * Called after a successful login to the server * @author Adam */ -public class LoginResponse extends WebsocketMessage implements Event +public class LoginResponse extends WebsocketMessage { private String username; diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Join.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Join.java index e68910567b..21aed0f653 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Join.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Join.java @@ -27,12 +27,11 @@ package net.runelite.http.api.ws.messages.party; import java.util.UUID; import lombok.EqualsAndHashCode; import lombok.Value; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; @Value @EqualsAndHashCode(callSuper = true) -public class Join extends WebsocketMessage implements Event +public class Join extends WebsocketMessage { private final UUID partyId; private final String name; diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java index b03e3dc576..e284ff0cf8 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java @@ -24,7 +24,8 @@ */ package net.runelite.http.api.ws.messages.party; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; -public class Part extends WebsocketMessage implements Event {} +public class Part extends WebsocketMessage +{ +} diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java index c61ea86187..480e2660c1 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java @@ -24,12 +24,10 @@ */ package net.runelite.http.api.ws.messages.party; -import lombok.EqualsAndHashCode; import lombok.Value; -import net.runelite.api.events.Event; + @Value -@EqualsAndHashCode(callSuper = true) -public class PartyChatMessage extends PartyMemberMessage implements Event +public class PartyChatMessage extends PartyMemberMessage { private final String value; } diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMemberMessage.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMemberMessage.java index 3a4f330343..9d5cab8545 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMemberMessage.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMemberMessage.java @@ -3,11 +3,10 @@ package net.runelite.http.api.ws.messages.party; import java.util.UUID; import lombok.Getter; import lombok.Setter; -import net.runelite.api.events.Event; @Getter @Setter -public abstract class PartyMemberMessage extends PartyMessage implements Event +public abstract class PartyMemberMessage extends PartyMessage { private UUID memberId; } diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMessage.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMessage.java index 2f9ef90d92..709457ed8c 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMessage.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyMessage.java @@ -24,10 +24,9 @@ */ package net.runelite.http.api.ws.messages.party; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; -public abstract class PartyMessage extends WebsocketMessage implements Event +public abstract class PartyMessage extends WebsocketMessage { public PartyMessage() { diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java index fd024c6cf3..7f940e8060 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java @@ -27,12 +27,11 @@ package net.runelite.http.api.ws.messages.party; import java.util.UUID; import lombok.EqualsAndHashCode; import lombok.Value; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; @Value @EqualsAndHashCode(callSuper = true) -public class UserJoin extends WebsocketMessage implements Event +public class UserJoin extends WebsocketMessage { private final UUID memberId; private final UUID partyId; diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserPart.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserPart.java index 1dcd277c02..e80c6002bd 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserPart.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserPart.java @@ -27,12 +27,11 @@ package net.runelite.http.api.ws.messages.party; import java.util.UUID; import lombok.EqualsAndHashCode; import lombok.Value; -import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; @Value @EqualsAndHashCode(callSuper = true) -public class UserPart extends WebsocketMessage implements Event +public class UserPart extends WebsocketMessage { private final UUID memberId; } diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java index e4d08d199f..c95038c9fa 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java @@ -26,8 +26,9 @@ package net.runelite.http.api.ws.messages.party; import lombok.EqualsAndHashCode; import lombok.Value; -import net.runelite.api.events.Event; @Value @EqualsAndHashCode(callSuper = true) -public class UserSync extends PartyMemberMessage implements Event {} +public class UserSync extends PartyMemberMessage +{ +} diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java index a4e1ce0c6b..1fdf364047 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java @@ -29,16 +29,18 @@ import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.HashMap; import java.nio.charset.StandardCharsets; +import java.util.List; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; +import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; +import okhttp3.RequestBody; import okhttp3.Response; @Slf4j @@ -47,21 +49,18 @@ public class XteaClient { private final OkHttpClient client; - public void submit(int region, int[] keys) + public void submit(XteaRequest xteaRequest) { + String json = RuneLiteAPI.GSON.toJson(xteaRequest); - HttpUrl url = RuneLiteAPI.getXteaBase().newBuilder() - .addPathSegment("submit") - .addQueryParameter("region", String.valueOf(region)) - .addQueryParameter("key1", String.valueOf(keys[0])) - .addQueryParameter("key2", String.valueOf(keys[1])) - .addQueryParameter("key3", String.valueOf(keys[2])) - .addQueryParameter("key4", String.valueOf(keys[3])) + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("xtea") .build(); log.debug("Built URI: {}", url); Request request = new Request.Builder() + .post(RequestBody.create(JSON, json)) .url(url) .build(); @@ -91,10 +90,10 @@ public class XteaClient }); } - public HashMap get() throws IOException + public List get() throws IOException { - HttpUrl url = RuneLiteAPI.getXteaBase().newBuilder() - .addPathSegment("get") + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("xtea") .build(); Request request = new Request.Builder() @@ -105,7 +104,7 @@ public class XteaClient { InputStream in = response.body().byteStream(); // CHECKSTYLE:OFF - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), new TypeToken>() {}.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), new TypeToken>() { }.getType()); // CHECKSTYLE:ON } catch (JsonParseException ex) @@ -113,4 +112,26 @@ public class XteaClient throw new IOException(ex); } } -} \ No newline at end of file + + public XteaKey get(int region) throws IOException + { + HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() + .addPathSegment("xtea") + .addPathSegment(Integer.toString(region)) + .build(); + + Request request = new Request.Builder() + .url(url) + .build(); + + try (Response response = client.newCall(request).execute()) + { + InputStream in = response.body().byteStream(); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), XteaKey.class); + } + catch (JsonParseException ex) + { + throw new IOException(ex); + } + } +} diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaKey.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaKey.java index 668a93038d..c108f223cb 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaKey.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaKey.java @@ -27,7 +27,7 @@ package net.runelite.http.api.xtea; public class XteaKey { private int region; - private int[] keys; + private int keys[]; public int getRegion() { 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 562d17419c..7e29fc9ec3 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -932,7 +932,7 @@ public interface Client extends GameShell * @return the corresponding object composition * @see ObjectID */ - ObjectDefinition getObjectDefinition(int objectId); + ObjectDefinition getObjectComposition(int objectId); /** * Gets the NPC composition corresponding to an NPCs ID. @@ -1010,7 +1010,7 @@ public interface Client extends GameShell * @param height the height * @return the sprite image */ - SpritePixels createSprite(int[] pixels, int width, int height); + SpritePixels createSpritePixels(int[] pixels, int width, int height); /** * Gets the location of the local player. @@ -1863,7 +1863,7 @@ public interface Client extends GameShell void setSelectedSpellName(String name); - boolean isSpellSelected(); + boolean getSpellSelected(); String getSelectedSpellActionName(); diff --git a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java index d50f591acf..2b5b0a477c 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java @@ -37,18 +37,18 @@ public class MenuEntry implements Cloneable /** * The option text added to the menu (ie. "Walk here", "Use"). */ - private String option; + private String menuOption; /** * The target of the action (ie. Item or Actor name). *

* If the option does not apply to any target, this field * will be set to empty string. */ - private String target; + private String menuTarget; /** * An identifier value for the target of the action. */ - private int identifier; + private int type; /** * The action the entry will trigger. * {@link MenuAction} @@ -57,11 +57,11 @@ public class MenuEntry implements Cloneable /** * An additional parameter for the action. */ - private int param0; + private int actionParam0; /** * A second additional parameter for the action. */ - private int param1; + private int widgetId; /** * If this field is true and you have single mouse button on and this entry is * the top entry the right click menu will not be opened when you left click @@ -70,14 +70,14 @@ public class MenuEntry implements Cloneable */ private boolean forceLeftClick; - public MenuEntry(String option, String target, int identifier, int opcode, int param0, int param1, boolean forceLeftClick) + public MenuEntry(String menuOption, String menuTarget, int type, int opcode, int actionParam0, int widgetId, boolean forceLeftClick) { - this.option = option; - this.target = target; - this.identifier = identifier; + this.menuOption = menuOption; + this.menuTarget = menuTarget; + this.type = type; this.opcode = opcode; - this.param0 = param0; - this.param1 = param1; + this.actionParam0 = actionParam0; + this.widgetId = widgetId; this.forceLeftClick = forceLeftClick; } @@ -97,7 +97,7 @@ public class MenuEntry implements Cloneable /** * Get opcode, but as it's enum counterpart */ - public MenuAction getMenuOpcode() + public MenuAction getMenuAction() { return MenuAction.of(getOpcode()); } diff --git a/runelite-api/src/main/java/net/runelite/api/NPC.java b/runelite-api/src/main/java/net/runelite/api/NPC.java index 9b29fc210a..d57f339acb 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPC.java +++ b/runelite-api/src/main/java/net/runelite/api/NPC.java @@ -59,7 +59,7 @@ public interface NPC extends Actor * * @return the composition */ - NPCComposition getDefinition(); + NPCComposition getComposition(); /** * Get the composition for this NPC and transform it if required diff --git a/runelite-api/src/main/java/net/runelite/api/events/BeforeRender.java b/runelite-api/src/main/java/net/runelite/api/events/BeforeRender.java index ac9db4163a..70d7551ac0 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/BeforeRender.java +++ b/runelite-api/src/main/java/net/runelite/api/events/BeforeRender.java @@ -31,7 +31,7 @@ public class BeforeRender implements Event { public static final BeforeRender INSTANCE = new BeforeRender(); - private BeforeRender() + public BeforeRender() { // noop } diff --git a/runelite-api/src/main/java/net/runelite/api/events/GameObjectSpawned.java b/runelite-api/src/main/java/net/runelite/api/events/GameObjectSpawned.java index 4320fcf797..df2b4fcca4 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/GameObjectSpawned.java +++ b/runelite-api/src/main/java/net/runelite/api/events/GameObjectSpawned.java @@ -24,14 +24,14 @@ */ package net.runelite.api.events; -import lombok.Value; +import lombok.Data; import net.runelite.api.GameObject; import net.runelite.api.Tile; /** * An event where a {@link GameObject} is added to a {@link Tile}. */ -@Value +@Data public class GameObjectSpawned implements Event { /** diff --git a/runelite-api/src/main/java/net/runelite/api/events/GameTick.java b/runelite-api/src/main/java/net/runelite/api/events/GameTick.java index 5e8046c3e8..ce3fbaf25f 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/GameTick.java +++ b/runelite-api/src/main/java/net/runelite/api/events/GameTick.java @@ -45,7 +45,7 @@ public class GameTick implements Event { public static final GameTick INSTANCE = new GameTick(); - private GameTick() + public GameTick() { // noop } diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java index 6e92ef27d3..c17c92bfdc 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java +++ b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java @@ -86,12 +86,12 @@ public class MenuOptionClicked extends MenuEntry implements Event public void setMenuEntry(MenuEntry e) { - setOption(e.getOption()); - setTarget(e.getTarget()); - setIdentifier(e.getIdentifier()); + setMenuOption(e.getMenuOption()); + setMenuTarget(e.getMenuTarget()); + setType(e.getType()); setOpcode(e.getOpcode()); - setParam0(e.getParam0()); - setParam1(e.getParam1()); + setActionParam0(e.getActionParam0()); + setWidgetId(e.getWidgetId()); setForceLeftClick(e.isForceLeftClick()); } } diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java index 275c599788..51faedb49b 100644 --- a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java +++ b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java @@ -29,7 +29,6 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import net.runelite.api.MainBufferProvider; -import net.runelite.api.events.Event; import net.runelite.api.widgets.WidgetItem; /** @@ -38,18 +37,18 @@ import net.runelite.api.widgets.WidgetItem; public interface Callbacks { /** - * Post an event. See the events in api.events. + * Post an event. See the events in net.runelite.api.events. * * @param event the event */ - void post(Class eventClass, E event); + void post(Object event); /** * Post a deferred event, which gets delayed until the next cycle. * * @param event the event */ - void postDeferred(Class eventClass, E event); + void postDeferred(Object event); /** * Called each client cycle. @@ -71,6 +70,8 @@ public interface Callbacks */ void drawAboveOverheads(); + void drawAfterWidgets(); + /** * Client top-most draw method, rendering over top of most of game interfaces. * @@ -170,4 +171,4 @@ public interface Callbacks * @param keyEvent the key event */ void keyTyped(KeyEvent keyEvent); -} +} \ No newline at end of file diff --git a/runelite-client/runelite-client.gradle.kts b/runelite-client/runelite-client.gradle.kts index 4e0d3118a4..3d48a2c786 100644 --- a/runelite-client/runelite-client.gradle.kts +++ b/runelite-client/runelite-client.gradle.kts @@ -74,6 +74,7 @@ dependencies { exclude(group = "org.slf4j") } implementation(group = "org.pf4j", name = "pf4j-update", version = "2.3.0") + implementation(group = "com.google.archivepatcher", name = "archive-patch-applier", version= "1.0.4") implementation(project(":http-api")) runtimeOnly(group = "org.pushing-pixels", name = "radiance-trident", version = "2.5.1") 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 517a7f83e0..cebf34d6d7 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -52,6 +52,8 @@ import net.runelite.client.util.DeferredEventBus; import net.runelite.client.util.ExecutorServiceExceptionLogger; import net.runelite.http.api.chat.ChatClient; import okhttp3.OkHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @AllArgsConstructor public class RuneLiteModule extends AbstractModule @@ -87,6 +89,10 @@ public class RuneLiteModule extends AbstractModule bind(EventBus.class) .annotatedWith(Names.named("Deferred EventBus")) .to(DeferredEventBus.class); + + bind(Logger.class) + .annotatedWith(Names.named("Core Logger")) + .toInstance(LoggerFactory.getLogger(RuneLite.class)); } @Provides diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 01d8ebfe1d..d207e6af5a 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -85,7 +85,6 @@ import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.PlayerChanged; import net.runelite.api.events.UsernameChanged; -import net.runelite.api.events.WorldChanged; import net.runelite.client.RuneLite; import net.runelite.client.account.AccountSession; import net.runelite.client.eventbus.EventBus; @@ -1043,12 +1042,6 @@ public class ConfigManager updateRSProfile(); } - @Subscribe - private void onWorldChanged(WorldChanged ev) - { - updateRSProfile(); - } - @Subscribe private void onPlayerChanged(PlayerChanged ev) { diff --git a/runelite-client/src/main/java/net/runelite/client/config/FontType.java b/runelite-client/src/main/java/net/runelite/client/config/FontType.java index 8ed57bd302..36e5363eb8 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/FontType.java +++ b/runelite-client/src/main/java/net/runelite/client/config/FontType.java @@ -27,7 +27,6 @@ package net.runelite.client.config; import lombok.RequiredArgsConstructor; import lombok.Getter; import net.runelite.client.ui.FontManager; - import java.awt.Font; @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index 67129b0ba5..7b10e95b3b 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -109,8 +109,8 @@ public class MenuManager { for (MenuEntry menuEntry : client.getMenuEntries()) { - String option = menuEntry.getOption(); - String target = menuEntry.getTarget(); + String option = menuEntry.getMenuOption(); + String target = menuEntry.getMenuTarget(); if (option.equals(customMenuOption.getMenuOption()) && target.equals(customMenuOption.getMenuTarget())) { @@ -128,7 +128,7 @@ public class MenuManager return; } - int widgetId = event.getActionParam1(); + int widgetId = event.getWidgetId(); Collection options = managedMenuOptions.get(widgetId); for (WidgetMenuOption currentMenu : options) @@ -139,9 +139,9 @@ public class MenuManager menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1); MenuEntry menuEntry = menuEntries[menuEntries.length - 1] = new MenuEntry(); - menuEntry.setOption(currentMenu.getMenuOption()); - menuEntry.setParam1(widgetId); - menuEntry.setTarget(currentMenu.getMenuTarget()); + menuEntry.setMenuOption(currentMenu.getMenuOption()); + menuEntry.setWidgetId(widgetId); + menuEntry.setMenuTarget(currentMenu.getMenuTarget()); menuEntry.setType(MenuAction.RUNELITE.getId()); client.setMenuEntries(menuEntries); diff --git a/runelite-client/src/main/java/net/runelite/client/menus/WidgetMenuOption.java b/runelite-client/src/main/java/net/runelite/client/menus/WidgetMenuOption.java index 307551542c..3adbe3ec2f 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/WidgetMenuOption.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/WidgetMenuOption.java @@ -25,7 +25,6 @@ package net.runelite.client.menus; import net.runelite.api.widgets.WidgetInfo; - import java.awt.Color; import net.runelite.client.ui.JagexColors; import net.runelite.client.util.ColorUtil; 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 6128c4474b..b82a5f285a 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 @@ -133,37 +133,11 @@ public class ClientLoader implements Supplier StandardOpenOption.CREATE, StandardOpenOption.READ, StandardOpenOption.WRITE); FileLock flock = lockfile.lock()) { - SplashScreen.stage(.05, null, "Downloading Old School RuneScape"); - try - { - updateVanilla(config); - } - catch (IOException ex) - { - // try again with the fallback config and gamepack - if (!config.isFallback()) - { - log.warn("Unable to download game client, attempting to use fallback config", ex); - config = downloadFallbackConfig(); - updateVanilla(config); - } - else - { - throw ex; - } - } - - if (updateCheckMode == AUTO) - { - SplashScreen.stage(.35, null, "Patching"); - applyPatch(); - } - SplashScreen.stage(.40, null, "Loading client"); File jarFile = updateCheckMode == AUTO ? PATCHED_CACHE : VANILLA_CACHE; // create the classloader for the jar while we hold the lock, and eagerly load and link all classes // in the jar. Otherwise the jar can change on disk and can break future classloads. - classLoader = createJarClassLoader(jarFile); + classLoader = createJarClassLoader(new File("./injected-client/build/libs/injected-client-3.5.4.jar")); } SplashScreen.stage(.465, "Starting", "Starting Old School RuneScape"); @@ -175,7 +149,7 @@ public class ClientLoader implements Supplier return rs; } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException - | VerificationException | SecurityException e) + | SecurityException e) { log.error("Error loading RS!", e); @@ -543,7 +517,7 @@ public class ClientLoader implements Supplier if (rs instanceof Client) { - log.info("client-patch {}", ((Client) rs).getBuildID()); + //.info("client-patch {}", ((Client) rs).getBuildID()); } return rs; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index b64f845695..053ed3e2ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -143,7 +143,7 @@ public class OverlayManager event.consume(); - Overlay overlay = overlays.get(event.getId()); + Overlay overlay = overlays.get(event.getType()); if (overlay != null) { List menuEntries = overlay.getMenuEntries(); 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 6b6c01add2..98103ae5ce 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 @@ -877,10 +877,10 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener OverlayMenuEntry overlayMenuEntry = menuEntries.get(i); final MenuEntry entry = new MenuEntry(); - entry.setOption(overlayMenuEntry.getOption()); - entry.setTarget(ColorUtil.wrapWithColorTag(overlayMenuEntry.getTarget(), JagexColors.MENU_TARGET)); + entry.setMenuOption(overlayMenuEntry.getOption()); + entry.setMenuTarget(ColorUtil.wrapWithColorTag(overlayMenuEntry.getTarget(), JagexColors.MENU_TARGET)); entry.setType(overlayMenuEntry.getMenuAction().getId()); - entry.setIdentifier(overlayManager.getOverlays().indexOf(overlay)); // overlay id + entry.setType(overlayManager.getOverlays().indexOf(overlay)); // overlay id entries[i] = entry; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/skin/ObsidianSkin.java b/runelite-client/src/main/java/net/runelite/client/ui/skin/ObsidianSkin.java index 6cd6e140d4..271d2127b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/skin/ObsidianSkin.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/skin/ObsidianSkin.java @@ -65,10 +65,10 @@ public class ObsidianSkin extends SubstanceSkin final SubstanceColorSchemeBundle defaultSchemeBundle = new SubstanceColorSchemeBundle( activeScheme, enabledScheme, enabledScheme); - defaultSchemeBundle.registerColorScheme(enabledScheme, 0.6f, - ComponentState.DISABLED_UNSELECTED); - defaultSchemeBundle.registerColorScheme(activeScheme, 0.6f, - ComponentState.DISABLED_SELECTED); + //defaultSchemeBundle.registerColorScheme(enabledScheme, 0.6f, + // ComponentState.DISABLED_UNSELECTED); + //defaultSchemeBundle.registerColorScheme(activeScheme, 0.6f, + // ComponentState.DISABLED_SELECTED); // borders final SubstanceColorScheme borderDisabledSelectedScheme = schemes @@ -82,9 +82,9 @@ public class ObsidianSkin extends SubstanceSkin final SubstanceColorScheme markActiveScheme = schemes.get("RuneLite Mark Active"); defaultSchemeBundle.registerColorScheme(markActiveScheme, ColorSchemeAssociationKind.MARK, ComponentState.getActiveStates()); - defaultSchemeBundle.registerColorScheme(markActiveScheme, 0.6f, - ColorSchemeAssociationKind.MARK, ComponentState.DISABLED_SELECTED, - ComponentState.DISABLED_UNSELECTED); + //defaultSchemeBundle.registerColorScheme(markActiveScheme, 0.6f, + // ColorSchemeAssociationKind.MARK, ComponentState.DISABLED_SELECTED, + // ComponentState.DISABLED_UNSELECTED); // separators final SubstanceColorScheme separatorScheme = schemes.get("RuneLite Separator"); @@ -102,8 +102,8 @@ public class ObsidianSkin extends SubstanceSkin final SubstanceColorSchemeBundle decorationsSchemeBundle = new SubstanceColorSchemeBundle( activeScheme, enabledScheme, enabledScheme); - decorationsSchemeBundle.registerColorScheme(enabledScheme, 0.5f, - ComponentState.DISABLED_UNSELECTED); + //decorationsSchemeBundle.registerColorScheme(enabledScheme, 0.5f, + // ComponentState.DISABLED_UNSELECTED); // borders decorationsSchemeBundle.registerColorScheme(borderDisabledSelectedScheme, @@ -129,8 +129,8 @@ public class ObsidianSkin extends SubstanceSkin final SubstanceColorSchemeBundle headerSchemeBundle = new SubstanceColorSchemeBundle(activeScheme, enabledScheme, enabledScheme); - headerSchemeBundle.registerColorScheme(enabledScheme, 0.5f, - ComponentState.DISABLED_UNSELECTED); + //headerSchemeBundle.registerColorScheme(enabledScheme, 0.5f, + // ComponentState.DISABLED_UNSELECTED); // borders final SubstanceColorScheme headerBorderScheme = schemes.get("RuneLite Header Border"); @@ -142,13 +142,13 @@ public class ObsidianSkin extends SubstanceSkin headerSchemeBundle.registerColorScheme(markActiveScheme, ColorSchemeAssociationKind.MARK, ComponentState.getActiveStates()); - headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.7f, - ComponentState.ROLLOVER_UNSELECTED, ComponentState.ROLLOVER_ARMED, - ComponentState.ARMED); - headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.8f, - ComponentState.SELECTED); - headerSchemeBundle.registerHighlightColorScheme(activeScheme, 1.0f, - ComponentState.ROLLOVER_SELECTED); + //headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.7f, + // ComponentState.ROLLOVER_UNSELECTED, ComponentState.ROLLOVER_ARMED, + // ComponentState.ARMED); + //headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.8f, + // ComponentState.SELECTED); + //headerSchemeBundle.registerHighlightColorScheme(activeScheme, 1.0f, + // ComponentState.ROLLOVER_SELECTED); final SubstanceColorScheme headerWatermarkScheme = schemes.get("RuneLite Header Watermark"); diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 1a900ed062..80dd7dd319 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -547,7 +547,8 @@ 526, 2530, 3187, - 24655 + 24655, + 25199 ], "monks robe": [ 542, @@ -1652,6 +1653,10 @@ 1005, 7957 ], + "red cape": [ + 1007, + 25207 + ], "blue skirt": [ 1011, 7386, @@ -1662,6 +1667,11 @@ 12445, 12447 ], + "blue cape": [ + 1021, + 25195, + 25208 + ], "blue partyhat": [ 1042, 2422 @@ -3353,7 +3363,17 @@ ], "explosive potion": [ 4045, - 23818 + 23818, + 25211 + ], + "bandages": [ + 4049, + 25202 + ], + "barricade": [ + 4053, + 25209, + 25210 ], "decorative sword": [ 4068, @@ -3402,7 +3422,12 @@ 4506, 4511, 20489, - 24160 + 24160, + 25157, + 25165, + 25169, + 25174, + 25176 ], "decorative shield": [ 4072, @@ -3415,11 +3440,14 @@ 4081, 10588, 12017, - 12018 + 12018, + 25250, + 25278 ], "sled": [ 4083, - 4084 + 4084, + 25282 ], "dragon platelegs": [ 4087, @@ -3494,7 +3522,8 @@ ], "stick": [ 4179, - 9702 + 9702, + 25285 ], "extended brush": [ 4191, @@ -4790,20 +4819,24 @@ "seers ring": [ 6731, 11770, - 23624 + 23624, + 25258 ], "archers ring": [ 6733, - 11771 + 11771, + 25260 ], "warrior ring": [ 6735, - 11772 + 11772, + 25262 ], "berserker ring": [ 6737, 11773, - 23595 + 23595, + 25264 ], "darklight": [ 6746, @@ -6114,7 +6147,18 @@ 11781, 11782, 11783, - 11784 + 11784, + 25266, + 25267, + 25268, + 25269, + 25270, + 25271, + 25272, + 25273, + 25274, + 25275, + 25276 ], "bandana eyepatch": [ 8924, @@ -7387,7 +7431,15 @@ 23073, 23075, 24370, - 24444 + 24444, + 25177, + 25179, + 25181, + 25183, + 25185, + 25187, + 25189, + 25191 ], "slayer ring": [ 11866, @@ -7472,15 +7524,18 @@ ], "ring of the gods": [ 12601, - 13202 + 13202, + 25252 ], "tyrannical ring": [ 12603, - 12691 + 12691, + 25254 ], "treasonous ring": [ 12605, - 12692 + 12692, + 25256 ], "bandos page": [ 12613, @@ -8215,7 +8270,9 @@ 19550, 19710, 20655, - 20657 + 20657, + 25246, + 25248 ], "amulet of torture": [ 19553, @@ -8594,7 +8651,8 @@ ], "granite ring": [ 21739, - 21752 + 21752, + 25193 ], "imbued saradomin max cape": [ 21776, @@ -8872,6 +8930,10 @@ 22405, 22446 ], + "old key": [ + 22428, + 25244 + ], "battlemage potion": [ 22449, 22452, @@ -9478,5 +9540,64 @@ "extradimensional bag": [ 25106, 25108 + ], + "decorative boots": [ + 25155, + 25163, + 25167, + 25171, + 25173 + ], + "castlewars brew": [ + 25159, + 25160, + 25161, + 25162 + ], + "soul fragment": [ + 25196, + 25201 + ], + "potion of power": [ + 25203, + 25204, + 25205, + 25206 + ], + "blue icon": [ + 25212, + 25213, + 25214, + 25215, + 25216, + 25217, + 25218, + 25219, + 25220, + 25221, + 25222, + 25223, + 25224, + 25225, + 25226, + 25227 + ], + "red icon": [ + 25228, + 25229, + 25230, + 25231, + 25232, + 25233, + 25234, + 25235, + 25236, + 25237, + 25238, + 25239, + 25240, + 25241, + 25242, + 25243 ] -} +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/logback.xml b/runelite-client/src/main/resources/logback.xml index 1d5dfa9355..d3a5ffbcad 100644 --- a/runelite-client/src/main/resources/logback.xml +++ b/runelite-client/src/main/resources/logback.xml @@ -24,50 +24,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - - + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + - - ${user.home}/.runelite/logs/client.log + + ${user.home}/.runelite/logs/client.log - - - ${user.home}/.runelite/logs/client_%d{yyyy-MM-dd}.%i.log + + + ${user.home}/.runelite/logs/client_%d{yyyy-MM-dd}.%i.log - - - 10MB - + + + 10MB + - - 30 - + + 30 + - - %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - - + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + - - - - ERROR - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/externalplugins/externalplugins.crt b/runelite-client/src/main/resources/net/runelite/client/externalplugins/externalplugins.crt new file mode 100644 index 0000000000..2ba1550b51 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/externalplugins/externalplugins.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIJAK8uBanmNQZaMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV +BAMMEHJ1bmVsaXRlLXBsdWdpbnMwHhcNMTkxMjEyMjEwNzUxWhcNMjUxMjEwMjEw +NzUxWjAbMRkwFwYDVQQDDBBydW5lbGl0ZS1wbHVnaW5zMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEApu11OVANSU+pHaXRxB7fIZapucJ6BT46neicEixs +NVPuK/QRVjO/G8F++MXFD/tlZUOEDllDN8uaHBIVwxilqEVYL7oX65Esl7qqC1TZ +WGdjiMyYoK3CXWEWB4w+CdB31T7JG2HqH45ZsVs+U9OVWBkNkL5nNQNPOmZFd+3A +yCb9nGlO7SxduiHpwh3CV19jY47y8tevyo5qpaBuQeWtu3vbpeer0kbDarwD3xoF +yUMPRK518gxRUSmOpsSG5viQ731mKVCUUfIXz91d3s+kJYAjORHS4zJe9s+1dljp +oLYNLkaP6m3CmNtC84OxkmognvZTNMbiQ3GQm/BK4sdjPQIDAQABo1MwUTAdBgNV +HQ4EFgQUxrkiRXNd0OHPMkqgl9UgV1//OuQwHwYDVR0jBBgwFoAUxrkiRXNd0OHP +Mkqgl9UgV1//OuQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEA +StPyblz3aqOM5z2KqHX1B7Z3Q8B58g55YSefpcfwWEc6LT4HCztszcZDteWpV3W2 +ERfemkGKgsDhQ0qkzIt7tS5eNN3PPj7RZZm7vl5HquQ1vC/33ri/Z3CEKzbW7knt +i1iEpx8E9DKb9J9DjdKwNxSomOyCOFUt9YoQJs80xc1mwPDd6aWR3xwvnEUimkm+ +Dbj7HMOXLeyN810wkeWcT8nC5GhxH3ZAmVExBHsaIOB876RntzshBehjY8s8JQhw +R+fT1e8EhYMM9ylYDk1KIWFWrAujjU04lS9tXZ5C2e7fr9R953XN6Y0PNM/taNTU +GzwGroJZI02V+1ADO14rRA== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/game/1067-DISEASE.png b/runelite-client/src/main/resources/net/runelite/client/game/1067-DISEASE.png new file mode 100644 index 0000000000..f2ff5ac911 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/game/1067-DISEASE.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/game/1067-POISON.png b/runelite-client/src/main/resources/net/runelite/client/game/1067-POISON.png new file mode 100644 index 0000000000..a4b05c1ca1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/game/1067-POISON.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/game/1067-VENOM.png b/runelite-client/src/main/resources/net/runelite/client/game/1067-VENOM.png new file mode 100644 index 0000000000..df6816bb74 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/game/1067-VENOM.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/account/login_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/account/login_icon.png new file mode 100644 index 0000000000..66792abe26 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/account/login_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/account/logout_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/account/logout_icon.png new file mode 100644 index 0000000000..863394a335 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/account/logout_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/down-arrow.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/down-arrow.png new file mode 100644 index 0000000000..b9f98803c0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/down-arrow.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/incinerator.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/incinerator.png new file mode 100644 index 0000000000..87047a0782 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/incinerator.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/new-tab.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/new-tab.png new file mode 100644 index 0000000000..d2a1a0c8cf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/new-tab.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab-active.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab-active.png new file mode 100644 index 0000000000..7e95f0f09a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab-active.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab.png new file mode 100644 index 0000000000..815f15f3b6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/tag-tab.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/up-arrow.png b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/up-arrow.png new file mode 100644 index 0000000000..2b2ed9a4c3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/banktags/tabs/up-arrow.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/barbarianassault/clock.png b/runelite-client/src/main/resources/net/runelite/client/plugins/barbarianassault/clock.png new file mode 100644 index 0000000000..c0f39269e1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/barbarianassault/clock.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/buffed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/buffed.png new file mode 100644 index 0000000000..e325dab318 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/buffed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/debuffed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/debuffed.png new file mode 100644 index 0000000000..f1fe2a758b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/boosts/debuffed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/cluescrolls/emote.png b/runelite-client/src/main/resources/net/runelite/client/plugins/cluescrolls/emote.png new file mode 100644 index 0000000000..22d496a28c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/cluescrolls/emote.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_configure.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_configure.png new file mode 100644 index 0000000000..5cf5a192e5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_configure.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_help.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_help.png new file mode 100644 index 0000000000..ffe3b60840 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_help.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_missingicon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_missingicon.png new file mode 100644 index 0000000000..b03a5058b5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/pluginhub_missingicon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger-p.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger-p.png new file mode 100644 index 0000000000..86f1751afa Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger-p.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png new file mode 100644 index 0000000000..9a59c1753c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png new file mode 100644 index 0000000000..b1a4bd230c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png new file mode 100644 index 0000000000..ee89a5b05a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png new file mode 100644 index 0000000000..7415625a2f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png new file mode 100644 index 0000000000..b32ddf0ea1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/devtools/devtools_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/devtools/devtools_icon.png new file mode 100644 index 0000000000..f2f319dbed Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/devtools/devtools_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/discord/discord.png b/runelite-client/src/main/resources/net/runelite/client/plugins/discord/discord.png new file mode 100644 index 0000000000..2474cfb868 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/discord/discord.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/LICENSE b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/LICENSE new file mode 100644 index 0000000000..9e2a9503a0 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/LICENSE @@ -0,0 +1 @@ +The images in this folder are derivatives of "twemoji" (https://github.com/twitter/twemoji) by "Twitter, Inc", used under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). The derivatives are licensed under the same license. \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/acorn.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/acorn.png new file mode 100644 index 0000000000..461d9ac972 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/acorn.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png new file mode 100644 index 0000000000..12b5cbca06 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png new file mode 100644 index 0000000000..ed24b9dbd5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png new file mode 100644 index 0000000000..e2859dba83 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png new file mode 100644 index 0000000000..e3e3538d6e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png new file mode 100644 index 0000000000..d959e8398c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png new file mode 100644 index 0000000000..e4a0e27005 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png new file mode 100644 index 0000000000..ed6f1f0363 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png new file mode 100644 index 0000000000..b4a48a1167 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png new file mode 100644 index 0000000000..d13487b948 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png new file mode 100644 index 0000000000..0b12afc22a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png new file mode 100644 index 0000000000..03c0a78f01 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png new file mode 100644 index 0000000000..f235821f5a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png new file mode 100644 index 0000000000..1796dfd73e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png new file mode 100644 index 0000000000..21bb1e8efc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png new file mode 100644 index 0000000000..00c3ddb525 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png new file mode 100644 index 0000000000..6d11acee7a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png new file mode 100644 index 0000000000..c836cb5ac6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png new file mode 100644 index 0000000000..9afe0d1488 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png new file mode 100644 index 0000000000..f82589d6c3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png new file mode 100644 index 0000000000..d0de7f47a4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/gorilla.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/gorilla.png new file mode 100644 index 0000000000..c5122e6a3a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/gorilla.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png new file mode 100644 index 0000000000..1c2d82ebd5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png new file mode 100644 index 0000000000..8e025d4ed0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png new file mode 100644 index 0000000000..0582043360 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png new file mode 100644 index 0000000000..4c3f94b269 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png new file mode 100644 index 0000000000..388f4f8721 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png new file mode 100644 index 0000000000..a77d4f5ac2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png new file mode 100644 index 0000000000..2d4ded730a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png new file mode 100644 index 0000000000..c4040f250f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png new file mode 100644 index 0000000000..6ba2512285 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png new file mode 100644 index 0000000000..99c51e94b0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png new file mode 100644 index 0000000000..b6f009127e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png new file mode 100644 index 0000000000..9bac2f0392 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pensive.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pensive.png new file mode 100644 index 0000000000..a5a01433be Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pensive.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png new file mode 100644 index 0000000000..afe426b889 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png new file mode 100644 index 0000000000..e9e83eda20 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pleading.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pleading.png new file mode 100644 index 0000000000..be897688ac Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pleading.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png new file mode 100644 index 0000000000..e3e64935d7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png new file mode 100644 index 0000000000..7c1fa0cb34 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png new file mode 100644 index 0000000000..8ee29a9fb3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png new file mode 100644 index 0000000000..1b0666d2c5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png new file mode 100644 index 0000000000..d39cf23163 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png new file mode 100644 index 0000000000..557bdb8f12 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png new file mode 100644 index 0000000000..63794794d3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png new file mode 100644 index 0000000000..1ddd81f279 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png new file mode 100644 index 0000000000..92843ef1e9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png new file mode 100644 index 0000000000..380ab6b8e0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png new file mode 100644 index 0000000000..0c790e10e1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png new file mode 100644 index 0000000000..cf40fea206 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png new file mode 100644 index 0000000000..309caf9c8b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png new file mode 100644 index 0000000000..570187cf73 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png new file mode 100644 index 0000000000..610c3ee976 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png new file mode 100644 index 0000000000..71f4927cbe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png new file mode 100644 index 0000000000..5dd59bcc01 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png new file mode 100644 index 0000000000..1a747c8fc7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png new file mode 100644 index 0000000000..b56b3cd5e0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/xd.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/xd.png new file mode 100644 index 0000000000..7f9e9e0b40 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/xd.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png new file mode 100644 index 0000000000..21bdb0a00f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png new file mode 100644 index 0000000000..ecad41ede6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png new file mode 100644 index 0000000000..3072dfc9f1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/feed/icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/icon.png new file mode 100644 index 0000000000..40c046d833 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/feed/osrs.png b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/osrs.png new file mode 100644 index 0000000000..f1eef592ad Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/osrs.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/feed/runelite.png b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/runelite.png new file mode 100644 index 0000000000..cbe9361b40 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/feed/runelite.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/friendnotes/note_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/friendnotes/note_icon.png new file mode 100644 index 0000000000..9b2625aeb7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/friendnotes/note_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/colorblind.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/colorblind.glsl new file mode 100644 index 0000000000..b2c2c49b51 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/colorblind.glsl @@ -0,0 +1,73 @@ +// +// Algorithm from "Analysis of Color Blindness" by Onur Fidaner, Poliang Lin and Nevran Ozguven. +// https://web.archive.org/web/20090731011248/http://scien.stanford.edu/class/psych221/projects/05/ofidaner/project_report.pdf +// + +#define NONE 0 +#define PROTAN 1 +#define DEUTERAN 2 +#define TRITAN 3 + +const mat3 rgb2lms = mat3( + vec3(17.8824, 43.5161, 4.11935), + vec3(3.45565, 27.1554, 3.86714), + vec3(0.0299566, 0.184309, 1.46709) +); + +const mat3 lms2lmsp = mat3( + vec3(0.0, 2.02344, -2.52581), + vec3(0.0, 1.0, 0.0), + vec3(0.0, 0.0, 1.0) +); + +const mat3 lms2lmsd = mat3( + vec3(1.0, 0.0, 0.0), + vec3(0.494207, 0.0, 1.24827), + vec3(0.0, 0.0, 1.0) +); + +const mat3 lms2lmst = mat3( + vec3(1.0, 0.0, 0.0), + vec3(0.0, 1.0, 0.0), + vec3(-0.395913, 0.801109, 0.0) +); + +const mat3 corrections = mat3( + vec3(0.0, 0.0, 0.0), + vec3(0.7, 1.0, 0.0), + vec3(0.7, 0.0, 1.0) +); + +vec3 colorblind(int mode, vec3 color) +{ + vec3 LMS = color * rgb2lms; + vec3 lms; + + if (mode == PROTAN) { + lms = LMS * lms2lmsp; // red deficiency + } + else if (mode == DEUTERAN) { + lms = LMS * lms2lmsd; // green deficiency + } + else if (mode == TRITAN) { + lms = LMS * lms2lmst; // blue deficiency + } + else { + return color; + } + + // LMS to RGB matrix conversion + mat3 lms2rgb = inverse(rgb2lms); + vec3 error = lms * lms2rgb; + + // Isolate invisible colors to color vision deficiency (calculate error matrix) + error = (color - error); + + // Shift colors towards visible spectrum (apply error modifications) + vec3 correction = error * corrections; + + // Add compensation to original values + correction = color + correction; + + return correction; +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl new file mode 100644 index 0000000000..37516d851e --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/common.glsl @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include to_screen.glsl + +/* + * Rotate a vertex by a given orientation in JAU + */ +ivec4 rotate(ivec4 vertex, int orientation) { + ivec2 sinCos = sinCosTable[orientation]; + int s = sinCos.x; + int c = sinCos.y; + int x = vertex.z * s + vertex.x * c >> 16; + int z = vertex.z * c - vertex.x * s >> 16; + return ivec4(x, vertex.y, z, vertex.w); +} + +/* + * Calculate the distance to a vertex given the camera angle + */ +int distance(ivec4 vertex, int cameraYaw, int cameraPitch) { + int yawSin = int(65536.0f * sin(cameraYaw * UNIT)); + int yawCos = int(65536.0f * cos(cameraYaw * UNIT)); + + int pitchSin = int(65536.0f * sin(cameraPitch * UNIT)); + int pitchCos = int(65536.0f * cos(cameraPitch * UNIT)); + + int j = vertex.z * yawCos - vertex.x * yawSin >> 16; + int l = vertex.y * pitchSin + j * pitchCos >> 16; + + return l; +} + +/* + * Calculate the distance to a face + */ +int face_distance(ivec4 vA, ivec4 vB, ivec4 vC, int cameraYaw, int cameraPitch) { + int dvA = distance(vA, cameraYaw, cameraPitch); + int dvB = distance(vB, cameraYaw, cameraPitch); + int dvC = distance(vC, cameraYaw, cameraPitch); + int faceDistance = (dvA + dvB + dvC) / 3; + return faceDistance; +} + +/* + * Test if a face is visible (not backward facing) + */ +bool face_visible(ivec4 vA, ivec4 vB, ivec4 vC, ivec4 position) { + // Move model to scene location, and account for camera offset + ivec4 cameraPos = ivec4(cameraX, cameraY, cameraZ, 0); + vA += position - cameraPos; + vB += position - cameraPos; + vC += position - cameraPos; + + vec3 sA = toScreen(vA.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 sB = toScreen(vB.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + vec3 sC = toScreen(vC.xyz, cameraYaw, cameraPitch, centerX, centerY, zoom); + + return (sA.x - sB.x) * (sC.y - sB.y) - (sC.x - sB.x) * (sA.y - sB.y) > 0; +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp.glsl new file mode 100644 index 0000000000..a0ceb4935e --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp.glsl @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include version_header + +shared int totalNum[12]; // number of faces with a given priority +shared int totalDistance[12]; // sum of distances to faces of a given priority + +shared int totalMappedNum[18]; // number of faces with a given adjusted priority + +shared int min10; // minimum distance to a face of priority 10 +shared int dfs[4096]; // packed face id and distance + +#include comp_common.glsl + +layout(local_size_x = 1024) in; + +#include common.glsl +#include priority_render.glsl + +void main() { + uint groupId = gl_WorkGroupID.x; + uint localId = gl_LocalInvocationID.x * 4; + modelinfo minfo = ol[groupId]; + ivec4 pos = ivec4(minfo.x, minfo.y, minfo.z, 0); + + if (localId == 0) { + min10 = 1600; + for (int i = 0; i < 12; ++i) { + totalNum[i] = 0; + totalDistance[i] = 0; + } + for (int i = 0; i < 18; ++i) { + totalMappedNum[i] = 0; + } + } + + int prio1, dis1; + ivec4 vA1, vA2, vA3; + + int prio2, dis2; + ivec4 vB1, vB2, vB3; + + int prio3, dis3; + ivec4 vC1, vC2, vC3; + + int prio4, dis4; + ivec4 vD1, vD2, vD3; + + get_face(localId, minfo, cameraYaw, cameraPitch, prio1, dis1, vA1, vA2, vA3); + get_face(localId + 1, minfo, cameraYaw, cameraPitch, prio2, dis2, vB1, vB2, vB3); + get_face(localId + 2, minfo, cameraYaw, cameraPitch, prio3, dis3, vC1, vC2, vC3); + get_face(localId + 3, minfo, cameraYaw, cameraPitch, prio4, dis4, vD1, vD2, vD3); + + memoryBarrierShared(); + barrier(); + + add_face_prio_distance(localId , minfo, vA1, vA2, vA3, prio1, dis1, pos); + add_face_prio_distance(localId + 1, minfo, vB1, vB2, vB3, prio2, dis2, pos); + add_face_prio_distance(localId + 2, minfo, vC1, vC2, vC3, prio3, dis3, pos); + add_face_prio_distance(localId + 3, minfo, vD1, vD2, vD3, prio4, dis4, pos); + + memoryBarrierShared(); + barrier(); + + int prio1Adj, prio2Adj, prio3Adj, prio4Adj; + int idx1 = map_face_priority(localId, minfo, prio1, dis1, prio1Adj); + int idx2 = map_face_priority(localId + 1, minfo, prio2, dis2, prio2Adj); + int idx3 = map_face_priority(localId + 2, minfo, prio3, dis3, prio3Adj); + int idx4 = map_face_priority(localId + 3, minfo, prio4, dis4, prio4Adj); + + memoryBarrierShared(); + barrier(); + + insert_dfs(localId , minfo, prio1Adj, dis1, idx1); + insert_dfs(localId + 1, minfo, prio2Adj, dis2, idx2); + insert_dfs(localId + 2, minfo, prio3Adj, dis3, idx3); + insert_dfs(localId + 3, minfo, prio4Adj, dis4, idx4); + + memoryBarrierShared(); + barrier(); + + sort_and_insert(localId , minfo, prio1Adj, dis1, vA1, vA2, vA3); + sort_and_insert(localId + 1, minfo, prio2Adj, dis2, vB1, vB2, vB3); + sort_and_insert(localId + 2, minfo, prio3Adj, dis3, vC1, vC2, vC3); + sort_and_insert(localId + 3, minfo, prio4Adj, dis4, vD1, vD2, vD3); +} diff --git a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_common.glsl similarity index 52% rename from runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java rename to runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_common.glsl index e56eb76740..934407b94b 100644 --- a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_common.glsl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, Adam + * Copyright (c) 2018, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,50 +22,57 @@ * (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.rs; -import com.google.common.io.CharStreams; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import okhttp3.OkHttpClient; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Test; + #define PI 3.1415926535897932384626433832795f + #define UNIT PI / 1024.0f -public class ClientConfigLoaderTest -{ - private final MockWebServer server = new MockWebServer(); + layout(std140) uniform uniforms { + int cameraYaw; + int cameraPitch; + int centerX; + int centerY; + int zoom; + int cameraX; + int cameraY; + int cameraZ; + ivec2 sinCosTable[2048]; + }; - @Before - public void before() throws IOException - { - String response; - try (InputStream in = getClass().getResourceAsStream("jav_config.ws")) - { - response = CharStreams.toString(new InputStreamReader( - in, StandardCharsets.UTF_8)); - } - server.enqueue(new MockResponse().setBody(response)); + struct modelinfo { + int offset; // offset into buffer + int uvOffset; // offset into uv buffer + int size; // length in faces + int idx; // write idx in target buffer + int flags; // radius, orientation + int x; // scene position x + int y; // scene position y + int z; // scene position z + }; - server.start(); - } + layout(std430, binding = 0) readonly buffer modelbuffer_in { + modelinfo ol[]; + }; - @After - public void after() throws IOException - { - server.shutdown(); - } + layout(std430, binding = 1) readonly buffer vertexbuffer_in { + ivec4 vb[]; + }; - @Test - public void testFetch() throws IOException - { - final RSConfig config = new ClientConfigLoader(new OkHttpClient()).fetch(server.url("/")); - assertEquals("http://oldschool1.runescape.com/", config.getCodeBase()); - } + layout(std430, binding = 2) readonly buffer tempvertexbuffer_in { + ivec4 tempvb[]; + }; -} \ No newline at end of file + layout(std430, binding = 3) writeonly buffer vertex_out { + ivec4 vout[]; + }; + + layout(std430, binding = 4) writeonly buffer uv_out { + vec4 uvout[]; + }; + + layout(std430, binding = 5) readonly buffer uvbuffer_in { + vec4 uv[]; + }; + + layout(std430, binding = 6) readonly buffer tempuvbuffer_in { + vec4 tempuv[]; + }; \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_small.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_small.glsl new file mode 100644 index 0000000000..579dd7e1ad --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_small.glsl @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include version_header + +shared int totalNum[12]; // number of faces with a given priority +shared int totalDistance[12]; // sum of distances to faces of a given priority + +shared int totalMappedNum[18]; // number of faces with a given adjusted priority + +shared int min10; // minimum distance to a face of priority 10 +shared int dfs[512]; // packed face id and distance + +#include comp_common.glsl + +layout(local_size_x = 512) in; + +#include common.glsl +#include priority_render.glsl + +void main() { + uint groupId = gl_WorkGroupID.x; + uint localId = gl_LocalInvocationID.x; + modelinfo minfo = ol[groupId]; + ivec4 pos = ivec4(minfo.x, minfo.y, minfo.z, 0); + + if (localId == 0) { + min10 = 1600; + for (int i = 0; i < 12; ++i) { + totalNum[i] = 0; + totalDistance[i] = 0; + } + for (int i = 0; i < 18; ++i) { + totalMappedNum[i] = 0; + } + } + + int prio1, dis1; + ivec4 vA1, vA2, vA3; + + get_face(localId, minfo, cameraYaw, cameraPitch, prio1, dis1, vA1, vA2, vA3); + + memoryBarrierShared(); + barrier(); + + add_face_prio_distance(localId, minfo, vA1, vA2, vA3, prio1, dis1, pos); + + memoryBarrierShared(); + barrier(); + + int prio1Adj; + int idx1 = map_face_priority(localId, minfo, prio1, dis1, prio1Adj); + + memoryBarrierShared(); + barrier(); + + insert_dfs(localId, minfo, prio1Adj, dis1, idx1); + + memoryBarrierShared(); + barrier(); + + sort_and_insert(localId, minfo, prio1Adj, dis1, vA1, vA2, vA3); +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_unordered.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_unordered.glsl new file mode 100644 index 0000000000..531eb6c935 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/comp_unordered.glsl @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include version_header + +#include comp_common.glsl + +layout(local_size_x = 6) in; + +#include common.glsl + +void main() { + uint groupId = gl_WorkGroupID.x; + uint localId = gl_LocalInvocationID.x; + modelinfo minfo = ol[groupId]; + + int offset = minfo.offset; + int size = minfo.size; + int outOffset = minfo.idx; + int uvOffset = minfo.uvOffset; + int flags = minfo.flags; + int orientation = flags & 0x7ff; + ivec4 pos = ivec4(minfo.x, minfo.y, minfo.z, 0); + + if (localId >= size) { + return; + } + + uint ssboOffset = localId; + ivec4 thisA, thisB, thisC; + + // Grab triangle vertices from the correct buffer + if (flags < 0) { + thisA = vb[offset + ssboOffset * 3 ]; + thisB = vb[offset + ssboOffset * 3 + 1]; + thisC = vb[offset + ssboOffset * 3 + 2]; + } else { + thisA = tempvb[offset + ssboOffset * 3 ]; + thisB = tempvb[offset + ssboOffset * 3 + 1]; + thisC = tempvb[offset + ssboOffset * 3 + 2]; + } + + ivec4 thisrvA = rotate(thisA, orientation); + ivec4 thisrvB = rotate(thisB, orientation); + ivec4 thisrvC = rotate(thisC, orientation); + + uint myOffset = localId; + + // position vertices in scene and write to out buffer + vout[outOffset + myOffset * 3] = pos + thisrvA; + vout[outOffset + myOffset * 3 + 1] = pos + thisrvB; + vout[outOffset + myOffset * 3 + 2] = pos + thisrvC; + + if (uvOffset < 0) { + uvout[outOffset + myOffset * 3] = vec4(0, 0, 0, 0); + uvout[outOffset + myOffset * 3 + 1] = vec4(0, 0, 0, 0); + uvout[outOffset + myOffset * 3 + 2] = vec4(0, 0, 0, 0); + } else if (flags >= 0) { + uvout[outOffset + myOffset * 3] = tempuv[uvOffset + localId * 3]; + uvout[outOffset + myOffset * 3 + 1] = tempuv[uvOffset + localId * 3 + 1]; + uvout[outOffset + myOffset * 3 + 2] = tempuv[uvOffset + localId * 3 + 2]; + } else { + uvout[outOffset + myOffset * 3] = uv[uvOffset + localId * 3]; + uvout[outOffset + myOffset * 3 + 1] = uv[uvOffset + localId * 3 + 1]; + uvout[outOffset + myOffset * 3 + 2] = uv[uvOffset + localId * 3 + 2]; + } +} diff --git a/http-api/src/main/java/net/runelite/http/api/discord/DiscordMessage.java b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl similarity index 53% rename from http-api/src/main/java/net/runelite/http/api/discord/DiscordMessage.java rename to runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl index cea482d203..b89513a94e 100644 --- a/http-api/src/main/java/net/runelite/http/api/discord/DiscordMessage.java +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Forsco + * Copyright (c) 2018, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -7,7 +7,6 @@ * * 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. @@ -23,46 +22,47 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#version 330 -package net.runelite.http.api.discord; +uniform sampler2DArray textures; +uniform vec2 textureOffsets[64]; +uniform float brightness; +uniform float smoothBanding; +uniform vec4 fogColor; +uniform int colorBlindMode; -import com.google.gson.annotations.SerializedName; -import java.util.ArrayList; -import java.util.List; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +in vec4 Color; +noperspective centroid in float fHsl; +flat in int textureId; +in vec2 fUv; +in float fogAmount; -@Getter -@Setter -@ToString -public class DiscordMessage -{ - String username; - String content; - @SerializedName("avatar_url") - String avatarUrl; - @SerializedName("tts") - boolean textToSpeech; - final List embeds = new ArrayList<>(); +out vec4 FragColor; - DiscordMessage(String username, String content, String avatar_url, DiscordEmbed embed) - { - this.username = username; - this.content = content; - this.avatarUrl = avatar_url; - this.embeds.add(embed); - } +#include hsl_to_rgb.glsl +#include colorblind.glsl - public void setUsername(String username) - { - if (username != null) - { - this.username = username.substring(0, Math.min(31, username.length())); - } - else - { - this.username = null; - } - } +void main() { + int hsl = int(fHsl); + vec3 rgb = hslToRgb(hsl) * smoothBanding + Color.rgb * (1.f - smoothBanding); + vec4 smoothColor = vec4(rgb, Color.a); + + if (textureId > 0) { + int textureIdx = textureId - 1; + + vec2 uv = fUv; + vec2 animatedUv = uv + textureOffsets[textureIdx]; + + vec4 textureColor = texture(textures, vec3(animatedUv, float(textureIdx))); + vec4 textureColorBrightness = pow(textureColor, vec4(brightness, brightness, brightness, 1.0f)); + + smoothColor = textureColorBrightness * smoothColor; + } + + if (colorBlindMode > 0) { + smoothColor.rgb = colorblind(colorBlindMode, smoothColor.rgb); + } + + vec3 mixedColor = mix(smoothColor.rgb, fogColor.rgb, fogAmount); + FragColor = vec4(mixedColor, smoothColor.a); } diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/fragui.glsl similarity index 56% rename from runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java rename to runelite-client/src/main/resources/net/runelite/client/plugins/gpu/fragui.glsl index f1677daa4b..e522d34400 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/fragui.glsl @@ -22,57 +22,45 @@ * (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.ui.overlay.components; +#version 330 -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +#define SAMPLING_MITCHELL 1 +#define SAMPLING_CATROM 2 +#define SAMPLING_XBR 3 -public class TextComponentTest -{ - private Graphics2D graphics; - private BufferedImage dest; +uniform sampler2D tex; - @Before - public void before() - { - dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); - graphics = (Graphics2D) dest.getGraphics(); - } +uniform int samplingMode; +uniform ivec2 sourceDimensions; +uniform ivec2 targetDimensions; +uniform int colorBlindMode; - @Test - public void testRender() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test"); - textComponent.setColor(Color.RED); - textComponent.render(graphics); - } +#include scale/bicubic.glsl +#include scale/xbr_lv2_frag.glsl +#include colorblind.glsl - @Test - public void testRender2() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test"); - textComponent.render(graphics); - } +in vec2 TexCoord; +in XBRTable xbrTable; - @Test - public void testRender3() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test test"); - textComponent.render(graphics); - } +out vec4 FragColor; - @After - public void after() - { - graphics.dispose(); - dest.flush(); - } +void main() { + vec4 c; + switch (samplingMode) { + case SAMPLING_CATROM: + case SAMPLING_MITCHELL: + c = textureCubic(tex, TexCoord, samplingMode); + c.rgb = colorblind(colorBlindMode, c.rgb); + break; + case SAMPLING_XBR: + c = textureXBR(tex, TexCoord, xbrTable, ceil(1.0 * targetDimensions.x / sourceDimensions.x)); + c.rgb = colorblind(colorBlindMode, c.rgb); + break; + default: // NEAREST or LINEAR, which uses GL_TEXTURE_MIN_FILTER/GL_TEXTURE_MAG_FILTER to affect sampling + c = texture(tex, TexCoord); + c.rgb = colorblind(colorBlindMode, c.rgb); + } + + FragColor = c; } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/hsl_to_rgb.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/hsl_to_rgb.glsl new file mode 100644 index 0000000000..600044a6ab --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/hsl_to_rgb.glsl @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +vec3 hslToRgb(int hsl) { + int var5 = hsl / 128; + float var6 = float(var5 >> 3) / 64.0f + 0.0078125f; + float var8 = float(var5 & 7) / 8.0f + 0.0625f; + + int var10 = hsl % 128; + + float var11 = float(var10) / 128.0f; + float var13 = var11; + float var15 = var11; + float var17 = var11; + + if(var8 != 0.0f) { + float var19; + if(var11 < 0.5f) { + var19 = var11 * (1.0f + var8); + } else { + var19 = var11 + var8 - var11 * var8; + } + + float var21 = 2.0f * var11 - var19; + float var23 = var6 + 0.3333333333333333f; + if(var23 > 1.0f) { + var23 -= 1.f; + } + + float var27 = var6 - 0.3333333333333333f; + if(var27 < 0.0f) { + var27 += 1.f; + } + + if(6.0f * var23 < 1.0f) { + var13 = var21 + (var19 - var21) * 6.0f * var23; + } else if(2.0f * var23 < 1.0f) { + var13 = var19; + } else if(3.0f * var23 < 2.0f) { + var13 = var21 + (var19 - var21) * (0.6666666666666666f - var23) * 6.0f; + } else { + var13 = var21; + } + + if(6.0f * var6 < 1.0f) { + var15 = var21 + (var19 - var21) * 6.0f * var6; + } else if(2.0f * var6 < 1.0f) { + var15 = var19; + } else if(3.0f * var6 < 2.0f) { + var15 = var21 + (var19 - var21) * (0.6666666666666666f - var6) * 6.0f; + } else { + var15 = var21; + } + + if(6.0f * var27 < 1.0f) { + var17 = var21 + (var19 - var21) * 6.0f * var27; + } else if(2.0f * var27 < 1.0f) { + var17 = var19; + } else if(3.0f * var27 < 2.0f) { + var17 = var21 + (var19 - var21) * (0.6666666666666666f - var27) * 6.0f; + } else { + var17 = var21; + } + } + + vec3 rgb = vec3( + pow(var13, brightness), + pow(var15, brightness), + pow(var17, brightness) + ); + + return rgb; +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/priority_render.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/priority_render.glsl new file mode 100644 index 0000000000..90af8d41f0 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/priority_render.glsl @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Calculate adjusted priority for a face with a given priority, distance, and +// model global min10 and face distance averages. This allows positioning faces +// with priorities 10/11 into the correct 'slots' resulting in 18 possible +// adjusted priorities +int priority_map(int p, int distance, int _min10, int avg1, int avg2, int avg3) { + // (10, 11) 0 1 2 (10, 11) 3 4 (10, 11) 5 6 7 8 9 (10, 11) + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 + switch (p) { + case 0: return 2; + case 1: return 3; + case 2: return 4; + case 3: return 7; + case 4: return 8; + case 5: return 11; + case 6: return 12; + case 7: return 13; + case 8: return 14; + case 9: return 15; + case 10: + if (distance > avg1) { + return 0; + } else if (distance > avg2) { + return 5; + } else if (distance > avg3) { + return 9; + } else { + return 16; + } + case 11: + if (distance > avg1 && _min10 > avg1) { + return 1; + } else if (distance > avg2 && (_min10 > avg1 || _min10 > avg2)) { + return 6; + } else if (distance > avg3 && (_min10 > avg1 || _min10 > avg2 || _min10 > avg3)) { + return 10; + } else { + return 17; + } + default: + return -1; + } +} + +// calculate the number of faces with a lower adjusted priority than +// the given adjusted priority +int count_prio_offset(int priority) { + int total = 0; + switch (priority) { + case 17: + total += totalMappedNum[16]; + case 16: + total += totalMappedNum[15]; + case 15: + total += totalMappedNum[14]; + case 14: + total += totalMappedNum[13]; + case 13: + total += totalMappedNum[12]; + case 12: + total += totalMappedNum[11]; + case 11: + total += totalMappedNum[10]; + case 10: + total += totalMappedNum[9]; + case 9: + total += totalMappedNum[8]; + case 8: + total += totalMappedNum[7]; + case 7: + total += totalMappedNum[6]; + case 6: + total += totalMappedNum[5]; + case 5: + total += totalMappedNum[4]; + case 4: + total += totalMappedNum[3]; + case 3: + total += totalMappedNum[2]; + case 2: + total += totalMappedNum[1]; + case 1: + total += totalMappedNum[0]; + case 0: + return total; + } +} + +void get_face(uint localId, modelinfo minfo, int cameraYaw, int cameraPitch, + out int prio, out int dis, out ivec4 o1, out ivec4 o2, out ivec4 o3) { + int size = minfo.size; + int offset = minfo.offset; + int flags = minfo.flags; + uint ssboOffset; + + if (localId < size) { + ssboOffset = localId; + } else { + ssboOffset = 0; + } + + ivec4 thisA; + ivec4 thisB; + ivec4 thisC; + + // Grab triangle vertices from the correct buffer + if (flags < 0) { + thisA = vb[offset + ssboOffset * 3]; + thisB = vb[offset + ssboOffset * 3 + 1]; + thisC = vb[offset + ssboOffset * 3 + 2]; + } else { + thisA = tempvb[offset + ssboOffset * 3]; + thisB = tempvb[offset + ssboOffset * 3 + 1]; + thisC = tempvb[offset + ssboOffset * 3 + 2]; + } + + if (localId < size) { + int radius = (flags & 0x7fffffff) >> 12; + int orientation = flags & 0x7ff; + + // rotate for model orientation + ivec4 thisrvA = rotate(thisA, orientation); + ivec4 thisrvB = rotate(thisB, orientation); + ivec4 thisrvC = rotate(thisC, orientation); + + // calculate distance to face + int thisPriority = (thisA.w >> 16) & 0xff;// all vertices on the face have the same priority + int thisDistance; + if (radius == 0) { + thisDistance = 0; + } else { + thisDistance = face_distance(thisrvA, thisrvB, thisrvC, cameraYaw, cameraPitch) + radius; + } + + o1 = thisrvA; + o2 = thisrvB; + o3 = thisrvC; + + prio = thisPriority; + dis = thisDistance; + } else { + o1 = ivec4(0); + o2 = ivec4(0); + o3 = ivec4(0); + prio = 0; + dis = 0; + } +} + +void add_face_prio_distance(uint localId, modelinfo minfo, ivec4 thisrvA, ivec4 thisrvB, ivec4 thisrvC, int thisPriority, int thisDistance, ivec4 pos) { + if (localId < minfo.size) { + // if the face is not culled, it is calculated into priority distance averages + if (face_visible(thisrvA, thisrvB, thisrvC, pos)) { + atomicAdd(totalNum[thisPriority], 1); + atomicAdd(totalDistance[thisPriority], thisDistance); + + // calculate minimum distance to any face of priority 10 for positioning the 11 faces later + if (thisPriority == 10) { + atomicMin(min10, thisDistance); + } + } + } +} + +int map_face_priority(uint localId, modelinfo minfo, int thisPriority, int thisDistance, out int prio) { + int size = minfo.size; + + // Compute average distances for 0/2, 3/4, and 6/8 + + if (localId < size) { + int avg1 = 0; + int avg2 = 0; + int avg3 = 0; + + if (totalNum[1] > 0 || totalNum[2] > 0) { + avg1 = (totalDistance[1] + totalDistance[2]) / (totalNum[1] + totalNum[2]); + } + + if (totalNum[3] > 0 || totalNum[4] > 0) { + avg2 = (totalDistance[3] + totalDistance[4]) / (totalNum[3] + totalNum[4]); + } + + if (totalNum[6] > 0 || totalNum[8] > 0) { + avg3 = (totalDistance[6] + totalDistance[8]) / (totalNum[6] + totalNum[8]); + } + + int adjPrio = priority_map(thisPriority, thisDistance, min10, avg1, avg2, avg3); + int prioIdx = atomicAdd(totalMappedNum[adjPrio], 1); + + prio = adjPrio; + return prioIdx; + } + + prio = 0; + return 0; +} + +void insert_dfs(uint localId, modelinfo minfo, int adjPrio, int distance, int prioIdx) { + int size = minfo.size; + + if (localId < size) { + // calculate base offset into dfs based on number of faces with a lower priority + int baseOff = count_prio_offset(adjPrio); + // store into face array offset array by unique index + dfs[baseOff + prioIdx] = (int(localId) << 16) | distance; + } +} + +void sort_and_insert(uint localId, modelinfo minfo, int thisPriority, int thisDistance, ivec4 thisrvA, ivec4 thisrvB, ivec4 thisrvC) { + /* compute face distance */ + int size = minfo.size; + + if (localId < size) { + int outOffset = minfo.idx; + int uvOffset = minfo.uvOffset; + int flags = minfo.flags; + ivec4 pos = ivec4(minfo.x, minfo.y, minfo.z, 0); + + const int priorityOffset = count_prio_offset(thisPriority); + const int numOfPriority = totalMappedNum[thisPriority]; + int start = priorityOffset; // index of first face with this priority + int end = priorityOffset + numOfPriority; // index of last face with this priority + int myOffset = priorityOffset; + + // we only have to order faces against others of the same priority + // calculate position this face will be in + for (int i = start; i < end; ++i) { + int d1 = dfs[i]; + int theirId = d1 >> 16; + int theirDistance = d1 & 0xffff; + + // the closest faces draw last, so have the highest index + // if two faces have the same distance, the one with the + // higher id draws last + if ((theirDistance > thisDistance) + || (theirDistance == thisDistance && theirId < localId)) { + ++myOffset; + } + } + + // position vertices in scene and write to out buffer + vout[outOffset + myOffset * 3] = pos + thisrvA; + vout[outOffset + myOffset * 3 + 1] = pos + thisrvB; + vout[outOffset + myOffset * 3 + 2] = pos + thisrvC; + + if (uvOffset < 0) { + uvout[outOffset + myOffset * 3] = vec4(0, 0, 0, 0); + uvout[outOffset + myOffset * 3 + 1] = vec4(0, 0, 0, 0); + uvout[outOffset + myOffset * 3 + 2] = vec4(0, 0, 0, 0); + } else if (flags >= 0) { + uvout[outOffset + myOffset * 3] = tempuv[uvOffset + localId * 3]; + uvout[outOffset + myOffset * 3 + 1] = tempuv[uvOffset + localId * 3 + 1]; + uvout[outOffset + myOffset * 3 + 2] = tempuv[uvOffset + localId * 3 + 2]; + } else { + uvout[outOffset + myOffset * 3] = uv[uvOffset + localId * 3]; + uvout[outOffset + myOffset * 3 + 1] = uv[uvOffset + localId * 3 + 1]; + uvout[outOffset + myOffset * 3 + 2] = uv[uvOffset + localId * 3 + 2]; + } + } +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/bicubic.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/bicubic.glsl new file mode 100644 index 0000000000..0d50bcc8c1 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/bicubic.glsl @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2019 logarrhythmic + * 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. + */ + +/* Bicubic sampling takes neighboring pixels into account using a cubic filter for pixel weights. + * + * A generalized cubic filter as described by Mitchell and Netravali is defined by the piecewise equation: + * if abs(x) < 1 + * y = 1/6 * ( (12 - 9b - 6c) * abs(x)^3 + (-18 + 12b + 6c) * abs(x)^2 + (6 - 2b) ) + * if abs(x) >= 1 and < 2 + * y = 1/6 * ( (-1b - 6c) * abs(x)^3 + (6b + 30c) * abs(x)^2 + (-12b - 48c) * abs(x) + (8b + 24c) ) + * otherwise + * y = 0 + * This produces a bell curve centered on 0 with a width of 2. + * + * The 2 functions below are specific cases of the cubic filter with particular values of a and b. + */ + +// Cubic filter with Catmull-Rom parameters +float catmull_rom(float x) +{ + /* + * Generally favorable results in image upscaling are given by a cubic filter with the values b = 0 and c = 0.5. + * This is known as the Catmull-Rom filter, and it closely approximates Jinc upscaling with Lanczos input values. + * Placing these values into the piecewise equation gives us a more compact representation of: + * y = 1.5 * abs(x)^3 - 2.5 * abs(x)^2 + 1 // abs(x) < 1 + * y = -0.5 * abs(x)^3 + 2.5 * abs(x)^2 - 4 * abs(x) + 2 // 1 <= abs(x) < 2 + */ + + float t = abs(x); + float t2 = t * t; + float t3 = t * t * t; + + if (t < 1) + return 1.5 * t3 - 2.5 * t2 + 1.0; + else if (t < 2) + return -0.5 * t3 + 2.5 * t2 - 4.0 * t + 2.0; + else + return 0.0; +} + +float mitchell(float x) +{ + /* + * This is another cubic filter with less aggressive sharpening than Catmull-Rom, which some users may prefer. + * B = 1/3, C = 1/3. + */ + + float t = abs(x); + float t2 = t * t; + float t3 = t * t * t; + + if (t < 1) + return 7.0/6.0 * t3 + -2.0 * t2 + 8.0/9.0; + else if (t < 2) + return -7.0/18.0 * t3 + 2.0 * t2 - 10.0/3.0 * t + 16.0/9.0; + else + return 0.0; +} + +#define CR_AR_STRENGTH 0.9 + +#define FLT_MAX 3.402823466e+38 +#define FLT_MIN 1.175494351e-38 + +// Calculates the distance between two points +float d(vec2 pt1, vec2 pt2) +{ + vec2 v = pt2 - pt1; + return sqrt(dot(v,v)); +} + +// Samples a texture using a 4x4 kernel. +vec4 textureCubic(sampler2D sampler, vec2 texCoords, int mode) +{ + vec2 texSize = textureSize(sampler, 0); + vec2 texelSize = 1.0 / texSize; + vec2 texelFCoords = texCoords * texSize; + texelFCoords -= 0.5; + + vec4 nSum = vec4( 0.0, 0.0, 0.0, 0.0 ); + vec4 nDenom = vec4( 0.0, 0.0, 0.0, 0.0 ); + + vec2 coordFract = fract(texelFCoords); + texCoords -= coordFract * texelSize; + + vec4 c; + + if (mode == SAMPLING_CATROM) + { + // catrom benefits from anti-ringing, which requires knowledge of the minimum and maximum samples in the kernel + vec4 min_sample = vec4(FLT_MAX); + vec4 max_sample = vec4(FLT_MIN); + for (int m = -1; m <= 2; m++) + { + for (int n = -1; n <= 2; n++) + { + // this would use texelFetch, but that would require manual implementation of texture wrapping + vec4 vecData = texture(sampler, texCoords + vec2(m, n) * texelSize); + + // update min and max as we go + min_sample = min(min_sample, vecData); + max_sample = max(max_sample, vecData); + + // calculate weight based on distance of the current texel offset from the sub-texel position of the sampling location + float w = catmull_rom( d(vec2(m, n), coordFract) ); + + // build the weighted average + nSum += vecData * w; + nDenom += w; + } + } + // calculate weighted average + c = nSum / nDenom; + + // store value before anti-ringing + vec4 aux = c; + // anti-ringing: clamp the color value so that it cannot exceed values already present in the kernel area + c = clamp(c, min_sample, max_sample); + // mix according to anti-ringing strength + c = mix(aux, c, CR_AR_STRENGTH); + } + else if (mode == SAMPLING_MITCHELL) + { + for (int m = -1; m <= 2; m++) + { + for (int n = -1; n <= 2; n++) + { + // this would use texelFetch, but that would require manual implementation of texture wrapping + vec4 vecData = texture(sampler, texCoords + vec2(m, n) * texelSize); + + // calculate weight based on distance of the current texel offset from the sub-texel position of the sampling location + float w = mitchell( d(vec2(m, n), coordFract) ); + + // build the weighted average + nSum += vecData * w; + nDenom += w; + } + } + // calculate weighted average + c = nSum / nDenom; + } + + // return the weighted average + return c; +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_common.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_common.glsl new file mode 100644 index 0000000000..c1fc711df7 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_common.glsl @@ -0,0 +1,37 @@ +/* + Hyllian's xBR-lv2 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +struct XBRTable +{ + vec2 texCoord; + vec4 t1; + vec4 t2; + vec4 t3; + vec4 t4; + vec4 t5; + vec4 t6; + vec4 t7; +}; \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_frag.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_frag.glsl new file mode 100644 index 0000000000..2ae6068154 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_frag.glsl @@ -0,0 +1,247 @@ +/* + Hyllian's xBR-lv2 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +// PARAMETERS // +// Uncomment just one of the four params below to choose the corner detection +//#define CORNER_A +//#define CORNER_B +#define CORNER_C +//#define CORNER_D + +#define XBR_Y_WEIGHT 50.0 // involved in preserving small details if small_details = 1, otherwise unused +#define XBR_EQ_THRESHOLD 9.0 // equality threshold for comparisons +//#define XBR_LV1_COEFFICIENT 0.5 // unused, probably left over from a previous iteration +#define XBR_LV2_COEFFICIENT 2.0 // moves the step in a step function at one point during blending +#define small_details 1.0 // 0 or 1, switches logic in a few spots to help preserve small details +// END PARAMETERS // + +#define mul(a,b) (b*a) +#define lv2_cf XBR_LV2_COEFFICIENT +#ifndef CORNER_A +#define SMOOTH_TIPS +#endif + +//const float coef = 2.0; // unused +const vec3 rgbw = vec3(14.352, 28.176, 5.472); // rgb weights +//const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); // unused + +const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); +const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); +const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); +const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); +const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); +const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); +const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); +const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25); + +const vec3 Y = vec3(0.2126, 0.7152, 0.0722); // rec.709 luma weights + +// Difference between vector components. +vec4 df(vec4 A, vec4 B) +{ + return vec4(abs(A-B)); +} + +// Compare two vectors and return their components are different. +vec4 diff(vec4 A, vec4 B) +{ + return vec4(notEqual(A, B)); +} + +// Determine if two vector components are equal based on a threshold. +vec4 eq(vec4 A, vec4 B) +{ + return (step(df(A, B), vec4(XBR_EQ_THRESHOLD))); +} + +// Determine if two vector components are NOT equal based on a threshold. +vec4 neq(vec4 A, vec4 B) +{ + return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B)); +} + +// Weighted distance. +vec4 wd(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); +} + +vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h, vec4 i, vec4 j, vec4 k, vec4 l) +{ + return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + df(i,j) + df(k,l) + 2.0*df(g,h)); +} + +float c_df(vec3 c1, vec3 c2) +{ + vec3 df = abs(c1 - c2); + return df.r + df.g + df.b; +} + +#include scale/xbr_lv2_common.glsl + + +// xBR-level2 upscaler. Level 2 means it detects edges in 2 directions, instead of just 1 in the most basic form of the algorithm. +// This improves quality by a good bit without adding too much complexity compared to available level-3 and level-4 algorithms. +vec4 textureXBR(sampler2D image, vec2 texCoord, XBRTable t, float scale) +{ + vec4 delta = vec4(1.0/scale, 1.0/scale, 1.0/scale, 1.0/scale); + vec4 delta_l = vec4(0.5/scale, 1.0/scale, 0.5/scale, 1.0/scale); + vec4 delta_u = delta_l.yxwz; + + vec2 textureDimensions = textureSize(image, 0); + + vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule + vec4 irlv0, irlv1, irlv2l, irlv2u, block_3d; + vec4 fx, fx_l, fx_u; // inequations of straight lines. + + vec2 fp = fract(texCoord*textureDimensions); + + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + vec4 A1 = texture(image, t.t1.xw ); + vec4 B1 = texture(image, t.t1.yw ); + vec4 C1 = texture(image, t.t1.zw ); + vec4 A = texture(image, t.t2.xw ); + vec4 B = texture(image, t.t2.yw ); + vec4 C = texture(image, t.t2.zw ); + vec4 D = texture(image, t.t3.xw ); + vec4 E = texture(image, t.t3.yw ); + vec4 F = texture(image, t.t3.zw ); + vec4 G = texture(image, t.t4.xw ); + vec4 H = texture(image, t.t4.yw ); + vec4 I = texture(image, t.t4.zw ); + vec4 G5 = texture(image, t.t5.xw ); + vec4 H5 = texture(image, t.t5.yw ); + vec4 I5 = texture(image, t.t5.zw ); + vec4 A0 = texture(image, t.t6.xy ); + vec4 D0 = texture(image, t.t6.xz ); + vec4 G0 = texture(image, t.t6.xw ); + vec4 C4 = texture(image, t.t7.xy ); + vec4 F4 = texture(image, t.t7.xz ); + vec4 I4 = texture(image, t.t7.xw ); + + vec4 b = vec4(dot(B.xyz ,rgbw), dot(D.xyz ,rgbw), dot(H.xyz ,rgbw), dot(F.xyz ,rgbw)); + vec4 c = vec4(dot(C.xyz ,rgbw), dot(A.xyz ,rgbw), dot(G.xyz ,rgbw), dot(I.xyz ,rgbw)); + vec4 d = b.yzwx; + vec4 e = vec4(dot(E.xyz,rgbw)); + vec4 f = b.wxyz; + vec4 g = c.zwxy; + vec4 h = b.zwxy; + vec4 i = c.wxyz; + + vec4 i4, i5, h5, f4; + + float y_weight = XBR_Y_WEIGHT; + + if (small_details < 0.5) + { + i4 = vec4(dot(I4.xyz,rgbw), dot(C1.xyz,rgbw), dot(A0.xyz,rgbw), dot(G5.xyz,rgbw)); + i5 = vec4(dot(I5.xyz,rgbw), dot(C4.xyz,rgbw), dot(A1.xyz,rgbw), dot(G0.xyz,rgbw)); + h5 = vec4(dot(H5.xyz,rgbw), dot(F4.xyz,rgbw), dot(B1.xyz,rgbw), dot(D0.xyz,rgbw)); + } + else + { + i4 = mul( mat4x3(I4.xyz, C1.xyz, A0.xyz, G5.xyz), y_weight * Y ); + i5 = mul( mat4x3(I5.xyz, C4.xyz, A1.xyz, G0.xyz), y_weight * Y ); + h5 = mul( mat4x3(H5.xyz, F4.xyz, B1.xyz, D0.xyz), y_weight * Y ); + } + + // These inequations define the line below which interpolation occurs. + fx = (Ao*fp.y+Bo*fp.x); + fx_l = (Ax*fp.y+Bx*fp.x); + fx_u = (Ay*fp.y+By*fp.x); + + // corner detection + irlv1 = irlv0 = diff(e,f) * diff(e,h); + #ifdef CORNER_B + irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) ); + #endif + #ifdef CORNER_D + vec4 c1 = i4.yzwx; + vec4 g0 = i5.wxyz; + irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0))); + #endif + #ifdef CORNER_C + irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) ); + #endif + + // corner detection in the other direction + irlv2l = diff(e,g) * diff(d,g); + irlv2u = diff(e,c) * diff(b,c); + + vec4 fx45i = clamp((fx + delta -Co - Ci)/(2.0*delta ), 0.0, 1.0); + vec4 fx45 = clamp((fx + delta -Co )/(2.0*delta ), 0.0, 1.0); + vec4 fx30 = clamp((fx_l + delta_l -Cx )/(2.0*delta_l), 0.0, 1.0); + vec4 fx60 = clamp((fx_u + delta_u -Cy )/(2.0*delta_u), 0.0, 1.0); + + vec4 wd1, wd2; + if (small_details < 0.5) + { + wd1 = wd( e, c, g, i, h5, f4, h, f); + wd2 = wd( h, d, i5, f, i4, b, e, i); + } + else + { + wd1 = weighted_distance( e, c, g, i, f4, h5, h, f, b, d, i4, i5); + wd2 = weighted_distance( h, d, i5, f, b, i4, e, i, g, h5, c, f4); + } + + edri = step(wd1, wd2) * irlv0; + edr = step(wd1 + vec4(0.1, 0.1, 0.1, 0.1), wd2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1); + edr_l = step( lv2_cf*df(f,g), df(h,c) ) * irlv2l * edr; + edr_u = step( lv2_cf*df(h,c), df(f,g) ) * irlv2u * edr; + + fx45 = edr * fx45; + fx30 = edr_l * fx30; + fx60 = edr_u * fx60; + fx45i = edri * fx45i; + + px = step(df(e,f), df(e,h)); + + #ifdef SMOOTH_TIPS + vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i)); + #endif + #ifndef SMOOTH_TIPS + vec4 maximos = max(max(fx30, fx60), fx45); + #endif + + vec4 res1 = E; + res1 = mix(res1, mix(H, F, px.x), maximos.x); + res1 = mix(res1, mix(B, D, px.z), maximos.z); + + vec4 res2 = E; + res2 = mix(res2, mix(F, B, px.y), maximos.y); + res2 = mix(res2, mix(D, H, px.w), maximos.w); + + vec4 res = mix(res1, res2, step(c_df(E.xyz, res1.xyz), c_df(E.xyz, res2.xyz))); + + return res; +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_vert.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_vert.glsl new file mode 100644 index 0000000000..e4a7a9700c --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/scale/xbr_lv2_vert.glsl @@ -0,0 +1,54 @@ +/* + Hyllian's xBR-lv2 Shader + + Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. +*/ + +#include scale/xbr_lv2_common.glsl + +XBRTable xbr_vert(vec2 texCoord, ivec2 sourceDimensions) +{ + float dx = (1.0/sourceDimensions.x); + float dy = (1.0/sourceDimensions.y); + + // Define coordinates to optimize later fetching of adjacent pixels + // A1 B1 C1 + // A0 A B C C4 + // D0 D E F F4 + // G0 G H I I4 + // G5 H5 I5 + XBRTable tab = XBRTable( + texCoord, + texCoord.xxxy + vec4( -dx, 0, dx,-2.0*dy), // A1 B1 C1 + texCoord.xxxy + vec4( -dx, 0, dx, -dy), // A B C + texCoord.xxxy + vec4( -dx, 0, dx, 0), // D E F + texCoord.xxxy + vec4( -dx, 0, dx, dy), // G H I + texCoord.xxxy + vec4( -dx, 0, dx, 2.0*dy), // G5 H5 I5 + texCoord.xyyy + vec4(-2.0*dx,-dy, 0, dy), // A0 D0 G0 + texCoord.xyyy + vec4( 2.0*dx,-dy, 0, dy) // C4 F4 I4 + ); + + tab.texCoord.x *= 1.00000001; + + return tab; +} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/util/WildcardMatcherTest.java b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl similarity index 65% rename from runelite-client/src/test/java/net/runelite/client/util/WildcardMatcherTest.java rename to runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl index 5b1d09a264..1e9e63428d 100644 --- a/runelite-client/src/test/java/net/runelite/client/util/WildcardMatcherTest.java +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/to_screen.glsl @@ -22,23 +22,26 @@ * (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.util; -import static junit.framework.TestCase.assertTrue; -import static net.runelite.client.util.WildcardMatcher.matches; -import static org.junit.Assert.assertFalse; -import org.junit.Test; +/* + * Convert a vertex to screen space + */ +vec3 toScreen(ivec3 vertex, int cameraYaw, int cameraPitch, int centerX, int centerY, int zoom) { + float yawSin = sin(cameraYaw * UNIT); + float yawCos = cos(cameraYaw * UNIT); -public class WildcardMatcherTest -{ - @Test - public void testMatches() - { - assertTrue(matches("rune*", "rune pouch")); - assertTrue(matches("rune*", "Rune pouch")); - assertFalse(matches("Abyssal whip", "Adamant dagger")); - assertTrue(matches("rune*", "Runeite Ore")); - assertTrue(matches("Abyssal whip", "Abyssal whip")); - assertTrue(matches("string $ with special character", "string $ with special character")); - } -} \ No newline at end of file + float pitchSin = sin(cameraPitch * UNIT); + float pitchCos = cos(cameraPitch * UNIT); + + float rotatedX = (vertex.z * yawSin) + (vertex.x * yawCos); + float rotatedZ = (vertex.z * yawCos) - (vertex.x * yawSin); + + float var13 = (vertex.y * pitchCos) - (rotatedZ * pitchSin); + float var12 = (vertex.y * pitchSin) + (rotatedZ * pitchCos); + + float x = rotatedX * zoom / var12 + centerX; + float y = var13 * zoom / var12 + centerY; + float z = -var12; // in OpenGL depth is negative + + return vec3(x, y, z); +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vert.glsl b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vert.glsl new file mode 100644 index 0000000000..0b161a1149 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vert.glsl @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#version 330 + +#define TILE_SIZE 128 + +#define FOG_SCENE_EDGE_MIN TILE_SIZE +#define FOG_SCENE_EDGE_MAX (103 * TILE_SIZE) +#define FOG_CORNER_ROUNDING 1.5 +#define FOG_CORNER_ROUNDING_SQUARED FOG_CORNER_ROUNDING * FOG_CORNER_ROUNDING + +layout (location = 0) in ivec4 VertexPosition; +layout (location = 1) in vec4 uv; + +layout(std140) uniform uniforms { + int cameraYaw; + int cameraPitch; + int centerX; + int centerY; + int zoom; + int cameraX; + int cameraY; + int cameraZ; + ivec2 sinCosTable[2048]; +}; + +uniform float brightness; +uniform int useFog; +uniform int fogDepth; +uniform int drawDistance; +uniform mat4 projectionMatrix; + +out vec4 Color; +noperspective centroid out float fHsl; +flat out int textureId; +out vec2 fUv; +out float fogAmount; + +#include hsl_to_rgb.glsl + +float fogFactorLinear(const float dist, const float start, const float end) { + return 1.0 - clamp((dist - start) / (end - start), 0.0, 1.0); +} + +void main() +{ + ivec3 vertex = VertexPosition.xyz; + int ahsl = VertexPosition.w; + int hsl = ahsl & 0xffff; + float a = float(ahsl >> 24 & 0xff) / 255.f; + + vec3 rgb = hslToRgb(hsl); + + gl_Position = projectionMatrix * vec4(vertex, 1.f); + Color = vec4(rgb, 1.f - a); + fHsl = float(hsl); + textureId = int(uv.x); + fUv = uv.yz; + + int fogWest = max(FOG_SCENE_EDGE_MIN, cameraX - drawDistance); + int fogEast = min(FOG_SCENE_EDGE_MAX, cameraX + drawDistance - TILE_SIZE); + int fogSouth = max(FOG_SCENE_EDGE_MIN, cameraZ - drawDistance); + int fogNorth = min(FOG_SCENE_EDGE_MAX, cameraZ + drawDistance - TILE_SIZE); + + // Calculate distance from the scene edge + int xDist = min(vertex.x - fogWest, fogEast - vertex.x); + int zDist = min(vertex.z - fogSouth, fogNorth - vertex.z); + float nearestEdgeDistance = min(xDist, zDist); + float secondNearestEdgeDistance = max(xDist, zDist); + float fogDistance = nearestEdgeDistance - FOG_CORNER_ROUNDING * TILE_SIZE * + max(0.f, (nearestEdgeDistance + FOG_CORNER_ROUNDING_SQUARED) / + (secondNearestEdgeDistance + FOG_CORNER_ROUNDING_SQUARED)); + + fogAmount = fogFactorLinear(fogDistance, 0, fogDepth * TILE_SIZE) * useFog; +} diff --git a/runelite-client/src/test/java/net/runelite/client/ui/FontManagerTest.java b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vertui.glsl similarity index 69% rename from runelite-client/src/test/java/net/runelite/client/ui/FontManagerTest.java rename to runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vertui.glsl index fd42ea6dbf..5ec633dada 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/FontManagerTest.java +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/gpu/vertui.glsl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Tyler + * Copyright (c) 2018, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,23 +22,30 @@ * (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.ui; +#version 330 -import static org.junit.Assert.assertNotNull; -import org.junit.Test; +#define SAMPLING_DEFAULT 0 +#define SAMPLING_MITCHELL 1 +#define SAMPLING_CATROM 2 +#define SAMPLING_XBR 3 -public class FontManagerTest +uniform int samplingMode; +uniform ivec2 sourceDimensions; +uniform ivec2 targetDimensions; + +#include scale/xbr_lv2_vert.glsl + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoord; + +out vec2 TexCoord; +out XBRTable xbrTable; + +void main() { - @Test - public void getRunescapeFont() - { - assertNotNull(FontManager.getRunescapeFont()); - } - - @Test - public void getRunescapeSmallFont() - { - assertNotNull(FontManager.getRunescapeSmallFont()); - } + gl_Position = vec4(aPos, 1.0); + TexCoord = aTexCoord; + if (samplingMode == SAMPLING_XBR) + xbrTable = xbr_vert(TexCoord, sourceDimensions); } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_icon.png new file mode 100644 index 0000000000..c92e3978d5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/abyssal_sire.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/abyssal_sire.png new file mode 100644 index 0000000000..3e41077561 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/abyssal_sire.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/alchemical_hydra.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/alchemical_hydra.png new file mode 100644 index 0000000000..3032e57ec4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/alchemical_hydra.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/barrows_chests.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/barrows_chests.png new file mode 100644 index 0000000000..ba5c55efae Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/barrows_chests.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/bryophyta.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/bryophyta.png new file mode 100644 index 0000000000..8cebd91ecf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/bryophyta.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/callisto.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/callisto.png new file mode 100644 index 0000000000..6f307a26d5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/callisto.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/cerberus.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/cerberus.png new file mode 100644 index 0000000000..4f7ef937cd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/cerberus.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric.png new file mode 100644 index 0000000000..a7240d11f0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric_challenge_mode.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric_challenge_mode.png new file mode 100644 index 0000000000..c298966a16 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chambers_of_xeric_challenge_mode.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_elemental.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_elemental.png new file mode 100644 index 0000000000..cc36114993 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_elemental.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_fanatic.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_fanatic.png new file mode 100644 index 0000000000..73e680aef6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/chaos_fanatic.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/commander_zilyana.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/commander_zilyana.png new file mode 100644 index 0000000000..e207d7e791 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/commander_zilyana.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/corporeal_beast.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/corporeal_beast.png new file mode 100644 index 0000000000..cd113c8ad9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/corporeal_beast.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/crazy_archaeologist.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/crazy_archaeologist.png new file mode 100644 index 0000000000..53d758bf8e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/crazy_archaeologist.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_prime.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_prime.png new file mode 100644 index 0000000000..6b5543b5e1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_prime.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_rex.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_rex.png new file mode 100644 index 0000000000..fc2bcbc3a0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_rex.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_supreme.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_supreme.png new file mode 100644 index 0000000000..044291cc4a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/dagannoth_supreme.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/deranged_archaeologist.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/deranged_archaeologist.png new file mode 100644 index 0000000000..8dfae8c2fb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/deranged_archaeologist.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/general_graardor.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/general_graardor.png new file mode 100644 index 0000000000..1d8e4334fa Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/general_graardor.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/giant_mole.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/giant_mole.png new file mode 100644 index 0000000000..f814bbd2d5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/giant_mole.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/grotesque_guardians.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/grotesque_guardians.png new file mode 100644 index 0000000000..98606aed11 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/grotesque_guardians.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/hespori.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/hespori.png new file mode 100644 index 0000000000..dffc71404c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/hespori.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kalphite_queen.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kalphite_queen.png new file mode 100644 index 0000000000..a6b77f9426 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kalphite_queen.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/king_black_dragon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/king_black_dragon.png new file mode 100644 index 0000000000..3bc8a77466 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/king_black_dragon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kraken.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kraken.png new file mode 100644 index 0000000000..c42e5d3fc9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kraken.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kreearra.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kreearra.png new file mode 100644 index 0000000000..74b9eae788 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kreearra.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kril_tsutsaroth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kril_tsutsaroth.png new file mode 100644 index 0000000000..dfe129ae77 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/kril_tsutsaroth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/mimic.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/mimic.png new file mode 100644 index 0000000000..3d2c0a4606 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/mimic.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/nightmare.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/nightmare.png new file mode 100644 index 0000000000..22907bb92f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/nightmare.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/obor.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/obor.png new file mode 100644 index 0000000000..8c9ea13036 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/obor.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/sarachnis.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/sarachnis.png new file mode 100644 index 0000000000..e74c398976 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/sarachnis.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/scorpia.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/scorpia.png new file mode 100644 index 0000000000..eeb6310454 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/scorpia.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/skotizo.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/skotizo.png new file mode 100644 index 0000000000..cd96bbcca0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/skotizo.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_corrupted_gauntlet.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_corrupted_gauntlet.png new file mode 100644 index 0000000000..9553dde2c1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_corrupted_gauntlet.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_gauntlet.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_gauntlet.png new file mode 100644 index 0000000000..e34fbe3d15 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/the_gauntlet.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/theatre_of_blood.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/theatre_of_blood.png new file mode 100644 index 0000000000..0d05a8ab1e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/theatre_of_blood.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/thermonuclear_smoke_devil.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/thermonuclear_smoke_devil.png new file mode 100644 index 0000000000..7869a9a817 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/thermonuclear_smoke_devil.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tzkal_zuk.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tzkal_zuk.png new file mode 100644 index 0000000000..8b3262cd8b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tzkal_zuk.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tztok_jad.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tztok_jad.png new file mode 100644 index 0000000000..6ccee5515e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/tztok_jad.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/venenatis.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/venenatis.png new file mode 100644 index 0000000000..df08980743 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/venenatis.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vetion.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vetion.png new file mode 100644 index 0000000000..383d30a119 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vetion.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vorkath.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vorkath.png new file mode 100644 index 0000000000..03bcc75ed4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/vorkath.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/wintertodt.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/wintertodt.png new file mode 100644 index 0000000000..eb1d8f47bb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/wintertodt.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zalcano.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zalcano.png new file mode 100644 index 0000000000..c4d6e21be0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zalcano.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zulrah.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zulrah.png new file mode 100644 index 0000000000..83d939a1ac Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/bosses/zulrah.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman.png new file mode 100644 index 0000000000..09869ea0e1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hardcore_ironman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hardcore_ironman.png new file mode 100644 index 0000000000..b3d30a1f94 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hardcore_ironman.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif new file mode 100644 index 0000000000..8f9b2eae4f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/hiscore.gif differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ironman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ironman.png new file mode 100644 index 0000000000..f3416561f0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ironman.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png new file mode 100644 index 0000000000..9b8394065a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/normal.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/normal.png new file mode 100644 index 0000000000..5f16680aa4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/normal.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/overall.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/overall.png new file mode 100644 index 0000000000..50e4458e8e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/overall.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ultimate_ironman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ultimate_ironman.png new file mode 100644 index 0000000000..2511b4395f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/ultimate_ironman.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/info/wiki_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/info/wiki_icon.png new file mode 100644 index 0000000000..ece6eea18e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/info/wiki_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1017.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1017.png new file mode 100644 index 0000000000..68c1ec8860 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1017.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1018.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1018.png new file mode 100644 index 0000000000..ba6284804a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1018.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1019.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1019.png new file mode 100644 index 0000000000..1f046b785b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1019.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1020.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1020.png new file mode 100644 index 0000000000..5e6ebc74af Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1020.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1021.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1021.png new file mode 100644 index 0000000000..e72b210679 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1021.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1022.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1022.png new file mode 100644 index 0000000000..c2feb84e75 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1022.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1023.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1023.png new file mode 100644 index 0000000000..5e267ff095 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1023.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1024.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1024.png new file mode 100644 index 0000000000..73807e0afe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1024.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1025.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1025.png new file mode 100644 index 0000000000..ac3b9f40c3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1025.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1031.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1031.png new file mode 100644 index 0000000000..667809026a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1031.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1032.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1032.png new file mode 100644 index 0000000000..97d23f1803 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1032.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1033.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1033.png new file mode 100644 index 0000000000..d5a76d21d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1033.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1034.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1034.png new file mode 100644 index 0000000000..eaf5cc4fc3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1034.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1035.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1035.png new file mode 100644 index 0000000000..278f4a2665 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1035.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1036.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1036.png new file mode 100644 index 0000000000..0f80cecdcd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1036.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1037.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1037.png new file mode 100644 index 0000000000..a34dc2fedc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1037.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1038.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1038.png new file mode 100644 index 0000000000..af34ca7d71 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1038.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1039.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1039.png new file mode 100644 index 0000000000..1a5a8fbe2e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1039.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1053.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1053.png new file mode 100644 index 0000000000..3fe0611693 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1053.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1182.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1182.png new file mode 100644 index 0000000000..c710825a82 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1182.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1299.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1299.png new file mode 100644 index 0000000000..b6ab5f6e4f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1299.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1414.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1414.png new file mode 100644 index 0000000000..dcbc2fce14 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1414.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1441.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1441.png new file mode 100644 index 0000000000..4c43d934c8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1441.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1583.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1583.png new file mode 100644 index 0000000000..44598b0045 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1583.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1584.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1584.png new file mode 100644 index 0000000000..a53f4023fd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1584.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1611.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1611.png new file mode 100644 index 0000000000..09f9f3fd93 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1611.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/168.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/168.png new file mode 100644 index 0000000000..213614c064 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/168.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/169.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/169.png new file mode 100644 index 0000000000..45d3152faf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/169.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1702.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1702.png new file mode 100644 index 0000000000..45949408ed Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1702.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1703.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1703.png new file mode 100644 index 0000000000..82bf0f56c7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1703.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1711.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1711.png new file mode 100644 index 0000000000..b12d622eff Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/1711.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/201.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/201.png new file mode 100644 index 0000000000..71a08936f6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/201.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/773.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/773.png new file mode 100644 index 0000000000..56115c3fb6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/773.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/776.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/776.png new file mode 100644 index 0000000000..d8dd8b896f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/776.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/780.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/780.png new file mode 100644 index 0000000000..01bac7217d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/780.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/782.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/782.png new file mode 100644 index 0000000000..2ec4943a11 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/782.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/783.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/783.png new file mode 100644 index 0000000000..5c8a278511 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/783.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/788.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/788.png new file mode 100644 index 0000000000..961431d158 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/788.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/789.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/789.png new file mode 100644 index 0000000000..5a113d775d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/789.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/790.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/790.png new file mode 100644 index 0000000000..83e707354e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/790.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/791.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/791.png new file mode 100644 index 0000000000..7651b5394b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/791.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/792.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/792.png new file mode 100644 index 0000000000..12ff9f9ebb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/792.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/898.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/898.png new file mode 100644 index 0000000000..c7c206c329 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/898.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/900.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/900.png new file mode 100644 index 0000000000..80c3b83fc8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/900.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/901.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/901.png new file mode 100644 index 0000000000..c9da35a111 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/901.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/902.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/902.png new file mode 100644 index 0000000000..f9d3d1bcde Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/902.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/904.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/904.png new file mode 100644 index 0000000000..511655feac Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/904.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/907.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/907.png new file mode 100644 index 0000000000..823b4ffcf5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/907.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/908.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/908.png new file mode 100644 index 0000000000..4a7bcc240a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/908.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/909.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/909.png new file mode 100644 index 0000000000..fa04dc22b4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/909.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/910.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/910.png new file mode 100644 index 0000000000..601d9edc34 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/910.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1026.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1026.png new file mode 100644 index 0000000000..24ea7793fe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1026.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1027.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1027.png new file mode 100644 index 0000000000..1e9f5dfdde Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1027.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1028.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1028.png new file mode 100644 index 0000000000..69728c780d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1028.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1029.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1029.png new file mode 100644 index 0000000000..2ab1efdb23 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1029.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_left.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_left.png new file mode 100644 index 0000000000..6c73703482 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_left.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_middle.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_middle.png new file mode 100644 index 0000000000..5870287503 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_middle.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_right.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_right.png new file mode 100644 index 0000000000..2ae201fd1b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_bottom_right.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_left.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_left.png new file mode 100644 index 0000000000..2e21f2fa3f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_left.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_middle.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_middle.png new file mode 100644 index 0000000000..e0e45dbc0a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_middle.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_right.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_right.png new file mode 100644 index 0000000000..b96a7a733b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2005/widget/1030_top_right.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1026.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1026.png new file mode 100644 index 0000000000..2410a1bf74 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1026.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1027.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1027.png new file mode 100644 index 0000000000..6213895b23 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1027.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1028.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1028.png new file mode 100644 index 0000000000..2410a1bf74 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1028.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1029.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1029.png new file mode 100644 index 0000000000..6213895b23 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1029.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1030.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1030.png new file mode 100644 index 0000000000..e168208974 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1030.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1032.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1032.png new file mode 100644 index 0000000000..a49fce3af1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1032.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1033.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1033.png new file mode 100644 index 0000000000..a9ade86c55 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1033.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1034.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1034.png new file mode 100644 index 0000000000..486de7d267 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1034.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1035.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1035.png new file mode 100644 index 0000000000..5bf3550d27 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1035.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1036.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1036.png new file mode 100644 index 0000000000..b7447301f1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1036.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1037.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1037.png new file mode 100644 index 0000000000..df3e68d8eb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1037.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1038.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1038.png new file mode 100644 index 0000000000..48fea5f6a8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1038.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1039.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1039.png new file mode 100644 index 0000000000..236a4676ec Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1039.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1071.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1071.png new file mode 100644 index 0000000000..a7f93c8a47 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1071.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1072.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1072.png new file mode 100644 index 0000000000..2141f67c17 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1072.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1173.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1173.png new file mode 100644 index 0000000000..bbe981e6bb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1173.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1174.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1174.png new file mode 100644 index 0000000000..0900f05360 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1174.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1175.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1175.png new file mode 100644 index 0000000000..a32b80d2fd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1175.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1176.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1176.png new file mode 100644 index 0000000000..d580139820 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1176.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1177.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1177.png new file mode 100644 index 0000000000..5620867d3f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1177.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1180.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1180.png new file mode 100644 index 0000000000..af7e7ea2b2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1180.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1181.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1181.png new file mode 100644 index 0000000000..c060160c5f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1181.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1182.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1182.png new file mode 100644 index 0000000000..1bc75669e4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1182.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1196.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1196.png new file mode 100644 index 0000000000..ac572c1882 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1196.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1197.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1197.png new file mode 100644 index 0000000000..b8ff55b23b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1197.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1198.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1198.png new file mode 100644 index 0000000000..ac572c1882 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1198.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1199.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1199.png new file mode 100644 index 0000000000..b8ff55b23b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1199.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1438.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1438.png new file mode 100644 index 0000000000..c41e23b5ca Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1438.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1439.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1439.png new file mode 100644 index 0000000000..fca91df35e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1439.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1440.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1440.png new file mode 100644 index 0000000000..c395c40f39 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/1440.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/168.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/168.png new file mode 100644 index 0000000000..97d42146b8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/168.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/197.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/197.png new file mode 100644 index 0000000000..d7ca3ddc39 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/197.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/198.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/198.png new file mode 100644 index 0000000000..b29b0dac0d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/198.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/199.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/199.png new file mode 100644 index 0000000000..3d1479a41a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/199.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/200.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/200.png new file mode 100644 index 0000000000..8806b812bb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/200.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/201.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/201.png new file mode 100644 index 0000000000..12a57c9c72 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/201.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/202.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/202.png new file mode 100644 index 0000000000..3c50ed7a32 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/202.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/203.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/203.png new file mode 100644 index 0000000000..15dfae9ccc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/203.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/204.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/204.png new file mode 100644 index 0000000000..386ca95760 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/204.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/205.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/205.png new file mode 100644 index 0000000000..33100dfb56 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/205.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/206.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/206.png new file mode 100644 index 0000000000..9f48193d36 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/206.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/207.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/207.png new file mode 100644 index 0000000000..eb330a9a94 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/207.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/208.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/208.png new file mode 100644 index 0000000000..fb0708af19 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/208.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/209.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/209.png new file mode 100644 index 0000000000..909aad5078 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/209.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/210.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/210.png new file mode 100644 index 0000000000..d5a9e0d64e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/210.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/211.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/211.png new file mode 100644 index 0000000000..2262dcc6bc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/211.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/212.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/212.png new file mode 100644 index 0000000000..61c2f1a84b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/212.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/213.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/213.png new file mode 100644 index 0000000000..eec0622a15 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/213.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/214.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/214.png new file mode 100644 index 0000000000..988b1f3913 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/214.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/215.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/215.png new file mode 100644 index 0000000000..d002d1825f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/215.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/216.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/216.png new file mode 100644 index 0000000000..f9ef87d4ae Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/216.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/217.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/217.png new file mode 100644 index 0000000000..5749f8503c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/217.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/220.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/220.png new file mode 100644 index 0000000000..e737570516 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/220.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/221.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/221.png new file mode 100644 index 0000000000..94fad41924 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/221.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/539.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/539.png new file mode 100644 index 0000000000..3eb47c1235 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/539.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/540.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/540.png new file mode 100644 index 0000000000..e8a95e6ebe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/540.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/541.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/541.png new file mode 100644 index 0000000000..3eb47c1235 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/541.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/542.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/542.png new file mode 100644 index 0000000000..a7553a8979 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/542.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/780.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/780.png new file mode 100644 index 0000000000..aeb5c2c2ab Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/780.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/782.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/782.png new file mode 100644 index 0000000000..aa2fcb1443 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/782.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/783.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/783.png new file mode 100644 index 0000000000..05ef7f2fac Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/783.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/898.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/898.png new file mode 100644 index 0000000000..217ca4096f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/898.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/900.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/900.png new file mode 100644 index 0000000000..4fc45e1f2e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/900.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/901.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/901.png new file mode 100644 index 0000000000..0aa808d800 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/901.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/902.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/902.png new file mode 100644 index 0000000000..a7dfed212c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/902.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/904.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/904.png new file mode 100644 index 0000000000..0cb0b55f7d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/904.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/907.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/907.png new file mode 100644 index 0000000000..021c8edb26 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/907.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/908.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/908.png new file mode 100644 index 0000000000..64beab911a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/908.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/909.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/909.png new file mode 100644 index 0000000000..2484747f6e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/909.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/910.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/910.png new file mode 100644 index 0000000000..f233eb8f3e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/910.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_30px.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_30px.png new file mode 100644 index 0000000000..89e37c75bd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_30px.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_90px.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_90px.png new file mode 100644 index 0000000000..c609c99d4e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/back_90px.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_30px.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_30px.png new file mode 100644 index 0000000000..54da07dc63 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_30px.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_90px.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_90px.png new file mode 100644 index 0000000000..b7cc3e38b7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/2010/healthbar/front_90px.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png new file mode 100644 index 0000000000..b817c474c0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png new file mode 100644 index 0000000000..a6add2616d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png new file mode 100644 index 0000000000..015b85e5a0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png new file mode 100644 index 0000000000..e62c91b16c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png new file mode 100644 index 0000000000..695cc03088 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/5.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/5.png new file mode 100644 index 0000000000..f69f4eb430 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/5.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/6.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/6.png new file mode 100644 index 0000000000..0d156b6a17 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/6.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png new file mode 100644 index 0000000000..c17114ae82 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/kourendlibrary/panel_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/kourendlibrary/panel_icon.png new file mode 100644 index 0000000000..cb450287cc Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/kourendlibrary/panel_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/christmas.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/christmas.jpg new file mode 100644 index 0000000000..08be3bb5aa Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/christmas.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/cox.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/cox.jpg new file mode 100644 index 0000000000..79cffcf41d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/cox.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/darkmeyer.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/darkmeyer.jpg new file mode 100644 index 0000000000..4731052eac Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/darkmeyer.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/ds2.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/ds2.jpg new file mode 100644 index 0000000000..68f2fad46b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/ds2.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/fossil_island.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/fossil_island.jpg new file mode 100644 index 0000000000..3fa51b1aab Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/fossil_island.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween.jpg new file mode 100644 index 0000000000..7266fdbdc4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween_2019.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween_2019.jpg new file mode 100644 index 0000000000..94ab83de2a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/halloween_2019.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/inferno.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/inferno.jpg new file mode 100644 index 0000000000..ba6c878de0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/inferno.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/kebos.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/kebos.jpg new file mode 100644 index 0000000000..1388ae24e1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/kebos.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/mm2.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/mm2.jpg new file mode 100644 index 0000000000..60694f8a29 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/mm2.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/normal.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/normal.jpg new file mode 100644 index 0000000000..ba02cd186e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/normal.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/old.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/old.jpg new file mode 100644 index 0000000000..0a59833e4d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/old.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/prifddinas.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/prifddinas.jpg new file mode 100644 index 0000000000..c2b38cf27a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/prifddinas.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/tob.jpg b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/tob.jpg new file mode 100644 index 0000000000..cac3693432 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loginscreen/tob.jpg differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/back_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/back_icon.png new file mode 100644 index 0000000000..96b9200f60 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/back_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/collapsed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/collapsed.png new file mode 100644 index 0000000000..449f68ae6c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/collapsed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/expanded.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/expanded.png new file mode 100644 index 0000000000..df41d71bc9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/expanded.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/grouped_loot_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/grouped_loot_icon.png new file mode 100644 index 0000000000..5827719316 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/grouped_loot_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/invisible_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/invisible_icon.png new file mode 100644 index 0000000000..a52cbfe0a7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/invisible_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/panel_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/panel_icon.png new file mode 100644 index 0000000000..ac88ed20fe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/panel_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/single_loot_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/single_loot_icon.png new file mode 100644 index 0000000000..6c2214da99 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/single_loot_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/visible_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/visible_icon.png new file mode 100644 index 0000000000..5c4232c808 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/loottracker/visible_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/notes/notes_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/notes/notes_icon.png new file mode 100644 index 0000000000..9b2625aeb7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/notes/notes_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/altar.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/altar.png new file mode 100644 index 0000000000..ddc3b4a6b5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/altar.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/annakarl.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/annakarl.png new file mode 100644 index 0000000000..08059d17e4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/annakarl.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/apeatolldungeon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/apeatolldungeon.png new file mode 100644 index 0000000000..b83aa0bc08 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/apeatolldungeon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ardougne.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ardougne.png new file mode 100644 index 0000000000..cfd9db0b2c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ardougne.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/barrows.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/barrows.png new file mode 100644 index 0000000000..696c1a0cf6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/barrows.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/battlefront.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/battlefront.png new file mode 100644 index 0000000000..696c1a0cf6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/battlefront.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/camelot.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/camelot.png new file mode 100644 index 0000000000..d9bc6d7061 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/camelot.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/carrallangar.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/carrallangar.png new file mode 100644 index 0000000000..41b91276d3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/carrallangar.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/catherby.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/catherby.png new file mode 100644 index 0000000000..1400309f10 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/catherby.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/cemetery.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/cemetery.png new file mode 100644 index 0000000000..64d5571c15 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/cemetery.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/digsitependant.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/digsitependant.png new file mode 100644 index 0000000000..9be6e9c5e8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/digsitependant.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/draynormanor.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/draynormanor.png new file mode 100644 index 0000000000..5ade949f89 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/draynormanor.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/exitportal.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/exitportal.png new file mode 100644 index 0000000000..acba75424a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/exitportal.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/falador.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/falador.png new file mode 100644 index 0000000000..08193d6a2d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/falador.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fenkenstrainscastle.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fenkenstrainscastle.png new file mode 100644 index 0000000000..06cca2eac1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fenkenstrainscastle.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fishingguild.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fishingguild.png new file mode 100644 index 0000000000..9b9fab7a26 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/fishingguild.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ghorrock.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ghorrock.png new file mode 100644 index 0000000000..da4926c429 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/ghorrock.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/glory.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/glory.png new file mode 100644 index 0000000000..9556973f5b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/glory.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/harmonyisland.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/harmonyisland.png new file mode 100644 index 0000000000..01e32ea4b4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/harmonyisland.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/jewellery.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/jewellery.png new file mode 100644 index 0000000000..23e68a25d6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/jewellery.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kharyll.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kharyll.png new file mode 100644 index 0000000000..8d0b228a6e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kharyll.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kourend.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kourend.png new file mode 100644 index 0000000000..22264b2b6e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/kourend.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridge.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridge.png new file mode 100644 index 0000000000..c5a8502a79 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridge.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridgegraveyard.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridgegraveyard.png new file mode 100644 index 0000000000..4c8a1578e2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lumbridgegraveyard.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lunarisle.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lunarisle.png new file mode 100644 index 0000000000..f0042898fd Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/lunarisle.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/marim.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/marim.png new file mode 100644 index 0000000000..6f018e7ef3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/marim.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mindaltar.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mindaltar.png new file mode 100644 index 0000000000..4c8936f022 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mindaltar.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mythicalcape.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mythicalcape.png new file mode 100644 index 0000000000..9e2d64d328 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/mythicalcape.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/pool.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/pool.png new file mode 100644 index 0000000000..0a7f28ea24 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/pool.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/portalnexus.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/portalnexus.png new file mode 100644 index 0000000000..15f6626c3b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/portalnexus.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/repair.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/repair.png new file mode 100644 index 0000000000..f8d594374d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/repair.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/salvegraveyard.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/salvegraveyard.png new file mode 100644 index 0000000000..9dc9a999d5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/salvegraveyard.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/senntisten.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/senntisten.png new file mode 100644 index 0000000000..3bb300bc95 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/senntisten.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/spellbook.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/spellbook.png new file mode 100644 index 0000000000..bd3ff43703 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/spellbook.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/transportation.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/transportation.png new file mode 100644 index 0000000000..b5648c0ca1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/transportation.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/trollstronghold.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/trollstronghold.png new file mode 100644 index 0000000000..aa53b1b879 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/trollstronghold.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/varrock.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/varrock.png new file mode 100644 index 0000000000..3a109a8858 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/varrock.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/waterbirth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/waterbirth.png new file mode 100644 index 0000000000..a49327b3ff Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/waterbirth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/weiss.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/weiss.png new file mode 100644 index 0000000000..940d0fed92 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/weiss.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/westardougne.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/westardougne.png new file mode 100644 index 0000000000..c40f91499b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/westardougne.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/xericstalisman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/xericstalisman.png new file mode 100644 index 0000000000..cb21c4e067 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/xericstalisman.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/poh/yanille.png b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/yanille.png new file mode 100644 index 0000000000..4a61cdeb80 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/poh/yanille.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png new file mode 100644 index 0000000000..76773682c4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png new file mode 100644 index 0000000000..d8df9d8bfe Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/add_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/add_icon.png new file mode 100644 index 0000000000..343c3dce0c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/add_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/border_color_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/border_color_icon.png new file mode 100644 index 0000000000..92d6306429 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/border_color_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/cancel_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/cancel_icon.png new file mode 100644 index 0000000000..3f4915d041 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/cancel_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/confirm_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/confirm_icon.png new file mode 100644 index 0000000000..0a60af0872 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/confirm_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/delete_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/delete_icon.png new file mode 100644 index 0000000000..18b67f23f3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/delete_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/fill_color_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/fill_color_icon.png new file mode 100644 index 0000000000..fb9b6816e5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/fill_color_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/invisible_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/invisible_icon.png new file mode 100644 index 0000000000..a52cbfe0a7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/invisible_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/opacity_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/opacity_icon.png new file mode 100644 index 0000000000..89be73b769 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/opacity_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/panel_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/panel_icon.png new file mode 100644 index 0000000000..02003fe828 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/panel_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/visible_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/visible_icon.png new file mode 100644 index 0000000000..5c4232c808 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenmarkers/visible_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/screenshot/screenshot.png b/runelite-client/src/main/resources/net/runelite/client/plugins/screenshot/screenshot.png new file mode 100644 index 0000000000..c760c83945 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/screenshot/screenshot.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/calc.png b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/calc.png new file mode 100644 index 0000000000..caba2d7b4a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/calc.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json new file mode 100644 index 0000000000..495dd19453 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json @@ -0,0 +1,148 @@ +{ + "actions": [ + { + "level": 1, + "icon": 2150, + "name": "Gnome Stronghold", + "xp": 86.5 + }, + { + "level": 10, + "icon": 11849, + "name": "Draynor Village Rooftop", + "xp": 120 + }, + { + "level":15, + "icon": 11328, + "name": "Leaping trout", + "xp": 5 + }, + { + "level": 20, + "icon": 11849, + "name": "Al Kharid Rooftop", + "xp": 180 + }, + { + "level": 30, + "icon": 11849, + "name": "Varrock Rooftop", + "xp": 238 + }, + { + "level": 30, + "icon": 10595, + "name": "Penguin Agility Course", + "xp": 540 + }, + { + "level":30, + "icon": 11330, + "name": "Leaping salmon", + "xp": 6 + }, + { + "level": 35, + "icon": 1365, + "name": "Barbarian Outpost", + "xp": 152.5 + }, + { + "level": 40, + "icon": 11849, + "name": "Canifis Rooftop", + "xp": 240 + }, + { + "level":45, + "icon": 11332, + "name": "Leaping sturgeon", + "xp": 7 + }, + { + "level": 48, + "icon": 4026, + "name": "Ape Atoll", + "xp": 580 + }, + { + "level": 50, + "icon": 11849, + "name": "Falador Rooftop", + "xp": 440 + }, + { + "level": 52, + "icon": 964, + "name": "Wilderness Agility Course", + "xp": 571 + }, + { + "level": 52, + "icon": 24736, + "name": "Hallowed Sepulchre Floor 1", + "xp": 575 + }, + { + "level": 60, + "icon": 11849, + "name": "Seers' Village Rooftop", + "xp": 570 + }, + { + "level": 60, + "icon": 4179, + "name": "Werewolf Agility Course", + "xp": 730 + }, + { + "level": 62, + "icon": 24736, + "name": "Hallowed Sepulchre Floor 2", + "xp": 925 + }, + { + "level": 70, + "icon": 11849, + "name": "Pollnivneach Rooftop", + "xp": 890 + }, + { + "level": 72, + "icon": 24736, + "name": "Hallowed Sepulchre Floor 3", + "xp": 1500 + }, + { + "level": 75, + "icon": 23962, + "name": "Prifddinas Agility Course", + "xp": 1337 + }, + { + "level": 80, + "icon": 11849, + "name": "Rellekka Rooftop", + "xp": 780 + }, + { + "level": 82, + "icon": 24736, + "name": "Hallowed Sepulchre Floor 4", + "xp": 2700 + }, + { + "level": 90, + "icon": 11849, + "name": "Ardougne Rooftop", + "xp": 793 + }, + { + "level": 92, + "icon": 24736, + "name": "Hallowed Sepulchre Floor 5", + "xp": 6000 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json new file mode 100644 index 0000000000..32897151de --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json @@ -0,0 +1,1018 @@ +{ + "bonuses": [ + { + "name": "Carpenter's Outfit (+2.5%)", + "value": 0.025 + } + ], + "actions": [ + { + "level": 1, + "icon": 8168, + "name": "Exit Portal", + "xp": 100 + }, + { + "level": 1, + "icon": 960, + "name": "Plank", + "xp": 29 + }, + { + "level": 1, + "icon": 8778, + "name": "Oak Plank", + "xp": 60 + }, + { + "level": 1, + "icon": 8780, + "name": "Teak Plank", + "xp": 90 + }, + { + "level": 1, + "icon": 8782, + "name": "Mahogany Plank", + "xp": 140 + }, + { + "level": 1, + "icon": 8180, + "name": "Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8186, + "name": "Fern (big plant)", + "xp": 31 + }, + { + "level": 1, + "icon": 8189, + "name": "Short Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8183, + "name": "Dock Leaf", + "xp": 31 + }, + { + "level": 1, + "icon": 8309, + "name": "Crude Wooden Chair", + "xp": 58 + }, + { + "level": 2, + "icon": 8316, + "name": "Brown Rug", + "xp": 30 + }, + { + "level": 2, + "icon": 8322, + "name": "Torn Curtains", + "xp": 132 + }, + { + "level": 3, + "icon": 8325, + "name": "Clay Fireplace", + "xp": 30 + }, + { + "level": 4, + "icon": 8319, + "name": "Wooden Bookcase", + "xp": 115 + }, + { + "level": 5, + "icon": 8216, + "name": "Firepit", + "xp": 40 + }, + { + "level": 5, + "icon": 8236, + "name": "Cat Blanket", + "xp": 15 + }, + { + "level": 5, + "icon": 8169, + "name": "Decorative Rock", + "xp": 100 + }, + { + "level": 5, + "icon": 8173, + "name": "Tree", + "xp": 31 + }, + { + "level": 6, + "icon": 8181, + "name": "Small Fern", + "xp": 70 + }, + { + "level": 6, + "icon": 8184, + "name": "Thistle", + "xp": 70 + }, + { + "level": 6, + "icon": 8187, + "name": "Bush", + "xp": 70 + }, + { + "level": 6, + "icon": 8190, + "name": "Large Leaf Bush", + "xp": 70 + }, + { + "level": 6, + "icon": 8223, + "name": "Wooden Shelves 1", + "xp": 87 + }, + { + "level": 7, + "icon": 8230, + "name": "Pump and Drain", + "xp": 100 + }, + { + "level": 7, + "icon": 8239, + "name": "Beer Barrel", + "xp": 87 + }, + { + "level": 8, + "icon": 8310, + "name": "Wooden Chair", + "xp": 87 + }, + { + "level": 9, + "icon": 8233, + "name": "Wooden Larder", + "xp": 228 + }, + { + "level": 10, + "icon": 8115, + "name": "Wood Dining Table", + "xp": 115 + }, + { + "level": 10, + "icon": 8170, + "name": "Pond", + "xp": 100 + }, + { + "level": 10, + "icon": 8174, + "name": "Nice Tree", + "xp": 44 + }, + { + "level": 10, + "icon": 8108, + "name": "Wooden Bench", + "xp": 115 + }, + { + "level": 11, + "icon": 8217, + "name": "Firepit with Hook", + "xp": 60 + }, + { + "level": 12, + "icon": 8185, + "name": "Reeds", + "xp": 100 + }, + { + "level": 12, + "icon": 8182, + "name": "Fern (small plant)", + "xp": 100 + }, + { + "level": 12, + "icon": 8240, + "name": "Cider Barrel", + "xp": 91 + }, + { + "level": 12, + "icon": 8224, + "name": "Wooden Shelves 2", + "xp": 147 + }, + { + "level": 12, + "icon": 8115, + "name": "Wood Table", + "xp": 87 + }, + { + "level": 12, + "icon": 8191, + "name": "Huge Plant", + "xp": 100 + }, + { + "level": 12, + "icon": 8188, + "name": "Tall Plant", + "xp": 100 + }, + { + "level": 13, + "icon": 8317, + "name": "Rug", + "xp": 60 + }, + { + "level": 14, + "icon": 8311, + "name": "Rocking Chair", + "xp": 87 + }, + { + "level": 15, + "icon": 8171, + "name": "Imp Statue", + "xp": 150 + }, + { + "level": 15, + "icon": 8175, + "name": "Oak Tree", + "xp": 70 + }, + { + "level": 16, + "icon": 8102, + "name": "Oak Decoration", + "xp": 120 + }, + { + "level": 17, + "icon": 8218, + "name": "Firepit with Pot", + "xp": 80 + }, + { + "level": 18, + "icon": 8323, + "name": "Curtains", + "xp": 225 + }, + { + "level": 18, + "icon": 1905, + "name": "Asgarnian Ale", + "xp": 184 + }, + { + "level": 19, + "icon": 8237, + "name": "Cat Basket", + "xp": 58 + }, + { + "level": 19, + "icon": 8312, + "name": "Oak Chair", + "xp": 120 + }, + { + "level": 20, + "icon": 8031, + "name": "Wooden Bed", + "xp": 117 + }, + { + "level": 20, + "icon": 8038, + "name": "Shoe Box", + "xp": 58 + }, + { + "level": 21, + "icon": 8045, + "name": "Shaving Stand", + "xp": 30 + }, + { + "level": 22, + "icon": 8116, + "name": "Oak Table", + "xp": 240 + }, + { + "level": 22, + "icon": 8109, + "name": "Oak Bench", + "xp": 240 + }, + { + "level": 23, + "icon": 8225, + "name": "Wooden Shelves 3", + "xp": 147 + }, + { + "level": 24, + "icon": 8219, + "name": "Small Oven", + "xp": 80 + }, + { + "level": 25, + "icon": 8052, + "name": "Oak Clock", + "xp": 142 + }, + { + "level": 26, + "icon": 1909, + "name": "Greenman's Ale", + "xp": 184 + }, + { + "level": 26, + "icon": 8313, + "name": "Oak Armchair", + "xp": 180 + }, + { + "level": 26, + "icon": 8099, + "name": "Rope Bell-Pull", + "xp": 64 + }, + { + "level": 27, + "icon": 8231, + "name": "Pump and Tub", + "xp": 200 + }, + { + "level": 27, + "icon": 8039, + "name": "Oak Drawers", + "xp": 120 + }, + { + "level": 29, + "icon": 8320, + "name": "Oak Bookcase", + "xp": 180 + }, + { + "level": 29, + "icon": 8220, + "name": "Large Oven", + "xp": 100 + }, + { + "level": 29, + "icon": 8046, + "name": "Oak Shaving Stand", + "xp": 61 + }, + { + "level": 30, + "icon": 8176, + "name": "Willow Tree", + "xp": 100 + }, + { + "level": 30, + "icon": 8032, + "name": "Oak Bed", + "xp": 210 + }, + { + "level": 30, + "icon": 10976, + "name": "Long Bone", + "xp": 4500 + }, + { + "level": 30, + "icon": 10977, + "name": "Curved Bone", + "xp": 6750 + }, + { + "level": 31, + "icon": 8110, + "name": "Carved Oak Bench", + "xp": 240 + }, + { + "level": 31, + "icon": 8117, + "name": "Carved Oak Table", + "xp": 360 + }, + { + "level": 32, + "icon": 8118, + "name": "Oak Table", + "xp": 180 + }, + { + "level": 32, + "icon": 8023, + "name": "Boxing Ring", + "xp": 420 + }, + { + "level": 33, + "icon": 8234, + "name": "Oak Larder", + "xp": 480 + }, + { + "level": 33, + "icon": 8238, + "name": "Cushioned Basket", + "xp": 58 + }, + { + "level": 33, + "icon": 8326, + "name": "Stone Fireplace", + "xp": 40 + }, + { + "level": 34, + "icon": 8221, + "name": "Steel Range", + "xp": 120 + }, + { + "level": 34, + "icon": 8226, + "name": "Oak Shelves 1", + "xp": 240 + }, + { + "level": 34, + "icon": 8028, + "name": "Glove Rack", + "xp": 120 + }, + { + "level": 34, + "icon": 8033, + "name": "Large Oak Bed", + "xp": 330 + }, + { + "level": 35, + "icon": 8314, + "name": "Teak Armchair", + "xp": 180 + }, + { + "level": 36, + "icon": 1911, + "name": "Dragon Bitter", + "xp": 224 + }, + { + "level": 36, + "icon": 8103, + "name": "Teak Decoration", + "xp": 180 + }, + { + "level": 37, + "icon": 8100, + "name": "Bell-Pull", + "xp": 120 + }, + { + "level": 37, + "icon": 8047, + "name": "Oak Dresser", + "xp": 121 + }, + { + "level": 38, + "icon": 8112, + "name": "Teak Bench", + "xp": 360 + }, + { + "level": 38, + "icon": 8118, + "name": "Teak Table", + "xp": 360 + }, + { + "level": 39, + "icon": 8040, + "name": "Oak Wardrobe", + "xp": 180 + }, + { + "level": 40, + "icon": 8034, + "name": "Teak Bed", + "xp": 300 + }, + { + "level": 40, + "icon": 8321, + "name": "Mahogany Bookcase", + "xp": 420 + }, + { + "level": 40, + "icon": 8334, + "name": "Oak Lectern", + "xp": 60 + }, + { + "level": 40, + "icon": 8324, + "name": "Opulent Curtains", + "xp": 315 + }, + { + "level": 41, + "icon": 8024, + "name": "Fencing Ring", + "xp": 570 + }, + { + "level": 41, + "icon": 8341, + "name": "Globe", + "xp": 180 + }, + { + "level": 42, + "icon": 8222, + "name": "Fancy Range", + "xp": 160 + }, + { + "level": 42, + "icon": 8351, + "name": "Crystal Ball", + "xp": 280 + }, + { + "level": 43, + "icon": 8354, + "name": "Alchemical Chart", + "xp": 30 + }, + { + "level": 43, + "icon": 8235, + "name": "Teak larder", + "xp": 750 + }, + { + "level": 44, + "icon": 8348, + "name": "Wooden Telescope", + "xp": 121 + }, + { + "level": 44, + "icon": 8029, + "name": "Weapons Rack", + "xp": 180 + }, + { + "level": 44, + "icon": 8112, + "name": "Carved Teak Bench", + "xp": 360 + }, + { + "level": 45, + "icon": 8227, + "name": "Oak Shelves 2", + "xp": 240 + }, + { + "level": 45, + "icon": 8119, + "name": "Carved Teak Table", + "xp": 600 + }, + { + "level": 45, + "icon": 8035, + "name": "Large Teak Bed", + "xp": 480 + }, + { + "level": 45, + "icon": 8177, + "name": "Maple Tree", + "xp": 122 + }, + { + "level": 46, + "icon": 8048, + "name": "Teak Dresser", + "xp": 181 + }, + { + "level": 47, + "icon": 8232, + "name": "Sink", + "xp": 300 + }, + { + "level": 47, + "icon": 8335, + "name": "Eagle Lectern", + "xp": 120 + }, + { + "level": 47, + "icon": 8336, + "name": "Demon Lectern", + "xp": 120 + }, + { + "level": 47, + "icon": 21913, + "name": "Mounted Mythical Cape", + "xp": 370 + }, + { + "level": 48, + "icon": 5755, + "name": "Chef's Delight", + "xp": 224 + }, + { + "level": 50, + "icon": 8328, + "name": "Teak Portal", + "xp": 270 + }, + { + "level": 50, + "icon": 8315, + "name": "Mahogany Armchair", + "xp": 280 + }, + { + "level": 50, + "icon": 8342, + "name": "Ornamental Globe", + "xp": 270 + }, + { + "level": 50, + "icon": 8331, + "name": "Teleport Focus", + "xp": 40 + }, + { + "level": 51, + "icon": 8041, + "name": "Teak Drawers", + "xp": 180 + }, + { + "level": 51, + "icon": 8025, + "name": "Combat Ring", + "xp": 630 + }, + { + "level": 52, + "icon": 8118, + "name": "Teak Kitchen Table", + "xp": 270 + }, + { + "level": 52, + "icon": 8113, + "name": "Mahogany Bench", + "xp": 560 + }, + { + "level": 52, + "icon": 8120, + "name": "Mahogany Table", + "xp": 840 + }, + { + "level": 53, + "icon": 8036, + "name": "4-Poster Bed", + "xp": 450 + }, + { + "level": 54, + "icon": 8030, + "name": "Extra Weapons Rack", + "xp": 440 + }, + { + "level": 54, + "icon": 8352, + "name": "Elemental Sphere", + "xp": 580 + }, + { + "level": 55, + "icon": 8053, + "name": "Teak Clock", + "xp": 202 + }, + { + "level": 56, + "icon": 8104, + "name": "Gilded Decoration", + "xp": 1020 + }, + { + "level": 56, + "icon": 8049, + "name": "Fancy Teak Dresser", + "xp": 182 + }, + { + "level": 56, + "icon": 8228, + "name": "Teak Shelves 1", + "xp": 330 + }, + { + "level": 57, + "icon": 8337, + "name": "Teak Eagle Lectern", + "xp": 180 + }, + { + "level": 57, + "icon": 8338, + "name": "Teak Demon Lectern", + "xp": 180 + }, + { + "level": 59, + "icon": 8154, + "name": "Limestone attack stone", + "xp": 200 + }, + { + "level": 59, + "icon": 8343, + "name": "Lunar Globe", + "xp": 570 + }, + { + "level": 60, + "icon": 8037, + "name": "Gilded 4-Poster Bed", + "xp": 1330 + }, + { + "level": 60, + "icon": 8101, + "name": "Posh Bell-Pull", + "xp": 420 + }, + { + "level": 60, + "icon": 24479, + "name": "Spice Rack", + "xp": 374 + }, + { + "level": 60, + "icon": 8178, + "name": "Yew Tree", + "xp": 141 + }, + { + "level": 61, + "icon": 8114, + "name": "Gilded Bench", + "xp": 1760 + }, + { + "level": 63, + "icon": 8042, + "name": "Teak Wardrobe", + "xp": 270 + }, + { + "level": 63, + "icon": 8327, + "name": "Marble Fireplace", + "xp": 500 + }, + { + "level": 63, + "icon": 8355, + "name": "Astronomical Chart", + "xp": 45 + }, + { + "level": 64, + "icon": 8349, + "name": "Teak Telescope", + "xp": 181 + }, + { + "level": 64, + "icon": 8050, + "name": "Mahogany Dresser", + "xp": 281 + }, + { + "level": 65, + "icon": 8329, + "name": "Mahogany Portal", + "xp": 420 + }, + { + "level": 65, + "icon": 8332, + "name": "Greater Focus", + "xp": 500 + }, + { + "level": 65, + "icon": 8318, + "name": "Opulent Rug", + "xp": 360 + }, + { + "level": 66, + "icon": 20649, + "name": "Teak Garden Bench", + "xp": 540 + }, + { + "level": 66, + "icon": 8353, + "name": "Crystal of Power", + "xp": 890 + }, + { + "level": 67, + "icon": 8229, + "name": "Teak Shelves 2", + "xp": 930 + }, + { + "level": 67, + "icon": 8338, + "name": "Mahogany Demon Lectern", + "xp": 580 + }, + { + "level": 67, + "icon": 8338, + "name": "Mahogany Eagle Lectern", + "xp": 580 + }, + { + "level": 68, + "icon": 8344, + "name": "Celestial Globe", + "xp": 570 + }, + { + "level": 70, + "icon": 8172, + "name": "Dungeon Entrance", + "xp": 500 + }, + { + "level": 71, + "icon": 8026, + "name": "Ranging Pedestals", + "xp": 720 + }, + { + "level": 72, + "icon": 8121, + "name": "Opulent Table", + "xp": 3100 + }, + { + "level": 74, + "icon": 8122, + "name": "Oak Door", + "xp": 600 + }, + { + "level": 74, + "icon": 8051, + "name": "Gilded Dresser", + "xp": 582 + }, + { + "level": 75, + "icon": 8043, + "name": "Mahogany Wardrobe", + "xp": 420 + }, + { + "level": 75, + "icon": 8179, + "name": "Magic Tree", + "xp": 223 + }, + { + "level": 77, + "icon": 8341, + "name": "Armillary Globe", + "xp": 960 + }, + { + "level": 77, + "icon": 20650, + "name": "Gnome Bench", + "xp": 840 + }, + { + "level": 80, + "icon": 8330, + "name": "Marble Portal", + "xp": 1500 + }, + { + "level": 80, + "icon": 8333, + "name": "Scrying Pool", + "xp": 2000 + }, + { + "level": 81, + "icon": 8027, + "name": "Balance Beam", + "xp": 1000 + }, + { + "level": 83, + "icon": 8356, + "name": "Infernal Chart", + "xp": 60 + }, + { + "level": 84, + "icon": 8350, + "name": "Mahogany Telescope", + "xp": 281 + }, + { + "level": 85, + "icon": 8054, + "name": "Gilded Clock", + "xp": 602 + }, + { + "level": 86, + "icon": 8346, + "name": "Small Orrery", + "xp": 1320 + }, + { + "level": 87, + "icon": 8044, + "name": "Gilded Wardrobe", + "xp": 720 + }, + { + "level": 95, + "icon": 8347, + "name": "Large Orrery", + "xp": 1420 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json new file mode 100644 index 0000000000..6ddb07cbaf --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json @@ -0,0 +1,718 @@ +{ + "actions": [ + { + "level": 1, + "icon": 9436, + "name": "Sinew", + "xp": 3 + }, + { + "level": 1, + "icon": 315, + "name": "Shrimps", + "xp": 30 + }, + { + "level": 1, + "icon": 2140, + "name": "Cooked Chicken", + "xp": 30 + }, + { + "level": 1, + "icon": 2142, + "name": "Cooked Meat", + "xp": 30 + }, + { + "level": 1, + "icon": 3228, + "name": "Cooked Rabbit", + "xp": 30 + }, + { + "level": 1, + "icon": 319, + "name": "Anchovies", + "xp": 30 + }, + { + "level": 1, + "icon": 325, + "name": "Sardine", + "xp": 40 + }, + { + "level": 1, + "icon": 3146, + "name": "Poison Karambwan", + "xp": 80 + }, + { + "level": 1, + "icon": 1861, + "name": "Ugthanki Meat", + "xp": 40 + }, + { + "level": 1, + "icon": 2309, + "name": "Bread", + "xp": 40 + }, + { + "level": 5, + "icon": 347, + "name": "Herring", + "xp": 50 + }, + { + "level": 6, + "icon": 2084, + "name": "Fruit Blast", + "xp": 50 + }, + { + "level": 7, + "icon": 6701, + "name": "Baked Potato", + "xp": 15 + }, + { + "level": 8, + "icon": 2048, + "name": "Pineapple Punch", + "xp": 70 + }, + { + "level": 9, + "icon": 7072, + "name": "Spicy Sauce", + "xp": 25 + }, + { + "level": 10, + "icon": 355, + "name": "Mackerel", + "xp": 60 + }, + { + "level": 10, + "icon": 2325, + "name": "Redberry Pie", + "xp": 78 + }, + { + "level": 10, + "icon": 2217, + "name": "Toad Crunchies", + "xp": 100 + }, + { + "level": 11, + "icon": 7062, + "name": "Chilli Con Carne", + "xp": 55 + }, + { + "level": 11, + "icon": 9980, + "name": "Roast Bird Meat", + "xp": 62.5 + }, + { + "level": 12, + "icon": 3369, + "name": "Thin Snail Meat", + "xp": 70 + }, + { + "level": 12, + "icon": 2213, + "name": "Spicy Crunchies", + "xp": 100 + }, + { + "level": 13, + "icon": 7078, + "name": "Scrambled Egg", + "xp": 50 + }, + { + "level": 14, + "icon": 5763, + "name": "Cider", + "xp": 182 + }, + { + "level": 14, + "icon": 2205, + "name": "Worm Crunchies", + "xp": 104 + }, + { + "level": 15, + "icon": 333, + "name": "Trout", + "xp": 70 + }, + { + "level": 16, + "icon": 6293, + "name": "Spider on stick", + "xp": 80 + }, + { + "level": 16, + "icon": 6295, + "name": "Spider on shaft", + "xp": 80 + }, + { + "level": 16, + "icon": 7223, + "name": "Roast Rabbit", + "xp": 72.5 + }, + { + "level": 16, + "icon": 2209, + "name": "Chocchip crunchies", + "xp": 100 + }, + { + "level": 17, + "icon": 3371, + "name": "Lean Snail Meat", + "xp": 80 + }, + { + "level": 18, + "icon": 339, + "name": "Cod", + "xp": 75 + }, + { + "level": 18, + "icon": 2054, + "name": "Wizard Blizzard", + "xp": 110 + }, + { + "level": 19, + "icon": 1913, + "name": "Dwarven Stout", + "xp": 215 + }, + { + "level": 20, + "icon": 2080, + "name": "Short Green Guy", + "xp": 120 + }, + { + "level": 20, + "icon": 2327, + "name": "Meat Pie", + "xp": 110 + }, + { + "level": 20, + "icon": 351, + "name": "Pike", + "xp": 80 + }, + { + "level": 20, + "icon": 712, + "name": "Cup of tea", + "xp": 52 + }, + { + "level": 21, + "icon": 9988, + "name": "Roast Beast Meat", + "xp": 82.5 + }, + { + "level": 21, + "icon": 7521, + "name": "Cooked Crab Meat", + "xp": 100 + }, + { + "level": 21, + "icon": 2130, + "name": "Pot of cream", + "xp": 18 + }, + { + "level": 22, + "icon": 3373, + "name": "Fat Snail Meat", + "xp": 95 + }, + { + "level": 23, + "icon": 7064, + "name": "Egg And Tomato", + "xp": 50 + }, + { + "level": 24, + "icon": 1905, + "name": "Asgarnian Ale", + "xp": 248 + }, + { + "level": 25, + "icon": 329, + "name": "Salmon", + "xp": 90 + }, + { + "level": 25, + "icon": 2003, + "name": "Stew", + "xp": 117 + }, + { + "level": 25, + "icon": 2277, + "name": "Fruit Batta", + "xp": 150 + }, + { + "level": 26, + "icon": 2255, + "name": "Toad Batta", + "xp": 152 + }, + { + "level": 27, + "icon": 2253, + "name": "Worm Batta", + "xp": 154 + }, + { + "level": 28, + "icon": 2281, + "name": "Vegetable Batta", + "xp": 156 + }, + { + "level": 28, + "icon": 5988, + "name": "Sweetcorn", + "xp": 104 + }, + { + "level": 28, + "icon": 3381, + "name": "Cooked Slimy Eel", + "xp": 95 + }, + { + "level": 29, + "icon": 7170, + "name": "Mud Pie", + "xp": 128 + }, + { + "level": 29, + "icon": 1909, + "name": "Greenman's ale", + "xp": 281 + }, + { + "level": 29, + "icon": 2259, + "name": "Cheese and Tomato Batta", + "xp": 158 + }, + { + "level": 30, + "icon": 361, + "name": "Tuna", + "xp": 100 + }, + { + "level": 30, + "icon": 2323, + "name": "Apple Pie", + "xp": 130 + }, + { + "level": 30, + "icon": 2191, + "name": "Worm Hole", + "xp": 170 + }, + { + "level": 30, + "icon": 3144, + "name": "Cooked Karambwan", + "xp": 190 + }, + { + "level": 30, + "icon": 2878, + "name": "Roasted Chompy", + "xp": 100 + }, + { + "level": 31, + "icon": 7530, + "name": "Fishcake", + "xp": 100 + }, + { + "level": 32, + "icon": 2092, + "name": "Drunk Dragon", + "xp": 160 + }, + { + "level": 33, + "icon": 2074, + "name": "Choc Saturday", + "xp": 170 + }, + { + "level": 34, + "icon": 7178, + "name": "Garden Pie", + "xp": 138 + }, + { + "level": 34, + "icon": 1907, + "name": "Wizard's mind bomb", + "xp": 314 + }, + { + "level": 35, + "icon": 1993, + "name": "Jug Of Wine", + "xp": 200 + }, + { + "level": 35, + "icon": 2289, + "name": "Plain Pizza", + "xp": 143 + }, + { + "level": 35, + "icon": 10136, + "name": "Rainbow Fish", + "xp": 110 + }, + { + "level": 35, + "icon": 2195, + "name": "Veg ball", + "xp": 175 + }, + { + "level": 37, + "icon": 2064, + "name": "Blurberry Special", + "xp": 180 + }, + { + "level": 38, + "icon": 5003, + "name": "Cave Eel", + "xp": 115 + }, + { + "level": 38, + "icon": 6697, + "name": "Pat of butter", + "xp": 40.5 + }, + { + "level": 39, + "icon": 1911, + "name": "Dragon Bitter", + "xp": 347 + }, + { + "level": 39, + "icon": 6703, + "name": "Potato with butter", + "xp": 40 + }, + { + "level": 40, + "icon": 379, + "name": "Lobster", + "xp": 120 + }, + { + "level": 40, + "icon": 1891, + "name": "Cake", + "xp": 180 + }, + { + "level": 40, + "icon": 2187, + "name": "Tangled toad's legs", + "xp": 185 + }, + { + "level": 41, + "icon": 7054, + "name": "Chilli Potato", + "xp": 165.5 + }, + { + "level": 41, + "icon": 7568, + "name": "Cooked Jubbly", + "xp": 160 + }, + { + "level": 42, + "icon": 2185, + "name": "Chocolate Bomb", + "xp": 190 + }, + { + "level": 42, + "icon": 7084, + "name": "Fried Onions", + "xp": 60 + }, + { + "level": 43, + "icon": 365, + "name": "Bass", + "xp": 130 + }, + { + "level": 44, + "icon": 2955, + "name": "Moonlight Mead", + "xp": 380 + }, + { + "level": 45, + "icon": 373, + "name": "Swordfish", + "xp": 140 + }, + { + "level": 45, + "icon": 2293, + "name": "Meat Pizza", + "xp": 169 + }, + { + "level": 46, + "icon": 7082, + "name": "Fried Mushrooms", + "xp": 60 + }, + { + "level": 47, + "icon": 7188, + "name": "Fish Pie", + "xp": 164 + }, + { + "level": 47, + "icon": 6705, + "name": "Potato with cheese", + "xp": 40 + }, + { + "level": 48, + "icon": 1985, + "name": "Cheese", + "xp": 64 + }, + { + "level": 49, + "icon": 5751, + "name": "Axeman's folly", + "xp": 413 + }, + { + "level": 50, + "icon": 2343, + "name": "Cooked Oomlie Wrap", + "xp": 30 + }, + { + "level": 50, + "icon": 1897, + "name": "Chocolate Cake", + "xp": 210 + }, + { + "level": 51, + "icon": 7056, + "name": "Egg Potato", + "xp": 195.5 + }, + { + "level": 52, + "icon": 19662, + "name": "Botanical Pie", + "xp": 180 + }, + { + "level": 53, + "icon": 2149, + "name": "Lava Eel", + "xp": 30 + }, + { + "level": 54, + "icon": 5755, + "name": "Chef's Delight", + "xp": 446 + }, + { + "level": 55, + "icon": 2297, + "name": "Anchovy Pizza", + "xp": 182 + }, + { + "level": 57, + "icon": 7066, + "name": "Mushroom & onion", + "xp": 120 + }, + { + "level": 58, + "icon": 1883, + "name": "Ugthanki Kebab (Fresh)", + "xp": 80 + }, + { + "level": 58, + "icon": 1865, + "name": "Pitta Bread", + "xp": 40 + }, + { + "level": 59, + "icon": 5759, + "name": "Slayer's respite", + "xp": 479 + }, + { + "level": 60, + "icon": 2011, + "name": "Curry", + "xp": 280 + }, + { + "level": 60, + "icon": 21690, + "name": "Mushroom Pie", + "xp": 200 + }, + { + "level": 62, + "icon": 7946, + "name": "Monkfish", + "xp": 150 + }, + { + "level": 64, + "icon": 7058, + "name": "Mushroom Potato", + "xp": 270.5 + }, + { + "level": 65, + "icon": 2301, + "name": "Pineapple Pizza", + "xp": 188 + }, + { + "level": 65, + "icon": 245, + "name": "Wine of Zamorak", + "xp": 200 + }, + { + "level": 67, + "icon": 7068, + "name": "Tuna And Corn", + "xp": 204 + }, + { + "level": 68, + "icon": 7060, + "name": "Tuna Potato", + "xp": 309.5 + }, + { + "level": 70, + "icon": 7198, + "name": "Admiral Pie", + "xp": 210 + }, + { + "level": 72, + "icon": 13339, + "name": "Sacred Eel", + "xp": 109 + }, + { + "level": 73, + "icon": 22795, + "name": "Dragonfruit Pie", + "xp": 220 + }, + { + "level": 80, + "icon": 385, + "name": "Shark", + "xp": 210 + }, + { + "level": 82, + "icon": 397, + "name": "Sea Turtle", + "xp": 211.3 + }, + { + "level": 84, + "icon": 13441, + "name": "Anglerfish", + "xp": 230 + }, + { + "level": 85, + "icon": 7208, + "name": "Wild Pie", + "xp": 240 + }, + { + "level": 90, + "icon": 11936, + "name": "Dark Crab", + "xp": 215 + }, + { + "level": 91, + "icon": 391, + "name": "Manta Ray", + "xp": 216.3 + }, + { + "level": 95, + "icon": 7218, + "name": "Summer Pie", + "xp": 260 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json new file mode 100644 index 0000000000..0f2a5c6922 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json @@ -0,0 +1,803 @@ +{ + "actions": [ + { + "level": 1, + "icon": 1759, + "name": "Ball Of Wool", + "xp": 2.5 + }, + { + "level": 1, + "icon": 1787, + "name": "Unfired pot", + "xp": 6.3 + }, + { + "level": 1, + "icon": 1931, + "name": "Pot", + "xp": 6.3 + }, + { + "level": 1, + "icon": 1059, + "name": "Leather Gloves", + "xp": 13.8 + }, + { + "level": 1, + "icon": 1609, + "name": "Opal", + "xp": 15 + }, + { + "level": 1, + "icon": 21081, + "name": "Opal Ring", + "xp": 10 + }, + { + "level": 1, + "icon": 1775, + "name": "Molten Glass", + "xp": 20 + }, + { + "level": 1, + "icon": 1919, + "name": "Beer Glass", + "xp": 17.5 + }, + { + "level": 4, + "icon": 4527, + "name": "Empty Candle Lantern", + "xp": 19 + }, + { + "level": 5, + "icon": 1635, + "name": "Gold Ring", + "xp": 15 + }, + { + "level": 5, + "icon": 21512, + "name": "Bird House", + "xp": 15 + }, + { + "level": 6, + "icon": 1654, + "name": "Gold Necklace", + "xp": 20 + }, + { + "level": 7, + "icon": 1061, + "name": "Leather Boots", + "xp": 16.3 + }, + { + "level": 7, + "icon": 1789, + "name": "Unfired pie dish", + "xp": 15 + }, + { + "level": 7, + "icon": 2313, + "name": "Pie dish", + "xp": 10 + }, + { + "level": 7, + "icon": 11068, + "name": "Gold Bracelet", + "xp": 25 + }, + { + "level": 8, + "icon": 1791, + "name": "Unfired bowl", + "xp": 18 + }, + { + "level": 8, + "icon": 1923, + "name": "Bowl", + "xp": 15 + }, + { + "level": 8, + "icon": 1673, + "name": "Gold Amulet (U)", + "xp": 30 + }, + { + "level": 9, + "icon": 1167, + "name": "Cowl", + "xp": 18.5 + }, + { + "level": 10, + "icon": 9438, + "name": "Crossbow String", + "xp": 15 + }, + { + "level": 10, + "icon": 1777, + "name": "Bow String", + "xp": 15 + }, + { + "level": 11, + "icon": 1063, + "name": "Leather Vambraces", + "xp": 22 + }, + { + "level": 12, + "icon": 4525, + "name": "Empty Oil Lamp", + "xp": 25 + }, + { + "level": 13, + "icon": 1611, + "name": "Jade", + "xp": 20 + }, + { + "level": 13, + "icon": 21084, + "name": "Jade Ring", + "xp": 32 + }, + { + "level": 14, + "icon": 1129, + "name": "Leather Body", + "xp": 25 + }, + { + "level": 15, + "icon": 21515, + "name": "Oak Bird House", + "xp": 20 + }, + { + "level": 16, + "icon": 1613, + "name": "Red Topaz", + "xp": 25 + }, + { + "level": 16, + "icon": 21087, + "name": "Topaz Ring", + "xp": 35 + }, + { + "level": 16, + "icon": 1718, + "name": "Holy Symbol", + "xp": 50 + }, + { + "level": 16, + "icon": 21090, + "name": "Opal Necklace", + "xp": 35 + }, + + { + "level": 17, + "icon": 1724, + "name": "Unholy Symbol", + "xp": 50 + }, + { + "level": 18, + "icon": 1095, + "name": "Leather Chaps", + "xp": 27 + }, + { + "level": 19, + "icon": 5352, + "name": "Unfired plant pot", + "xp": 20 + }, + { + "level": 19, + "icon": 5350, + "name": "Empty plant pot", + "xp": 17.5 + }, + { + "level": 19, + "icon": 6038, + "name": "Magic String", + "xp": 30 + }, + { + "level": 20, + "icon": 1637, + "name": "Sapphire Ring", + "xp": 40 + }, + { + "level": 20, + "icon": 1607, + "name": "Sapphire", + "xp": 50 + }, + { + "level": 21, + "icon": 5418, + "name": "Empty Sack", + "xp": 38 + }, + { + "level": 22, + "icon": 1656, + "name": "Sapphire Necklace", + "xp": 55 + }, + { + "level": 22, + "icon": 21117, + "name": "Opal Bracelet", + "xp": 45 + }, + { + "level": 23, + "icon": 11071, + "name": "Sapphire Bracelet", + "xp": 60 + }, + { + "level": 23, + "icon": 5525, + "name": "Tiara", + "xp": 52.5 + }, + { + "level": 24, + "icon": 1675, + "name": "Sapphire Amulet (U)", + "xp": 65 + }, + { + "level": 25, + "icon": 4438, + "name": "Unfired pot lid", + "xp": 20 + }, + { + "level": 25, + "icon": 4440, + "name": "Pot lid", + "xp": 20 + }, + { + "level": 25, + "icon": 21093, + "name": "Jade Necklace", + "xp": 54 + }, + { + "level": 25, + "icon": 21518, + "name": "Willow Bird House", + "xp": 25 + }, + { + "level": 26, + "icon": 6209, + "name": "Drift Net", + "xp": 55 + }, + { + "level": 27, + "icon": 1605, + "name": "Emerald", + "xp": 67.5 + }, + { + "level": 27, + "icon": 1639, + "name": "Emerald Ring", + "xp": 55 + }, + { + "level": 27, + "icon": 21099, + "name": "Opal Amulet (U)", + "xp": 55 + }, + { + "level": 28, + "icon": 1131, + "name": "Hardleather Body", + "xp": 35 + }, + { + "level": 29, + "icon": 1658, + "name": "Emerald Necklace", + "xp": 60 + }, + { + "level": 29, + "icon": 21120, + "name": "Jade Bracelet", + "xp": 60 + }, + { + "level": 30, + "icon": 11076, + "name": "Emerald Bracelet", + "xp": 65 + }, + { + "level": 30, + "icon": 954, + "name": "Rope", + "xp": 25 + }, + { + "level": 31, + "icon": 1677, + "name": "Emerald Amulet (U)", + "xp": 70 + }, + { + "level": 32, + "icon": 10077, + "name": "Spiky Vambraces", + "xp": 6 + }, + { + "level": 32, + "icon": 21096, + "name": "Topaz Necklace", + "xp": 70 + }, + { + "level": 33, + "icon": 229, + "name": "Vial", + "xp": 35 + }, + { + "level": 34, + "icon": 1603, + "name": "Ruby", + "xp": 85 + }, + { + "level": 34, + "icon": 1641, + "name": "Ruby Ring", + "xp": 70 + }, + { + "level": 34, + "icon": 21102, + "name": "Jade Amulet (U)", + "xp": 70 + }, + { + "level": 35, + "icon": 6235, + "name": "Broodoo shield", + "xp": 100 + }, + { + "level": 35, + "icon": 21521, + "name": "Teak Bird House", + "xp": 30 + }, + { + "level": 36, + "icon": 5376, + "name": "Basket", + "xp": 56 + }, + { + "level": 38, + "icon": 1169, + "name": "Coif", + "xp": 37 + }, + { + "level": 38, + "icon": 21123, + "name": "Topaz Bracelet", + "xp": 75 + }, + { + "level": 40, + "icon": 1660, + "name": "Ruby Necklace", + "xp": 75 + }, + { + "level": 41, + "icon": 22269, + "name": "Hard leather shield", + "xp": 70 + }, + { + "level": 42, + "icon": 11085, + "name": "Ruby Bracelet", + "xp": 80 + }, + { + "level": 42, + "icon": 6668, + "name": "Fishbowl", + "xp": 42.5 + }, + { + "level": 43, + "icon": 1601, + "name": "Diamond", + "xp": 107.5 + }, + { + "level": 43, + "icon": 1643, + "name": "Diamond Ring", + "xp": 85 + }, + { + "level": 45, + "icon": 21105, + "name": "Topaz Amulet (U)", + "xp": 80 + }, + { + "level": 45, + "icon": 6328, + "name": "Snakeskin boots", + "xp": 30 + }, + { + "level": 45, + "icon": 22192, + "name": "Maple Bird House", + "xp": 35 + }, + { + "level": 46, + "icon": 567, + "name": "Unpowered Orb", + "xp": 52.5 + }, + { + "level": 47, + "icon": 6330, + "name": "Snakeskin vambraces", + "xp": 35 + }, + { + "level": 48, + "icon": 6326, + "name": "Snakeskin bandana", + "xp": 45 + }, + { + "level": 49, + "icon": 4542, + "name": "Lantern Lens", + "xp": 55 + }, + { + "level": 50, + "icon": 1679, + "name": "Ruby Amulet (U)", + "xp": 85 + }, + { + "level": 50, + "icon": 22195, + "name": "Mahogany Bird House", + "xp": 40 + }, + { + "level": 51, + "icon": 6324, + "name": "Snakeskin chaps", + "xp": 50 + }, + { + "level": 53, + "icon": 6322, + "name": "Snakeskin body", + "xp": 55 + }, + { + "level": 54, + "icon": 1395, + "name": "Water Battlestaff", + "xp": 100 + }, + { + "level": 55, + "icon": 1645, + "name": "Dragonstone Ring", + "xp": 100 + }, + { + "level": 55, + "icon": 1615, + "name": "Dragonstone", + "xp": 137.5 + }, + { + "level": 56, + "icon": 1662, + "name": "Diamond Necklace", + "xp": 90 + }, + { + "level": 56, + "icon": 22272, + "name": "Snakeskin shield", + "xp": 100 + }, + { + "level": 57, + "icon": 1065, + "name": "Green D'hide Vamb", + "xp": 62 + }, + { + "level": 58, + "icon": 11092, + "name": "Diamond Bracelet", + "xp": 95 + }, + { + "level": 58, + "icon": 1399, + "name": "Earth Battlestaff", + "xp": 112.5 + }, + { + "level": 60, + "icon": 1099, + "name": "Green D'hide Chaps", + "xp": 124 + }, + { + "level": 60, + "icon": 22198, + "name": "Yew Bird House", + "xp": 45 + }, + { + "level": 62, + "icon": 1393, + "name": "Fire Battlestaff", + "xp": 125 + }, + { + "level": 62, + "icon": 22275, + "name": "Green D'hide Shield", + "xp": 124 + }, + { + "level": 63, + "icon": 1135, + "name": "Green D'hide Body", + "xp": 186 + }, + { + "level": 66, + "icon": 1397, + "name": "Air Battlestaff", + "xp": 137.5 + }, + { + "level": 66, + "icon": 2487, + "name": "Blue D'hide Vamb", + "xp": 70 + }, + { + "level": 67, + "icon": 6575, + "name": "Onyx Ring", + "xp": 115 + }, + { + "level": 67, + "icon": 6573, + "name": "Onyx", + "xp": 167.5 + }, + { + "level": 68, + "icon": 2493, + "name": "Blue D'hide Chaps", + "xp": 140 + }, + { + "level": 69, + "icon": 22278, + "name": "Blue D'hide Shield", + "xp": 140 + }, + { + "level": 70, + "icon": 1681, + "name": "Diamond Amulet (U)", + "xp": 100 + }, + { + "level": 71, + "icon": 2499, + "name": "Blue D'hide Body", + "xp": 210 + }, + { + "level": 72, + "icon": 1664, + "name": "Dragonstone Necklace", + "xp": 105 + }, + { + "level": 73, + "icon": 2489, + "name": "Red D'hide Vamb", + "xp": 78 + }, + { + "level": 74, + "icon": 11115, + "name": "Dragonstone Bracelet", + "xp": 110 + }, + { + "level": 75, + "icon": 2495, + "name": "Red D'hide Chaps", + "xp": 156 + }, + { + "level": 75, + "icon": 22201, + "name": "Magic Bird House", + "xp": 50 + }, + { + "level": 76, + "icon": 22281, + "name": "Red D'hide Shield", + "xp": 156 + }, + { + "level": 77, + "icon": 2501, + "name": "Red D'hide Body", + "xp": 234 + }, + { + "level": 79, + "icon": 2491, + "name": "Black D'hide Vamb", + "xp": 86 + }, + { + "level": 80, + "icon": 1683, + "name": "Dragonstone Amulet (U)", + "xp": 150 + }, + { + "level": 82, + "icon": 2497, + "name": "Black D'hide Chaps", + "xp": 172 + }, + { + "level": 82, + "icon": 6577, + "name": "Onyx Necklace", + "xp": 120 + }, + { + "level": 83, + "icon": 21338, + "name": "Amethyst Bolt Tips", + "xp": 60 + }, + { + "level": 83, + "icon": 22284, + "name": "Black D'hide Shield", + "xp": 172 + }, + { + "level": 84, + "icon": 2503, + "name": "Black D'hide Body", + "xp": 258 + }, + { + "level": 84, + "icon": 11130, + "name": "Onyx Bracelet", + "xp": 125 + }, + { + "level": 85, + "icon": 21350, + "name": "Amethyst Arrowtips", + "xp": 60 + }, + { + "level": 87, + "icon": 21352, + "name": "Amethyst Javelin Heads", + "xp": 60 + }, + { + "level": 87, + "icon": 10973, + "name": "Light Orb", + "xp": 70 + }, + { + "level": 89, + "icon": 19538, + "name": "Zenyte Ring", + "xp": 150 + }, + { + "level": 89, + "icon": 19493, + "name": "Zenyte", + "xp": 200 + }, + { + "level": 90, + "icon": 6579, + "name": "Onyx Amulet (U)", + "xp": 165 + }, + { + "level": 90, + "icon": 22204, + "name": "Redwood Bird House", + "xp": 55 + }, + { + "level": 92, + "icon": 19535, + "name": "Zenyte Necklace", + "xp": 165 + }, + { + "level": 95, + "icon": 19492, + "name": "Zenyte Bracelet", + "xp": 180 + }, + { + "level": 98, + "icon": 19501, + "name": "Zenyte Amulet (U)", + "xp": 200 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json new file mode 100644 index 0000000000..70ac3b3444 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json @@ -0,0 +1,388 @@ +{ + "bonuses": [ + { + "name": "Farmer's Outfit (+2.5%)", + "value": 0.025 + } + ], + "actions": [ + { + "level": 1, + "icon": 8180, + "name": "Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8186, + "name": "Fern (big plant)", + "xp": 31 + }, + { + "level": 1, + "icon": 8189, + "name": "Short Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8183, + "name": "Dock Leaf", + "xp": 31 + }, + { + "level": 1, + "icon": 8181, + "name": "Small Fern", + "xp": 70 + }, + { + "level": 1, + "icon": 8184, + "name": "Thistle", + "xp": 70 + }, + { + "level": 1, + "icon": 8187, + "name": "Bush", + "xp": 70 + }, + { + "level": 1, + "icon": 8190, + "name": "Large Leaf Bush", + "xp": 70 + }, + { + "level": 1, + "icon": 8191, + "name": "Huge Plant", + "xp": 100 + }, + { + "level": 1, + "icon": 8188, + "name": "Tall Plant", + "xp": 100 + }, + { + "level": 1, + "icon": 8185, + "name": "Reeds", + "xp": 100 + }, + { + "level": 1, + "icon": 8182, + "name": "Fern (small plant)", + "xp": 100 + }, + { + "level": 1, + "icon": 10847, + "name": "Winter Sq'irk", + "xp": 30 + }, + { + "level": 1, + "icon": 10844, + "name": "Spring Sq'irk", + "xp": 40 + }, + { + "level": 1, + "icon": 10846, + "name": "Autumn Sq'irk", + "xp": 50 + }, + { + "level": 1, + "icon": 10845, + "name": "Summer Sq'irk", + "xp": 60 + }, + { + "level": 1, + "icon": 1942, + "name": "Potatoes", + "xp": 8 + }, + { + "level": 5, + "icon": 1957, + "name": "Onions", + "xp": 10 + }, + { + "level": 7, + "icon": 1965, + "name": "Cabbages", + "xp": 10 + }, + { + "level": 9, + "icon": 249, + "name": "Guam Leaf", + "xp": 11 + }, + { + "level": 12, + "icon": 1982, + "name": "Tomatoes", + "xp": 12.5 + }, + { + "level": 14, + "icon": 251, + "name": "Marrentill", + "xp": 13.5 + }, + { + "level": 15, + "icon": 1521, + "name": "Oak Tree", + "xp": 481.3 + }, + { + "level": 19, + "icon": 253, + "name": "Tarromin", + "xp": 16 + }, + { + "level": 20, + "icon": 5986, + "name": "Sweetcorn", + "xp": 17 + }, + { + "level": 23, + "icon": 21504, + "name": "Giant seaweed", + "xp": 21 + }, + { + "level": 26, + "icon": 255, + "name": "Harralander", + "xp": 21.5 + }, + { + "level": 26, + "icon": 225, + "name": "Limpwurt Plant", + "xp": 40 + }, + { + "level": 27, + "icon": 1955, + "name": "Apple Tree", + "xp": 1221.5 + }, + { + "level": 29, + "icon": 3261, + "name": "Goutweed", + "xp": 105 + }, + { + "level": 30, + "icon": 1519, + "name": "Willow Tree", + "xp": 1481.5 + }, + { + "level": 31, + "icon": 5504, + "name": "Strawberries", + "xp": 26 + }, + { + "level": 32, + "icon": 257, + "name": "Ranarr Weed", + "xp": 27 + }, + { + "level": 33, + "icon": 1963, + "name": "Banana Tree", + "xp": 1778.5 + }, + { + "level": 35, + "icon": 6333, + "name": "Teak Tree", + "xp": 7315 + }, + { + "level": 38, + "icon": 2998, + "name": "Toadflax", + "xp": 34 + }, + { + "level": 39, + "icon": 2108, + "name": "Orange Tree", + "xp": 2505.7 + }, + { + "level": 42, + "icon": 5970, + "name": "Curry Tree", + "xp": 2946.9 + }, + { + "level": 44, + "icon": 259, + "name": "Irit Leaf", + "xp": 43 + }, + { + "level": 45, + "icon": 1517, + "name": "Maple Tree", + "xp": 3448.4 + }, + { + "level": 47, + "icon": 5982, + "name": "Watermelons", + "xp": 49 + }, + { + "level": 50, + "icon": 261, + "name": "Avantoe", + "xp": 54.5 + }, + { + "level": 51, + "icon": 2114, + "name": "Pineapple Plant", + "xp": 4662.7 + }, + { + "level": 55, + "icon": 6332, + "name": "Mahogany Tree", + "xp": 15783 + }, + { + "level": 56, + "icon": 263, + "name": "Kwuarm", + "xp": 69 + }, + { + "level": 57, + "icon": 5972, + "name": "Papaya Tree", + "xp": 6218.4 + }, + { + "level": 58, + "icon": 22932, + "name": "White lily", + "xp": 292 + }, + { + "level": 60, + "icon": 1515, + "name": "Yew Tree", + "xp": 7150.9 + }, + { + "level": 61, + "icon": 231, + "name": "Snape grass", + "xp": 82 + }, + { + "level": 62, + "icon": 3000, + "name": "Snapdragon", + "xp": 87.5 + }, + { + "level": 65, + "icon": 23044, + "name": "Hespori", + "xp": 12662 + }, + { + "level": 67, + "icon": 265, + "name": "Cadantine", + "xp": 106.5 + }, + { + "level": 68, + "icon": 5974, + "name": "Palm Tree", + "xp": 10260.6 + }, + { + "level": 72, + "icon": 5980, + "name": "Calquat Tree", + "xp": 12225.5 + }, + { + "level": 73, + "icon": 2481, + "name": "Lantadyme", + "xp": 134.5 + }, + { + "level": 74, + "icon": 23962, + "name": "Crystal Tree", + "xp": 13366 + }, + { + "level": 75, + "icon": 1513, + "name": "Magic Tree", + "xp": 13913.8 + }, + { + "level": 79, + "icon": 267, + "name": "Dwarf Weed", + "xp": 170.5 + }, + { + "level": 81, + "icon": 22929, + "name": "Dragonfruit Tree", + "xp": 17895 + }, + { + "level": 83, + "icon": 6063, + "name": "Spirit Tree", + "xp": 19501.3 + }, + { + "level": 85, + "icon": 22935, + "name": "Celastrus Tree", + "xp": 14334 + }, + { + "level": 85, + "icon": 269, + "name": "Torstol", + "xp": 199.5 + }, + { + "level": 90, + "icon": 19669, + "name": "Redwood Tree", + "xp": 22680 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json new file mode 100644 index 0000000000..37fe236443 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json @@ -0,0 +1,82 @@ +{ + "bonuses": [ + { + "name": "Pyromancer Outfit (+2.5%)", + "value": 0.025 + } + ], + "actions": [ + { + "level": 1, + "icon": 1511, + "name": "Logs", + "xp": 40 + }, + { + "level": 1, + "icon": 2862, + "name": "Achey Tree Logs", + "xp": 40 + }, + { + "level": 15, + "icon": 1521, + "name": "Oak Logs", + "xp": 60 + }, + { + "level": 30, + "icon": 1519, + "name": "Willow Logs", + "xp": 90 + }, + { + "level": 35, + "icon": 6333, + "name": "Teak Logs", + "xp": 105 + }, + { + "level": 42, + "icon": 10810, + "name": "Arctic Pine Logs", + "xp": 125 + }, + { + "level": 45, + "icon": 1517, + "name": "Maple Logs", + "xp": 135 + }, + { + "level": 50, + "icon": 6332, + "name": "Mahogany Logs", + "xp": 157.5 + }, + { + "level": 60, + "icon": 1515, + "name": "Yew Logs", + "xp": 202.5 + }, + { + "level": 62, + "icon": 24691, + "name": "Blisterwood Logs", + "xp": 96 + }, + { + "level": 75, + "icon": 1513, + "name": "Magic Logs", + "xp": 303.8 + }, + { + "level": 90, + "icon": 19669, + "name": "Redwood Logs", + "xp": 350 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json new file mode 100644 index 0000000000..f55759fece --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json @@ -0,0 +1,190 @@ +{ + "bonuses": [ + { + "name": "Anglers Outfit (+2.5%)", + "value": 0.025 + } + ], + "actions": [ + { + "level": 1, + "icon": 317, + "name": "Raw Shrimps", + "xp": 10 + }, + { + "level": 5, + "icon": 327, + "name": "Raw Sardine", + "xp": 20 + }, + { + "level": 5, + "icon": 3150, + "name": "Raw Karambwanji", + "xp": 5 + }, + { + "level": 10, + "icon": 345, + "name": "Raw Herring", + "xp": 30 + }, + { + "level": 15, + "icon": 321, + "name": "Raw Anchovies", + "xp": 40 + }, + { + "level": 16, + "icon": 353, + "name": "Raw Mackerel", + "xp": 20 + }, + { + "level": 20, + "icon": 335, + "name": "Raw Trout", + "xp": 50 + }, + { + "level": 23, + "icon": 341, + "name": "Raw Cod", + "xp": 45 + }, + { + "level": 25, + "icon": 349, + "name": "Raw Pike", + "xp": 60 + }, + { + "level": 28, + "icon": 3379, + "name": "Raw Slimy Eel", + "xp": 65 + }, + { + "level": 30, + "icon": 331, + "name": "Raw Salmon", + "xp": 70 + }, + { + "level": 35, + "icon": 359, + "name": "Raw Tuna", + "xp": 80 + }, + { + "level": 38, + "icon": 10138, + "name": "Raw Rainbow Fish", + "xp": 80 + }, + { + "level": 38, + "icon": 5001, + "name": "Raw Cave Eel", + "xp": 80 + }, + { + "level": 40, + "icon": 377, + "name": "Raw Lobster", + "xp": 90 + }, + { + "level": 46, + "icon": 363, + "name": "Raw Bass", + "xp": 100 + }, + { + "level": 48, + "icon": 11328, + "name": "Leaping Trout", + "xp": 50 + }, + { + "level": 50, + "icon": 371, + "name": "Raw Swordfish", + "xp": 100 + }, + { + "level": 58, + "icon": 11330, + "name": "Leaping Salmon", + "xp": 70 + }, + { + "level": 62, + "icon": 7944, + "name": "Raw Monkfish", + "xp": 120 + }, + { + "level": 65, + "icon": 3142, + "name": "Raw Karambwan", + "xp": 50 + }, + { + "level": 70, + "icon": 11332, + "name": "Leaping Sturgeon", + "xp": 80 + }, + { + "level": 76, + "icon": 383, + "name": "Raw Shark", + "xp": 110 + }, + { + "level": 79, + "icon": 395, + "name": "Raw Sea Turtle", + "xp": 38 + }, + { + "level": 80, + "icon": 21293, + "name": "Infernal Eel", + "xp": 95 + }, + { + "level": 81, + "icon": 389, + "name": "Raw Manta Ray", + "xp": 46 + }, + { + "level": 82, + "icon": 13439, + "name": "Raw Anglerfish", + "xp": 120 + }, + { + "level": 82, + "icon": 21356, + "name": "Minnow", + "xp": 26.5 + }, + { + "level": 85, + "icon": 11934, + "name": "Raw Dark Crab", + "xp": 130 + }, + { + "level": 87, + "icon": 13339, + "name": "Sacred Eel", + "xp": 105 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json new file mode 100644 index 0000000000..60214cc263 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json @@ -0,0 +1,580 @@ +{ + "actions": [ + { + "level": 1, + "icon": 52, + "name": "Arrow Shaft", + "xp": 0.33 + }, + { + "level": 1, + "icon": 53, + "name": "Headless Arrow", + "xp": 1 + }, + { + "level": 1, + "icon": 882, + "name": "Bronze Arrow", + "xp": 1.3 + }, + { + "level": 5, + "icon": 2866, + "name": "Ogre Arrow", + "xp": 1 + }, + { + "level": 5, + "icon": 50, + "name": "Shortbow (U)", + "xp": 5 + }, + { + "level": 5, + "icon": 841, + "name": "Shortbow", + "xp": 5 + }, + { + "level": 9, + "icon": 877, + "name": "Bronze Bolts", + "xp": 0.5 + }, + { + "level": 9, + "icon": 9440, + "name": "Wooden Stock", + "xp": 6 + }, + { + "level": 9, + "icon": 9454, + "name": "Bronze Crossbow (U)", + "xp": 12 + }, + { + "level": 9, + "icon": 9174, + "name": "Bronze Crossbow", + "xp": 6 + }, + { + "level": 10, + "icon": 806, + "name": "Bronze Dart", + "xp": 1.8 + }, + { + "level": 10, + "icon": 839, + "name": "Longbow", + "xp": 10 + }, + { + "level": 10, + "icon": 48, + "name": "Longbow (U)", + "xp": 10 + }, + { + "level": 11, + "icon": 879, + "name": "Opal Bolts", + "xp": 1.6 + }, + { + "level": 15, + "icon": 884, + "name": "Iron Arrow", + "xp": 2.5 + }, + { + "level": 20, + "icon": 54, + "name": "Oak Shortbow (U)", + "xp": 16.5 + }, + { + "level": 20, + "icon": 843, + "name": "Oak Shortbow", + "xp": 16.5 + }, + { + "level": 22, + "icon": 807, + "name": "Iron Dart", + "xp": 3.8 + }, + { + "level": 24, + "icon": 9442, + "name": "Oak Stock", + "xp": 16 + }, + { + "level": 24, + "icon": 9456, + "name": "Blurite Crossbow (U)", + "xp": 32 + }, + { + "level": 24, + "icon": 9176, + "name": "Blurite Crossbow", + "xp": 16 + }, + { + "level": 25, + "icon": 56, + "name": "Oak Longbow (U)", + "xp": 25 + }, + { + "level": 25, + "icon": 845, + "name": "Oak Longbow", + "xp": 25 + }, + { + "level": 27, + "icon": 22251, + "name": "Oak Shield", + "xp": 50 + }, + { + "level": 30, + "icon": 886, + "name": "Steel Arrow", + "xp": 5 + }, + { + "level": 32, + "icon": 10158, + "name": "Kebbit Bolts", + "xp": 1 + }, + { + "level": 35, + "icon": 60, + "name": "Willow Shortbow (U)", + "xp": 33.3 + }, + { + "level": 35, + "icon": 849, + "name": "Willow Shortbow", + "xp": 33.3 + }, + { + "level": 37, + "icon": 808, + "name": "Steel Dart", + "xp": 7.5 + }, + { + "level": 39, + "icon": 9140, + "name": "Iron Bolts", + "xp": 1.5 + }, + { + "level": 39, + "icon": 9444, + "name": "Willow Stock", + "xp": 22 + }, + { + "level": 39, + "icon": 9457, + "name": "Iron Crossbow (U)", + "xp": 44 + }, + { + "level": 39, + "icon": 9177, + "name": "Iron Crossbow", + "xp": 22 + }, + { + "level": 40, + "icon": 58, + "name": "Willow Longbow (U)", + "xp": 41.5 + }, + { + "level": 40, + "icon": 847, + "name": "Willow Longbow", + "xp": 41.5 + }, + { + "level": 41, + "icon": 880, + "name": "Pearl Bolts", + "xp": 3.2 + }, + { + "level": 42, + "icon": 22254, + "name": "Willow Shield", + "xp": 83 + }, + { + "level": 42, + "icon": 10159, + "name": "Long Kebbit Bolts", + "xp": 1.3 + }, + { + "level": 43, + "icon": 9145, + "name": "Silver Bolts", + "xp": 2.5 + }, + { + "level": 45, + "icon": 888, + "name": "Mithril Arrow", + "xp": 7.5 + }, + { + "level": 46, + "icon": 9141, + "name": "Steel Bolts", + "xp": 3.5 + }, + { + "level": 46, + "icon": 9446, + "name": "Teak Stock", + "xp": 27 + }, + { + "level": 46, + "icon": 9459, + "name": "Steel Crossbow (U)", + "xp": 54 + }, + { + "level": 46, + "icon": 9179, + "name": "Steel Crossbow", + "xp": 27 + }, + { + "level": 50, + "icon": 64, + "name": "Maple Shortbow (U)", + "xp": 50 + }, + { + "level": 50, + "icon": 853, + "name": "Maple Shortbow", + "xp": 50 + }, + { + "level": 51, + "icon": 881, + "name": "Barbed Bolts", + "xp": 9.5 + }, + { + "level": 52, + "icon": 809, + "name": "Mithril Dart", + "xp": 11.2 + }, + { + "level": 52, + "icon": 4150, + "name": "Broad Arrows", + "xp": 10 + }, + { + "level": 53, + "icon": 12926, + "name": "Toxic Blowpipe", + "xp": 120 + }, + { + "level": 54, + "icon": 9181, + "name": "Mith Crossbow", + "xp": 32 + }, + { + "level": 54, + "icon": 9448, + "name": "Maple Stock", + "xp": 32 + }, + { + "level": 54, + "icon": 9142, + "name": "Mithril Bolts", + "xp": 5 + }, + { + "level": 54, + "icon": 9461, + "name": "Mithril Crossbow (U)", + "xp": 64 + }, + { + "level": 55, + "icon": 62, + "name": "Maple Longbow (U)", + "xp": 58.3 + }, + { + "level": 55, + "icon": 11875, + "name": "Broad Bolts", + "xp": 3 + }, + { + "level": 55, + "icon": 851, + "name": "Maple Longbow", + "xp": 58 + }, + { + "level": 56, + "icon": 9337, + "name": "Sapphire Bolts", + "xp": 4.7 + }, + { + "level": 57, + "icon": 22257, + "name": "Maple Shield", + "xp": 116.5 + }, + { + "level": 58, + "icon": 9338, + "name": "Emerald Bolts", + "xp": 5.5 + }, + { + "level": 60, + "icon": 890, + "name": "Adamant Arrow", + "xp": 10 + }, + { + "level": 61, + "icon": 9143, + "name": "Adamant Bolts", + "xp": 7 + }, + { + "level": 61, + "icon": 9450, + "name": "Mahogany Stock", + "xp": 41 + }, + { + "level": 61, + "icon": 9463, + "name": "Adamant Crossbow (U)", + "xp": 82 + }, + { + "level": 61, + "icon": 9183, + "name": "Adamant Crossbow", + "xp": 41 + }, + { + "level": 63, + "icon": 9339, + "name": "Ruby Bolts", + "xp": 6.3 + }, + { + "level": 65, + "icon": 9340, + "name": "Diamond Bolts", + "xp": 7 + }, + { + "level": 65, + "icon": 857, + "name": "Yew Shortbow", + "xp": 67.5 + }, + { + "level": 65, + "icon": 68, + "name": "Yew Shortbow (U)", + "xp": 67.5 + }, + { + "level": 67, + "icon": 810, + "name": "Adamant Dart", + "xp": 15 + }, + { + "level": 69, + "icon": 9465, + "name": "Runite Crossbow (U)", + "xp": 100 + }, + { + "level": 69, + "icon": 9185, + "name": "Rune Crossbow", + "xp": 50 + }, + { + "level": 69, + "icon": 9452, + "name": "Yew Stock", + "xp": 50 + }, + { + "level": 69, + "icon": 9144, + "name": "Runite Bolts", + "xp": 10 + }, + { + "level": 70, + "icon": 855, + "name": "Yew Longbow", + "xp": 75 + }, + { + "level": 70, + "icon": 66, + "name": "Yew Longbow (U)", + "xp": 75 + }, + { + "level": 71, + "icon": 9341, + "name": "Dragonstone Bolts", + "xp": 8.2 + }, + { + "level": 72, + "icon": 22260, + "name": "Yew Shield", + "xp": 150 + }, + { + "level": 73, + "icon": 9342, + "name": "Onyx Bolts", + "xp": 9.4 + }, + { + "level": 75, + "icon": 892, + "name": "Rune Arrow", + "xp": 12.5 + }, + { + "level": 76, + "icon": 21316, + "name": "Amethyst Broad Bolts", + "xp": 10.6 + }, + { + "level": 78, + "icon": 21952, + "name": "Magic Stock", + "xp": 70 + }, + { + "level": 78, + "icon": 21921, + "name": "Dragon Crossbow (U)", + "xp": 135 + }, + { + "level": 78, + "icon": 21902, + "name": "Dragon Crossbow", + "xp": 70 + }, + { + "level": 80, + "icon": 861, + "name": "Magic Shortbow", + "xp": 83.3 + }, + { + "level": 80, + "icon": 72, + "name": "Magic Shortbow (U)", + "xp": 83.3 + }, + { + "level": 81, + "icon": 811, + "name": "Rune Dart", + "xp": 18.8 + }, + { + "level": 82, + "icon": 21326, + "name": "Amethyst Arrow", + "xp": 13.5 + }, + { + "level": 84, + "icon": 21930, + "name": "Dragon Bolts", + "xp": 12 + }, + { + "level": 84, + "icon": 21318, + "name": "Amethyst Javelin", + "xp": 13.5 + }, + { + "level": 85, + "icon": 859, + "name": "Magic Longbow", + "xp": 91.5 + }, + { + "level": 85, + "icon": 70, + "name": "Magic Longbow (U)", + "xp": 91.5 + }, + { + "level": 87, + "icon": 22263, + "name": "Magic Shield", + "xp": 183 + }, + { + "level": 90, + "icon": 11212, + "name": "Dragon Arrow", + "xp": 15 + }, + { + "level": 92, + "icon": 22266, + "name": "Redwood Shield", + "xp": 216 + }, + { + "level": 95, + "icon": 11230, + "name": "Dragon Dart", + "xp": 25 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json new file mode 100644 index 0000000000..650945b8d8 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json @@ -0,0 +1,418 @@ +{ + "actions": [ + { + "level": 3, + "icon": 121, + "name": "Attack Potion (3)", + "xp": 25 + }, + { + "level": 3, + "icon": 249, + "name": "Guam Leaf", + "xp": 2.5 + }, + { + "level": 5, + "icon": 251, + "name": "Marrentill", + "xp": 3.8 + }, + { + "level": 5, + "icon": 175, + "name": "Antipoison (3)", + "xp": 37.5 + }, + { + "level": 8, + "icon": 4844, + "name": "Relicym's Balm (3)", + "xp": 40 + }, + { + "level": 11, + "icon": 253, + "name": "Tarromin", + "xp": 5 + }, + { + "level": 12, + "icon": 115, + "name": "Strength Potion (3)", + "xp": 50 + }, + { + "level": 15, + "icon": 3410, + "name": "Serum 207 (3)", + "xp": 50 + }, + { + "level": 18, + "icon": 4419, + "name": "Guthix Rest (3)", + "xp": 59 + }, + { + "level": 19, + "icon": 10142, + "name": "Guam tar", + "xp": 30 + }, + { + "level": 20, + "icon": 255, + "name": "Harralander", + "xp": 6.3 + }, + { + "level": 22, + "icon": 6472, + "name": "Compost Potion (3)", + "xp": 60 + }, + { + "level": 22, + "icon": 127, + "name": "Restore Potion (3)", + "xp": 62.5 + }, + { + "level": 25, + "icon": 257, + "name": "Ranarr Weed", + "xp": 7.5 + }, + { + "level": 26, + "icon": 3010, + "name": "Energy Potion (3)", + "xp": 67.5 + }, + { + "level": 30, + "icon": 2998, + "name": "Toadflax", + "xp": 8 + }, + { + "level": 30, + "icon": 133, + "name": "Defence Potion (3)", + "xp": 75 + }, + { + "level": 31, + "icon": 10143, + "name": "Marrentill tar", + "xp": 42.5 + }, + { + "level": 34, + "icon": 3034, + "name": "Agility Potion (3)", + "xp": 80 + }, + { + "level": 36, + "icon": 9741, + "name": "Combat Potion (3)", + "xp": 84 + }, + { + "level": 38, + "icon": 139, + "name": "Prayer Potion (3)", + "xp": 87.5 + }, + { + "level": 39, + "icon": 10144, + "name": "Tarromin tar", + "xp": 55 + }, + { + "level": 40, + "icon": 259, + "name": "Irit Leaf", + "xp": 8.8 + }, + { + "level": 44, + "icon": 10145, + "name": "Harralander tar", + "xp": 72.5 + }, + { + "level": 45, + "icon": 145, + "name": "Super Attack (3)", + "xp": 100 + }, + { + "level": 48, + "icon": 181, + "name": "Superantipoison (3)", + "xp": 106.3 + }, + { + "level": 48, + "icon": 261, + "name": "Avantoe", + "xp": 10 + }, + { + "level": 50, + "icon": 151, + "name": "Fishing Potion (3)", + "xp": 112.5 + }, + { + "level": 52, + "icon": 3018, + "name": "Super Energy (3)", + "xp": 117.5 + }, + { + "level": 53, + "icon": 10000, + "name": "Hunter Potion (3)", + "xp": 120 + }, + { + "level": 54, + "icon": 263, + "name": "Kwuarm", + "xp": 11.3 + }, + { + "level": 55, + "icon": 157, + "name": "Super Strength (3)", + "xp": 125 + }, + { + "level": 59, + "icon": 3000, + "name": "Snapdragon", + "xp": 11.8 + }, + { + "level": 60, + "icon": 187, + "name": "Weapon Poison", + "xp": 137.5 + }, + { + "level": 63, + "icon": 3026, + "name": "Super Restore (3)", + "xp": 142.5 + }, + { + "level": 65, + "icon": 265, + "name": "Cadantine", + "xp": 12.5 + }, + { + "level": 65, + "icon": 10927, + "name": "Sanfew Serum (3)", + "xp": 160 + }, + { + "level": 66, + "icon": 163, + "name": "Super Defence (3)", + "xp": 150 + }, + { + "level": 67, + "icon": 2481, + "name": "Lantadyme", + "xp": 13.1 + }, + { + "level": 68, + "icon": 5945, + "name": "Antidote+ (3)", + "xp": 155 + }, + { + "level": 69, + "icon": 2454, + "name": "Antifire Potion (3)", + "xp": 157.5 + }, + { + "level": 70, + "icon": 23697, + "name": "Divine super attack potion(4)", + "xp:": 2 + }, + { + "level": 70, + "icon": 23721, + "name": "Divine super defence potion(4)", + "xp:": 2 + }, + { + "level": 70, + "icon": 23709, + "name": "Divine super strength potion(4)", + "xp:": 2 + }, + { + "level": 70, + "icon": 267, + "name": "Dwarf Weed", + "xp": 13.8 + }, + { + "level": 72, + "icon": 169, + "name": "Ranging Potion (3)", + "xp": 162.5 + }, + { + "level": 73, + "icon": 5937, + "name": "Weapon Poison (+)", + "xp": 165 + }, + { + "level": 74, + "icon": 23733, + "name": "Divine ranging potion(4)", + "xp:": 2 + }, + { + "level": 75, + "icon": 269, + "name": "Torstol", + "xp": 15 + }, + { + "level": 76, + "icon": 3042, + "name": "Magic Potion (3)", + "xp": 172.5 + }, + { + "level": 77, + "icon": 12627, + "name": "Stamina Potion (3)", + "xp": 76.5 + }, + { + "level": 77, + "icon": 12625, + "name": "Stamina Potion (4)", + "xp": 102 + }, + { + "level": 78, + "icon": 23745, + "name": "Divine magic potion(4)", + "xp:": 2 + }, + { + "level": 78, + "icon": 189, + "name": "Zamorak Brew (3)", + "xp": 175 + }, + { + "level": 79, + "icon": 5954, + "name": "Antidote++ (3)", + "xp": 177.5 + }, + { + "level": 80, + "icon": 22464, + "name": "Bastion Potion (3)", + "xp": 155 + }, + { + "level": 80, + "icon": 22452, + "name": "Battlemage Potion (3)", + "xp": 155 + }, + { + "level": 81, + "icon": 6687, + "name": "Saradomin Brew (3)", + "xp": 180 + }, + { + "level": 82, + "icon": 5940, + "name": "Weapon Poison (++)", + "xp": 190 + }, + { + "level": 84, + "icon": 11953, + "name": "Extended Antifire (3)", + "xp": 82.5 + }, + { + "level": 86, + "icon": 24635, + "name": "Divine bastion potion(4)", + "xp:": 2 + }, + { + "level": 86, + "icon": 24623, + "name": "Divine battlemage potion(4)", + "xp:": 2 + }, + { + "level": 87, + "icon": 12907, + "name": "Anti-venom(3)", + "xp": 90 + }, + { + "level": 90, + "icon": 12695, + "name": "Super Combat Potion(4)", + "xp": 150 + }, + { + "level": 92, + "icon": 21981, + "name": "Super Antifire (3)", + "xp": 130 + }, + { + "level": 94, + "icon": 12915, + "name": "Anti-venom+(3)", + "xp": 125 + }, + { + "level": 97, + "icon": 23685, + "name": "Divine super combat potion(4)", + "xp:": 2 + }, + { + "level": 98, + "icon": 21981, + "name": "Extended Super Antifire (3)", + "xp": 120 + }, + { + "level": 98, + "icon": 21978, + "name": "Extended Super Antifire (4)", + "xp": 160 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json new file mode 100644 index 0000000000..a50c2164d6 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json @@ -0,0 +1,352 @@ +{ + "actions": [ + { + "level": 1, + "icon": 9965, + "name": "Crimson Swift", + "xp": 34 + }, + { + "level": 1, + "icon": 9953, + "name": "Polar Kebbit", + "xp": 30 + }, + { + "level": 3, + "icon": 9954, + "name": "Common Kebbit", + "xp": 36 + }, + { + "level": 5, + "icon": 9968, + "name": "Golden Warbler", + "xp": 47 + }, + { + "level": 5, + "icon": 21512, + "name": "Regular Bird House", + "xp": 280 + }, + { + "level": 7, + "icon": 9955, + "name": "Feldip Weasel", + "xp": 48 + }, + { + "level": 9, + "icon": 9966, + "name": "Copper Longtail", + "xp": 61 + }, + { + "level": 11, + "icon": 9967, + "name": "Cerulean Twitch", + "xp": 64.5 + }, + { + "level": 13, + "icon": 9956, + "name": "Desert Devil", + "xp": 66 + }, + { + "level": 14, + "icon": 21515, + "name": "Oak Bird House", + "xp": 420 + }, + { + "level": 15, + "icon": 9970, + "name": "Ruby Harvest", + "xp": 24 + }, + { + "level": 17, + "icon": 11238, + "name": "Baby Impling", + "xp": 18 + }, + { + "level": 19, + "icon": 9969, + "name": "Tropical Wagtail", + "xp": 95 + }, + { + "level": 22, + "icon": 11240, + "name": "Young Impling", + "xp": 20 + }, + { + "level": 23, + "icon": 9953, + "name": "Wild Kebbit", + "xp": 128 + }, + { + "level": 24, + "icon": 21518, + "name": "Willow Bird House", + "xp": 560 + }, + { + "level": 25, + "icon": 9971, + "name": "Sapphire Glacialis", + "xp": 34 + }, + { + "level": 27, + "icon": 10092, + "name": "Ferret", + "xp": 115 + }, + { + "level": 27, + "icon": 9975, + "name": "White Rabbit", + "xp": 144 + }, + { + "level": 28, + "icon": 11242, + "name": "Gourmet Impling", + "xp": 22 + }, + { + "level": 29, + "icon": 10149, + "name": "Swamp Lizard", + "xp": 152 + }, + { + "level": 31, + "icon": 10045, + "name": "Spined Larupia", + "xp": 180 + }, + { + "level": 33, + "icon": 9958, + "name": "Barb-tailed Kebbit", + "xp": 168 + }, + { + "level": 34, + "icon": 21521, + "name": "Teak Bird House", + "xp": 700 + }, + { + "level": 35, + "icon": 9972, + "name": "Snowy Knight", + "xp": 44 + }, + { + "level": 36, + "icon": 11244, + "name": "Earth Impling", + "xp": 25 + }, + { + "level": 37, + "icon": 9957, + "name": "Prickly Kebbit", + "xp": 204 + }, + { + "level": 41, + "icon": 10051, + "name": "Horned Graahk", + "xp": 240 + }, + { + "level": 42, + "icon": 11246, + "name": "Essence Impling", + "xp": 27 + }, + { + "level": 43, + "icon": 9960, + "name": "Spotted Kebbit", + "xp": 104 + }, + { + "level": 44, + "icon": 22192, + "name": "Maple Bird House", + "xp": 820 + }, + { + "level": 45, + "icon": 9973, + "name": "Black Warlock", + "xp": 54 + }, + { + "level": 47, + "icon": 10146, + "name": "Orange Salamander", + "xp": 224 + }, + { + "level": 49, + "icon": 9961, + "name": "Razor-backed Kebbit", + "xp": 348 + }, + { + "level": 49, + "icon": 22195, + "name": "Mahogany Bird House", + "xp": 960 + }, + { + "level": 50, + "icon": 11248, + "name": "Eclectic Impling", + "xp": 32 + }, + { + "level": 51, + "icon": 9959, + "name": "Sabre-toothed Kebbit", + "xp": 200 + }, + { + "level": 53, + "icon": 9976, + "name": "Chinchompa", + "xp": 198.3 + }, + { + "level": 55, + "icon": 10039, + "name": "Sabre-toothed Kyatt", + "xp": 300 + }, + { + "level": 57, + "icon": 9963, + "name": "Dark Kebbit", + "xp": 132 + }, + { + "level": 58, + "icon": 11250, + "name": "Nature Impling", + "xp": 34 + }, + { + "level": 59, + "icon": 10147, + "name": "Red Salamander", + "xp": 272 + }, + { + "level": 59, + "icon": 22198, + "name": "Yew Bird House", + "xp": 1020 + }, + { + "level": 60, + "icon": 19556, + "name": "Maniacal Monkey", + "xp": 1000 + }, + { + "level": 63, + "icon": 9977, + "name": "Carnivorous Chinchompa", + "xp": 265 + }, + { + "level": 65, + "icon": 11252, + "name": "Magpie Impling", + "xp": 44 + }, + { + "level": 65, + "icon": 11252, + "name": "Magpie Impling (Gielinor)", + "xp": 216 + }, + { + "level": 67, + "icon": 10148, + "name": "Black Salamander", + "xp": 319.5 + }, + { + "level": 69, + "icon": 9964, + "name": "Dashing Kebbit", + "xp": 156 + }, + { + "level": 73, + "icon": 5091, + "name": "Black Chinchompa", + "xp": 315 + }, + { + "level": 74, + "icon": 22201, + "name": "Magic Bird House", + "xp": 1140 + }, + { + "level": 74, + "icon": 11254, + "name": "Ninja Impling", + "xp": 52 + }, + { + "level": 74, + "icon": 11254, + "name": "Ninja Impling (Gielinor)", + "xp": 240 + }, + { + "level": 80, + "icon": 23768, + "name": "Crystal Impling", + "xp": 280 + }, + { + "level": 83, + "icon": 11256, + "name": "Dragon Impling", + "xp": 65 + }, + { + "level": 83, + "icon": 11256, + "name": "Dragon Impling (Gielinor)", + "xp": 300 + }, + { + "level": 89, + "icon": 22204, + "name": "Redwood Bird House", + "xp": 1200 + }, + { + "level": 89, + "icon": 19732, + "name": "Lucky Impling", + "xp": 380 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json new file mode 100644 index 0000000000..0c53391ba7 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json @@ -0,0 +1,1072 @@ +{ + "actions": [ + { + "level": 1, + "sprite": 15, + "name": "Wind Strike", + "xp": 5.5 + }, + { + "level": 3, + "sprite": 1247, + "name": "Reanimate Goblin", + "xp": 6 + }, + { + "level": 3, + "sprite": 16, + "name": "Confuse", + "xp": 13 + }, + { + "level": 4, + "sprite": 358, + "name": "Enchant Opal Bolt", + "xp": 9 + }, + { + "level": 5, + "sprite": 17, + "name": "Water Strike", + "xp": 7.5 + }, + { + "level": 6, + "sprite": 1269, + "name": "Lumbridge Graveyard Teleport", + "xp": 10 + }, + { + "level": 7, + "sprite": 18, + "name": "Enchant Sapphire Jewellery", + "xp": 17.5 + }, + { + "level": 7, + "sprite": 358, + "name": "Enchant Sapphire Bolt", + "xp": 17.5 + }, + { + "level": 7, + "sprite": 1264, + "name": "Reanimate Monkey", + "xp": 14 + }, + { + "level": 9, + "sprite": 19, + "name": "Earth Strike", + "xp": 9.5 + }, + { + "level": 11, + "sprite": 20, + "name": "Weaken", + "xp": 21 + }, + { + "level": 12, + "sprite": 1258, + "name": "Reanimate Imp", + "xp": 24 + }, + { + "level": 13, + "sprite": 21, + "name": "Fire Strike", + "xp": 11.5 + }, + { + "level": 14, + "sprite": 358, + "name": "Enchant Jade Bolt", + "xp": 19 + }, + { + "level": 15, + "sprite": 22, + "name": "Bones To Bananas", + "xp": 25 + }, + { + "level": 16, + "sprite": 1259, + "name": "Reanimate Minotaur", + "xp": 32 + }, + { + "level": 17, + "sprite": 1269, + "name": "Draynor Manor Teleport", + "xp": 16 + }, + { + "level": 17, + "sprite": 23, + "name": "Wind Bolt", + "xp": 13.5 + }, + { + "level": 19, + "sprite": 1257, + "name": "Reanimate Scorpion", + "xp": 38 + }, + { + "level": 19, + "sprite": 24, + "name": "Curse", + "xp": 29 + }, + { + "level": 20, + "sprite": 319, + "name": "Bind", + "xp": 30 + }, + { + "level": 21, + "sprite": 25, + "name": "Low Level Alchemy", + "xp": 31 + }, + { + "level": 21, + "sprite": 1256, + "name": "Reanimate Bear", + "xp": 42 + }, + { + "level": 22, + "sprite": 1260, + "name": "Reanimate Unicorn", + "xp": 44 + }, + { + "level": 23, + "sprite": 26, + "name": "Water Bolt", + "xp": 16.5 + }, + { + "level": 24, + "sprite": 358, + "name": "Enchant Pearl Bolt", + "xp": 29 + }, + { + "level": 25, + "sprite": 27, + "name": "Varrock Teleport", + "xp": 35 + }, + { + "level": 26, + "sprite": 1268, + "name": "Reanimate Dog", + "xp": 52 + }, + { + "level": 27, + "sprite": 28, + "name": "Enchant Emerald Jewellery", + "xp": 37 + }, + { + "level": 27, + "sprite": 358, + "name": "Enchant Emerald Bolt", + "xp": 37 + }, + { + "level": 28, + "sprite": 1271, + "name": "Mind Altar Teleport", + "xp": 22 + }, + { + "level": 29, + "sprite": 358, + "name": "Enchant Topaz Bolt", + "xp": 33 + }, + { + "level": 29, + "sprite": 29, + "name": "Earth Bolt", + "xp": 19.5 + }, + { + "level": 30, + "sprite": 1251, + "name": "Reanimate Chaos Druid", + "xp": 60 + }, + { + "level": 31, + "sprite": 30, + "name": "Lumbridge Teleport", + "xp": 41 + }, + { + "level": 33, + "sprite": 31, + "name": "Telekinetic Grab", + "xp": 43 + }, + { + "level": 34, + "sprite": 1300, + "name": "Respawn Teleport", + "xp": 27 + }, + { + "level": 35, + "sprite": 32, + "name": "Fire Bolt", + "xp": 22.5 + }, + { + "level": 37, + "sprite": 1255, + "name": "Reanimate Giant", + "xp": 74 + }, + { + "level": 37, + "sprite": 33, + "name": "Falador Teleport", + "xp": 48 + }, + { + "level": 39, + "sprite": 34, + "name": "Crumble Undead", + "xp": 24.5 + }, + { + "level": 40, + "sprite": 1301, + "name": "Salve Graveyard Teleport", + "xp": 30 + }, + { + "level": 40, + "sprite": 1254, + "name": "Reanimate Ogre", + "xp": 80 + }, + { + "level": 40, + "sprite": 355, + "name": "Teleport To House", + "xp": 30 + }, + { + "level": 41, + "sprite": 35, + "name": "Wind Blast", + "xp": 25.5 + }, + { + "level": 43, + "sprite": 36, + "name": "Superheat Item", + "xp": 53 + }, + { + "level": 43, + "sprite": 1250, + "name": "Reanimate Elf", + "xp": 86 + }, + { + "level": 45, + "sprite": 37, + "name": "Camelot Teleport", + "xp": 55.5 + }, + { + "level": 46, + "sprite": 1252, + "name": "Reanimate Troll", + "xp": 92 + }, + { + "level": 47, + "sprite": 38, + "name": "Water Blast", + "xp": 28.5 + }, + { + "level": 48, + "sprite": 1302, + "name": "Fenkenstrain's Castle Teleport", + "xp": 50 + }, + { + "level": 49, + "sprite": 39, + "name": "Enchant Ruby Jewellery", + "xp": 59 + }, + { + "level": 49, + "sprite": 358, + "name": "Enchant Ruby Bolt", + "xp": 59 + }, + { + "level": 50, + "sprite": 53, + "name": "Iban Blast", + "xp": 30 + }, + { + "level": 50, + "sprite": 329, + "name": "Smoke Rush", + "xp": 30 + }, + { + "level": 50, + "sprite": 324, + "name": "Magic Dart", + "xp": 30 + }, + { + "level": 50, + "sprite": 320, + "name": "Snare", + "xp": 60 + }, + { + "level": 51, + "sprite": 54, + "name": "Ardougne Teleport", + "xp": 61 + }, + { + "level": 52, + "sprite": 1266, + "name": "Reanimate Horror", + "xp": 104 + }, + { + "level": 52, + "sprite": 337, + "name": "Shadow Rush", + "xp": 31 + }, + { + "level": 53, + "sprite": 40, + "name": "Earth Blast", + "xp": 31.5 + }, + { + "level": 54, + "sprite": 341, + "name": "Paddewwa Teleport", + "xp": 64 + }, + { + "level": 55, + "sprite": 41, + "name": "High Level Alchemy", + "xp": 65 + }, + { + "level": 56, + "sprite": 42, + "name": "Charge Water Orb", + "xp": 66 + }, + { + "level": 56, + "sprite": 333, + "name": "Blood Rush", + "xp": 33 + }, + { + "level": 57, + "sprite": 358, + "name": "Enchant Diamond Bolt", + "xp": 67 + }, + { + "level": 57, + "sprite": 43, + "name": "Enchant Diamond Jewellery", + "xp": 67 + }, + { + "level": 57, + "sprite": 1261, + "name": "Reanimate Kalphite", + "xp": 114 + }, + { + "level": 58, + "sprite": 55, + "name": "Watchtower Teleport", + "xp": 68 + }, + { + "level": 58, + "sprite": 325, + "name": "Ice Rush", + "xp": 34 + }, + { + "level": 59, + "sprite": 44, + "name": "Fire Blast", + "xp": 34.5 + }, + { + "level": 60, + "sprite": 342, + "name": "Senntisten Teleport", + "xp": 70 + }, + { + "level": 60, + "sprite": 60, + "name": "Claws Of Guthix", + "xp": 35 + }, + { + "level": 60, + "sprite": 59, + "name": "Flames Of Zamorak", + "xp": 35 + }, + { + "level": 60, + "sprite": 61, + "name": "Saradomin Strike", + "xp": 35 + }, + { + "level": 60, + "sprite": 45, + "name": "Charge Earth Orb", + "xp": 70 + }, + { + "level": 60, + "sprite": 354, + "name": "Bones To Peaches", + "xp": 35.5 + }, + { + "level": 61, + "sprite": 1303, + "name": "West Ardougne Teleport", + "xp": 68 + }, + { + "level": 61, + "sprite": 323, + "name": "Trollheim Teleport", + "xp": 68 + }, + { + "level": 62, + "sprite": 1253, + "name": "Reanimate Dagannoth", + "xp": 124 + }, + { + "level": 62, + "sprite": 330, + "name": "Smoke Burst", + "xp": 36 + }, + { + "level": 62, + "sprite": 46, + "name": "Wind Wave", + "xp": 36 + }, + { + "level": 63, + "sprite": 47, + "name": "Charge Fire Orb", + "xp": 73 + }, + { + "level": 64, + "sprite": 338, + "name": "Shadow Burst", + "xp": 37 + }, + { + "level": 64, + "sprite": 357, + "name": "Teleport Ape Atoll", + "xp": 74 + }, + { + "level": 65, + "sprite": 543, + "name": "Bake Pie", + "xp": 60 + }, + { + "level": 65, + "sprite": 1304, + "name": "Harmony Island Teleport", + "xp": 74 + }, + { + "level": 65, + "sprite": 1267, + "name": "Reanimate Bloodveld", + "xp": 130 + }, + { + "level": 65, + "sprite": 563, + "name": "Geomancy", + "xp": 60 + }, + { + "level": 65, + "sprite": 48, + "name": "Water Wave", + "xp": 37.5 + }, + { + "level": 66, + "sprite": 49, + "name": "Charge Air Orb", + "xp": 76 + }, + { + "level": 66, + "sprite": 567, + "name": "Cure Plant", + "xp": 60 + }, + { + "level": 66, + "sprite": 343, + "name": "Kharyrll Teleport", + "xp": 76 + }, + { + "level": 66, + "sprite": 56, + "name": "Vulnerability", + "xp": 76 + }, + { + "level": 66, + "sprite": 577, + "name": "Monster Examine", + "xp": 61 + }, + { + "level": 67, + "sprite": 568, + "name": "Npc Contact", + "xp": 63 + }, + { + "level": 68, + "sprite": 334, + "name": "Blood Burst", + "xp": 39 + }, + { + "level": 68, + "sprite": 559, + "name": "Cure Other", + "xp": 65 + }, + { + "level": 68, + "sprite": 50, + "name": "Enchant Dragonstone Jewellery", + "xp": 78 + }, + { + "level": 68, + "sprite": 358, + "name": "Enchant Dragonstone Bolt", + "xp": 78 + }, + { + "level": 68, + "sprite": 578, + "name": "Humidify", + "xp": 65 + }, + { + "level": 69, + "sprite": 544, + "name": "Moonclan Teleport", + "xp": 66 + }, + { + "level": 69, + "sprite": 1262, + "name": "Reanimate Tzhaar", + "xp": 138 + }, + { + "level": 70, + "sprite": 51, + "name": "Earth Wave", + "xp": 40 + }, + { + "level": 70, + "sprite": 326, + "name": "Ice Burst", + "xp": 40 + }, + { + "level": 70, + "sprite": 569, + "name": "Tele Group Moonclan", + "xp": 67 + }, + { + "level": 71, + "sprite": 586, + "name": "Ourania Teleport", + "xp": 69 + }, + { + "level": 71, + "sprite": 1305, + "name": "Cemetery Teleport", + "xp": 82 + }, + { + "level": 71, + "sprite": 562, + "name": "Cure Me", + "xp": 69 + }, + { + "level": 71, + "sprite": 579, + "name": "Hunter Kit", + "xp": 70 + }, + { + "level": 72, + "sprite": 344, + "name": "Lassar Teleport", + "xp": 82 + }, + { + "level": 72, + "sprite": 1248, + "name": "Reanimate Demon", + "xp": 144 + }, + { + "level": 72, + "sprite": 545, + "name": "Waterbirth Teleport", + "xp": 71 + }, + { + "level": 73, + "sprite": 570, + "name": "Tele Group Waterbirth", + "xp": 72 + }, + { + "level": 73, + "sprite": 57, + "name": "Enfeeble", + "xp": 83 + }, + { + "level": 74, + "sprite": 349, + "name": "Teleother Lumbridge", + "xp": 84 + }, + { + "level": 74, + "sprite": 331, + "name": "Smoke Blitz", + "xp": 42 + }, + { + "level": 74, + "sprite": 565, + "name": "Cure Group", + "xp": 74 + }, + { + "level": 75, + "sprite": 576, + "name": "Stat Spy", + "xp": 76 + }, + { + "level": 75, + "sprite": 547, + "name": "Barbarian Teleport", + "xp": 76 + }, + { + "level": 75, + "sprite": 52, + "name": "Fire Wave", + "xp": 42.5 + }, + { + "level": 76, + "sprite": 575, + "name": "Tele Group Barbarian", + "xp": 77 + }, + { + "level": 76, + "sprite": 339, + "name": "Shadow Blitz", + "xp": 43 + }, + { + "level": 76, + "sprite": 585, + "name": "Spin Flax", + "xp": 75 + }, + { + "level": 77, + "sprite": 548, + "name": "Superglass Make", + "xp": 78 + }, + { + "level": 78, + "sprite": 583, + "name": "Tan Leather", + "xp": 81 + }, + { + "level": 78, + "sprite": 549, + "name": "Khazard Teleport", + "xp": 80 + }, + { + "level": 78, + "sprite": 345, + "name": "Dareeyak Teleport", + "xp": 88 + }, + { + "level": 78, + "sprite": 1308, + "name": "Resurrect Crops", + "xp": 90 + }, + { + "level": 78, + "sprite": 1263, + "name": "Reanimate Aviansie", + "xp": 156 + }, + { + "level": 79, + "sprite": 321, + "name": "Entangle", + "xp": 89 + }, + { + "level": 79, + "sprite": 572, + "name": "Tele Group Khazard", + "xp": 81 + }, + { + "level": 79, + "sprite": 580, + "name": "Dream", + "xp": 82 + }, + { + "level": 80, + "sprite": 322, + "name": "Charge", + "xp": 180 + }, + { + "level": 80, + "sprite": 335, + "name": "Blood Blitz", + "xp": 45 + }, + { + "level": 80, + "sprite": 58, + "name": "Stun", + "xp": 90 + }, + { + "level": 80, + "sprite": 550, + "name": "String Jewellery", + "xp": 83 + }, + { + "level": 81, + "sprite": 554, + "name": "Stat Restore Pot Share", + "xp": 84 + }, + { + "level": 81, + "sprite": 362, + "name": "Wind Surge", + "xp": 44 + }, + { + "level": 82, + "sprite": 350, + "name": "Teleother Falador", + "xp": 92 + }, + { + "level": 82, + "sprite": 552, + "name": "Magic Imbue", + "xp": 86 + }, + { + "level": 82, + "sprite": 327, + "name": "Ice Blitz", + "xp": 46 + }, + { + "level": 83, + "sprite": 553, + "name": "Fertile Soil", + "xp": 87 + }, + { + "level": 83, + "sprite": 1306, + "name": "Barrows Teleport", + "xp": 90 + }, + { + "level": 84, + "sprite": 346, + "name": "Carrallangar Teleport", + "xp": 82 + }, + { + "level": 84, + "sprite": 551, + "name": "Boost Potion Share", + "xp": 88 + }, + { + "level": 85, + "sprite": 1265, + "name": "Reanimate Abyssal Creature", + "xp": 170 + }, + { + "level": 85, + "sprite": 363, + "name": "Water Surge", + "xp": 46 + }, + { + "level": 85, + "sprite": 555, + "name": "Fishing Guild Teleport", + "xp": 89 + }, + { + "level": 85, + "sprite": 352, + "name": "Tele Block", + "xp": 80 + }, + { + "level": 85, + "sprite": 359, + "name": "Teleport To Bounty Target", + "xp": 45 + }, + { + "level": 86, + "sprite": 332, + "name": "Smoke Barrage", + "xp": 48 + }, + { + "level": 86, + "sprite": 573, + "name": "Tele Group Fishing Guild", + "xp": 90 + }, + { + "level": 86, + "sprite": 581, + "name": "Plank Make", + "xp": 90 + }, + { + "level": 87, + "sprite": 556, + "name": "Catherby Teleport", + "xp": 92 + }, + { + "level": 87, + "sprite": 353, + "name": "Enchant Onyx Jewellery", + "xp": 97 + }, + { + "level": 87, + "sprite": 358, + "name": "Enchant Onyx Bolt", + "xp": 97 + }, + { + "level": 88, + "sprite": 340, + "name": "Shadow Barrage", + "xp": 48 + }, + { + "level": 88, + "sprite": 574, + "name": "Tele Group Catherby", + "xp": 93 + }, + { + "level": 89, + "sprite": 557, + "name": "Ice Plateau Teleport", + "xp": 96 + }, + { + "level": 89, + "sprite": 584, + "name": "Recharge Dragonstone", + "xp": 97.5 + }, + { + "level": 90, + "sprite": 347, + "name": "Annakarl Teleport", + "xp": 100 + }, + { + "level": 90, + "sprite": 364, + "name": "Earth Surge", + "xp": 48 + }, + { + "level": 90, + "sprite": 575, + "name": "Tele Group Ice Plateau", + "xp": 99 + }, + { + "level": 90, + "sprite": 351, + "name": "Teleother Camelot", + "xp": 100 + }, + { + "level": 90, + "sprite": 1307, + "name": "Ape Atoll Teleport", + "xp": 100 + }, + { + "level": 91, + "sprite": 558, + "name": "Energy Transfer", + "xp": 100 + }, + { + "level": 92, + "sprite": 336, + "name": "Blood Barrage", + "xp": 51 + }, + { + "level": 92, + "sprite": 560, + "name": "Heal Other", + "xp": 101 + }, + { + "level": 93, + "sprite": 561, + "name": "Vengeance Other", + "xp": 108 + }, + { + "level": 93, + "sprite": 361, + "name": "Enchant Zenyte Jewellery", + "xp": 110 + }, + { + "level": 93, + "sprite": 1249, + "name": "Reanimate Dragon", + "xp": 186 + }, + { + "level": 94, + "sprite": 328, + "name": "Ice Barrage", + "xp": 52 + }, + { + "level": 94, + "sprite": 564, + "name": "Vengeance", + "xp": 112 + }, + { + "level": 95, + "sprite": 566, + "name": "Heal Group", + "xp": 124 + }, + { + "level": 95, + "sprite": 365, + "name": "Fire Surge", + "xp": 51 + }, + { + "level": 96, + "sprite": 348, + "name": "Ghorrock Teleport", + "xp": 106 + }, + { + "level": 96, + "sprite": 582, + "name": "Spellbook Swap", + "xp": 130 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json new file mode 100644 index 0000000000..728f204861 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json @@ -0,0 +1,154 @@ +{ + "bonuses": [ + { + "name": "Prospector Outfit (+2.5%)", + "value": 0.025 + } + ], + "actions": [ + { + "level": 1, + "icon": 434, + "name": "Clay", + "xp": 5 + }, + { + "level": 1, + "icon": 1436, + "name": "Rune Essence", + "xp": 5 + }, + { + "level": 1, + "icon": 436, + "name": "Copper Ore", + "xp": 17.5 + }, + { + "level": 1, + "icon": 438, + "name": "Tin Ore", + "xp": 17.5 + }, + { + "level": 10, + "icon": 3211, + "name": "Limestone", + "xp": 26.5 + }, + { + "level": 15, + "icon": 440, + "name": "Iron Ore", + "xp": 35 + }, + { + "level": 20, + "icon": 442, + "name": "Silver Ore", + "xp": 40 + }, + { + "level": 30, + "icon": 7936, + "name": "Pure Essence", + "xp": 5 + }, + { + "level": 30, + "icon": 453, + "name": "Coal", + "xp": 50 + }, + { + "level": 35, + "icon": 6977, + "name": "Sandstone (10kg)", + "xp": 60 + }, + { + "level": 35, + "icon": 6975, + "name": "Sandstone (5kg)", + "xp": 50 + }, + { + "level": 35, + "icon": 6973, + "name": "Sandstone (2kg)", + "xp": 40 + }, + { + "level": 35, + "icon": 6971, + "name": "Sandstone (1kg)", + "xp": 30 + }, + { + "level": 38, + "icon": 13445, + "name": "Dense Essence Block", + "xp": 12 + }, + { + "level": 40, + "icon": 444, + "name": "Gold Ore", + "xp": 65 + }, + { + "level": 40, + "icon": 1629, + "name": "Gem Rocks", + "xp": 65 + }, + { + "level": 45, + "icon": 6979, + "name": "Granite (500g)", + "xp": 50 + }, + { + "level": 45, + "icon": 6981, + "name": "Granite (2kg)", + "xp": 60 + }, + { + "level": 45, + "icon": 6983, + "name": "Granite (5kg)", + "xp": 75 + }, + { + "level": 55, + "icon": 447, + "name": "Mithril Ore", + "xp": 80 + }, + { + "level": 70, + "icon": 1761, + "name": "Soft Clay", + "xp": 5 + }, + { + "level": 70, + "icon": 449, + "name": "Adamantite Ore", + "xp": 95 + }, + { + "level": 85, + "icon": 451, + "name": "Runite Ore", + "xp": 125 + }, + { + "level": 92, + "icon": 21347, + "name": "Amethyst", + "xp": 240 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json new file mode 100644 index 0000000000..292fab6b8f --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json @@ -0,0 +1,333 @@ +{ + "bonuses": [ + { + "name": "Lit Gilded Altar (350%)", + "value": 2.5 + }, + { + "name": "Ectofuntus (400%)", + "value": 3 + }, + { + "name": "Chaos Altar (700%)", + "value": 6 + } + ], + "actions": [ + { + "level": 1, + "icon": 13447, + "name": "Ensouled Goblin Head", + "xp": 130, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13450, + "name": "Ensouled Monkey Head", + "xp": 182, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13453, + "name": "Ensouled Imp Head", + "xp": 286, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13456, + "name": "Ensouled Minotaur Head", + "xp": 364, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13459, + "name": "Ensouled Scorpion Head", + "xp": 454, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13462, + "name": "Ensouled Bear Head", + "xp": 480, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13465, + "name": "Ensouled Unicorn Head", + "xp": 494, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13468, + "name": "Ensouled Dog Head", + "xp": 520, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13471, + "name": "Ensouled Chaos Druid Head", + "xp": 584, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13474, + "name": "Ensouled Giant Head", + "xp": 650, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13477, + "name": "Ensouled Ogre Head", + "xp": 716, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13480, + "name": "Ensouled Elf Head", + "xp": 754, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13483, + "name": "Ensouled Troll Head", + "xp": 780, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13486, + "name": "Ensouled Horror Head", + "xp": 832, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13489, + "name": "Ensouled Kalphite Head", + "xp": 884, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13492, + "name": "Ensouled Dagannoth Head", + "xp": 936, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13495, + "name": "Ensouled Bloodveld Head", + "xp": 1040, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13498, + "name": "Ensouled Tzhaar Head", + "xp": 1104, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13501, + "name": "Ensouled Demon Head", + "xp": 1170, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13504, + "name": "Ensouled Aviansie Head", + "xp": 1234, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13507, + "name": "Ensouled Abyssal Head", + "xp": 1300, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 13510, + "name": "Ensouled Dragon Head", + "xp": 1560, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 526, + "name": "Bones", + "xp": 4.5 + }, + { + "level": 1, + "icon": 2859, + "name": "Wolf Bones", + "xp": 4.5 + }, + { + "level": 1, + "icon": 3396, + "name": "Loar Remains", + "xp": 33, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 528, + "name": "Burnt Bones", + "xp": 4.5 + }, + { + "level": 1, + "icon": 3179, + "name": "Monkey Bones", + "xp": 5 + }, + { + "level": 1, + "icon": 530, + "name": "Bat Bones", + "xp": 5.3 + }, + { + "level": 1, + "icon": 3125, + "name": "Jogre Bones", + "xp": 15 + }, + { + "level": 1, + "icon": 532, + "name": "Big Bones", + "xp": 15 + }, + { + "level": 1, + "icon": 4812, + "name": "Zogre Bones", + "xp": 22.5 + }, + { + "level": 1, + "icon": 3123, + "name": "Shaikahan Bones", + "xp": 25 + }, + { + "level": 1, + "icon": 534, + "name": "Babydragon Bones", + "xp": 30 + }, + { + "level": 1, + "icon": 3398, + "name": "Phrin Remains", + "xp": 46.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 22780, + "name": "Wyrm Bones", + "xp": 50 + }, + { + "level": 1, + "icon": 3400, + "name": "Riyl Remains", + "xp": 59.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 6812, + "name": "Wyvern Bones", + "xp": 72 + }, + { + "level": 1, + "icon": 536, + "name": "Dragon Bones", + "xp": 72 + }, + { + "level": 1, + "icon": 22783, + "name": "Drake Bones", + "xp": 80 + }, + { + "level": 1, + "icon": 3402, + "name": "Asyn Remains", + "xp": 82.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 4830, + "name": "Fayrg Bones", + "xp": 84 + }, + { + "level": 1, + "icon": 3404, + "name": "Fiyr Remains", + "xp": 84, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 11943, + "name": "Lava Dragon Bones", + "xp": 85 + }, + { + "level": 1, + "icon": 4832, + "name": "Raurg Bones", + "xp": 96 + }, + { + "level": 1, + "icon": 22786, + "name": "Hydra Bones", + "xp": 110 + }, + { + "level": 1, + "icon": 6729, + "name": "Dagannoth Bones", + "xp": 125 + }, + { + "level": 1, + "icon": 4834, + "name": "Ourg Bones", + "xp": 140 + }, + { + "level": 70, + "icon": 22124, + "name": "Superior Dragon Bones", + "xp": 150 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json new file mode 100644 index 0000000000..3e62d892f4 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json @@ -0,0 +1,222 @@ +{ + "bonuses": [ + { + "name": "Daeyalt essence (+50%)", + "value": 0.5 + } + ], + "actions": [ + { + "level": 1, + "icon": 5527, + "name": "Air Tiara", + "xp": 25, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5529, + "name": "Mind Tiara", + "xp": 27.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5531, + "name": "Water Tiara", + "xp": 30, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5535, + "name": "Earth Tiara", + "xp": 32.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5537, + "name": "Fire Tiara", + "xp": 35, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5533, + "name": "Body Tiara", + "xp": 37.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5539, + "name": "Cosmic Tiara", + "xp": 40, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5543, + "name": "Chaos Tiara", + "xp": 42.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5541, + "name": "Nature Tiara", + "xp": 45, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5545, + "name": "Law Tiara", + "xp": 47.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 5547, + "name": "Death Tiara", + "xp": 50, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 22121, + "name": "Wrath Tiara", + "xp": 52.5, + "ignoreBonus": true + }, + { + "level": 1, + "icon": 556, + "name": "Air Rune", + "xp": 5 + }, + { + "level": 2, + "icon": 558, + "name": "Mind Rune", + "xp": 5.5 + }, + { + "level": 5, + "icon": 555, + "name": "Water Rune", + "xp": 6 + }, + { + "level": 6, + "icon": 4695, + "name": "Mist Rune", + "xp": 8.5 + }, + { + "level": 9, + "icon": 557, + "name": "Earth Rune", + "xp": 6.5 + }, + { + "level": 10, + "icon": 4696, + "name": "Dust Rune", + "xp": 9 + }, + { + "level": 13, + "icon": 4698, + "name": "Mud Rune", + "xp": 9.5 + }, + { + "level": 14, + "icon": 554, + "name": "Fire Rune", + "xp": 7 + }, + { + "level": 15, + "icon": 4697, + "name": "Smoke Rune", + "xp": 9.5 + }, + { + "level": 19, + "icon": 4694, + "name": "Steam Rune", + "xp": 10 + }, + { + "level": 20, + "icon": 559, + "name": "Body Rune", + "xp": 7.5 + }, + { + "level": 23, + "icon": 4699, + "name": "Lava Rune", + "xp": 10.5 + }, + { + "level": 27, + "icon": 564, + "name": "Cosmic Rune", + "xp": 8 + }, + { + "level": 35, + "icon": 562, + "name": "Chaos Rune", + "xp": 8.5 + }, + { + "level": 40, + "icon": 9075, + "name": "Astral Rune", + "xp": 8.7 + }, + { + "level": 44, + "icon": 561, + "name": "Nature Rune", + "xp": 9 + }, + { + "level": 54, + "icon": 563, + "name": "Law Rune", + "xp": 9.5 + }, + { + "level": 65, + "icon": 560, + "name": "Death Rune", + "xp": 10 + }, + { + "level": 77, + "icon": 565, + "name": "Blood Rune", + "xp": 24.425, + "ignoreBonus": true + }, + { + "level": 90, + "icon": 566, + "name": "Soul Rune", + "xp": 30.325, + "ignoreBonus": true + }, + { + "level": 95, + "icon": 21880, + "name": "Wrath Rune", + "xp": 8 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json new file mode 100644 index 0000000000..adce0a7faf --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json @@ -0,0 +1,1084 @@ +{ + "actions": [ + { + "level": 1, + "icon": 2349, + "name": "Bronze Bar", + "xp": 6.3 + }, + { + "level": 1, + "icon": 1351, + "name": "Bronze Axe", + "xp": 12.5 + }, + { + "level": 1, + "icon": 1205, + "name": "Bronze Dagger", + "xp": 12.5 + }, + { + "level": 2, + "icon": 1422, + "name": "Bronze Mace", + "xp": 12.5 + }, + { + "level": 3, + "icon": 1139, + "name": "Bronze Med Helm", + "xp": 12.5 + }, + { + "level": 3, + "icon": 9375, + "name": "Bronze Bolts (Unf)", + "xp": 12.5 + }, + { + "level": 4, + "icon": 4819, + "name": "Bronze Nails", + "xp": 12.5 + }, + { + "level": 4, + "icon": 1277, + "name": "Bronze Sword", + "xp": 12.5 + }, + { + "level": 4, + "icon": 1794, + "name": "Bronze Wire", + "xp": 12.5 + }, + { + "level": 4, + "icon": 819, + "name": "Bronze Dart Tip", + "xp": 12.5 + }, + { + "level": 5, + "icon": 39, + "name": "Bronze Arrowtips", + "xp": 12.5 + }, + { + "level": 5, + "icon": 1321, + "name": "Bronze Scimitar", + "xp": 25 + }, + { + "level": 5, + "icon": 11367, + "name": "Bronze Hasta", + "xp": 25 + }, + { + "level": 5, + "icon": 1237, + "name": "Bronze Spear", + "xp": 25 + }, + { + "level": 6, + "icon": 19570, + "name": "Bronze Javelin Heads", + "xp": 12.5 + }, + { + "level": 6, + "icon": 1291, + "name": "Bronze Longsword", + "xp": 25 + }, + { + "level": 6, + "icon": 9420, + "name": "Bronze Limbs", + "xp": 12.5 + }, + { + "level": 7, + "icon": 864, + "name": "Bronze Knife", + "xp": 12.5 + }, + { + "level": 7, + "icon": 1155, + "name": "Bronze Full Helm", + "xp": 25 + }, + { + "level": 8, + "icon": 1173, + "name": "Bronze Sq Shield", + "xp": 25 + }, + { + "level": 9, + "icon": 1337, + "name": "Bronze Warhammer", + "xp": 37.5 + }, + { + "level": 10, + "icon": 1375, + "name": "Bronze Battleaxe", + "xp": 37.5 + }, + { + "level": 11, + "icon": 1103, + "name": "Bronze Chainbody", + "xp": 37.5 + }, + { + "level": 12, + "icon": 1189, + "name": "Bronze Kiteshield", + "xp": 37.5 + }, + { + "level": 13, + "icon": 3095, + "name": "Bronze Claws", + "xp": 25 + }, + { + "level": 14, + "icon": 1307, + "name": "Bronze 2h Sword", + "xp": 37.5 + }, + { + "level": 15, + "icon": 2351, + "name": "Iron Bar", + "xp": 12.5 + }, + { + "level": 15, + "icon": 1203, + "name": "Iron Dagger", + "xp": 25 + }, + { + "level": 16, + "icon": 1349, + "name": "Iron Axe", + "xp": 25 + }, + { + "level": 16, + "icon": 1075, + "name": "Bronze Platelegs", + "xp": 37.5 + }, + { + "level": 16, + "icon": 1087, + "name": "Bronze Plateskirt", + "xp": 37.5 + }, + { + "level": 17, + "icon": 7225, + "name": "Iron Spit", + "xp": 25 + }, + { + "level": 17, + "icon": 1420, + "name": "Iron Mace", + "xp": 25 + }, + { + "level": 18, + "icon": 9377, + "name": "Iron Bolts (Unf)", + "xp": 25 + }, + { + "level": 18, + "icon": 1117, + "name": "Bronze Platebody", + "xp": 62.5 + }, + { + "level": 18, + "icon": 1137, + "name": "Iron Med Helm", + "xp": 25 + }, + { + "level": 19, + "icon": 4820, + "name": "Iron Nails", + "xp": 25 + }, + { + "level": 19, + "icon": 820, + "name": "Iron Dart Tip", + "xp": 25 + }, + { + "level": 19, + "icon": 1279, + "name": "Iron Sword", + "xp": 25 + }, + { + "level": 20, + "icon": 2355, + "name": "Silver Bar", + "xp": 13.7 + }, + { + "level": 20, + "icon": 40, + "name": "Iron Arrowtips", + "xp": 25 + }, + { + "level": 20, + "icon": 1323, + "name": "Iron Scimitar", + "xp": 50 + }, + { + "level": 20, + "icon": 11369, + "name": "Iron Hasta", + "xp": 50 + }, + { + "level": 20, + "icon": 1239, + "name": "Iron Spear", + "xp": 50 + }, + { + "level": 21, + "icon": 1293, + "name": "Iron Longsword", + "xp": 50 + }, + { + "level": 21, + "icon": 19572, + "name": "Iron Javelin Heads", + "xp": 25 + }, + { + "level": 22, + "icon": 1153, + "name": "Iron Full Helm", + "xp": 50 + }, + { + "level": 22, + "icon": 863, + "name": "Iron Knife", + "xp": 25 + }, + { + "level": 23, + "icon": 9423, + "name": "Iron Limbs", + "xp": 25 + }, + { + "level": 23, + "icon": 1175, + "name": "Iron Sq Shield", + "xp": 50 + }, + { + "level": 24, + "icon": 1335, + "name": "Iron Warhammer", + "xp": 75 + }, + { + "level": 25, + "icon": 1363, + "name": "Iron Battleaxe", + "xp": 75 + }, + { + "level": 26, + "icon": 4540, + "name": "Oil Lantern Frame", + "xp": 25 + }, + { + "level": 26, + "icon": 1101, + "name": "Iron Chainbody", + "xp": 75 + }, + { + "level": 27, + "icon": 1191, + "name": "Iron Kiteshield", + "xp": 75 + }, + { + "level": 28, + "icon": 3096, + "name": "Iron Claws", + "xp": 50 + }, + { + "level": 29, + "icon": 1309, + "name": "Iron 2h Sword", + "xp": 75 + }, + { + "level": 30, + "icon": 1207, + "name": "Steel Dagger", + "xp": 37.5 + }, + { + "level": 30, + "icon": 2353, + "name": "Steel Bar", + "xp": 17.5 + }, + { + "level": 31, + "icon": 1081, + "name": "Iron Plateskirt", + "xp": 75 + }, + { + "level": 31, + "icon": 1067, + "name": "Iron Platelegs", + "xp": 75 + }, + { + "level": 31, + "icon": 1353, + "name": "Steel Axe", + "xp": 37.5 + }, + { + "level": 32, + "icon": 1424, + "name": "Steel Mace", + "xp": 37.5 + }, + { + "level": 33, + "icon": 1115, + "name": "Iron Platebody", + "xp": 125 + }, + { + "level": 33, + "icon": 1141, + "name": "Steel Med Helm", + "xp": 37.5 + }, + { + "level": 33, + "icon": 9378, + "name": "Steel Bolts (Unf)", + "xp": 37.5 + }, + { + "level": 34, + "icon": 821, + "name": "Steel Dart Tip", + "xp": 37.5 + }, + { + "level": 34, + "icon": 1539, + "name": "Steel Nails", + "xp": 37.5 + }, + { + "level": 34, + "icon": 1281, + "name": "Steel Sword", + "xp": 37.5 + }, + { + "level": 35, + "icon": 2, + "name": "Cannonball", + "xp": 25.6 + }, + { + "level": 35, + "icon": 1325, + "name": "Steel Scimitar", + "xp": 75 + }, + { + "level": 35, + "icon": 41, + "name": "Steel Arrowtips", + "xp": 37.5 + }, + { + "level": 35, + "icon": 11371, + "name": "Steel Hasta", + "xp": 75 + }, + { + "level": 35, + "icon": 1241, + "name": "Steel Spear", + "xp": 75 + }, + { + "level": 36, + "icon": 9425, + "name": "Steel Limbs", + "xp": 37.5 + }, + { + "level": 36, + "icon": 2370, + "name": "Steel Studs", + "xp": 37.5 + }, + { + "level": 36, + "icon": 1295, + "name": "Steel Longsword", + "xp": 75 + }, + { + "level": 36, + "icon": 19574, + "name": "Steel Javelin Heads", + "xp": 37.5 + }, + { + "level": 37, + "icon": 865, + "name": "Steel Knife", + "xp": 37.5 + }, + { + "level": 37, + "icon": 1157, + "name": "Steel Full Helm", + "xp": 75 + }, + { + "level": 38, + "icon": 1177, + "name": "Steel Sq Shield", + "xp": 75 + }, + { + "level": 39, + "icon": 1339, + "name": "Steel Warhammer", + "xp": 112.5 + }, + { + "level": 40, + "icon": 1365, + "name": "Steel Battleaxe", + "xp": 112.5 + }, + { + "level": 40, + "icon": 2357, + "name": "Gold Bar (Goldsmith Gauntlets)", + "xp": 56.2 + }, + { + "level": 40, + "icon": 2357, + "name": "Gold Bar", + "xp": 22.5 + }, + { + "level": 41, + "icon": 1105, + "name": "Steel Chainbody", + "xp": 112.5 + }, + { + "level": 42, + "icon": 1193, + "name": "Steel Kiteshield", + "xp": 112.5 + }, + { + "level": 43, + "icon": 3097, + "name": "Steel Claws", + "xp": 75 + }, + { + "level": 44, + "icon": 1311, + "name": "Steel 2h Sword", + "xp": 112.5 + }, + { + "level": 46, + "icon": 1069, + "name": "Steel Platelegs", + "xp": 112.5 + }, + { + "level": 46, + "icon": 1083, + "name": "Steel Plateskirt", + "xp": 112.5 + }, + { + "level": 48, + "icon": 1119, + "name": "Steel Platebody", + "xp": 187.5 + }, + { + "level": 49, + "icon": 4544, + "name": "Bullseye Lantern (Unf)", + "xp": 37 + }, + { + "level": 50, + "icon": 1209, + "name": "Mithril Dagger", + "xp": 50 + }, + { + "level": 50, + "icon": 2359, + "name": "Mithril Bar", + "xp": 30 + }, + { + "level": 51, + "icon": 1355, + "name": "Mithril Axe", + "xp": 50 + }, + { + "level": 52, + "icon": 1428, + "name": "Mithril Mace", + "xp": 50 + }, + { + "level": 53, + "icon": 1143, + "name": "Mithril Med Helm", + "xp": 50 + }, + { + "level": 53, + "icon": 9379, + "name": "Mithril Bolts (Unf)", + "xp": 50 + }, + { + "level": 54, + "icon": 1285, + "name": "Mithril Sword", + "xp": 50 + }, + { + "level": 54, + "icon": 822, + "name": "Mithril Dart Tip", + "xp": 50 + }, + { + "level": 54, + "icon": 4822, + "name": "Mithril Nails", + "xp": 50 + }, + { + "level": 55, + "icon": 42, + "name": "Mithril Arrowtips", + "xp": 50 + }, + { + "level": 55, + "icon": 1329, + "name": "Mithril Scimitar", + "xp": 100 + }, + { + "level": 55, + "icon": 11373, + "name": "Mithril Hasta", + "xp": 100 + }, + { + "level": 55, + "icon": 1243, + "name": "Mithril Spear", + "xp": 100 + }, + { + "level": 56, + "icon": 1299, + "name": "Mithril Longsword", + "xp": 100 + }, + { + "level": 56, + "icon": 19576, + "name": "Mithril Javelin Heads", + "xp": 50 + }, + { + "level": 56, + "icon": 9427, + "name": "Mithril Limbs", + "xp": 50 + }, + { + "level": 57, + "icon": 1159, + "name": "Mithril Full Helm", + "xp": 100 + }, + { + "level": 57, + "icon": 866, + "name": "Mithril Knife", + "xp": 50 + }, + { + "level": 58, + "icon": 1181, + "name": "Mithril Sq Shield", + "xp": 100 + }, + { + "level": 59, + "icon": 9416, + "name": "Mith Grapple Tip", + "xp": 50 + }, + { + "level": 59, + "icon": 1343, + "name": "Mithril Warhammer", + "xp": 150 + }, + { + "level": 60, + "icon": 1187, + "name": "Dragon Sq Shield", + "xp": 75 + }, + { + "level": 60, + "icon": 1369, + "name": "Mithril Battleaxe", + "xp": 150 + }, + { + "level": 61, + "icon": 1109, + "name": "Mithril Chainbody", + "xp": 150 + }, + { + "level": 62, + "icon": 1197, + "name": "Mithril Kiteshield", + "xp": 150 + }, + { + "level": 63, + "icon": 3099, + "name": "Mithril Claws", + "xp": 100 + }, + { + "level": 64, + "icon": 1315, + "name": "Mithril 2h Sword", + "xp": 150 + }, + { + "level": 66, + "icon": 1085, + "name": "Mithril Plateskirt", + "xp": 150 + }, + { + "level": 66, + "icon": 1071, + "name": "Mithril Platelegs", + "xp": 150 + }, + { + "level": 68, + "icon": 1121, + "name": "Mithril Platebody", + "xp": 250 + }, + { + "level": 70, + "icon": 1211, + "name": "Adamant Dagger", + "xp": 62.5 + }, + { + "level": 70, + "icon": 2361, + "name": "Adamantite Bar", + "xp": 37.5 + }, + { + "level": 71, + "icon": 1357, + "name": "Adamant Axe", + "xp": 62.5 + }, + { + "level": 72, + "icon": 1430, + "name": "Adamant Mace", + "xp": 62.5 + }, + { + "level": 73, + "icon": 9380, + "name": "Adamant Bolts (Unf)", + "xp": 62.5 + }, + { + "level": 73, + "icon": 1145, + "name": "Adamant Med Helm", + "xp": 62.5 + }, + { + "level": 74, + "icon": 823, + "name": "Adamant Dart Tip", + "xp": 62.5 + }, + { + "level": 74, + "icon": 1287, + "name": "Adamant Sword", + "xp": 62.5 + }, + { + "level": 74, + "icon": 4823, + "name": "Adamantite Nails", + "xp": 62.5 + }, + { + "level": 75, + "icon": 43, + "name": "Adamant Arrowtips", + "xp": 62.5 + }, + { + "level": 75, + "icon": 1331, + "name": "Adamant Scimitar", + "xp": 125 + }, + { + "level": 75, + "icon": 11375, + "name": "Adamant Hasta", + "xp": 125 + }, + { + "level": 75, + "icon": 1245, + "name": "Adamant Spear", + "xp": 125 + }, + { + "level": 76, + "icon": 9429, + "name": "Adamantite Limbs", + "xp": 62.5 + }, + { + "level": 76, + "icon": 1301, + "name": "Adamant Longsword", + "xp": 125 + }, + { + "level": 76, + "icon": 19578, + "name": "Adamant Javelin Heads", + "xp": 62.5 + }, + { + "level": 77, + "icon": 1161, + "name": "Adamant Full Helm", + "xp": 125 + }, + { + "level": 77, + "icon": 867, + "name": "Adamant Knife", + "xp": 62.5 + }, + { + "level": 78, + "icon": 1183, + "name": "Adamant Sq Shield", + "xp": 125 + }, + { + "level": 79, + "icon": 1345, + "name": "Adamant Warhammer", + "xp": 187.5 + }, + { + "level": 80, + "icon": 1371, + "name": "Adamant Battleaxe", + "xp": 187.5 + }, + { + "level": 81, + "icon": 1111, + "name": "Adamant Chainbody", + "xp": 187.5 + }, + { + "level": 82, + "icon": 1199, + "name": "Adamant Kiteshield", + "xp": 187.5 + }, + { + "level": 83, + "icon": 3100, + "name": "Adamant Claws", + "xp": 125 + }, + { + "level": 84, + "icon": 1317, + "name": "Adamant 2h Sword", + "xp": 187.5 + }, + { + "level": 85, + "icon": 2363, + "name": "Runite Bar", + "xp": 50 + }, + { + "level": 85, + "icon": 1213, + "name": "Rune Dagger", + "xp": 75 + }, + { + "level": 86, + "icon": 1359, + "name": "Rune Axe", + "xp": 75 + }, + { + "level": 86, + "icon": 1091, + "name": "Adamant Plateskirt", + "xp": 187.5 + }, + { + "level": 86, + "icon": 1073, + "name": "Adamant Platelegs", + "xp": 187.5 + }, + { + "level": 87, + "icon": 1432, + "name": "Rune Mace", + "xp": 75 + }, + { + "level": 88, + "icon": 9381, + "name": "Runite Bolts (Unf)", + "xp": 75 + }, + { + "level": 88, + "icon": 1147, + "name": "Rune Med Helm", + "xp": 75 + }, + { + "level": 88, + "icon": 1123, + "name": "Adamant Platebody", + "xp": 312.5 + }, + { + "level": 89, + "icon": 1289, + "name": "Rune Sword", + "xp": 75 + }, + { + "level": 89, + "icon": 4824, + "name": "Rune Nails", + "xp": 75 + }, + { + "level": 89, + "icon": 824, + "name": "Rune Dart Tip", + "xp": 75 + }, + { + "level": 90, + "icon": 44, + "name": "Rune Arrowtips", + "xp": 75 + }, + { + "level": 90, + "icon": 1333, + "name": "Rune Scimitar", + "xp": 150 + }, + { + "level": 90, + "icon": 11377, + "name": "Rune Hasta", + "xp": 150 + }, + { + "level": 90, + "icon": 1247, + "name": "Rune Spear", + "xp": 150 + }, + { + "level": 90, + "icon": 11283, + "name": "Dragonfire Shield", + "xp": 2000 + }, + { + "level": 91, + "icon": 1303, + "name": "Rune Longsword", + "xp": 150 + }, + { + "level": 91, + "icon": 19580, + "name": "Rune Javelin Heads", + "xp": 75 + }, + { + "level": 91, + "icon": 9431, + "name": "Runite Limbs", + "xp": 75 + }, + { + "level": 92, + "icon": 868, + "name": "Rune Knife", + "xp": 75 + }, + { + "level": 92, + "icon": 1163, + "name": "Rune Full Helm", + "xp": 150 + }, + { + "level": 93, + "icon": 1185, + "name": "Rune Sq Shield", + "xp": 150 + }, + { + "level": 94, + "icon": 1347, + "name": "Rune Warhammer", + "xp": 225 + }, + { + "level": 95, + "icon": 1373, + "name": "Rune Battleaxe", + "xp": 225 + }, + { + "level": 96, + "icon": 1113, + "name": "Rune Chainbody", + "xp": 225 + }, + { + "level": 97, + "icon": 1201, + "name": "Rune Kiteshield", + "xp": 225 + }, + { + "level": 98, + "icon": 3101, + "name": "Rune Claws", + "xp": 150 + }, + { + "level": 99, + "icon": 1127, + "name": "Rune Platebody", + "xp": 375 + }, + { + "level": 99, + "icon": 1093, + "name": "Rune Plateskirt", + "xp": 225 + }, + { + "level": 99, + "icon": 1079, + "name": "Rune Platelegs", + "xp": 225 + }, + { + "level": 99, + "icon": 1319, + "name": "Rune 2h Sword", + "xp": 225 + } + ] +} diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json new file mode 100644 index 0000000000..92898fc17c --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json @@ -0,0 +1,262 @@ +{ + "actions": [ + { + "level": 1, + "icon": 3241, + "name": "Man / Woman", + "xp": 8 + }, + { + "level": 1, + "icon": 10851, + "name": "Winter Sq'irkjuice", + "xp": 350 + }, + { + "level": 2, + "icon": 1965, + "name": "Vegetable Stall", + "xp": 10 + }, + { + "level": 5, + "icon": 1891, + "name": "Cake Stall", + "xp": 16 + }, + { + "level": 5, + "icon": 4242, + "name": "Tea Stall", + "xp": 16 + }, + { + "level": 5, + "icon": 5601, + "name": "Crafting Stall", + "xp": 16 + }, + { + "level": 5, + "icon": 1963, + "name": "Monkey Food Stall", + "xp": 16 + }, + { + "level": 10, + "icon": 3243, + "name": "Farmer", + "xp": 14.5 + }, + { + "level": 15, + "icon": 4295, + "name": "Female H.A.M. Member", + "xp": 18.5 + }, + { + "level": 20, + "icon": 950, + "name": "Silk Stall", + "xp": 24 + }, + { + "level": 20, + "icon": 4297, + "name": "Male H.A.M. Member", + "xp": 22.5 + }, + { + "level": 22, + "icon": 7919, + "name": "Wine Stall", + "xp": 27 + }, + { + "level": 25, + "icon": 3245, + "name": "Warrior Women / Al-Kharid Warrior", + "xp": 26 + }, + { + "level": 25, + "icon": 464, + "name": "Fruit Stall", + "xp": 28 + }, + { + "level": 25, + "icon": 10848, + "name": "Spring Sq'irkjuice", + "xp": 1350 + }, + { + "level": 27, + "icon": 5318, + "name": "Seed Stall", + "xp": 10 + }, + { + "level": 32, + "icon": 3247, + "name": "Rogue", + "xp": 35.5 + }, + { + "level": 35, + "icon": 958, + "name": "Fur Stall", + "xp": 36 + }, + { + "level": 36, + "icon": 10998, + "name": "Cave Goblin", + "xp": 40 + }, + { + "level": 38, + "icon": 5068, + "name": "Master Farmer", + "xp": 43 + }, + { + "level": 40, + "icon": 3249, + "name": "Guard", + "xp": 46.8 + }, + { + "level": 42, + "icon": 331, + "name": "Fish Stall", + "xp": 42 + }, + { + "level": 45, + "icon": 6782, + "name": "Bearded Pollnivnian Bandit", + "xp": 65 + }, + { + "level": 45, + "icon": 3686, + "name": "Fremennik Citizen", + "xp": 65 + }, + { + "level": 45, + "icon": 10850, + "name": "Autumn Sq'irkjuice", + "xp": 2350 + }, + { + "level": 49, + "icon": 837, + "name": "Crossbow Stall", + "xp": 52 + }, + { + "level": 50, + "icon": 2355, + "name": "Silver Stall", + "xp": 54 + }, + { + "level": 53, + "icon": 4625, + "name": "Desert Bandit", + "xp": 79.5 + }, + { + "level": 55, + "icon": 3251, + "name": "Knight", + "xp": 84.3 + }, + { + "level": 55, + "icon": 6781, + "name": "Pollnivnian Bandit", + "xp": 84.3 + }, + { + "level": 65, + "icon": 6422, + "name": "Magic Stall", + "xp": 100 + }, + { + "level": 65, + "icon": 1325, + "name": "Scimitar Stall", + "xp": 100 + }, + { + "level": 65, + "icon": 6780, + "name": "Menaphite Thug", + "xp": 137.5 + }, + { + "level": 65, + "icon": 2007, + "name": "Spices Stall", + "xp": 81 + }, + { + "level": 65, + "icon": 3253, + "name": "Yanille Watchman", + "xp": 137.5 + }, + { + "level": 65, + "icon": 10849, + "name": "Summer Sq'irkjuice", + "xp": 3000 + }, + { + "level": 70, + "icon": 3255, + "name": "Paladin", + "xp": 151.8 + }, + { + "level": 75, + "icon": 3257, + "name": "Gnome", + "xp": 198.5 + }, + { + "level": 75, + "icon": 1607, + "name": "Gems Stall", + "xp": 160 + }, + { + "level": 80, + "icon": 3259, + "name": "Hero", + "xp": 275 + }, + { + "level": 82, + "icon": 24702, + "name": "Vyre", + "xp": 306.9 + }, + { + "level": 85, + "icon": 6105, + "name": "Elf", + "xp": 353 + }, + { + "level": 90, + "icon": 21278, + "name": "TzHaar-Hur", + "xp": 103.4 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json new file mode 100644 index 0000000000..8a72413c99 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json @@ -0,0 +1,91 @@ +{ + "bonuses": [ + { "name": "Lumberjack Outfit (+2.5%)", "value": 0.025 } + ], + "actions": [ + { + "level": 1, + "icon": 1511, + "name": "Logs", + "xp": 25 + }, + { + "level": 1, + "icon": 2862, + "name": "Achey Tree Logs", + "xp": 25 + }, + { + "level": 15, + "icon": 1521, + "name": "Oak Logs", + "xp": 37.5 + }, + { + "level": 30, + "icon": 1519, + "name": "Willow Logs", + "xp": 67.5 + }, + { + "level": 35, + "icon": 6333, + "name": "Teak Logs", + "xp": 85 + }, + { + "level": 45, + "icon": 3239, + "name": "Bark", + "xp": 82.5 + }, + { + "level": 45, + "icon": 1517, + "name": "Maple Logs", + "xp": 100 + }, + { + "level": 50, + "icon": 6332, + "name": "Mahogany Logs", + "xp": 125 + }, + { + "level": 54, + "icon": 10810, + "name": "Arctic Pine Logs", + "xp": 40 + }, + { + "level": 60, + "icon": 1515, + "name": "Yew Logs", + "xp": 175 + }, + { + "level": 62, + "icon": 24691, + "name": "Blisterwood Logs", + "xp": 76 + }, + { + "level": 65, + "icon": 21626, + "name": "Sulliusceps", + "xp": 127 + }, + { + "level": 75, + "icon": 1513, + "name": "Magic Logs", + "xp": 250 + }, + { + "level": 90, + "icon": 19669, + "name": "Redwood Logs", + "xp": 380 + } + ] +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skybox/skybox.txt b/runelite-client/src/main/resources/net/runelite/client/plugins/skybox/skybox.txt new file mode 100644 index 0000000000..fb8bd463ce --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skybox/skybox.txt @@ -0,0 +1,996 @@ +// Copyright (c) 2019, Abex +// Copyright (c) 2019, Psikoi +// Copyright (c) 2019, Ron Young +// +// 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. + +// Skybox format +// +// Comments are c-style; Starts with // and ends with the next newline +// +// The first expression must be +// bounds rx1 ry1 rx2 ry2 +// which sets the bounds of the image +// +// Color is set with #RRGGBB or #RGB and persists until set again +// Blending is set with b. It persists until set again. The number is in tiles, up to 13 +// +// p <0> <1> <2> <3> +// p all +// Sets a mask for the planes to be altered by the next operation +// +// m +// Moves the cursor to the specified region. This does not change any chunks +// +// The following operations commit chunks to the map: +// +// r +// Sets all of the chunks in a region to the current color and blending +// +// R +// Sets all of the chunks in [x1,x2] [y1,y2] are set to the current color and blending +// +// c +// Sets the chunk relative to the last region/region1 to the current color and blending +// +// C +// Sets the chunks relative to the last region/region1 to the current color and blending + +bounds 18 19 60 196 + +b 8 + +#8AD2DF +R 18 39 60 64 + +#0f0f0f +r 34 75 + +#161616 +R 47 61 53 62 + +#181818 +R 37 79 39 80 + +#1a1a1a +R 47 60 53 60 + +#202020 +R 46 59 53 59 + +#242424 +r 29 81 + +#242e2c +r 56 160 + +#262626 +R 46 58 53 58 +r 24 79 + +#271010 +R 46 74 48 75 +r 47 76 + +#2a2f42 +r 38 75 + +#2b2b2b +R 46 57 53 57 +R 55 62 56 62 +r 45 151 + +#2e2e2e +R 36 147 37 147 + +#323232 +R 46 56 52 56 +R 51 74 52 75 +R 54 75 55 76 +R 58 58 59 58 +r 59 59 + +#332a15 +R 26 73 27 73 +R 27 80 27 81 +R 27 158 28 158 +R 29 84 29 85 +R 30 72 31 72 +R 36 153 36 154 +R 37 150 41 154 +R 39 147 42 149 +R 40 69 40 70 +R 40 81 40 82 +R 41 70 41 71 +R 41 79 42 79 +R 42 142 43 142 +R 42 150 42 152 +R 44 148 44 150 +R 44 152 49 153 +R 45 150 46 150 +R 46 161 47 161 +R 47 151 48 151 +R 48 150 49 150 +R 48 154 50 155 +R 49 77 49 79 +R 52 152 52 153 +r 20 155 +r 22 157 +r 24 154 +r 28 66 +r 30 80 +r 31 81 +r 34 77 +r 34 85 +r 35 73 +r 35 75 +r 35 156 +r 36 79 +r 36 146 +r 36 150 +r 37 73 +r 37 148 +r 38 147 +r 39 145 +r 41 75 +r 41 146 +r 42 154 +r 43 146 +r 43 149 +r 45 79 +r 45 148 +r 45 154 +r 46 149 +r 47 85 +r 47 87 +r 47 160 +r 48 148 +r 50 151 +r 51 147 +r 54 151 +r 54 153 +r 58 88 + +#342b29 +R 50 144 51 144 + +#353535 +R 42 81 42 83 + +#383838 +R 46 55 52 55 + +#393326 +R 51 77 51 79 + +#3c3c3c +r 30 73 +r 39 73 +r 49 81 + +#3e3e3e +r 48 52 + +#3f384a +R 25 156 26 157 + +#40645d +r 49 49 + +#406e8c +R 37 68 38 69 +r 26 154 +r 36 69 + +#413d2d +r 50 145 + +#424242 +r 50 150 + +#424940 +R 29 68 30 68 +R 38 158 39 158 +R 42 69 43 71 +R 45 68 45 69 +R 49 149 50 149 +R 55 151 56 151 +r 39 72 +r 39 156 +r 51 150 +r 53 150 +r 53 154 +r 55 154 +r 56 150 + +#474747 +R 50 146 51 146 +r 25 83 +r 27 83 + +#49432a +R 25 152 26 153 +R 51 148 52 149 +r 42 76 +r 46 148 +r 53 149 +r 54 148 + +#496e53 +r 33 82 + +#4a706a +R 18 54 19 54 +R 20 54 21 56 +R 31 78 38 78 +R 34 47 34 48 +R 42 73 43 74 +R 54 50 56 50 +R 54 51 57 55 +R 56 58 56 59 +R 56 141 57 142 +R 57 57 57 58 +R 58 51 58 53 +r 43 72 +r 44 71 +r 53 55 +r 53 77 + +#4a718f +R 25 58 25 59 +r 26 58 + +#4c463a +R 58 146 58 147 +r 59 147 + +#4f4f4f +r 48 81 + +#51649c +r 37 59 +r 39 58 + +#543232 +r 32 76 +r 36 75 +r 36 81 +r 46 81 +r 47 83 + +#553d75 +R 26 60 28 60 + +#57493e +r 35 83 + +#575757 +R 49 157 50 159 +R 52 150 52 151 + +#576f6f +r 56 159 + +#606060 +r 43 75 + +#64554b +R 22 59 22 60 +R 23 58 23 59 +r 24 58 + +#665742 +r 40 75 + +#697387 +R 40 57 41 57 +r 36 57 +r 41 58 + +#6a5151 +r 39 75 + +#6d758e +R 44 55 45 57 +r 43 56 + +#707b98 +R 32 60 32 61 +r 33 61 +r 34 59 + +#7fc7d9 +R 27 53 28 53 +R 27 58 28 58 +R 29 54 29 55 +R 38 44 40 44 +R 42 42 43 43 +R 42 49 43 50 +R 43 45 46 48 +R 44 49 45 49 +R 49 45 49 47 +R 50 43 51 44 +R 50 45 53 48 +R 51 49 52 51 +R 57 46 59 47 +r 28 57 +r 45 42 +r 52 44 +r 53 49 +r 54 48 +r 57 60 + +#817843 +R 58 160 59 160 + +#85857a +R 45 70 46 71 +r 25 77 +r 27 77 +r 47 68 + +#89a4ab +r 44 51 +r 59 44 + +#a4d3df +R 25 75 26 75 +R 28 75 31 75 +r 28 74 +r 37 75 +r 38 71 +r 42 75 +r 47 73 +r 49 75 + +#a5996a +r 29 72 + +#a5d5e1 +R 25 86 26 89 +R 28 76 31 76 +R 30 86 31 87 +R 32 86 33 86 +R 33 76 33 77 +R 40 73 41 74 +R 53 90 54 92 +R 54 74 55 74 +R 54 89 55 89 +r 26 66 +r 28 70 +r 30 83 +r 32 84 +r 36 71 +r 38 84 +r 40 71 +r 44 75 +r 44 79 +r 45 73 +r 45 85 +r 47 70 +r 53 78 +r 55 90 +r 57 154 +R 42 94 45 96 +R 49 93 52 96 +r 52 92 + +#b2b595 +r 40 67 + +#b6cbd8 +R 22 61 28 62 +R 36 60 37 60 +R 42 59 42 61 +R 42 159 43 159 +R 43 58 45 61 +r 24 60 +r 29 60 +r 44 155 +r 47 158 +r 53 76 + +#dbd9db +r 45 75 + +// RegionID 4663 +m 18 55 +#4a706a +C 0 0 5 7 +#527874 +C 6 0 7 1 +#668d8d +C 6 2 7 7 + +// RegionID 4664 +m 18 56 +#4a706a +C 0 0 5 7 +C 6 2 7 7 +#608786 +C 6 0 7 1 + +// RegionID 4919 +m 19 55 +C 6 0 7 1 +#668d8d +C 0 0 5 1 +#8dbac1 +C 6 2 7 7 +#9dccd6 +C 0 2 5 7 + +// RegionID 4920 +m 19 56 +#4a706a +C 0 2 7 7 +#80aab0 +C 6 0 7 1 +#8dbac1 +C 0 0 5 1 + +// RegionID 5689 +m 22 57 +#4a706a +C 0 4 7 7 + +// RegionID 5690 +m 22 58 +C 0 0 7 1 +#64554b +C 0 2 7 7 + +// RegionID 5945 +m 23 57 +#4a706a +C 0 4 7 7 + +// RegionID 5948 +m 23 60 +#64554b +C 0 0 5 5 +C 0 6 3 7 +C 6 0 7 3 +#b6cbd8 +C 4 6 7 7 +C 6 4 7 5 + +// RegionID 6201 +m 24 57 +#4a706a +C 0 4 3 7 + +// RegionID 6203 +m 24 59 +#4a718f +C 4 2 7 7 +C 6 0 7 1 +#64554b +C 0 0 3 7 +C 4 0 5 1 + +// RegionID 6460 +m 25 60 +#4a718f +C 0 0 5 1 +#553d75 +C 0 2 7 5 +C 4 6 7 7 +C 6 0 7 1 +#adc0cf +C 2 6 3 7 +#b6cbd8 +C 0 6 1 7 + +// RegionID 6710 +m 26 54 +#7fc7d9 +C 0 0 7 3 + +// RegionID 6715 +m 26 59 +#4a718f +C 0 0 5 7 +C 6 0 7 5 +b 5 +#4d020a +C 5 5 8 8 +b 8 + +// RegionID 6966 +m 27 54 +#7fc7d9 +C 0 0 7 3 + +// RegionID 6971 +m 27 59 +#553d75 +C 2 6 7 7 +#5e2423 +C 0 6 1 7 +#7fc7d9 +C 0 0 7 3 + +// RegionID 7222 +m 28 54 +C 0 0 7 3 +C 6 4 7 7 + +// RegionID 7223 +m 28 55 +C 6 0 7 7 + +// RegionID 7224 +m 28 56 +C 4 0 7 7 + +// RegionID 7227 +m 28 59 +#553d75 +C 0 6 7 7 +#7fc7d9 +C 0 0 7 3 +C 4 4 7 5 + +// RegionID 8508 +m 33 60 +#707b98 +C 0 0 1 3 +C 0 4 7 7 +#838aa1 +C 2 0 7 3 + +// RegionID 9007 +m 35 47 +#3b4f4d +C 2 6 5 7 +#4a706a +C 0 0 7 5 +C 0 6 1 7 +C 6 6 7 7 + +// RegionID 9008 +m 35 48 +#384947 +C 2 0 5 1 +#4a706a +C 0 2 7 7 +C 0 0 1 1 +C 6 0 7 1 + +// RegionID 10029 +m 39 45 +#7fc7d9 +C 0 0 7 1 + +// RegionID 10040 +m 39 56 +#6d758e +C 0 4 3 7 + +// RegionID 10044 +m 39 60 +#b6cbd8 +C 0 6 7 7 + +// RegionID 10055 +m 39 71 +#a4d3df +C 0 0 1 7 +#a5d5e1 +C 2 0 7 7 + +// RegionID 10285 +m 40 45 +#7fc7d9 +C 2 0 7 3 +C 4 4 7 5 +C 0 0 1 1 +C 6 6 7 7 + +// RegionID 10555 +m 41 59 +#b6cbd8 +C 6 0 7 7 + +// RegionID 10556 +m 41 60 +C 6 0 7 7 + +// RegionID 10810 +m 42 58 +#869dcc +C 0 0 3 3 +#b6cbd8 +C 0 4 7 7 +C 4 0 7 3 + +// RegionID 10905 +m 42 153 +#332a15 +C 2 0 5 5 +C 6 0 7 1 +#a9bbc6 +C 6 2 7 3 +#b3c7d3 +C 0 2 1 5 +C 2 6 5 7 +C 6 4 7 5 +#b6cbd8 +C 0 0 1 1 +C 0 6 1 7 +C 6 6 7 7 + +// RegionID 11062 +m 43 54 +C 6 6 7 7 + +// RegionID 11065 +m 43 57 +#6d758e +C 0 0 7 3 +#b6cbd8 +C 0 4 7 7 + +// RegionID 11314 +m 44 50 +#89a4ab +C 0 4 7 7 + +// RegionID 11317 +m 44 53 +#b6cbd8 +C 4 6 7 7 + +// RegionID 11318 +m 44 54 +C 0 4 1 7 +C 2 2 7 7 +C 4 0 7 1 + +// RegionID 11418 +m 44 154 +#332a15 +C 0 0 7 3 +#acbfcb +C 0 4 7 5 +#b6cbd8 +C 0 6 7 7 + +// RegionID 11675 +m 45 155 +C 0 0 1 7 + +// RegionID 11825 +m 46 49 +#7fc7d9 +C 0 0 7 3 +C 6 4 7 5 + +// RegionID 11830 +m 46 54 +#b6cbd8 +C 6 0 7 5 + +// RegionID 11836 +m 46 60 +#1a1a1a +C 2 0 3 3 +C 4 0 7 7 +#b4c9d6 +C 2 4 3 5 +#b6cbd8 +C 0 0 1 7 +C 2 6 3 7 + +// RegionID 11837 +m 46 61 +#161616 +C 6 0 7 9 +#b6cbd8 +C 0 0 5 9 + +// RegionID 12081 +m 47 49 +#7fc7d9 +C 0 0 3 5 + +// RegionID 12086 +m 47 54 +#b6cbd8 +C 0 0 1 5 + +// RegionID 12113 +m 47 81 +#4f4f4f +C 0 0 3 3 +C 4 4 7 7 +#543232 +C 0 4 3 7 +C 4 0 7 3 + +// RegionID 12181 +m 47 149 +#332a15 +C 0 0 1 7 +#b6cbd8 +C 2 0 7 7 + +// RegionID 12339 +m 48 51 +#3e3e3e +C 0 6 7 7 + +// RegionID 12437 +m 48 149 +#332a15 +C 2 0 7 7 +#b6cbd8 +C 0 0 1 7 + +// RegionID 12444 +m 48 156 +#332a15 +C 0 0 7 3 + +// RegionID 12595 +m 49 51 +#3e3e3e +C 0 6 1 7 + +// RegionID 12596 +m 49 52 +C 0 0 1 5 + +// RegionID 12849 +m 50 49 +#40645d +C 0 0 5 7 +#426660 +C 6 0 7 7 + +// RegionID 13209 +m 51 153 +#3b3535 +C 0 0 3 3 +C 4 4 7 7 +#543232 +C 0 4 3 7 +C 4 0 7 3 + +// RegionID 13210 +m 51 154 +#332a15 +C 0 0 3 7 + +// RegionID 13618 +m 53 50 +#4a706a +C 4 0 7 7 +#7fc7d9 +C 0 0 3 7 + +// RegionID 13619 +m 53 51 +#4a706a +C 4 0 7 7 +#7fc7d9 +C 0 0 3 7 + +// RegionID 13620 +m 53 52 +#4a706a +C 2 0 7 7 + +// RegionID 13621 +m 53 53 +C 2 0 7 7 + +// RegionID 13622 +m 53 54 +C 4 0 7 7 + +// RegionID 13873 +m 54 49 +C 0 4 7 7 +#7fc7d9 +C 0 0 7 3 + +// RegionID 14129 +m 55 49 +#4a706a +C 0 4 7 7 + +// RegionID 14385 +m 56 49 +C 0 4 7 7 + +// RegionID 14641 +m 57 49 +#543232 +C 0 4 7 7 + +// RegionID 14642 +m 57 50 +#4a706a +C 0 6 7 7 +#543232 +C 0 0 7 5 + +// RegionID 14651 +m 57 59 +#4a706a +C 0 0 7 3 +#7fc7d9 +C 0 4 7 7 + +// RegionID 14907 +m 58 59 +#323232 +C 0 0 7 3 + +// RegionID 14908 +m 58 60 +#7fc7d9 +C 0 0 3 7 + +// Demonic Gorillas +#1A2B2B +R 32 88 33 88 + +// Kebos Mainland +m 19 59 +#443C35 +C 4 0 16 12 + +m 21 57 +C 0 4 8 24 + +m 20 58 +C 0 6 8 8 +C 6 0 8 2 +C 6 4 8 6 + +m 20 57 +C 4 6 8 8 + +m 18 57 +#4A706A +C 4 0 24 4 + +// POH +b 12 +m29 89 + +// 29 89 p0 Basic wood +// 29 89 p1 Basic stone +// 29 89 p3 Fremennik-style wood +p 0 1 3 +#8AD2DF +C 0 0 7 15 +p 0 +#251B09 +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 +p 1 +#484840 +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 + +// 29 89 p2 Whitewashed stone +p 2 +#7fc7d9 +C 0 0 7 15 +p 2 3 +#2C2C29 +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 + +m30 89 + +// 30 89 p0 Tropical wood +p 0 +#7fc7d9 +C 0 0 7 15 + +// 30 89 p1 Fancy stone +// 30 89 p2 Deathly mansion +p 1 2 +#8AD2DF +C 0 0 7 15 + +p 0 1 2 +#2C2C29 +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 + +// 30 89 p3 Twisted League +p 3 +#161414 +C 0 0 7 15 +// dungeon +p 3 +#2C2C29 +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 + + +m31 89 + +// 31 89 p0 Hosidius +p 0 +#8AD2DF +C 0 0 7 15 +// dungeon +#3e2c0a +c 3 0 +c 0 3 +c 2 3 +c 4 3 +c 6 3 +c 7 4 + +// Cerberus +#100 +R 19 19 21 20 + +// Cosmic entity's plane +#040404 +r 32 75 + +b 0 +#000000 +// Song of the elves boss area +R 49 92 51 92 + +// Iorwerth dungeon +#030A0A +R 49 193 51 194 + +// Braindeath Island +#8AD2DF +R 33 79 33 80 + +// Nightmare dungeon (Morytania underground) +#0a0a0a +R 58 151 60 153 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/add_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/add_icon.png new file mode 100644 index 0000000000..8952e16450 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/add_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/arrow_right.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/arrow_right.png new file mode 100644 index 0000000000..5fdc75e7d2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/arrow_right.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/delete_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/delete_icon.png new file mode 100644 index 0000000000..adeb2841b2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/delete_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/lap_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/lap_icon.png new file mode 100644 index 0000000000..53fa27fb5e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/lap_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png new file mode 100644 index 0000000000..112b3bf489 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_selected_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_selected_icon.png new file mode 100644 index 0000000000..2eca67e08f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/loop_selected_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/pause_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/pause_icon.png new file mode 100644 index 0000000000..5acdce651c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/pause_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/reset_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/reset_icon.png new file mode 100644 index 0000000000..d304b26d16 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/reset_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/start_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/start_icon.png new file mode 100644 index 0000000000..e290de48f9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/start_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/watch.png b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/watch.png new file mode 100644 index 0000000000..89c4277143 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/timetracking/watch.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/arrow_down.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/arrow_down.png new file mode 100644 index 0000000000..8b64631a80 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/arrow_down.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_aus.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_aus.png new file mode 100644 index 0000000000..ca2980e8a9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_aus.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_ger.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_ger.png new file mode 100644 index 0000000000..1a3b406cfb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_ger.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_uk.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_uk.png new file mode 100644 index 0000000000..a52b19d0b1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_uk.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_us.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_us.png new file mode 100644 index 0000000000..7ffafe28be Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/flag_us.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/icon.png new file mode 100644 index 0000000000..6cc398d375 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldhopper/icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png new file mode 100644 index 0000000000..ae281d896c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/amulet_of_glory_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/amulet_of_glory_teleport_icon.png new file mode 100644 index 0000000000..b8f0a2aecf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/amulet_of_glory_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/annakarl_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/annakarl_teleport_icon.png new file mode 100644 index 0000000000..a56a0f395e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/annakarl_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon.png new file mode 100644 index 0000000000..1a2f5249ca Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon_arceuus.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon_arceuus.png new file mode 100644 index 0000000000..b83aa0bc08 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ape_atoll_teleport_icon_arceuus.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_cloak_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_cloak_icon.png new file mode 100644 index 0000000000..de115357b7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_cloak_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_teleport_icon.png new file mode 100644 index 0000000000..ddfd4417ff Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ardougne_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png new file mode 100644 index 0000000000..10b4aeccce Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barbarian_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barbarian_teleport_icon.png new file mode 100644 index 0000000000..ffb0267692 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barbarian_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barrows_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barrows_teleport_icon.png new file mode 100644 index 0000000000..696c1a0cf6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/barrows_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png new file mode 100644 index 0000000000..696c1a0cf6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png new file mode 100644 index 0000000000..356557e538 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png new file mode 100644 index 0000000000..d9c51114d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/burning_amulet_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/burning_amulet_teleport_icon.png new file mode 100644 index 0000000000..e48b9520bf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/burning_amulet_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camelot_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camelot_teleport_icon.png new file mode 100644 index 0000000000..bb374044e6 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camelot_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camulet_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camulet_teleport_icon.png new file mode 100644 index 0000000000..7a74119cc8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/camulet_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/carrallangar_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/carrallangar_teleport_icon.png new file mode 100644 index 0000000000..41b91276d3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/carrallangar_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/catherby_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/catherby_teleport_icon.png new file mode 100644 index 0000000000..1400309f10 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/catherby_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cemetery_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cemetery_teleport_icon.png new file mode 100644 index 0000000000..64d5571c15 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cemetery_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png new file mode 100644 index 0000000000..91b046d5d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chronicle_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chronicle_teleport_icon.png new file mode 100644 index 0000000000..4de4456ec7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chronicle_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/combat_bracelet_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/combat_bracelet_teleport_icon.png new file mode 100644 index 0000000000..772da72c8b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/combat_bracelet_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png new file mode 100644 index 0000000000..3a37733f10 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/dareeyak_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/dareeyak_teleport_icon.png new file mode 100644 index 0000000000..78ea58227c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/dareeyak_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png new file mode 100644 index 0000000000..19c94eb0e2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/desert_amulet_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/desert_amulet_icon.png new file mode 100644 index 0000000000..0716a8793b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/desert_amulet_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/digsite_pendant_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/digsite_pendant_teleport_icon.png new file mode 100644 index 0000000000..9be6e9c5e8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/digsite_pendant_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/drakans_medallion_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/drakans_medallion_teleport_icon.png new file mode 100644 index 0000000000..0f37fb27bf Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/drakans_medallion_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/draynor_manor_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/draynor_manor_teleport_icon.png new file mode 100644 index 0000000000..5ade949f89 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/draynor_manor_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png new file mode 100644 index 0000000000..828dffbd1f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ectophial_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ectophial_teleport_icon.png new file mode 100644 index 0000000000..349bb9dcf3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ectophial_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/enchanted_lyre_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/enchanted_lyre_teleport_icon.png new file mode 100644 index 0000000000..6205cdc9b8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/enchanted_lyre_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/explorers_ring_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/explorers_ring_icon.png new file mode 100644 index 0000000000..09eea3f985 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/explorers_ring_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fairy_ring_travel.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fairy_ring_travel.png new file mode 100644 index 0000000000..bfc4511bc8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fairy_ring_travel.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/falador_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/falador_teleport_icon.png new file mode 100644 index 0000000000..0cfed57e93 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/falador_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fenkenstrains_castle_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fenkenstrains_castle_teleport_icon.png new file mode 100644 index 0000000000..06cca2eac1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fenkenstrains_castle_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png new file mode 100644 index 0000000000..f556a54ce9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fishing_guild_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fishing_guild_teleport_icon.png new file mode 100644 index 0000000000..ae4dbff612 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fishing_guild_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fremennik_boots_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fremennik_boots_icon.png new file mode 100644 index 0000000000..58c3e5c126 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fremennik_boots_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/games_necklace_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/games_necklace_teleport_icon.png new file mode 100644 index 0000000000..837618950e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/games_necklace_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ghorrock_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ghorrock_teleport_icon.png new file mode 100644 index 0000000000..da4926c429 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ghorrock_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/harmony_island_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/harmony_island_teleport_icon.png new file mode 100644 index 0000000000..01e32ea4b4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/harmony_island_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/house_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/house_teleport_icon.png new file mode 100644 index 0000000000..6206d35dca Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/house_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ice_plateau_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ice_plateau_teleport_icon.png new file mode 100644 index 0000000000..b996fcb665 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ice_plateau_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/icy_basalt_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/icy_basalt_teleport_icon.png new file mode 100644 index 0000000000..406d2c2274 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/icy_basalt_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kandarin_headgear_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kandarin_headgear_icon.png new file mode 100644 index 0000000000..d3bc5ca17c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kandarin_headgear_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/karamja_gloves_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/karamja_gloves_icon.png new file mode 100644 index 0000000000..798c6d5ba7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/karamja_gloves_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharedsts_memoirs_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharedsts_memoirs_teleport_icon.png new file mode 100644 index 0000000000..41077e60d9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharedsts_memoirs_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharyrll_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharyrll_teleport_icon.png new file mode 100644 index 0000000000..13a107adbb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kharyrll_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/khazard_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/khazard_teleport_icon.png new file mode 100644 index 0000000000..cc0179198c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/khazard_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kourend_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kourend_teleport_icon.png new file mode 100644 index 0000000000..cb56803c64 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/kourend_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lassar_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lassar_teleport_icon.png new file mode 100644 index 0000000000..168753be24 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lassar_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png new file mode 100644 index 0000000000..3a441635d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_graveyard_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_graveyard_teleport_icon.png new file mode 100644 index 0000000000..4c8a1578e2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_graveyard_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_teleport_icon.png new file mode 100644 index 0000000000..d7591f2a8d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/lumbridge_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png new file mode 100644 index 0000000000..b0aaeecf2a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_teleport_icon.png new file mode 100644 index 0000000000..4c8936f022 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mining_site_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mining_site_icon.png new file mode 100644 index 0000000000..19fb3a901a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mining_site_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/moonclan_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/moonclan_teleport_icon.png new file mode 100644 index 0000000000..622d52de7a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/moonclan_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/morytania_legs_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/morytania_legs_icon.png new file mode 100644 index 0000000000..68386d1b5c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/morytania_legs_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mythical_cape_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mythical_cape_teleport_icon.png new file mode 100644 index 0000000000..f3fab4b7db Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mythical_cape_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png new file mode 100644 index 0000000000..ee53dbd5a3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/necklace_of_passage_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/necklace_of_passage_teleport_icon.png new file mode 100644 index 0000000000..9b5201c436 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/necklace_of_passage_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nope_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nope_icon.png new file mode 100644 index 0000000000..7383512c86 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nope_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/obelisk_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/obelisk_icon.png new file mode 100644 index 0000000000..e0998d700d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/obelisk_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ourania_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ourania_teleport_icon.png new file mode 100644 index 0000000000..cbf4485544 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ourania_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/paddewwa_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/paddewwa_teleport_icon.png new file mode 100644 index 0000000000..5a4b3b179f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/paddewwa_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/pharaohs_sceptre_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/pharaohs_sceptre_teleport_icon.png new file mode 100644 index 0000000000..539625aa2e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/pharaohs_sceptre_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_completed_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_completed_icon.png new file mode 100644 index 0000000000..71193ddba2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_completed_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_highlight_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_highlight_icon.png new file mode 100644 index 0000000000..9c7884450b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_highlight_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_not_started_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_not_started_icon.png new file mode 100644 index 0000000000..c383d269ce Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_not_started_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_started_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_started_icon.png new file mode 100644 index 0000000000..bd23865486 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/quest_started_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/radas_blessing_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/radas_blessing_icon.png new file mode 100644 index 0000000000..8ab9767668 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/radas_blessing_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/respawn_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/respawn_teleport_icon.png new file mode 100644 index 0000000000..a0fa01e997 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/respawn_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_dueling_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_dueling_teleport_icon.png new file mode 100644 index 0000000000..421d5cf3ad Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_dueling_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_wealth_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_wealth_teleport_icon.png new file mode 100644 index 0000000000..332e61f686 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/ring_of_wealth_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/rooftop_course_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/rooftop_course_icon.png new file mode 100644 index 0000000000..27b548ad6f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/rooftop_course_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/royal_seed_pod_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/royal_seed_pod_teleport_icon.png new file mode 100644 index 0000000000..4d83a8be28 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/royal_seed_pod_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/salve_graveyard_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/salve_graveyard_teleport_icon.png new file mode 100644 index 0000000000..9dc9a999d5 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/salve_graveyard_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/scroll_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/scroll_teleport_icon.png new file mode 100644 index 0000000000..ea54385a88 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/scroll_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/senntisten_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/senntisten_teleport_icon.png new file mode 100644 index 0000000000..c12cef3a62 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/senntisten_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skills_necklace_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skills_necklace_teleport_icon.png new file mode 100644 index 0000000000..2274f6dbf8 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skills_necklace_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skull_sceptre_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skull_sceptre_teleport_icon.png new file mode 100644 index 0000000000..63ea2d6d28 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/skull_sceptre_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/slayer_ring_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/slayer_ring_teleport_icon.png new file mode 100644 index 0000000000..981f70be41 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/slayer_ring_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png new file mode 100644 index 0000000000..08615a949e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/stony_basalt_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/stony_basalt_teleport_icon.png new file mode 100644 index 0000000000..fd3d93f995 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/stony_basalt_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/teleport_crystal_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/teleport_crystal_icon.png new file mode 100644 index 0000000000..0ae82e1a5a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/teleport_crystal_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png new file mode 100644 index 0000000000..b5648c0ca1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/trollheim_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/trollheim_teleport_icon.png new file mode 100644 index 0000000000..3b4a461ad9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/trollheim_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/varrock_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/varrock_teleport_icon.png new file mode 100644 index 0000000000..3815cfa445 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/varrock_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/watchtower_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/watchtower_teleport_icon.png new file mode 100644 index 0000000000..4dc2b4b56a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/watchtower_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png new file mode 100644 index 0000000000..52200880ad Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/waterbirth_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/waterbirth_teleport_icon.png new file mode 100644 index 0000000000..9ab1587465 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/waterbirth_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/west_ardougne_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/west_ardougne_teleport_icon.png new file mode 100644 index 0000000000..c40f91499b Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/west_ardougne_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/western_banner_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/western_banner_icon.png new file mode 100644 index 0000000000..fcf78ff4eb Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/western_banner_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png new file mode 100644 index 0000000000..0097d15040 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_crabs_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_sword_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_sword_icon.png new file mode 100644 index 0000000000..542cdb1e0f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wilderness_sword_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png new file mode 100644 index 0000000000..87b77a7395 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/xerics_talisman_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/xerics_talisman_teleport_icon.png new file mode 100644 index 0000000000..cb21c4e067 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/xerics_talisman_teleport_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/runelite.properties b/runelite-client/src/main/resources/net/runelite/client/runelite.properties new file mode 100644 index 0000000000..1b94eee370 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/runelite.properties @@ -0,0 +1,16 @@ +runelite.title=RuneLite +runelite.version=${project.version} +runescape.version=${rs.version} +runelite.discord.appid=409416265891971072 +runelite.discord.invite=https://discord.gg/R4BQ8tU +runelite.github.link=https://github.com/runelite +runelite.wiki.link=https://github.com/runelite/runelite/wiki +runelite.patreon.link=https://www.patreon.com/runelite +runelite.wiki.troubleshooting.link=https://github.com/runelite/runelite/wiki/Troubleshooting-problems-with-the-client +runelite.wiki.building.link=https://github.com/runelite/runelite/wiki/Building-with-IntelliJ-IDEA#client-failing-to-start +runelite.dnschange.link=https://1.1.1.1/dns/ +runelite.jav_config=https://oldschool.runescape.com/jav_config.ws +runelite.jav_config_backup=https://static.runelite.net/jav_config.ws +runelite.pluginhub.url=https://repo.runelite.net/plugins +runelite.pluginhub.version=${project.version} +runelite.imgur.client.id=30d71e5f6860809 \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/ui/runelite_transparent.png b/runelite-client/src/main/resources/net/runelite/client/ui/runelite_transparent.png new file mode 100644 index 0000000000..1d96a54c6d Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/ui/runelite_transparent.png differ diff --git a/runelite-client/src/main/resources/runelite.png b/runelite-client/src/main/resources/runelite.png new file mode 100644 index 0000000000..f1d1ffccf4 Binary files /dev/null and b/runelite-client/src/main/resources/runelite.png differ diff --git a/runelite-client/src/main/resources/skill_icons_small/attack.png b/runelite-client/src/main/resources/skill_icons_small/attack.png index bb86b9f4af..76a4f0f899 100644 Binary files a/runelite-client/src/main/resources/skill_icons_small/attack.png and b/runelite-client/src/main/resources/skill_icons_small/attack.png differ diff --git a/runelite-client/src/main/resources/skill_icons_small/defence.png b/runelite-client/src/main/resources/skill_icons_small/defence.png index b7b1630910..d35edc75c9 100644 Binary files a/runelite-client/src/main/resources/skill_icons_small/defence.png and b/runelite-client/src/main/resources/skill_icons_small/defence.png differ diff --git a/runelite-client/src/main/resources/skill_icons_small/magic.png b/runelite-client/src/main/resources/skill_icons_small/magic.png index 7811389659..871221f89b 100644 Binary files a/runelite-client/src/main/resources/skill_icons_small/magic.png and b/runelite-client/src/main/resources/skill_icons_small/magic.png differ diff --git a/runelite-client/src/main/resources/skill_icons_small/strength.png b/runelite-client/src/main/resources/skill_icons_small/strength.png index 1d950c40a4..3c69b7bfa0 100644 Binary files a/runelite-client/src/main/resources/skill_icons_small/strength.png and b/runelite-client/src/main/resources/skill_icons_small/strength.png differ diff --git a/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java b/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java deleted file mode 100644 index fc5375a934..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2019, 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.chat; - -import com.google.inject.Guice; -import com.google.inject.Inject; -import com.google.inject.testing.fieldbinder.Bind; -import com.google.inject.testing.fieldbinder.BoundFieldModule; -import java.awt.Color; -import net.runelite.api.ChatMessageType; -import net.runelite.api.Client; -import net.runelite.api.MessageNode; -import net.runelite.api.events.ChatMessage; -import net.runelite.client.config.ChatColorConfig; -import net.runelite.client.config.OpenOSRSConfig; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.mockito.ArgumentMatchers.eq; -import org.mockito.Mock; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class ChatMessageManagerTest -{ - @Mock - @Bind - private Client client; - - @Mock - @Bind - private ChatColorConfig chatColorConfig; - - @Mock - @Bind - private OpenOSRSConfig openOSRSConfig; - - @Inject - private ChatMessageManager chatMessageManager; - - @Before - public void before() - { - Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); - - chatMessageManager.loadColors(); - } - - @Test - public void onChatMessage() - { - when(chatColorConfig.opaquePublicChat()).thenReturn(Color.decode("#b20000")); - - chatMessageManager.loadColors(); - - ChatMessage chatMessage = new ChatMessage(); - chatMessage.setType(ChatMessageType.PUBLICCHAT); - - MessageNode messageNode = mock(MessageNode.class); - chatMessage.setMessageNode(messageNode); - - when(messageNode.getValue()).thenReturn("Your dodgy necklace protects you. It has 1 charge left."); - chatMessageManager.onChatMessage(chatMessage); - - verify(messageNode).setValue(eq("Your dodgy necklace protects you. It has 1 charge left.")); - } -} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java b/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java deleted file mode 100644 index 792ff3bb25..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2017, 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.config; - -import com.google.inject.Guice; -import com.google.inject.testing.fieldbinder.Bind; -import com.google.inject.testing.fieldbinder.BoundFieldModule; -import java.io.File; -import java.time.Instant; -import java.util.UUID; -import java.util.concurrent.ScheduledExecutorService; -import javax.inject.Inject; -import javax.inject.Named; -import net.runelite.api.Client; -import net.runelite.client.RuneLite; -import net.runelite.client.account.AccountSession; -import net.runelite.client.eventbus.EventBus; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class ConfigManagerTest -{ - @Mock - @Bind - Client client; - - @Mock - @Bind - EventBus eventBus; - - @Mock - @Bind - ScheduledExecutorService executor; - - @Mock - @Bind - RuneLiteConfig runeliteConfig; - - @Mock - @Bind - private OpenOSRSConfig openOSRSConfig; - - @Bind - @Named("config") - private File config = RuneLite.DEFAULT_CONFIG_FILE; - - @Inject - ConfigManager manager; - - @Before - public void before() - { - Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); - } - - @Test - public void testGetConfig() - { - AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); - accountSession.setUsername("test"); - - manager.setConfiguration("test", "key", "moo"); - - TestConfig conf = manager.getConfig(TestConfig.class); - Assert.assertEquals("moo", conf.key()); - } - - @Test - public void testGetConfigDefault() - { - AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); - accountSession.setUsername("test"); - - TestConfig conf = manager.getConfig(TestConfig.class); - Assert.assertEquals("default", conf.key()); - } - - @Test - public void testSetConfig() - { - AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); - accountSession.setUsername("test"); - - TestConfig conf = manager.getConfig(TestConfig.class); - conf.key("new value"); - - Assert.assertEquals("new value", conf.key()); - } - - @Test - public void testGetConfigDescriptor() - { - AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); - accountSession.setUsername("test"); - - TestConfig conf = manager.getConfig(TestConfig.class); - ConfigDescriptor descriptor = manager.getConfigDescriptor(conf); - Assert.assertEquals(2, descriptor.getItems().size()); - } - - @Test - public void testResetNullDefaultConfig() - { - TestConfig conf = manager.getConfig(TestConfig.class); - ConfigDescriptor descriptor = manager.getConfigDescriptor(conf); - conf.nullDefaultKey("new value"); - - manager.unsetConfiguration(descriptor.getGroup().value(), "nullDefaultKey"); - manager.setDefaultConfiguration(conf, false); - Assert.assertNull(conf.nullDefaultKey()); - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java b/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java deleted file mode 100644 index 78cf0edb36..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2017, 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.config; - -@ConfigGroup("test") -public interface TestConfig extends Config -{ - @ConfigItem( - keyName = "key", - name = "Key Name", - description = "value" - ) - default String key() - { - return "default"; - } - - @ConfigItem( - keyName = "key", - name = "Key Name", - description = "value" - ) - void key(String key); - - @ConfigItem( - keyName = "nullDefaultKey", - name = "Key Name", - description = "value" - ) - void nullDefaultKey(String key); - - @ConfigItem( - keyName = "nullDefaultKey", - name = "Key Name", - description = "value" - ) - default String nullDefaultKey() - { - return null; - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java b/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java deleted file mode 100644 index f7f5e7ebab..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Copyright (c) 2018, Ron Young - * 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.game; - -import java.util.LinkedHashMap; -import java.util.Map; -import static net.runelite.api.ItemID.*; -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class ItemVariationMappingTest -{ - private static final Map ITEMS_MAP = new LinkedHashMap() - {{ - put(_12_ANCHOVY_PIZZA, ANCHOVY_PIZZA); - put(_12_MEAT_PIZZA, MEAT_PIZZA); - put(_12_PINEAPPLE_PIZZA, PINEAPPLE_PIZZA); - put(_12_PLAIN_PIZZA, PLAIN_PIZZA); - put(ADAMANT_PLATELEGS_T, ADAMANT_PLATELEGS); - put(ADAMANT_PLATESKIRT_T, ADAMANT_PLATESKIRT); - put(AGILITY_CAPET, AGILITY_CAPE); - put(AGILITY_MIX1, AGILITY_MIX2); - put(AGILITY_MIX2, AGILITY_MIX2); - put(AHRIMS_ROBETOP_100, AHRIMS_ROBETOP); - put(AHRIMS_ROBETOP_25, AHRIMS_ROBETOP); - put(AHRIMS_ROBETOP_50, AHRIMS_ROBETOP); - put(AHRIMS_ROBETOP_75, AHRIMS_ROBETOP); - put(AHRIMS_STAFF_0, AHRIMS_STAFF); - put(AMULET_OF_GLORY5, AMULET_OF_GLORY); - put(AMULET_OF_GLORY6, AMULET_OF_GLORY); - put(AMULET_OF_MAGIC_T, AMULET_OF_MAGIC); - put(ANCIENT_PAGE_1, ANCIENT_PAGE); - put(ANCIENT_PAGE_2, ANCIENT_PAGE); - put(ANTIDOTE2, ANTIDOTE_UNF); - put(ANTIDOTE3, ANTIDOTE_UNF); - put(ANTIDOTE4, ANTIDOTE_UNF); - put(ANTIDOTE1_5958, ANTIDOTE_UNF); - put(ANTIDOTE2_5956, ANTIDOTE_UNF); - put(APPLES2, APPLES1); - put(APPLES3, APPLES1); - put(APPLES4, APPLES1); - put(APPLES5, APPLES1); - put(ARCHERS_RING_I, ARCHERS_RING); - put(ASGARNIAN_ALEM4, ASGARNIAN_ALE); - put(ATTACK_CAPET, ATTACK_CAPE); - put(ATTACK_MIX1, ATTACK_MIX2); - put(ATTACK_MIX2, ATTACK_MIX2); - put(ATTACK_POTION1, ATTACK_POTION3); - put(BANANAS2, BANANAS1); - put(BANANAS3, BANANAS1); - put(BANANAS4, BANANAS1); - put(BANANAS5, BANANAS1); - put(BANDOS_PAGE_1, BANDOS_PAGE_1); - put(BLACK_KITESHIELD_T, BLACK_KITESHIELD); - put(BLACK_MASK_1, BLACK_MASK_10); - put(BLACK_MASK_2, BLACK_MASK_10); - put(BLACK_MASK_3, BLACK_MASK_10); - put(BLACK_MASK_4, BLACK_MASK_10); - put(BLUE_SKIRT_T, BLUE_SKIRT); - put(BLUE_WIZARD_HAT_T, BLUE_WIZARD_HAT); - put(BLUE_WIZARD_ROBE_T, BLUE_WIZARD_ROBE); - put(BOOK_PAGE_1, BOOK_PAGE_1); - put(BOOK_PAGE_2, BOOK_PAGE_1); - put(BROODOO_SHIELD_9, BROODOO_SHIELD_10); - put(BROWN_SPICE_1, BROWN_SPICE_4); - put(BROWN_SPICE_2, BROWN_SPICE_4); - put(BROWN_SPICE_3, BROWN_SPICE_4); - put(BROWN_SPICE_4, BROWN_SPICE_4); - put(CASKET_ELITE, CASKET); - put(CASKET_HARD, CASKET); - put(CASKET_MEDIUM, CASKET); - put(CASTLE_SKETCH_1, CASTLE_SKETCH_1); - put(CASTLE_SKETCH_2, CASTLE_SKETCH_1); - put(CHEFS_DELIGHTM2, CHEFS_DELIGHT); - put(CHEFS_DELIGHTM3, CHEFS_DELIGHT); - put(CHEFS_DELIGHTM4, CHEFS_DELIGHT); - put(CIDER1, CIDER); - put(CIDER2, CIDER); - put(CLUE_NEST_ELITE, CLUE_NEST_EASY); - put(CLUE_NEST_HARD, CLUE_NEST_EASY); - put(CLUE_NEST_MEDIUM, CLUE_NEST_EASY); - put(CLUE_SCROLL_EASY, CLUE_SCROLL); - put(CLUE_SCROLL_ELITE, CLUE_SCROLL); - put(COMMORB_V2, COMMORB_V2); - put(COMPOST_POTION1, COMPOST_POTION4); - put(COMPOST_POTION2, COMPOST_POTION4); - put(COMPOST_POTION3, COMPOST_POTION4); - put(COMPOST_POTION4, COMPOST_POTION4); - put(CRYSTAL_BOW_510_I, NEW_CRYSTAL_BOW); - put(CRYSTAL_BOW_510, NEW_CRYSTAL_BOW); - put(CRYSTAL_BOW_610_I, NEW_CRYSTAL_BOW); - put(CRYSTAL_BOW_610, NEW_CRYSTAL_BOW); - put(CRYSTAL_BOW_710_I, NEW_CRYSTAL_BOW); - put(CRYSTAL_HALBERD_510_I, NEW_CRYSTAL_HALBERD_FULL_I); - put(CRYSTAL_HALBERD_510, NEW_CRYSTAL_HALBERD_FULL_I); - put(CRYSTAL_HALBERD_610_I, NEW_CRYSTAL_HALBERD_FULL_I); - put(CRYSTAL_HALBERD_610, NEW_CRYSTAL_HALBERD_FULL_I); - put(CRYSTAL_HALBERD_710_I, NEW_CRYSTAL_HALBERD_FULL_I); - put(CRYSTAL_SHIELD_510_I, NEW_CRYSTAL_SHIELD); - put(CRYSTAL_SHIELD_510, NEW_CRYSTAL_SHIELD); - put(CRYSTAL_SHIELD_610_I, NEW_CRYSTAL_SHIELD); - put(CRYSTAL_SHIELD_610, NEW_CRYSTAL_SHIELD); - put(CRYSTAL_SHIELD_710_I, NEW_CRYSTAL_SHIELD); - put(DEFENCE_POTION2, DEFENCE_POTION3); - put(DEFENCE_POTION3, DEFENCE_POTION3); - put(DEFENCE_POTION4, DEFENCE_POTION3); - put(DESERT_AMULET_1, DESERT_AMULET); - put(DESERT_AMULET_2, DESERT_AMULET); - put(DHAROKS_PLATEBODY_50, DHAROKS_PLATEBODY); - put(DHAROKS_PLATEBODY_75, DHAROKS_PLATEBODY); - put(DHAROKS_PLATELEGS_0, DHAROKS_PLATELEGS); - put(DHAROKS_PLATELEGS_100, DHAROKS_PLATELEGS); - put(DHAROKS_PLATELEGS_25, DHAROKS_PLATELEGS); - put(DRAGON_BITTERM3, DRAGON_BITTER); - put(DRAGON_BITTERM4, DRAGON_BITTER); - put(DRAGON_DEFENDER_T, DRAGON_DEFENDER); - put(DRAGONSTONE_BOLTS, DRAGONSTONE_BOLTS_E); - put(DRAGONSTONE_DRAGON_BOLTS, DRAGONSTONE_DRAGON_BOLTS_E); - put(ENCHANTED_LYRE2, ENCHANTED_LYRE); - put(ENCHANTED_LYRE3, ENCHANTED_LYRE); - put(ENCHANTED_LYRE4, ENCHANTED_LYRE); - put(ENCHANTED_LYRE5, ENCHANTED_LYRE); - put(ENERGY_MIX1, ENERGY_MIX2); - put(EXTENDED_SUPER_ANTIFIRE_MIX1, EXTENDED_SUPER_ANTIFIRE_MIX2); - put(EXTENDED_SUPER_ANTIFIRE_MIX2, EXTENDED_SUPER_ANTIFIRE_MIX2); - put(EXTENDED_SUPER_ANTIFIRE1, EXTENDED_SUPER_ANTIFIRE4); - put(EXTENDED_SUPER_ANTIFIRE2, EXTENDED_SUPER_ANTIFIRE4); - put(EXTENDED_SUPER_ANTIFIRE3, EXTENDED_SUPER_ANTIFIRE4); - put(FRAGMENT_1, FRAGMENT_1); - put(FRAGMENT_2, FRAGMENT_1); - put(FRAGMENT_3, FRAGMENT_1); - put(FREMENNIK_SEA_BOOTS_1, FREMENNIK_SEA_BOOTS); - put(FREMENNIK_SEA_BOOTS_2, FREMENNIK_SEA_BOOTS); - put(GAMES_NECKLACE3, GAMES_NECKLACE8); - put(GAMES_NECKLACE4, GAMES_NECKLACE8); - put(GAMES_NECKLACE5, GAMES_NECKLACE8); - put(GAMES_NECKLACE6, GAMES_NECKLACE8); - put(GAMES_NECKLACE7, GAMES_NECKLACE8); - put(GREENMANS_ALE4, GREENMANS_ALE); - put(GREENMANS_ALEM1, GREENMANS_ALE); - put(GREENMANS_ALEM2, GREENMANS_ALE); - put(GREENMANS_ALEM3, GREENMANS_ALE); - put(GREENMANS_ALEM4, GREENMANS_ALE); - put(GUTHANS_PLATEBODY_75, GUTHANS_PLATEBODY); - put(GUTHANS_WARSPEAR_0, GUTHANS_WARSPEAR); - put(GUTHANS_WARSPEAR_100, GUTHANS_WARSPEAR); - put(GUTHANS_WARSPEAR_25, GUTHANS_WARSPEAR); - put(GUTHANS_WARSPEAR_50, GUTHANS_WARSPEAR); - put(HALF_A_GARDEN_PIE, PART_GARDEN_PIE); - put(HALF_A_MEAT_PIE, MEAT_PIE); - put(MUSHROOM_PIE, HALF_A_MUSHROOM_PIE); - put(HALF_A_REDBERRY_PIE, REDBERRY_PIE); - put(HALF_A_ROCK, ROCK); - put(HUNTING_MIX1, HUNTING_MIX2); - put(HUNTING_MIX2, HUNTING_MIX2); - put(IMPINABOX1, IMPINABOX2); - put(IMPINABOX2, IMPINABOX2); - put(IRON_FULL_HELM_T, IRON_FULL_HELM); - put(KARILS_COIF_100, KARILS_COIF); - put(KARILS_COIF_25, KARILS_COIF); - put(KARILS_COIF_50, KARILS_COIF); - put(KARILS_COIF_75, KARILS_COIF); - put(KARILS_CROSSBOW_0, KARILS_CROSSBOW); - put(KEY_MEDIUM, KEY); - put(KODAI_POTION_1, KODAI_POTION_1); - put(KODAI_POTION_2, KODAI_POTION_1); - put(KODAI_POTION_3, KODAI_POTION_1); - put(KODAI_POTION_4, KODAI_POTION_1); - put(MAGIC_POTION1, MAGIC_POTION4); - put(MAGIC_POTION2, MAGIC_POTION4); - put(MAGIC_POTION3, MAGIC_POTION4); - put(MAGIC_POTION4, MAGIC_POTION4); - put(MAGIC_SHORTBOW_I, MAGIC_SHORTBOW_U); - put(MITHRIL_FULL_HELM_T, MITHRIL_FULL_HELM); - put(MITHRIL_KITESHIELD_T, MITHRIL_KITESHIELD); - put(MITHRIL_PLATEBODY_T, MITHRIL_PLATEBODY); - put(MITHRIL_PLATELEGS_T, MITHRIL_PLATELEGS); - put(MITHRIL_PLATESKIRT_T, MITHRIL_PLATESKIRT); - put(NECKLACE_OF_PASSAGE1, NECKLACE_OF_PASSAGE5); - put(NECKLACE_OF_PASSAGE2, NECKLACE_OF_PASSAGE5); - put(NECKLACE_OF_PASSAGE3, NECKLACE_OF_PASSAGE5); - put(NECKLACE_OF_PASSAGE4, NECKLACE_OF_PASSAGE5); - put(NECKLACE_OF_PASSAGE5, NECKLACE_OF_PASSAGE5); - put(OLIVE_OIL4, OLIVE_OIL4); - put(ONIONS1, ONIONS1); - put(ONIONS2, ONIONS1); - put(ONIONS3, ONIONS1); - put(ONIONS4, ONIONS1); - put(ORANGES3, ORANGES1); - put(ORANGES4, ORANGES1); - put(ORANGES5, ORANGES1); - put(OVERLOAD_1, OVERLOAD_4); - put(OVERLOAD_2, OVERLOAD_4); - put(PHARAOHS_SCEPTRE_3, PHARAOHS_SCEPTRE_3); - put(PHARAOHS_SCEPTRE_4, PHARAOHS_SCEPTRE_3); - put(PHARAOHS_SCEPTRE_5, PHARAOHS_SCEPTRE_3); - put(PHARAOHS_SCEPTRE_6, PHARAOHS_SCEPTRE_3); - put(PHARAOHS_SCEPTRE_7, PHARAOHS_SCEPTRE_3); - put(PRAEL_BAT_1, PRAEL_BAT_1); - put(PRAYER_CAPET, PRAYER_CAPE); - put(PRAYER_ENHANCE_1_20965, PRAYER_ENHANCE_1); - put(PRAYER_ENHANCE_2_20966, PRAYER_ENHANCE_1); - put(PRAYER_ENHANCE_3_20967, PRAYER_ENHANCE_1); - put(RANGING_MIX1, RANGING_MIX2); - put(RANGING_MIX2, RANGING_MIX2); - put(RANGING_POTION1, RANGING_POTION3); - put(RANGING_POTION2, RANGING_POTION3); - put(RANGING_POTION3, RANGING_POTION3); - put(RED_DHIDE_BODY_T, RED_DHIDE_BODY); - put(RED_DHIDE_CHAPS_T, RED_DHIDE_CHAPS); - put(RED_SLAYER_HELMET_I, SLAYER_HELMET); - put(RED_SPICE_1, RED_SPICE_4); - put(RED_SPICE_2, RED_SPICE_4); - put(RESTORE_MIX1, RESTORE_MIX2); - put(RESTORE_MIX2, RESTORE_MIX2); - put(RESTORE_POTION1, RESTORE_POTION3); - put(RESTORE_POTION2, RESTORE_POTION3); - put(RESTORE_POTION3, RESTORE_POTION3); - put(RING_OF_DUELING5, RING_OF_DUELING8); - put(RING_OF_DUELING6, RING_OF_DUELING8); - put(RING_OF_DUELING7, RING_OF_DUELING8); - put(RING_OF_DUELING8, RING_OF_DUELING8); - put(RING_OF_RETURNING1, RING_OF_RETURNING5); - put(ROD_OF_IVANDIS_4, ROD_OF_IVANDIS_10); - put(ROD_OF_IVANDIS_5, ROD_OF_IVANDIS_10); - put(ROD_OF_IVANDIS_6, ROD_OF_IVANDIS_10); - put(ROD_OF_IVANDIS_7, ROD_OF_IVANDIS_10); - put(ROD_OF_IVANDIS_8, ROD_OF_IVANDIS_10); - put(SACRED_OIL3, SACRED_OIL4); - put(SACRED_OIL4, SACRED_OIL4); - put(SALVE_AMULET_E, SALVE_AMULET); - put(SALVE_AMULETI, SALVE_AMULET); - put(SANDSTONE_1KG, SANDSTONE_1KG); - put(SARADOMIN_PAGE_4, SARADOMIN_PAGE_1); - put(SEERS_RING_I, SEERS_RING); - put(SHAYZIEN_BOOTS_1, SHAYZIEN_BOOTS_1); - put(SHAYZIEN_BOOTS_2, SHAYZIEN_BOOTS_1); - put(SHAYZIEN_BOOTS_3, SHAYZIEN_BOOTS_1); - put(SHAYZIEN_HELM_4, SHAYZIEN_HELM_1); - put(SHAYZIEN_HELM_5, SHAYZIEN_HELM_1); - put(SHAYZIEN_PLATEBODY_1, SHAYZIEN_PLATEBODY_1); - put(SHAYZIEN_PLATEBODY_2, SHAYZIEN_PLATEBODY_1); - put(SHAYZIEN_PLATEBODY_3, SHAYZIEN_PLATEBODY_1); - put(SHAYZIEN_SUPPLY_GREAVES_4, SHAYZIEN_SUPPLY_GREAVES_1); - put(SHAYZIEN_SUPPLY_GREAVES_5, SHAYZIEN_SUPPLY_GREAVES_1); - put(SHAYZIEN_SUPPLY_HELM_1, SHAYZIEN_SUPPLY_HELM_1); - put(SHAYZIEN_SUPPLY_HELM_2, SHAYZIEN_SUPPLY_HELM_1); - put(SHAYZIEN_SUPPLY_HELM_3, SHAYZIEN_SUPPLY_HELM_1); - put(SHEEP_BONES_4, SHEEP_BONES_1); - put(SINHAZA_SHROUD_TIER_1, SINHAZA_SHROUD_TIER_1); - put(SINHAZA_SHROUD_TIER_2, SINHAZA_SHROUD_TIER_1); - put(SINHAZA_SHROUD_TIER_3, SINHAZA_SHROUD_TIER_1); - put(SINHAZA_SHROUD_TIER_4, SINHAZA_SHROUD_TIER_1); - put(SLAYER_RING_6, SLAYER_RING_8); - put(SLAYER_RING_7, SLAYER_RING_8); - put(SLAYER_RING_8, SLAYER_RING_8); - put(SLAYER_RING_ETERNAL, SLAYER_RING_8); - put(SLAYERS_RESPITE1, SLAYERS_RESPITE); - put(STAMINA_POTION4, STAMINA_POTION4); - put(STASH_UNITS_EASY, STASH_UNITS_EASY); - put(STASH_UNITS_ELITE, STASH_UNITS_EASY); - put(STASH_UNITS_HARD, STASH_UNITS_EASY); - put(STASH_UNITS_MASTER, STASH_UNITS_EASY); - put(STRENGTH_POTION1, STRENGTH_POTION4); - put(STRENGTH_POTION2, STRENGTH_POTION4); - put(STRENGTH_POTION3, STRENGTH_POTION4); - put(STRENGTH_POTION4, STRENGTH_POTION4); - put(STUDDED_BODY_T, STUDDED_BODY); - put(SUPER_DEF_MIX1, SUPER_DEF_MIX2); - put(SUPER_DEF_MIX2, SUPER_DEF_MIX2); - put(SUPER_DEFENCE1, SUPER_DEFENCE3); - put(SUPER_DEFENCE2, SUPER_DEFENCE3); - put(SUPER_DEFENCE3, SUPER_DEFENCE3); - put(SUPER_RESTORE_MIX1, SUPER_RESTORE_MIX2); - put(SUPER_RESTORE_MIX2, SUPER_RESTORE_MIX2); - put(SUPER_RESTORE1, SUPER_RESTORE4); - put(SUPER_RESTORE2, SUPER_RESTORE4); - put(SUPER_RESTORE3, SUPER_RESTORE4); - put(TEAK_SHELVES_2, TEAK_SHELVES_1); - put(TELEPORT_CRYSTAL_1, TELEPORT_CRYSTAL_4); - put(TELEPORT_CRYSTAL_2, TELEPORT_CRYSTAL_4); - put(TELEPORT_CRYSTAL_3, TELEPORT_CRYSTAL_4); - put(TELEPORT_CRYSTAL_4, TELEPORT_CRYSTAL_4); - put(TOPAZ_BOLTS, TOPAZ_BOLTS_E); - put(TOPAZ_DRAGON_BOLTS, TOPAZ_DRAGON_BOLTS_E); - put(TORAGS_HAMMERS_0, TORAGS_HAMMERS); - put(TORAGS_HAMMERS_100, TORAGS_HAMMERS); - put(TORAGS_HAMMERS_25, TORAGS_HAMMERS); - put(TORAGS_PLATELEGS_50, TORAGS_PLATELEGS); - put(TORAGS_PLATELEGS_75, TORAGS_PLATELEGS); - put(TREASONOUS_RING_I, TREASONOUS_RING); - put(TRIDENT_OF_THE_SEAS_E, TRIDENT_OF_THE_SEAS_FULL); - put(TRIDENT_OF_THE_SWAMP_E, TRIDENT_OF_THE_SWAMP); - put(VERACS_BRASSARD_50, VERACS_BRASSARD); - put(VERACS_BRASSARD_75, VERACS_BRASSARD); - put(VERACS_FLAIL_0, VERACS_FLAIL); - put(VERACS_FLAIL_100, VERACS_FLAIL); - put(VERACS_FLAIL_25, VERACS_FLAIL); - put(VOID_SEAL1, VOID_SEAL8); - put(VOID_SEAL2, VOID_SEAL8); - put(VOID_SEAL3, VOID_SEAL8); - put(VOID_SEAL4, VOID_SEAL8); - put(VOID_SEAL5, VOID_SEAL8); - put(WATERSKIN3, WATERSKIN4); - put(WATERSKIN4, WATERSKIN4); - put(WESTERN_BANNER_1, WESTERN_BANNER); - put(WESTERN_BANNER_2, WESTERN_BANNER); - put(WESTERN_BANNER_3, WESTERN_BANNER); - put(YELLOW_SPICE_2, YELLOW_SPICE_4); - put(YELLOW_SPICE_3, YELLOW_SPICE_4); - put(YELLOW_SPICE_4, YELLOW_SPICE_4); - put(ZAMORAK_BREW1, ZAMORAK_BREW3); - put(ZAMORAK_BREW2, ZAMORAK_BREW3); - }}; - - @Test - public void testMappedNames() - { - ITEMS_MAP.forEach((key, value) -> - assertEquals(value, (Integer) ItemVariationMapping.map(key))); - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java deleted file mode 100644 index 999be92d27..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (c) 2016-2017, 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; - -import com.google.common.reflect.ClassPath; -import com.google.common.reflect.ClassPath.ClassInfo; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.Module; -import com.google.inject.grapher.graphviz.GraphvizGrapher; -import com.google.inject.grapher.graphviz.GraphvizModule; -import com.google.inject.testing.fieldbinder.Bind; -import com.google.inject.testing.fieldbinder.BoundFieldModule; -import com.google.inject.util.Modules; -import java.applet.Applet; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.lang.invoke.MethodHandles; -import java.lang.reflect.Method; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import net.runelite.api.Client; -import net.runelite.api.events.Event; -import net.runelite.client.RuneLite; -import net.runelite.client.RuneLiteModule; -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigItem; -import net.runelite.client.eventbus.AccessorGenerator; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.eventbus.Subscribe; -import okhttp3.OkHttpClient; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import static org.mockito.Mockito.*; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class PluginManagerTest -{ - private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins"; - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - @Mock - @Bind - public Applet applet; - - @Mock - @Bind - public Client client; - - private ExecutorService executorService; - - private Set pluginClasses; - private Set configClasses; - - @Before - public void before() throws IOException - { - OkHttpClient okHttpClient = mock(OkHttpClient.class); - - executorService = Executors.newSingleThreadScheduledExecutor(); - - Injector injector = Guice.createInjector(Modules - .override(new RuneLiteModule(okHttpClient, () -> null, false, RuneLite.DEFAULT_CONFIG_FILE)) - .with(BoundFieldModule.of(this))); - - RuneLite.setInjector(injector); - - // Find plugins and configs we expect to have - pluginClasses = new HashSet<>(); - configClasses = new HashSet<>(); - Set classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE); - for (ClassInfo classInfo : classes) - { - Class clazz = classInfo.load(); - PluginDescriptor pluginDescriptor = clazz.getAnnotation(PluginDescriptor.class); - if (pluginDescriptor != null) - { - pluginClasses.add(clazz); - continue; - } - - if (Config.class.isAssignableFrom(clazz)) - { - configClasses.add(clazz); - } - } - } - - @After - public void after() - { - executorService.shutdownNow(); - } - - @Test - public void testLoadPlugins() throws Exception - { - PluginManager pluginManager = new PluginManager(false, null, null, executorService, null, null, null, null); - pluginManager.setOutdated(true); - pluginManager.loadCorePlugins(); - Collection plugins = pluginManager.getPlugins(); - long expected = pluginClasses.stream() - .map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class)) - .filter(Objects::nonNull) - .filter(PluginDescriptor::loadWhenOutdated) - .count(); - assertEquals(expected, plugins.size()); - - pluginManager = new PluginManager(false, null, null, executorService, null, null, null, null); - pluginManager.loadCorePlugins(); - plugins = pluginManager.getPlugins(); - - expected = pluginClasses.stream() - .map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class)) - .filter(Objects::nonNull) - .count(); - assertEquals(expected, plugins.size()); - } - - @Test - public void dumpGraph() throws Exception - { - List modules = new ArrayList<>(); - modules.add(new GraphvizModule()); - modules.add(new RuneLiteModule(mock(OkHttpClient.class), () -> null, false, RuneLite.DEFAULT_CONFIG_FILE)); - - PluginManager pluginManager = new PluginManager(false, null, null, executorService, null, null, null, null); - pluginManager.loadCorePlugins(); - modules.addAll(pluginManager.getPlugins()); - - File file = folder.newFile(); - try (PrintWriter out = new PrintWriter(file, StandardCharsets.UTF_8)) - { - Injector injector = Guice.createInjector(modules); - GraphvizGrapher grapher = injector.getInstance(GraphvizGrapher.class); - grapher.setOut(out); - grapher.setRankdir("TB"); - grapher.graph(injector); - } - } - - @Test - public void ensureNoDuplicateConfigKeyNames() - { - for (final Class clazz : configClasses) - { - final Set configKeyNames = new HashSet<>(); - - for (final Method method : clazz.getMethods()) - { - if (!method.isDefault()) - { - continue; - } - - final ConfigItem annotation = method.getAnnotation(ConfigItem.class); - - if (annotation == null) - { - continue; - } - - final String configKeyName = annotation.keyName(); - - if (configKeyNames.contains(configKeyName)) - { - throw new IllegalArgumentException("keyName " + configKeyName + " is duplicated in " + clazz); - } - - configKeyNames.add(configKeyName); - } - } - } - - @Test - public void testEventbusAnnotations() throws Exception - { - EventBus eventbus = new EventBus(); - PluginManager pluginManager = new PluginManager(false, eventbus, null, executorService, null, null, null, null) - { - @Override - public boolean isPluginEnabled(Plugin plugin) - { - return true; - } - }; - - class TestEvent implements Event - { - } - class TestPlugin extends Plugin - { - private boolean thisShouldBeTrue = false; - - @Subscribe - private void doSomething(TestEvent event) - { - thisShouldBeTrue = true; - } - } - - TestPlugin plugin = new TestPlugin(); - AccessorGenerator.scanSubscribes(MethodHandles.lookup(), plugin) - .forEach(s -> s.subscribe(eventbus, plugin)); - eventbus.post(TestEvent.class, new TestEvent()); - assert plugin.thisShouldBeTrue; - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/ui/ContainableFrameTest.java b/runelite-client/src/test/java/net/runelite/client/ui/ContainableFrameTest.java deleted file mode 100644 index 8ee1b71a80..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/ui/ContainableFrameTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2020, 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.ui; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import org.junit.Test; - -public class ContainableFrameTest -{ - @Test - public void testJdk8231564() - { - assertTrue(ContainableFrame.jdk8231564("11.0.8")); - assertFalse(ContainableFrame.jdk8231564("11.0.7")); - assertFalse(ContainableFrame.jdk8231564("1.8.0_261")); - assertFalse(ContainableFrame.jdk8231564("12.0.0")); - assertFalse(ContainableFrame.jdk8231564("13.0.0")); - assertFalse(ContainableFrame.jdk8231564("14.0.0")); - } -} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java deleted file mode 100644 index 37c53b5f34..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2016-2017, 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.ui.overlay; - -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.util.Arrays; -import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import org.junit.Test; - -public class OverlayManagerTest -{ - static class TestOverlay extends Overlay - { - TestOverlay(OverlayPosition position, OverlayPriority priority) - { - setPosition(position); - setPriority(priority); - } - - @Override - public Dimension render(Graphics2D graphics) - { - throw new UnsupportedOperationException("Not supported yet."); - } - } - - private static class OverlayA extends Overlay - { - @Override - public Dimension render(Graphics2D graphics) - { - return null; - } - } - - private static class OverlayB extends Overlay - { - @Override - public Dimension render(Graphics2D graphics) - { - return null; - } - } - - @Test - public void testEquality() - { - Overlay a1 = new OverlayA(); - Overlay a2 = new OverlayA(); - Overlay b = new OverlayB(); - // The same instance of the same overlay should be equal - assertEquals(a1, a1); - // A different instance of the same overlay should not be equal by default - assertNotEquals(a1, a2); - // A different instance of a different overlay should not be equal - assertNotEquals(a1, b); - } - - @Test - public void testSort() - { - // High priorities overlays render first - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); - Overlay tll = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.LOW); - List overlays = Arrays.asList(tlh, tll); - overlays.sort(OverlayManager.OVERLAY_COMPARATOR); - assertEquals(tlh, overlays.get(0)); - assertEquals(tll, overlays.get(1)); - } - - @Test - public void testSortDynamic() - { - // Dynamic overlays render before static overlays - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); - Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, OverlayPriority.HIGH); - List overlays = Arrays.asList(tlh, dyn); - overlays.sort(OverlayManager.OVERLAY_COMPARATOR); - assertEquals(dyn, overlays.get(0)); - assertEquals(tlh, overlays.get(1)); - } - - @Test - public void testTooltips() - { - // Tooltip overlay renders after everything - Overlay t = new TestOverlay(OverlayPosition.TOOLTIP, OverlayPriority.HIGH); - Overlay dyn = new TestOverlay(OverlayPosition.DYNAMIC, OverlayPriority.HIGH); - Overlay tlh = new TestOverlay(OverlayPosition.TOP_LEFT, OverlayPriority.HIGH); - List overlays = Arrays.asList(t, dyn, tlh); - overlays.sort(OverlayManager.OVERLAY_COMPARATOR); - assertEquals(dyn, overlays.get(0)); - assertEquals(tlh, overlays.get(1)); - assertEquals(t, overlays.get(2)); - } - -} diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TooltipComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TooltipComponentTest.java deleted file mode 100644 index 3248b345f8..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TooltipComponentTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2019, 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.ui.overlay.components; - -import java.awt.FontMetrics; -import static net.runelite.client.ui.overlay.components.TooltipComponent.calculateTextWidth; -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class TooltipComponentTest -{ - @Test - public void testCalculateTextWidth() - { - FontMetrics fontMetics = mock(FontMetrics.class); - when(fontMetics.stringWidth(anyString())).thenAnswer((invocation) -> ((String) invocation.getArguments()[0]).length()); - - assertEquals(11, calculateTextWidth(fontMetics, "line1>line2")); - } -} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java deleted file mode 100644 index a5cb12a8c9..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2018, 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.ui.overlay.components.table; - -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; - - -public class TableComponentTest -{ - @Mock - private Graphics2D graphics; - - private BufferedImage dest; - - @Before - public void before() - { - dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); - graphics = (Graphics2D) dest.getGraphics(); - } - - @Test - public void testRender() - { - TableComponent tableComponent = new TableComponent(); - tableComponent.addRow("test"); - tableComponent.setDefaultAlignment(TableAlignment.CENTER); - tableComponent.setDefaultColor(Color.RED); - tableComponent.render(graphics); - } - - @Test - public void testColors() - { - TableComponent tableComponent = new TableComponent(); - tableComponent.addRow("test", "test", "test", "test", "test"); - tableComponent.setColumns("", "", ""); - List elements = tableComponent.getColumns(); - elements.get(0).setColor(Color.RED); - elements.get(1).setColor(Color.GREEN); - elements.get(2).setColor(Color.BLUE); - tableComponent.render(graphics); - } - - @After - public void after() - { - graphics.dispose(); - dest.flush(); - } - -} diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/infobox/InfoBoxManagerTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/infobox/InfoBoxManagerTest.java deleted file mode 100644 index 7e53107523..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/infobox/InfoBoxManagerTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2020, 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.ui.overlay.infobox; - -import com.google.inject.Guice; -import com.google.inject.testing.fieldbinder.Bind; -import com.google.inject.testing.fieldbinder.BoundFieldModule; -import java.awt.Color; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import javax.inject.Inject; -import net.runelite.api.Client; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.config.OpenOSRSConfig; -import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.plugins.Plugin; -import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class InfoBoxManagerTest -{ - @Inject - private InfoBoxManager infoBoxManager; - - @Mock - @Bind - private RuneLiteConfig runeLiteConfig; - - @Mock - @Bind - private OpenOSRSConfig openOSRSConfig; - - @Mock - @Bind - private ConfigManager configManager; - - @Mock - @Bind - private Client client; - - @Before - public void before() - { - Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); - } - - private static class TestInfobox extends InfoBox - { - private static final Plugin PLUGIN = mock(Plugin.class); - - static - { - when(PLUGIN.getName()).thenReturn(""); - } - - private final String text; - - private TestInfobox(InfoBoxPriority infoBoxPriority) - { - this(infoBoxPriority, null); - } - - private TestInfobox(InfoBoxPriority infoBoxPriority, String text) - { - super(null, PLUGIN); - setPriority(infoBoxPriority); - this.text = text; - } - - @Override - public String getText() - { - return text; - } - - @Override - public Color getTextColor() - { - return null; - } - } - - @Test - public void testSorting() - { - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.LOW)); - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.HIGH)); - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.MED)); - - List order = infoBoxManager.getInfoBoxes().stream().map(InfoBox::getPriority).collect(Collectors.toList()); - assertEquals(Arrays.asList(InfoBoxPriority.HIGH, InfoBoxPriority.MED, InfoBoxPriority.LOW), order); - } - - @Test - public void testSamePluginAndPriority() - { - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.MED, "one")); - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.MED, "two")); - infoBoxManager.addInfoBox(new TestInfobox(InfoBoxPriority.MED, "three")); - - assertEquals(3, infoBoxManager.getInfoBoxes().size()); - assertEquals("one", infoBoxManager.getInfoBoxes().get(0).getText()); - assertEquals("two", infoBoxManager.getInfoBoxes().get(1).getText()); - assertEquals("three", infoBoxManager.getInfoBoxes().get(2).getText()); - } -} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java b/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java deleted file mode 100644 index 7df23f7d87..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2018, 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.util; - -import java.awt.Color; -import java.util.HashMap; -import java.util.Map; -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -public class ColorUtilTest -{ - private static final Map COLOR_HEXSTRING_MAP = new HashMap() - {{ - put(Color.BLACK, "000000"); - put(new Color(0x1), "000001"); - put(new Color(0x100000), "100000"); - put(Color.RED, "ff0000"); - put(Color.GREEN, "00ff00"); - put(Color.BLUE, "0000ff"); - put(new Color(0xA1B2C3), "a1b2c3"); - put(Color.WHITE, "ffffff"); - }}; - - @Test - public void colorTag() - { - COLOR_HEXSTRING_MAP.forEach((color, hex) -> - assertEquals("", ColorUtil.colorTag(color))); - } - - @Test - public void prependColorTag() - { - COLOR_HEXSTRING_MAP.forEach((color, hex) -> - { - assertEquals("test", ColorUtil.prependColorTag("test", color)); - assertEquals("", ColorUtil.prependColorTag("", color)); - }); - - assertEquals("94/99", ColorUtil.prependColorTag("94" + ColorUtil.prependColorTag("/99", Color.WHITE), Color.RED)); - } - - @Test - public void wrapWithColorTag() - { - COLOR_HEXSTRING_MAP.forEach((color, hex) -> - { - assertEquals("test", ColorUtil.wrapWithColorTag("test", color)); - assertEquals("", ColorUtil.wrapWithColorTag("", color)); - }); - } - - @Test - public void toHexColor() - { - COLOR_HEXSTRING_MAP.forEach((color, hex) -> - assertEquals("#" + hex, ColorUtil.toHexColor(color))); - } - - @Test - public void colorLerp() - { - assertEquals(Color.WHITE, ColorUtil.colorLerp(Color.WHITE, Color.WHITE, 0.9)); - assertEquals(new Color(128, 128, 128), ColorUtil.colorLerp(Color.BLACK, Color.WHITE, 0.5)); - assertEquals(Color.BLACK, ColorUtil.colorLerp(Color.BLACK, Color.CYAN, 0)); - assertEquals(Color.CYAN, ColorUtil.colorLerp(Color.BLACK, Color.CYAN, 1)); - } - - @Test - public void colorToHexCode() - { - COLOR_HEXSTRING_MAP.forEach((color, hex) -> - assertEquals(hex, ColorUtil.colorToHexCode(color))); - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java b/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java deleted file mode 100644 index 9357217bac..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Copyright (c) 2018, 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.util; - -import java.awt.Color; -import static java.awt.Color.BLACK; -import static java.awt.Color.BLUE; -import static java.awt.Color.GRAY; -import static java.awt.Color.GREEN; -import static java.awt.Color.RED; -import static java.awt.Color.WHITE; -import java.awt.image.BufferedImage; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferInt; -import java.util.Arrays; -import javax.annotation.Nonnull; -import org.apache.commons.lang3.ArrayUtils; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import org.junit.Test; - -public class ImageUtilTest -{ - private static final Color BLACK_HALF_TRANSPARENT = new Color(0, 0, 0, 128); - private static final Color BLACK_TRANSPARENT = new Color(0, true); - private static final int CORNER_SIZE = 2; - private static final int CENTERED_SIZE = 3; - - private static final BufferedImage BLACK_PIXEL_TOP_LEFT; - private static final BufferedImage BLACK_PIXEL_TOP_RIGHT; - private static final BufferedImage BLACK_PIXEL_BOTTOM_LEFT; - private static final BufferedImage BLACK_PIXEL_BOTTOM_RIGHT; - - static - { - BLACK_PIXEL_TOP_LEFT = new BufferedImage(CORNER_SIZE, CORNER_SIZE, BufferedImage.TYPE_INT_ARGB); - BLACK_PIXEL_TOP_LEFT.setRGB(0, 0, BLACK.getRGB()); - - BLACK_PIXEL_TOP_RIGHT = new BufferedImage(CORNER_SIZE, CORNER_SIZE, BufferedImage.TYPE_INT_ARGB); - BLACK_PIXEL_TOP_RIGHT.setRGB(1, 0, BLACK.getRGB()); - - BLACK_PIXEL_BOTTOM_LEFT = new BufferedImage(CORNER_SIZE, CORNER_SIZE, BufferedImage.TYPE_INT_ARGB); - BLACK_PIXEL_BOTTOM_LEFT.setRGB(0, 1, BLACK.getRGB()); - - BLACK_PIXEL_BOTTOM_RIGHT = new BufferedImage(CORNER_SIZE, CORNER_SIZE, BufferedImage.TYPE_INT_ARGB); - BLACK_PIXEL_BOTTOM_RIGHT.setRGB(1, 1, BLACK.getRGB()); - } - - @Test - public void bufferedImageFromImage() - { - final BufferedImage buffered = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); - assertEquals(buffered, ImageUtil.bufferedImageFromImage(buffered)); - } - - @Test - public void grayscaleOffset() - { - // grayscaleOffset(BufferedImage image, int offset) - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceOffset(oneByOne(BLACK), -255))); - assertTrue(bufferedImagesEqual(oneByOne(new Color(50, 50, 50)), ImageUtil.luminanceOffset(oneByOne(BLACK), 50))); - assertTrue(bufferedImagesEqual(oneByOne(GRAY), ImageUtil.luminanceOffset(oneByOne(BLACK), 128))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceOffset(oneByOne(GRAY), -255))); - assertTrue(bufferedImagesEqual(oneByOne(WHITE), ImageUtil.luminanceOffset(oneByOne(BLACK), 255))); - assertTrue(bufferedImagesEqual(oneByOne(new Color(200, 200, 200)), ImageUtil.luminanceOffset(oneByOne(WHITE), -55))); - assertTrue(bufferedImagesEqual(oneByOne(WHITE), ImageUtil.luminanceOffset(oneByOne(WHITE), 55))); - - // grayscaleOffset(BufferedImage image, float percentage) - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceScale(oneByOne(BLACK), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceScale(oneByOne(BLACK), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceScale(oneByOne(BLACK), 2f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceScale(oneByOne(GRAY), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(GRAY), ImageUtil.luminanceScale(oneByOne(GRAY), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(WHITE), ImageUtil.luminanceScale(oneByOne(GRAY), 2f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.luminanceScale(oneByOne(WHITE), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(GRAY), ImageUtil.luminanceScale(oneByOne(WHITE), 0.503f))); // grayscaleOffset does Math.floor - assertTrue(bufferedImagesEqual(oneByOne(WHITE), ImageUtil.luminanceScale(oneByOne(WHITE), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(WHITE), ImageUtil.luminanceScale(oneByOne(WHITE), 2f))); - } - - @Test - public void alphaOffset() - { - // alphaOffset(BufferedImage image, int offset) - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), -255))); - assertTrue(bufferedImagesEqual(oneByOne(new Color(0, 0, 0, 50)), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 50))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_HALF_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 128))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_HALF_TRANSPARENT), -255))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 255))); - assertTrue(bufferedImagesEqual(oneByOne(new Color(0, 0, 0, 200)), ImageUtil.alphaOffset(oneByOne(BLACK), -55))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.alphaOffset(oneByOne(BLACK), 255))); - - // alphaOffset(BufferedImage image, float offset) - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_TRANSPARENT), 2f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_HALF_TRANSPARENT), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_HALF_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK_HALF_TRANSPARENT), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.alphaOffset(oneByOne(BLACK_HALF_TRANSPARENT), 2f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK), 0f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_HALF_TRANSPARENT), ImageUtil.alphaOffset(oneByOne(BLACK), 0.503f))); // opacityOffset does Math.floor - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.alphaOffset(oneByOne(BLACK), 1f))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.alphaOffset(oneByOne(BLACK), 2f))); - } - - @Test - public void grayscaleImage() - { - final BufferedImage[] grayscaleColors = new BufferedImage[]{ - oneByOne(WHITE), - oneByOne(GRAY), - oneByOne(BLACK), - oneByOne(BLACK_HALF_TRANSPARENT), - oneByOne(BLACK_TRANSPARENT), - }; - final BufferedImage[] nonGrayscaleColors = new BufferedImage[]{ - oneByOne(RED), - oneByOne(GREEN), - oneByOne(BLUE), - }; - - for (BufferedImage image : grayscaleColors) - { - assertTrue(isGrayscale(image)); - } - for (BufferedImage image : nonGrayscaleColors) - { - assertFalse(isGrayscale(image)); - } - for (BufferedImage image : ArrayUtils.addAll(grayscaleColors, nonGrayscaleColors)) - { - assertTrue(isGrayscale(ImageUtil.grayscaleImage(image))); - } - } - - @Test - public void resizeImage() - { - // TODO: test image contents after changing size - - final BufferedImage larger = ImageUtil.resizeImage(oneByOne(BLACK), 46, 46); - final BufferedImage smaller = ImageUtil.resizeImage(centeredPixel(WHITE), 1, 1); - final BufferedImage stretched = ImageUtil.resizeImage(solidColor(30, 30, RED), 12, 34); - - assertEquals(46, larger.getWidth()); - assertEquals(46, larger.getHeight()); - assertEquals(1, smaller.getWidth()); - assertEquals(1, smaller.getHeight()); - assertEquals(12, stretched.getWidth()); - assertEquals(34, stretched.getHeight()); - - final BufferedImage[] assertSameAfterResize = new BufferedImage[]{ - oneByOne(WHITE), - oneByOne(GRAY), - oneByOne(BLACK), - oneByOne(RED), - oneByOne(GREEN), - oneByOne(BLUE), - oneByOne(BLACK_HALF_TRANSPARENT), - oneByOne(BLACK_TRANSPARENT), - centeredPixel(WHITE), - centeredPixel(GRAY), - centeredPixel(BLACK), - BLACK_PIXEL_TOP_LEFT, - BLACK_PIXEL_TOP_RIGHT, - BLACK_PIXEL_BOTTOM_LEFT, - BLACK_PIXEL_BOTTOM_RIGHT, - }; - for (BufferedImage image : assertSameAfterResize) - { - assertTrue(bufferedImagesEqual(image, ImageUtil.resizeImage(image, image.getWidth(), image.getHeight()))); - } - } - - @Test - public void resizeCanvas() - { - assertTrue(bufferedImagesEqual(centeredPixel(BLACK), ImageUtil.resizeCanvas(oneByOne(BLACK), 3, 3))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.resizeCanvas(oneByOne(BLACK), 1, 1))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK), ImageUtil.resizeCanvas(centeredPixel(BLACK), 1, 1))); - - BufferedImage expected = new BufferedImage(2, 1, BufferedImage.TYPE_INT_ARGB); - expected.setRGB(1, 0, BLACK.getRGB()); - assertTrue(bufferedImagesEqual(expected, ImageUtil.resizeCanvas(oneByOne(BLACK), 2, 1))); - - expected = new BufferedImage(1, 2, BufferedImage.TYPE_INT_ARGB); - expected.setRGB(0, 1, BLACK.getRGB()); - assertTrue(bufferedImagesEqual(expected, ImageUtil.resizeCanvas(oneByOne(BLACK), 1, 2))); - } - - @Test - public void rotateImage() - { - // TODO: Test more than 90° rotations - - // Evenly-sized images (2x2) - assertTrue(bufferedImagesEqual(BLACK_PIXEL_TOP_RIGHT, ImageUtil.rotateImage(BLACK_PIXEL_TOP_LEFT, Math.PI / 2))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_BOTTOM_RIGHT, ImageUtil.rotateImage(BLACK_PIXEL_TOP_LEFT, Math.PI))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_BOTTOM_LEFT, ImageUtil.rotateImage(BLACK_PIXEL_TOP_LEFT, Math.PI * 3 / 2))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_TOP_LEFT, ImageUtil.rotateImage(BLACK_PIXEL_TOP_LEFT, Math.PI * 2))); - - // Unevenly-sized images (2x1); when rotated 90° become (2x2) images - final BufferedImage twoByOneLeft = new BufferedImage(2, 1, BufferedImage.TYPE_INT_ARGB); - twoByOneLeft.setRGB(0, 0, BLACK.getRGB()); - final BufferedImage twoByTwoRight = new BufferedImage(2, 1, BufferedImage.TYPE_INT_ARGB); - twoByTwoRight.setRGB(1, 0, BLACK.getRGB()); - final BufferedImage oneByTwoTop = new BufferedImage(2, 2, BufferedImage.TYPE_INT_ARGB); - oneByTwoTop.setRGB(1, 0, new Color(0, 0, 0, 127).getRGB()); - final BufferedImage oneByTwoBottom = new BufferedImage(2, 2, BufferedImage.TYPE_INT_ARGB); - oneByTwoBottom.setRGB(0, 0, new Color(0, 0, 0, 127).getRGB()); - oneByTwoBottom.setRGB(0, 1, BLACK.getRGB()); - - assertTrue(bufferedImagesEqual(oneByTwoTop, ImageUtil.rotateImage(twoByOneLeft, Math.PI / 2))); - assertTrue(bufferedImagesEqual(twoByTwoRight, ImageUtil.rotateImage(twoByOneLeft, Math.PI))); - assertTrue(bufferedImagesEqual(oneByTwoBottom, ImageUtil.rotateImage(twoByOneLeft, Math.PI * 3 / 2))); - assertTrue(bufferedImagesEqual(twoByOneLeft, ImageUtil.rotateImage(twoByOneLeft, Math.PI * 2))); - } - - @Test - public void flipImage() - { - assertTrue(bufferedImagesEqual(BLACK_PIXEL_TOP_LEFT, ImageUtil.flipImage(BLACK_PIXEL_TOP_LEFT, false, false))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_TOP_RIGHT, ImageUtil.flipImage(BLACK_PIXEL_TOP_LEFT, true, false))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_BOTTOM_LEFT, ImageUtil.flipImage(BLACK_PIXEL_TOP_LEFT, false, true))); - assertTrue(bufferedImagesEqual(BLACK_PIXEL_BOTTOM_RIGHT, ImageUtil.flipImage(BLACK_PIXEL_TOP_LEFT, true, true))); - } - - @Test - public void fillImage() - { - // fillImage(BufferedImage image, Color color) - assertTrue(bufferedImagesEqual(centeredPixel(GRAY), ImageUtil.fillImage(centeredPixel(BLACK), GRAY))); - assertTrue(bufferedImagesEqual(solidColor(3, 3, GREEN), ImageUtil.fillImage(solidColor(3, 3, BLACK), GREEN))); - assertTrue(bufferedImagesEqual(oneByOne(BLACK_TRANSPARENT), ImageUtil.fillImage(oneByOne(BLACK_TRANSPARENT), WHITE))); - } - - @Test - public void outlineImage() - { - // outlineImage(BufferedImage image, Color color) - BufferedImage expected = new BufferedImage(CENTERED_SIZE, CENTERED_SIZE, BufferedImage.TYPE_INT_ARGB); - for (int x = 0; x < expected.getWidth(); x++) - { - for (int y = 0; y < expected.getHeight(); y++) - { - if (x != 1 && y != 1) - { - continue; - } - expected.setRGB(x, y, BLACK.getRGB()); - } - } - assertTrue(bufferedImagesEqual(expected, ImageUtil.outlineImage(centeredPixel(BLACK), BLACK))); - expected.setRGB(1, 1, WHITE.getRGB()); - assertTrue(bufferedImagesEqual(expected, ImageUtil.outlineImage(centeredPixel(WHITE), BLACK))); - expected = solidColor(CORNER_SIZE, CORNER_SIZE, WHITE); - expected.setRGB(0, 0, BLACK.getRGB()); - expected.setRGB(1, 1, new Color(0, true).getRGB()); - assertTrue(bufferedImagesEqual(expected, ImageUtil.outlineImage(BLACK_PIXEL_TOP_LEFT, WHITE))); - - // outlineImage(BufferedImage image, Color color, Boolean outlineCorners) - expected = solidColor(CORNER_SIZE, CORNER_SIZE, WHITE); - expected.setRGB(0, 0, BLACK.getRGB()); - assertTrue(bufferedImagesEqual(expected, ImageUtil.outlineImage(BLACK_PIXEL_TOP_LEFT, WHITE, true))); - assertTrue(bufferedImagesEqual(solidColor(3, 3, BLACK), ImageUtil.outlineImage(centeredPixel(BLACK), BLACK, true))); - } - - /** - * Compares whether two {@link BufferedImage}s are equal in data. - * - * @param expected The first {@link BufferedImage} to be compared. - * @param actual The second {@link BufferedImage} to be compared. - * @return A boolean indicating whether the given {@link BufferedImage}s are of the same image data. - */ - private boolean bufferedImagesEqual(final @Nonnull BufferedImage expected, final @Nonnull BufferedImage actual) - { - if (expected.getWidth() != actual.getWidth()) - { - return false; - } - - if (!expected.getColorModel().equals(actual.getColorModel())) - { - return false; - } - - final DataBuffer aBuffer = expected.getRaster().getDataBuffer(); - final DataBuffer bBuffer = actual.getRaster().getDataBuffer(); - final DataBufferInt aBufferInt = (DataBufferInt) aBuffer; - final DataBufferInt bBufferInt = (DataBufferInt) bBuffer; - - if (aBufferInt.getNumBanks() != bBufferInt.getNumBanks()) - { - return false; - } - - for (int i = 0; i < aBufferInt.getNumBanks(); i++) - { - final int[] aDataBank = aBufferInt.getData(i); - final int[] bDataBank = bBufferInt.getData(i); - if (!Arrays.equals(aDataBank, bDataBank)) - { - return false; - } - } - - return true; - } - - /** - * Returns whether a {@link BufferedImage} contains only grayscale pixel data. - * - * @param image The image to be checked. - * @return A boolean indicating whether all of the given image's pixels are grayscale. - */ - private boolean isGrayscale(final @Nonnull BufferedImage image) - { - for (int x = 0; x < image.getWidth(); x++) - { - for (int y = 0; y < image.getHeight(); y++) - { - final int color = image.getRGB(x, y); - final int red = (color & 0xff0000) >> 16; - final int green = (color & 0xff00) >> 8; - final int blue = color & 0xff; - if (red != green - || green != blue) - { - return false; - } - } - } - return true; - } - - /** - * Creates a {@link BufferedImage} of a 1-by-1px image of the given color. - * - * @param color The color to use for the image's single pixel. - * @return A {@link BufferedImage} containing a single pixel of the given color. - */ - private BufferedImage oneByOne(final @Nonnull Color color) - { - return solidColor(1, 1, color); - } - - /** - * Creates a {@link BufferedImage} of a single pixel of the given color centered in a 3-by-3px - * image. - * - * @param color The color to use for the centered pixel. - * @return A {@link BufferedImage} with completely transparent pixels and one pixel of the - * given color in the center. - */ - private BufferedImage centeredPixel(final @Nonnull Color color) - { - final BufferedImage out = new BufferedImage(CENTERED_SIZE, CENTERED_SIZE, BufferedImage.TYPE_INT_ARGB); - out.setRGB(1, 1, color.getRGB()); - return out; - } - - /** - * Creates a {@link BufferedImage} of a solid color of given width and height. - * - * @param width The desired width of the color image. - * @param height The desired height of the color image. - * @param color The desired color of the image. - * @return A {@link BufferedImage} of given dimensions filled with the given color. - */ - private BufferedImage solidColor(final int width, final int height, final @Nonnull Color color) - { - final BufferedImage out = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); - for (int x = 0; x < width; x++) - { - for (int y = 0; y < height; y++) - { - out.setRGB(x, y, color.getRGB()); - } - } - return out; - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/util/ItemUtilTest.java b/runelite-client/src/test/java/net/runelite/client/util/ItemUtilTest.java deleted file mode 100644 index 38f316e4af..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/util/ItemUtilTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2018, TheStonedTurtle - * 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.util; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import net.runelite.api.Item; -import net.runelite.api.ItemID; -import net.runelite.http.api.loottracker.GameItem; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import org.junit.Test; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ItemUtilTest -{ - private static final Set SOME_IDS = Set.of(ItemID.MITHRIL_BAR, ItemID.DRAGON_BONES); - private static final Set WRONG_IDS = Set.of(ItemID.SCYTHE_OF_VITUR, ItemID.TWISTED_BOW); - private static final Set MIX_IDS = Set.of( - ItemID.MITHRIL_BAR, ItemID.DRAGON_BONES, - ItemID.SCYTHE_OF_VITUR, ItemID.TWISTED_BOW - ); - - private static final Map SOME_MAP = new HashMap<>(); - private static final Map ALL_MAP = new HashMap<>(); - - private static final Item[] items = new Item[6]; - - static - { - SOME_MAP.put(ItemID.MITHRIL_BAR, new GameItem(ItemID.MITHRIL_BAR, 6)); - SOME_MAP.put(ItemID.DRAGON_BONES, new GameItem(ItemID.DRAGON_BONES, 2)); - - ALL_MAP.putAll(SOME_MAP); - ALL_MAP.put(ItemID.COINS_995, new GameItem(ItemID.COINS_995, 1000)); - ALL_MAP.put(ItemID.CHEWED_BONES, new GameItem(ItemID.CHEWED_BONES, 1)); - - items[0] = createItem(ItemID.MITHRIL_BAR, 3); - items[1] = createItem(ItemID.DRAGON_BONES, 1); - items[2] = createItem(ItemID.COINS_995, 1000); - - items[3] = createItem(ItemID.MITHRIL_BAR, 3); - items[4] = createItem(ItemID.DRAGON_BONES, 1); - items[5] = createItem(ItemID.CHEWED_BONES, 1); - } - - private static Item createItem(int id, int qty) - { - Item i = mock(Item.class); - when(i.getId()) - .thenReturn(id); - when(i.getQuantity()) - .thenReturn(qty); - - return i; - } - - @Test - public void toGameItemMap() - { - Map itemMap = ItemUtil.toGameItemMap(items, SOME_IDS); - assertEquals(SOME_MAP, itemMap); - assertNotEquals(ALL_MAP, itemMap); - - Map itemMap2 = ItemUtil.toGameItemMap(items); - assertNotEquals(SOME_MAP, itemMap2); - assertEquals(ALL_MAP, itemMap2); - } - - @Test - public void containsAllItemIds() - { - assertTrue(ItemUtil.containsAllItemIds(items, SOME_IDS)); - assertFalse(ItemUtil.containsAllItemIds(items, WRONG_IDS)); - assertFalse(ItemUtil.containsAllItemIds(items, MIX_IDS)); - } - - @Test - public void containsAnyItemId() - { - assertTrue(ItemUtil.containsAnyItemId(items, SOME_IDS)); - assertFalse(ItemUtil.containsAnyItemId(items, WRONG_IDS)); - assertTrue(ItemUtil.containsAnyItemId(items, MIX_IDS)); - } - - @Test - public void containsItemId() - { - assertTrue(ItemUtil.containsItemId(items, ItemID.COINS_995)); - assertFalse(ItemUtil.containsItemId(items, ItemID.TWISTED_BOW)); - } - - @Test - public void containsAllGameItems() - { - assertTrue(ItemUtil.containsAllGameItems(items, SOME_MAP.values())); - assertTrue(ItemUtil.containsAllGameItems(items, ALL_MAP.values())); - - Collection wrongItems = new ArrayList<>(SOME_MAP.values()); - wrongItems.add(new GameItem(ItemID.TWISTED_BOW, 1)); - assertFalse(ItemUtil.containsAllGameItems(items, wrongItems)); - - assertFalse(ItemUtil.containsAllGameItems(items, new GameItem(ItemID.MITHRIL_BAR, 7))); - assertTrue(ItemUtil.containsAllGameItems(items, new GameItem(ItemID.MITHRIL_BAR, 6))); - assertTrue(ItemUtil.containsAllGameItems(items, new GameItem(ItemID.MITHRIL_BAR, 5))); - assertFalse(ItemUtil.containsAllGameItems(items, new GameItem(ItemID.MITHRIL_BAR, 5), new GameItem(ItemID.TWISTED_BOW, 1))); - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java b/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java deleted file mode 100644 index 27ee40c41e..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/util/QuantityFormatterTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2018, arlyon - * 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.util; - -import java.text.ParseException; -import java.util.Locale; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import org.junit.Before; -import org.junit.Test; - -public class QuantityFormatterTest -{ - @Before - public void setUp() - { - Locale.setDefault(Locale.ENGLISH); - } - - @Test - public void quantityToRSDecimalStackSize() - { - assertEquals("0", QuantityFormatter.quantityToRSDecimalStack(0)); - assertEquals("8500", QuantityFormatter.quantityToRSDecimalStack(8_500)); - assertEquals("10K", QuantityFormatter.quantityToRSDecimalStack(10_000)); - assertEquals("21.7K", QuantityFormatter.quantityToRSDecimalStack(21_700)); - assertEquals("100K", QuantityFormatter.quantityToRSDecimalStack(100_000)); - assertEquals("100.3K", QuantityFormatter.quantityToRSDecimalStack(100_300)); - assertEquals("1M", QuantityFormatter.quantityToRSDecimalStack(1_000_000)); - assertEquals("8.4M", QuantityFormatter.quantityToRSDecimalStack(8_450_000)); - assertEquals("10M", QuantityFormatter.quantityToRSDecimalStack(10_000_000)); - assertEquals("12.8M", QuantityFormatter.quantityToRSDecimalStack(12_800_000)); - assertEquals("100M", QuantityFormatter.quantityToRSDecimalStack(100_000_000)); - assertEquals("250.1M", QuantityFormatter.quantityToRSDecimalStack(250_100_000)); - assertEquals("1B", QuantityFormatter.quantityToRSDecimalStack(1_000_000_000)); - assertEquals("1.5B", QuantityFormatter.quantityToRSDecimalStack(1500_000_000)); - assertEquals("2.1B", QuantityFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE)); - } - - @Test - public void quantityToStackSize() - { - assertEquals("0", QuantityFormatter.quantityToStackSize(0)); - assertEquals("999", QuantityFormatter.quantityToStackSize(999)); - assertEquals("1,000", QuantityFormatter.quantityToStackSize(1000)); - assertEquals("9,450", QuantityFormatter.quantityToStackSize(9450)); - assertEquals("14.5K", QuantityFormatter.quantityToStackSize(14_500)); - assertEquals("99.9K", QuantityFormatter.quantityToStackSize(99_920)); - assertEquals("100K", QuantityFormatter.quantityToStackSize(100_000)); - assertEquals("10M", QuantityFormatter.quantityToStackSize(10_000_000)); - assertEquals("2.14B", QuantityFormatter.quantityToStackSize(Integer.MAX_VALUE)); - assertEquals("100B", QuantityFormatter.quantityToStackSize(100_000_000_000L)); - - assertEquals("0", QuantityFormatter.quantityToStackSize(-0)); - assertEquals("-400", QuantityFormatter.quantityToStackSize(-400)); - assertEquals("-400K", QuantityFormatter.quantityToStackSize(-400_000)); - assertEquals("-40M", QuantityFormatter.quantityToStackSize(-40_000_000)); - assertEquals("-2.14B", QuantityFormatter.quantityToStackSize(Integer.MIN_VALUE)); - assertEquals("-400B", QuantityFormatter.quantityToStackSize(-400_000_000_000L)); - } - - @Test - public void quantityToPreciseStackSize() - { - assertEquals("0", QuantityFormatter.quantityToRSDecimalStack(0)); - assertEquals("8500", QuantityFormatter.quantityToRSDecimalStack(8_500, true)); - assertEquals("10K", QuantityFormatter.quantityToRSDecimalStack(10_000, true)); - assertEquals("21.7K", QuantityFormatter.quantityToRSDecimalStack(21_710, true)); - assertEquals("100K", QuantityFormatter.quantityToRSDecimalStack(100_000, true)); - assertEquals("100.3K", QuantityFormatter.quantityToRSDecimalStack(100_310, true)); - assertEquals("1M", QuantityFormatter.quantityToRSDecimalStack(1_000_000, true)); - assertEquals("8.45M", QuantityFormatter.quantityToRSDecimalStack(8_450_000, true)); - assertEquals("8.451M", QuantityFormatter.quantityToRSDecimalStack(8_451_000, true)); - assertEquals("10M", QuantityFormatter.quantityToRSDecimalStack(10_000_000, true)); - assertEquals("12.8M", QuantityFormatter.quantityToRSDecimalStack(12_800_000, true)); - assertEquals("12.85M", QuantityFormatter.quantityToRSDecimalStack(12_850_000, true)); - assertEquals("12.851M", QuantityFormatter.quantityToRSDecimalStack(12_851_000, true)); - assertEquals("100M", QuantityFormatter.quantityToRSDecimalStack(100_000_000, true)); - assertEquals("250.1M", QuantityFormatter.quantityToRSDecimalStack(250_100_000, true)); - assertEquals("250.151M", QuantityFormatter.quantityToRSDecimalStack(250_151_000, true)); - assertEquals("1B", QuantityFormatter.quantityToRSDecimalStack(1_000_000_000, true)); - assertEquals("1.5B", QuantityFormatter.quantityToRSDecimalStack(1500_000_000, true)); - assertEquals("1.55B", QuantityFormatter.quantityToRSDecimalStack(1550_000_000, true)); - assertEquals("2.147B", QuantityFormatter.quantityToRSDecimalStack(Integer.MAX_VALUE, true)); - } - - @Test - public void stackSizeToQuantity() throws ParseException - { - assertEquals(0, QuantityFormatter.parseQuantity("0")); - assertEquals(907, QuantityFormatter.parseQuantity("907")); - assertEquals(1200, QuantityFormatter.parseQuantity("1200")); - assertEquals(10_500, QuantityFormatter.parseQuantity("10,500")); - assertEquals(10_500, QuantityFormatter.parseQuantity("10.5K")); - assertEquals(33_560_000, QuantityFormatter.parseQuantity("33.56M")); - assertEquals(2_000_000_000, QuantityFormatter.parseQuantity("2B")); - - assertEquals(0, QuantityFormatter.parseQuantity("-0")); - assertEquals(-400, QuantityFormatter.parseQuantity("-400")); - assertEquals(-400_000, QuantityFormatter.parseQuantity("-400k")); - assertEquals(-40_543_000, QuantityFormatter.parseQuantity("-40.543M")); - - try - { - QuantityFormatter.parseQuantity("0L"); - fail("Should have thrown an exception for invalid suffix."); - } - catch (ParseException ignore) - { - } - - try - { - QuantityFormatter.parseQuantity("badstack"); - fail("Should have thrown an exception for improperly formatted stack."); - } - catch (ParseException ignore) - { - } - } -} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java index 9302bacd3c..72712b78b4 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -190,7 +190,7 @@ public abstract class EntityHiderMixin implements RSScene if (hidePets) { - if (npc.getDefinition().isFollower()) + if (npc.getComposition().isFollower()) { return false; } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java index f8520fbc6f..7380542657 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java @@ -96,7 +96,7 @@ public abstract class LoginScreenMixin implements RSClient if (loginscreen != null && loginscreen.getWidth() > 383) { - client.setRightTitleSprite(client.createSprite(new int[]{loginscreen.getPixels()[383]}, 1, 1)); + client.setRightTitleSprite(client.createSpritePixels(new int[]{loginscreen.getPixels()[383]}, 1, 1)); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java index 08919de99a..f78cbb4af4 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java @@ -184,12 +184,12 @@ public abstract class MenuMixin implements RSClient public void setLeftClickMenuEntry(final MenuEntry entry) { final int i = getMenuOptionCount() - 1; - getMenuOptions()[i] = entry.getOption(); - getMenuTargets()[i] = entry.getTarget(); - getMenuIdentifiers()[i] = entry.getIdentifier(); + getMenuOptions()[i] = entry.getMenuOption(); + getMenuTargets()[i] = entry.getMenuTarget(); + getMenuIdentifiers()[i] = entry.getType(); getMenuOpcodes()[i] = entry.getOpcode(); - getMenuArguments1()[i] = entry.getParam0(); - getMenuArguments2()[i] = entry.getParam1(); + getMenuArguments1()[i] = entry.getActionParam0(); + getMenuArguments2()[i] = entry.getWidgetId(); getMenuForceLeftClick()[i] = entry.isForceLeftClick(); } @@ -199,7 +199,7 @@ public abstract class MenuMixin implements RSClient { if (tempMenuAction != null) { - client.getCallbacks().post(WidgetPressed.class, WidgetPressed.INSTANCE); + client.getCallbacks().post(WidgetPressed.INSTANCE); } } @@ -212,10 +212,10 @@ public abstract class MenuMixin implements RSClient return; } - tempMenuAction.setOption(entry.getOption()); + tempMenuAction.setOption(entry.getMenuOption()); tempMenuAction.setOpcode(entry.getOpcode()); - tempMenuAction.setIdentifier(entry.getIdentifier()); - tempMenuAction.setParam0(entry.getParam0()); - tempMenuAction.setParam1(entry.getParam1()); + tempMenuAction.setIdentifier(entry.getType()); + tempMenuAction.setParam0(entry.getActionParam0()); + tempMenuAction.setParam1(entry.getWidgetId()); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MinimapMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MinimapMixin.java index 9337dc572f..1aab9836f8 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/MinimapMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MinimapMixin.java @@ -38,7 +38,7 @@ public abstract class MinimapMixin implements RSClient @Override public RSSpritePixels drawInstanceMap(int z) { - RSSpritePixels ourSprite = createSprite(new int[512 * 512], 512, 512); + RSSpritePixels ourSprite = createSpritePixels(new int[512 * 512], 512, 512); RSSpritePixels theirSprite = getMinimapSprite(); RSScene scene = getScene(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java index 177a9a7908..41deebfbfc 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -190,7 +190,7 @@ public abstract class RSActorMixin implements RSActor { AnimationChanged animationChange = new AnimationChanged(); animationChange.setActor(this); - client.getCallbacks().post(AnimationChanged.class, animationChange); + client.getCallbacks().post(animationChange); } @FieldHook("spotAnimation") @@ -199,7 +199,7 @@ public abstract class RSActorMixin implements RSActor { SpotAnimationChanged spotAnimationChanged = new SpotAnimationChanged(); spotAnimationChanged.setActor(this); - client.getCallbacks().post(SpotAnimationChanged.class, spotAnimationChanged); + client.getCallbacks().post(spotAnimationChanged); } @FieldHook("targetIndex") @@ -207,7 +207,7 @@ public abstract class RSActorMixin implements RSActor public void interactingChanged(int idx) { InteractingChanged interactingChanged = new InteractingChanged(this, getInteracting()); - client.getCallbacks().post(InteractingChanged.class, interactingChanged); + client.getCallbacks().post(interactingChanged); } @FieldHook("overheadText") @@ -218,7 +218,7 @@ public abstract class RSActorMixin implements RSActor if (overheadText != null) { OverheadTextChanged overheadTextChanged = new OverheadTextChanged(this, overheadText); - client.getCallbacks().post(OverheadTextChanged.class, overheadTextChanged); + client.getCallbacks().post(overheadTextChanged); } } @@ -229,7 +229,7 @@ public abstract class RSActorMixin implements RSActor int size = 1; if (this instanceof NPC) { - NPCComposition composition = ((NPC)this).getDefinition(); + NPCComposition composition = ((NPC)this).getComposition(); if (composition != null && composition.getConfigs() != null) { composition = composition.transform(); @@ -264,7 +264,7 @@ public abstract class RSActorMixin implements RSActor if (healthRatio == 0) { final ActorDeath event = new ActorDeath(this); - client.getCallbacks().post(ActorDeath.class, event); + client.getCallbacks().post(event); this.setDead(true); } @@ -290,6 +290,6 @@ public abstract class RSActorMixin implements RSActor final HitsplatApplied event = new HitsplatApplied(); event.setActor(this); event.setHitsplat(hitsplat); - client.getCallbacks().post(HitsplatApplied.class, event); + client.getCallbacks().post(event); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClanChatMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClanChatMixin.java index 5cbcbaec37..27002f18cb 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClanChatMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClanChatMixin.java @@ -28,7 +28,7 @@ public abstract class RSClanChatMixin implements RSClanChat } FriendsChatMemberJoined event = new FriendsChatMemberJoined(member); - client.getCallbacks().postDeferred(FriendsChatMemberJoined.class, event); + client.getCallbacks().postDeferred(event); } @Inject @@ -42,6 +42,6 @@ public abstract class RSClanChatMixin implements RSClanChat } FriendsChatMemberLeft event = new FriendsChatMemberLeft(member); - client.getCallbacks().postDeferred(FriendsChatMemberLeft.class, event); + client.getCallbacks().postDeferred(event); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 961bad7268..6c264006f0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -750,12 +750,12 @@ public abstract class RSClientMixin implements RSClient for (int i = 0; i < count; ++i) { MenuEntry entry = entries[i] = new MenuEntry(); - entry.setOption(menuOptions[i]); - entry.setTarget(menuTargets[i]); - entry.setIdentifier(menuIdentifiers[i]); + entry.setMenuOption(menuOptions[i]); + entry.setMenuTarget(menuTargets[i]); + entry.setType(menuIdentifiers[i]); entry.setOpcode(menuTypes[i]); - entry.setParam0(params0[i]); - entry.setParam1(params1[i]); + entry.setActionParam0(params0[i]); + entry.setWidgetId(params1[i]); entry.setForceLeftClick(leftClick[i]); } return entries; @@ -781,12 +781,12 @@ public abstract class RSClientMixin implements RSClient continue; } - menuOptions[count] = entry.getOption(); - menuTargets[count] = entry.getTarget(); - menuIdentifiers[count] = entry.getIdentifier(); + menuOptions[count] = entry.getMenuOption(); + menuTargets[count] = entry.getMenuTarget(); + menuIdentifiers[count] = entry.getType(); menuTypes[count] = entry.getOpcode(); - params0[count] = entry.getParam0(); - params1[count] = entry.getParam1(); + params0[count] = entry.getActionParam0(); + params1[count] = entry.getWidgetId(); leftClick[count] = entry.isForceLeftClick(); ++count; } @@ -824,16 +824,16 @@ public abstract class RSClientMixin implements RSClient forceLeftClick[oldCount] ); - client.getCallbacks().post(MenuEntryAdded.class, event); + client.getCallbacks().post(event); if (event.isModified() && client.getMenuOptionCount() == newCount) { - options[oldCount] = event.getOption(); - targets[oldCount] = event.getTarget(); - identifiers[oldCount] = event.getIdentifier(); + options[oldCount] = event.getMenuOption(); + targets[oldCount] = event.getMenuTarget(); + identifiers[oldCount] = event.getType(); opcodes[oldCount] = event.getOpcode(); - arguments1[oldCount] = event.getParam0(); - arguments2[oldCount] = event.getParam1(); + arguments1[oldCount] = event.getActionParam0(); + arguments2[oldCount] = event.getWidgetId(); forceLeftClick[oldCount] = event.isForceLeftClick(); } } @@ -942,7 +942,7 @@ public abstract class RSClientMixin implements RSClient { DraggingWidgetChanged draggingWidgetChanged = new DraggingWidgetChanged(); draggingWidgetChanged.setDraggingWidget(client.isDraggingWidget()); - client.getCallbacks().post(DraggingWidgetChanged.class, draggingWidgetChanged); + client.getCallbacks().post(draggingWidgetChanged); } @Inject @@ -984,7 +984,7 @@ public abstract class RSClientMixin implements RSClient { WidgetLoaded event = new WidgetLoaded(); event.setGroupId(groupId); - client.getCallbacks().post(WidgetLoaded.class, event); + client.getCallbacks().post(event); } } @@ -1026,7 +1026,7 @@ public abstract class RSClientMixin implements RSClient client.getRealSkillLevel(updatedSkill), client.getBoostedSkillLevel(updatedSkill) ); - client.getCallbacks().post(StatChanged.class, statChanged); + client.getCallbacks().post(statChanged); } } @@ -1050,7 +1050,7 @@ public abstract class RSClientMixin implements RSClient client.getRealSkillLevels()[skillIdx], client.getBoostedSkillLevels()[skillIdx] ); - client.getCallbacks().post(StatChanged.class, statChanged); + client.getCallbacks().post(statChanged); } } @@ -1069,7 +1069,7 @@ public abstract class RSClientMixin implements RSClient PlayerMenuOptionsChanged optionsChanged = new PlayerMenuOptionsChanged(); optionsChanged.setIndex(idx); - client.getCallbacks().post(PlayerMenuOptionsChanged.class, optionsChanged); + client.getCallbacks().post(optionsChanged); } @FieldHook("gameState") @@ -1079,7 +1079,7 @@ public abstract class RSClientMixin implements RSClient GameStateChanged gameStateChange = new GameStateChanged(); GameState gameState = client.getGameState(); gameStateChange.setGameState(gameState); - client.getCallbacks().post(GameStateChanged.class, gameStateChange); + client.getCallbacks().post(gameStateChange); if (gameState == GameState.LOGGED_IN) { int plane = client.getPlane(); @@ -1104,7 +1104,7 @@ public abstract class RSClientMixin implements RSClient item.setX(x); item.setY(y); ItemSpawned event = new ItemSpawned(tile, item); - client.getCallbacks().post(ItemSpawned.class, event); + client.getCallbacks().post(event); } } } @@ -1128,7 +1128,7 @@ public abstract class RSClientMixin implements RSClient { npc.setIndex(idx); - client.getCallbacks().postDeferred(NpcSpawned.class, new NpcSpawned(npc)); + client.getCallbacks().postDeferred(new NpcSpawned(npc)); } } @@ -1148,11 +1148,11 @@ public abstract class RSClientMixin implements RSClient if (oldPlayer != null) { - client.getCallbacks().post(PlayerDespawned.class, new PlayerDespawned(oldPlayer)); + client.getCallbacks().post(new PlayerDespawned(oldPlayer)); } if (player != null) { - client.getCallbacks().postDeferred(PlayerSpawned.class, new PlayerSpawned(player)); + client.getCallbacks().postDeferred(new PlayerSpawned(player)); } } @@ -1161,7 +1161,7 @@ public abstract class RSClientMixin implements RSClient public static void copy$findItemDefinitions(String var0, boolean var1) { GrandExchangeSearched event = new GrandExchangeSearched(); - client.getCallbacks().post(GrandExchangeSearched.class, event); + client.getCallbacks().post(event); if (!event.isConsumed()) { copy$findItemDefinitions(var0, var1); @@ -1187,7 +1187,7 @@ public abstract class RSClientMixin implements RSClient GrandExchangeOfferChanged offerChangedEvent = new GrandExchangeOfferChanged(); offerChangedEvent.setOffer(internalOffer); offerChangedEvent.setSlot(idx); - client.getCallbacks().post(GrandExchangeOfferChanged.class, offerChangedEvent); + client.getCallbacks().post(offerChangedEvent); } @FieldHook("Varps_main") @@ -1196,7 +1196,7 @@ public abstract class RSClientMixin implements RSClient { VarbitChanged varbitChanged = new VarbitChanged(); varbitChanged.setIndex(idx); - client.getCallbacks().post(VarbitChanged.class, varbitChanged); + client.getCallbacks().post(varbitChanged); } @FieldHook("isResizable") @@ -1210,7 +1210,7 @@ public abstract class RSClientMixin implements RSClient { ResizeableChanged resizeableChanged = new ResizeableChanged(); resizeableChanged.setResized(isResized); - client.getCallbacks().post(ResizeableChanged.class, resizeableChanged); + client.getCallbacks().post(resizeableChanged); oldIsResized = isResized; } @@ -1220,21 +1220,21 @@ public abstract class RSClientMixin implements RSClient @Inject public static void clanMemberManagerChanged(int idx) { - client.getCallbacks().post(FriendsChatChanged.class, new FriendsChatChanged(client.getFriendsChatManager() != null)); + client.getCallbacks().post(new FriendsChatChanged(client.getFriendsChatManager() != null)); } @FieldHook("canvasWidth") @Inject public static void canvasWidthChanged(int idx) { - client.getCallbacks().post(CanvasSizeChanged.class, CanvasSizeChanged.INSTANCE); + client.getCallbacks().post(CanvasSizeChanged.INSTANCE); } @FieldHook("canvasHeight") @Inject public static void canvasHeightChanged(int idx) { - client.getCallbacks().post(CanvasSizeChanged.class, CanvasSizeChanged.INSTANCE); + client.getCallbacks().post(CanvasSizeChanged.INSTANCE); } @FieldHook("hintArrowPlayerIndex") @@ -1414,7 +1414,7 @@ public abstract class RSClientMixin implements RSClient client.getMouseCurrentButton() ); - client.getCallbacks().post(MenuOptionClicked.class, menuOptionClicked); + client.getCallbacks().post(menuOptionClicked); if (menuOptionClicked.isConsumed()) { @@ -1425,14 +1425,14 @@ public abstract class RSClientMixin implements RSClient { client.getLogger().info( "|MenuAction|: MenuOption={} MenuTarget={} Id={} Opcode={} Param0={} Param1={} CanvasX={} CanvasY={} Authentic={}", - menuOptionClicked.getOption(), menuOptionClicked.getTarget(), menuOptionClicked.getIdentifier(), - menuOptionClicked.getOpcode(), menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), + menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), menuOptionClicked.getType(), + menuOptionClicked.getOpcode(), menuOptionClicked.getActionParam0(), menuOptionClicked.getWidgetId(), canvasX, canvasY, authentic ); } - copy$menuAction(menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), menuOptionClicked.getOpcode(), - menuOptionClicked.getIdentifier(), menuOptionClicked.getOption(), menuOptionClicked.getTarget(), canvasX, canvasY); + copy$menuAction(menuOptionClicked.getActionParam0(), menuOptionClicked.getWidgetId(), menuOptionClicked.getOpcode(), + menuOptionClicked.getType(), menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), canvasX, canvasY); } @Override @@ -1448,7 +1448,7 @@ public abstract class RSClientMixin implements RSClient @Inject public static void onUsernameChanged(int idx) { - client.getCallbacks().post(UsernameChanged.class, UsernameChanged.INSTANCE); + client.getCallbacks().post(UsernameChanged.INSTANCE); } @Override @@ -1479,7 +1479,7 @@ public abstract class RSClientMixin implements RSClient { final MenuOpened event = new MenuOpened(); event.setMenuEntries(getMenuEntries()); - callbacks.post(MenuOpened.class, event); + callbacks.post(event); if (event.isModified()) { @@ -1511,7 +1511,7 @@ public abstract class RSClientMixin implements RSClient final ChatMessageType chatMessageType = ChatMessageType.of(type); final ChatMessage chatMessage = new ChatMessage(messageNode, chatMessageType, name, message, sender, messageNode.getTimestamp()); - client.getCallbacks().post(ChatMessage.class, chatMessage); + client.getCallbacks().post(chatMessage); } @Inject @@ -1653,7 +1653,7 @@ public abstract class RSClientMixin implements RSClient byte[] pixelArray = spritePixelsArray[i]; int[] pixels = new int[width * height]; - RSSpritePixels spritePixels = createSprite(pixels, width, height); + RSSpritePixels spritePixels = createSpritePixels(pixels, width, height); spritePixels.setMaxHeight(maxHeight); spritePixels.setMaxWidth(maxWidth); spritePixels.setOffsetX(offsetX[i]); @@ -1695,7 +1695,7 @@ public abstract class RSClientMixin implements RSClient @FieldHook("cycleCntr") public static void onCycleCntrChanged(int idx) { - client.getCallbacks().post(ClientTick.class, ClientTick.INSTANCE); + client.getCallbacks().post(ClientTick.INSTANCE); } @Copy("shouldLeftClickOpenMenu") @@ -1709,7 +1709,7 @@ public abstract class RSClientMixin implements RSClient } MenuShouldLeftClick menuShouldLeftClick = new MenuShouldLeftClick(); - client.getCallbacks().post(MenuShouldLeftClick.class, menuShouldLeftClick); + client.getCallbacks().post(menuShouldLeftClick); if (menuShouldLeftClick.isForceRightClick()) { @@ -1732,7 +1732,7 @@ public abstract class RSClientMixin implements RSClient { Menu menu = Menu.MENU; menu.reset(); - getCallbacks().post(Menu.class, menu); + getCallbacks().post(menu); if (menu.shouldRun()) { copy$menu(); @@ -1767,7 +1767,7 @@ public abstract class RSClientMixin implements RSClient @Inject static boolean shouldHideAttackOptionFor(RSPlayer p) { - if (client.isSpellSelected()) + if (client.getSpellSelected()) { return ((hideFriendCastOptions && p.isFriended()) || (hideClanmateCastOptions && p.isFriendsChatMember())) && !unhiddenCasts.contains(client.getSelectedSpellName().replaceAll("<[^>]*>", "").toLowerCase()); @@ -1826,7 +1826,7 @@ public abstract class RSClientMixin implements RSClient if (type == 3 || type == 4 || type == 10) { VolumeChanged volumeChanged = new VolumeChanged(type == 3 ? VolumeChanged.Type.MUSIC : type == 4 ? VolumeChanged.Type.EFFECTS : VolumeChanged.Type.AREA); - client.getCallbacks().post(VolumeChanged.class, volumeChanged); + client.getCallbacks().post(volumeChanged); } } @@ -1925,10 +1925,10 @@ public abstract class RSClientMixin implements RSClient @Inject @Override - public ObjectDefinition getObjectDefinition(int objectId) + public ObjectDefinition getObjectComposition(int objectId) { assert this.isClientThread() : "getObjectDefinition must be called on client thread"; - return getRSObjectDefinition(objectId); + return getRSObjectComposition(objectId); } @Inject @@ -1945,7 +1945,7 @@ public abstract class RSClientMixin implements RSClient public NPCComposition getNpcDefinition(int id) { assert this.isClientThread() : "getNpcDefinition must be called on client thread"; - return getRSNpcDefinition(id); + return getRSNpcComposition(id); } // this exists because the original got inlined diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSDynamicObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSDynamicObjectMixin.java index 128b71f451..46e8504ee9 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSDynamicObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSDynamicObjectMixin.java @@ -90,7 +90,7 @@ public abstract class RSDynamicObjectMixin implements RSDynamicObject DynamicObjectAnimationChanged dynamicObjectAnimationChanged = new DynamicObjectAnimationChanged(); dynamicObjectAnimationChanged.setObject(id); dynamicObjectAnimationChanged.setAnimation(animationID); - client.getCallbacks().post(DynamicObjectAnimationChanged.class, dynamicObjectAnimationChanged); + client.getCallbacks().post(dynamicObjectAnimationChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java index f8237649c5..d273a3bf33 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendSystemMixin.java @@ -20,7 +20,7 @@ public abstract class RSFriendSystemMixin implements RSFriendSystem public void rl$removeFriend(String friendName) { FriendRemoved friendRemoved = new FriendRemoved(friendName); - client.getCallbacks().post(FriendRemoved.class, friendRemoved); + client.getCallbacks().post(friendRemoved); } @MethodHook("addFriend") @@ -28,6 +28,6 @@ public abstract class RSFriendSystemMixin implements RSFriendSystem public void rl$addFriend(String friendName) { FriendAdded friendAdded = new FriendAdded(friendName); - client.getCallbacks().post(FriendAdded.class, friendAdded); + client.getCallbacks().post(friendAdded); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameShellMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameShellMixin.java index a75a1d2fd6..93f389345a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameShellMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameShellMixin.java @@ -73,7 +73,7 @@ public abstract class RSGameShellMixin implements RSGameShell { final FocusChanged focusChanged = new FocusChanged(); focusChanged.setFocused(true); - client.getCallbacks().post(FocusChanged.class, focusChanged); + client.getCallbacks().post(focusChanged); } @Inject diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSGraphicsObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSGraphicsObjectMixin.java index 4d5b4d9371..c7757732ba 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSGraphicsObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGraphicsObjectMixin.java @@ -18,7 +18,7 @@ public abstract class RSGraphicsObjectMixin implements RSGraphicsObject RSGraphicsObjectMixin() { final GraphicsObjectCreated event = new GraphicsObjectCreated(this); - client.getCallbacks().post(GraphicsObjectCreated.class, event); + client.getCallbacks().post(event); } @Override diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarDefinitionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarDefinitionMixin.java index 6c1090bf30..383892e7b5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarDefinitionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSHealthBarDefinitionMixin.java @@ -21,6 +21,6 @@ public abstract class RSHealthBarDefinitionMixin implements RSHealthBarDefinitio { PostHealthBar postHealthBar = new PostHealthBar(); postHealthBar.setHealthBar(this); - client.getCallbacks().post(PostHealthBar.class, postHealthBar); + client.getCallbacks().post(postHealthBar); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java index c05a722840..d9ff0bef2a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java @@ -71,7 +71,7 @@ public abstract class RSItemCompositionMixin implements RSItemComposition { final PostItemComposition event = new PostItemComposition(); event.setItemComposition(this); - client.getCallbacks().post(PostItemComposition.class, event); + client.getCallbacks().post(event); } @Copy("getModel") diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java index 36f134b1ac..69c5652e58 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java @@ -138,13 +138,13 @@ public abstract class RSItemContainerMixin implements RSItemContainer if (changedContainer != null) { ItemContainerChanged event = new ItemContainerChanged(containerId, changedContainer); - client.getCallbacks().postDeferred(ItemContainerChanged.class, event); + client.getCallbacks().postDeferred(event); } if (changedContainerInvOther != null) { ItemContainerChanged event = new ItemContainerChanged(containerId | 0x8000, changedContainerInvOther); - client.getCallbacks().postDeferred(ItemContainerChanged.class, event); + client.getCallbacks().postDeferred(event); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyHandlerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyHandlerMixin.java index a3192bac8c..b6bb2eb57f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyHandlerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyHandlerMixin.java @@ -60,6 +60,6 @@ public abstract class RSKeyHandlerMixin implements RSKeyHandler { final FocusChanged focusChanged = new FocusChanged(); focusChanged.setFocused(false); - client.getCallbacks().post(FocusChanged.class, focusChanged); + client.getCallbacks().post(focusChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCCompositionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCCompositionMixin.java index e781737751..264f0a5b4f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCCompositionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCCompositionMixin.java @@ -45,6 +45,6 @@ public abstract class RSNPCCompositionMixin implements RSNPCComposition NpcActionChanged npcActionChanged = new NpcActionChanged(); npcActionChanged.setNpcComposition(this); npcActionChanged.setIdx(idx); - client.getCallbacks().post(NpcActionChanged.class, npcActionChanged); + client.getCallbacks().post(npcActionChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java index 041cffeb98..96d0d791bc 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java @@ -55,7 +55,7 @@ public abstract class RSNPCMixin implements RSNPC @Override public int getId() { - RSNPCComposition composition = getDefinition(); + RSNPCComposition composition = getComposition(); if (composition != null && composition.getConfigs() != null) { composition = composition.transform(); @@ -67,7 +67,7 @@ public abstract class RSNPCMixin implements RSNPC @Override public String getName() { - RSNPCComposition composition = getDefinition(); + RSNPCComposition composition = getComposition(); if (composition != null && composition.getConfigs() != null) { composition = composition.transform(); @@ -79,7 +79,7 @@ public abstract class RSNPCMixin implements RSNPC @Override public int getCombatLevel() { - RSNPCComposition composition = getDefinition(); + RSNPCComposition composition = getComposition(); if (composition != null && composition.getConfigs() != null) { composition = composition.transform(); @@ -107,11 +107,11 @@ public abstract class RSNPCMixin implements RSNPC { if (composition == null) { - client.getCallbacks().post(NpcDespawned.class, new NpcDespawned(this)); + client.getCallbacks().post(new NpcDespawned(this)); } else if (this.getId() != -1) { - client.getCallbacks().post(NpcChanged.class, new NpcChanged(this)); + client.getCallbacks().post(new NpcChanged(this)); } } @@ -150,7 +150,7 @@ public abstract class RSNPCMixin implements RSNPC @Override public NPCComposition getTransformedDefinition() { - RSNPCComposition composition = getDefinition(); + RSNPCComposition composition = getComposition(); if (composition != null && composition.getConfigs() != null) { composition = composition.transform(); @@ -168,7 +168,7 @@ public abstract class RSNPCMixin implements RSNPC return null; } - int size = getDefinition().getSize(); + int size = getComposition().getSize(); LocalPoint tileHeightPoint = new LocalPoint( size * Perspective.LOCAL_HALF_TILE_SIZE - Perspective.LOCAL_HALF_TILE_SIZE + getX(), size * Perspective.LOCAL_HALF_TILE_SIZE - Perspective.LOCAL_HALF_TILE_SIZE + getY()); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java index 1e68e8c41f..7c762ddd5b 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -106,7 +106,7 @@ public abstract class RSPlayerMixin implements RSPlayer final HeadIcon headIcon = getHeadIcon(getRsOverheadIcon()); if (getRsOverheadIcon() != oldHeadIcon) { - client.getCallbacks().post(OverheadPrayerChanged.class, + client.getCallbacks().post( new OverheadPrayerChanged(this, getHeadIcon(oldHeadIcon), headIcon)); } } @@ -127,7 +127,7 @@ public abstract class RSPlayerMixin implements RSPlayer final SkullIcon skullIcon = skullFromInt(getRsSkullIcon()); if (getRsSkullIcon() != oldSkullIcon) { - client.getCallbacks().post(PlayerSkullChanged.class, + client.getCallbacks().post( new PlayerSkullChanged(this, skullFromInt(getRsSkullIcon()), skullIcon)); } oldSkullIcon = getRsSkullIcon(); @@ -299,7 +299,7 @@ public abstract class RSPlayerMixin implements RSPlayer if (client.isComparingAppearance() && getPlayerAppearance().getHash() != appearanceHash) { - client.getCallbacks().post(PlayerChanged.class, new PlayerChanged(this)); + client.getCallbacks().post(new PlayerChanged(this)); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java index c7ea22cac6..1c10eeb835 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java @@ -48,7 +48,7 @@ public abstract class RSProjectileMixin implements RSProjectile { final ProjectileSpawned projectileSpawned = new ProjectileSpawned(); projectileSpawned.setProjectile(this); - client.getCallbacks().post(ProjectileSpawned.class, projectileSpawned); + client.getCallbacks().post(projectileSpawned); } @Inject @@ -109,6 +109,6 @@ public abstract class RSProjectileMixin implements RSProjectile projectileMoved.setProjectile(this); projectileMoved.setPosition(position); projectileMoved.setZ(targetZ); - client.getCallbacks().post(ProjectileMoved.class, projectileMoved); + client.getCallbacks().post(projectileMoved); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileItemMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileItemMixin.java index 169c47c3e4..4a33b78b1e 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileItemMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileItemMixin.java @@ -66,7 +66,7 @@ public abstract class RSTileItemMixin implements RSTileItem client.getLogger().debug("Item quantity changed: {} ({} -> {})", getId(), getQuantity(), quantity); ItemQuantityChanged itemQuantityChanged = new ItemQuantityChanged(this, getTile(), getQuantity(), quantity); - client.getCallbacks().post(ItemQuantityChanged.class, itemQuantityChanged); + client.getCallbacks().post(itemQuantityChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java index 4d65465d44..fc17b28a92 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java @@ -270,14 +270,14 @@ public abstract class RSTileMixin implements RSTile WallObjectDespawned wallObjectDespawned = new WallObjectDespawned(); wallObjectDespawned.setTile(this); wallObjectDespawned.setWallObject(previous); - client.getCallbacks().post(WallObjectDespawned.class, wallObjectDespawned); + client.getCallbacks().post(wallObjectDespawned); } else if (current != null && previous == null) { WallObjectSpawned wallObjectSpawned = new WallObjectSpawned(); wallObjectSpawned.setTile(this); wallObjectSpawned.setWallObject(current); - client.getCallbacks().post(WallObjectSpawned.class, wallObjectSpawned); + client.getCallbacks().post(wallObjectSpawned); } else if (current != null) { @@ -285,7 +285,7 @@ public abstract class RSTileMixin implements RSTile wallObjectChanged.setTile(this); wallObjectChanged.setPrevious(previous); wallObjectChanged.setWallObject(current); - client.getCallbacks().post(WallObjectChanged.class, wallObjectChanged); + client.getCallbacks().post(wallObjectChanged); } } @@ -303,14 +303,14 @@ public abstract class RSTileMixin implements RSTile DecorativeObjectDespawned decorativeObjectDespawned = new DecorativeObjectDespawned(); decorativeObjectDespawned.setTile(this); decorativeObjectDespawned.setDecorativeObject(previous); - client.getCallbacks().post(DecorativeObjectDespawned.class, decorativeObjectDespawned); + client.getCallbacks().post(decorativeObjectDespawned); } else if (current != null && previous == null) { DecorativeObjectSpawned decorativeObjectSpawned = new DecorativeObjectSpawned(); decorativeObjectSpawned.setTile(this); decorativeObjectSpawned.setDecorativeObject(current); - client.getCallbacks().post(DecorativeObjectSpawned.class, decorativeObjectSpawned); + client.getCallbacks().post(decorativeObjectSpawned); } else if (current != null) { @@ -318,7 +318,7 @@ public abstract class RSTileMixin implements RSTile decorativeObjectChanged.setTile(this); decorativeObjectChanged.setPrevious(previous); decorativeObjectChanged.setDecorativeObject(current); - client.getCallbacks().post(DecorativeObjectChanged.class, decorativeObjectChanged); + client.getCallbacks().post(decorativeObjectChanged); } } @@ -336,14 +336,14 @@ public abstract class RSTileMixin implements RSTile GroundObjectDespawned groundObjectDespawned = new GroundObjectDespawned(); groundObjectDespawned.setTile(this); groundObjectDespawned.setGroundObject(previous); - client.getCallbacks().post(GroundObjectDespawned.class, groundObjectDespawned); + client.getCallbacks().post(groundObjectDespawned); } else if (current != null && previous == null) { GroundObjectSpawned groundObjectSpawned = new GroundObjectSpawned(); groundObjectSpawned.setTile(this); groundObjectSpawned.setGroundObject(current); - client.getCallbacks().post(GroundObjectSpawned.class, groundObjectSpawned); + client.getCallbacks().post(groundObjectSpawned); } else if (current != null) { @@ -351,7 +351,7 @@ public abstract class RSTileMixin implements RSTile groundObjectChanged.setTile(this); groundObjectChanged.setPrevious(previous); groundObjectChanged.setGroundObject(current); - client.getCallbacks().post(GroundObjectChanged.class, groundObjectChanged); + client.getCallbacks().post(groundObjectChanged); } } @@ -426,7 +426,7 @@ public abstract class RSTileMixin implements RSTile GameObjectDespawned gameObjectDespawned = new GameObjectDespawned(); gameObjectDespawned.setTile(this); gameObjectDespawned.setGameObject(previous); - client.getCallbacks().post(GameObjectDespawned.class, gameObjectDespawned); + client.getCallbacks().post(gameObjectDespawned); } else if (previous == null) { @@ -437,8 +437,10 @@ public abstract class RSTileMixin implements RSTile logger.trace("Game object spawn: {}", current.getId()); - GameObjectSpawned gameObjectSpawned = new GameObjectSpawned(this, current); - client.getCallbacks().post(GameObjectSpawned.class, gameObjectSpawned); + GameObjectSpawned gameObjectSpawned = new GameObjectSpawned(); + gameObjectSpawned.setTile(this); + gameObjectSpawned.setGameObject(current); + client.getCallbacks().post(gameObjectSpawned); } else { @@ -453,7 +455,7 @@ public abstract class RSTileMixin implements RSTile gameObjectsChanged.setTile(this); gameObjectsChanged.setPrevious(previous); gameObjectsChanged.setGameObject(current); - client.getCallbacks().post(GameObjectChanged.class, gameObjectsChanged); + client.getCallbacks().post(gameObjectsChanged); } } @@ -486,7 +488,7 @@ public abstract class RSTileMixin implements RSTile { RSTileItem item = (RSTileItem) cur; ItemDespawned itemDespawned = new ItemDespawned(this, item); - client.getCallbacks().post(ItemDespawned.class, itemDespawned); + client.getCallbacks().post(itemDespawned); } } lastGroundItems[z][x][y] = newQueue; @@ -504,7 +506,7 @@ public abstract class RSTileMixin implements RSTile if (lastUnlink != null) { ItemDespawned itemDespawned = new ItemDespawned(this, lastUnlink); - client.getCallbacks().post(ItemDespawned.class, itemDespawned); + client.getCallbacks().post(itemDespawned); } return; } @@ -514,7 +516,7 @@ public abstract class RSTileMixin implements RSTile if (lastUnlink != null) { ItemDespawned itemDespawned = new ItemDespawned(this, lastUnlink); - client.getCallbacks().post(ItemDespawned.class, itemDespawned); + client.getCallbacks().post(itemDespawned); } return; } @@ -547,7 +549,7 @@ public abstract class RSTileMixin implements RSTile if (lastUnlink != null && lastUnlink != next && lastUnlink != previous) { ItemDespawned itemDespawned = new ItemDespawned(this, lastUnlink); - client.getCallbacks().post(ItemDespawned.class, itemDespawned); + client.getCallbacks().post(itemDespawned); } if (current != null) @@ -555,7 +557,7 @@ public abstract class RSTileMixin implements RSTile current.setX(x); current.setY(y); ItemSpawned event = new ItemSpawned(this, current); - client.getCallbacks().post(ItemSpawned.class, event); + client.getCallbacks().post(event); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSUserMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSUserMixin.java index c351da8d41..15e825f937 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSUserMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSUserMixin.java @@ -34,6 +34,6 @@ public abstract class RSUserMixin implements RSUser @Inject public void onPrevNameChanged(int idx) { - client.getCallbacks().post(NameableNameChanged.class, new NameableNameChanged(this)); + client.getCallbacks().post(new NameableNameChanged(this)); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java index ecb48f919c..86a757092b 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java @@ -19,13 +19,13 @@ public abstract class RSVarcsMixin implements RSVarcs @Inject public void onVarCIntChanged(int id, int value) { - client.getCallbacks().post(VarClientIntChanged.class, new VarClientIntChanged(id)); + client.getCallbacks().post(new VarClientIntChanged(id)); } @MethodHook(value = "setString", end = true) @Inject public void onVarCStrChanged(int id, String value) { - client.getCallbacks().post(VarClientStrChanged.class, new VarClientStrChanged(id)); + client.getCallbacks().post(new VarClientStrChanged(id)); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java index 3643f236d2..610d612faf 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java @@ -419,7 +419,7 @@ public abstract class RSWidgetMixin implements RSWidget event.setWidget(this); event.setHidden(hidden); - client.getCallbacks().post(WidgetHiddenChanged.class, event); + client.getCallbacks().post(event); RSWidget[] children = getChildren(); @@ -504,7 +504,7 @@ public abstract class RSWidgetMixin implements RSWidget client.getLogger().trace("Posting widget position changed"); WidgetPositioned widgetPositioned = WidgetPositioned.INSTANCE; - client.getCallbacks().postDeferred(WidgetPositioned.class, widgetPositioned); + client.getCallbacks().postDeferred(widgetPositioned); } @Inject diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMixin.java index 902e0fd96c..eefb479963 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWorldMixin.java @@ -63,7 +63,7 @@ public abstract class RSWorldMixin implements RSWorld { // this is the last world in the list. WorldListLoad worldLoad = new WorldListLoad(worlds); - client.getCallbacks().post(WorldListLoad.class, worldLoad); + client.getCallbacks().post(worldLoad); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java index f2fa32d90c..6f8af59204 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java @@ -67,7 +67,7 @@ public abstract class ScriptVMMixin implements RSClient if (script != null) { ScriptPreFired event = new ScriptPreFired((int) script.getHash(), rootScriptEvent); - client.getCallbacks().post(ScriptPreFired.class, event); + client.getCallbacks().post(event); } rootScriptEvent = null; @@ -124,14 +124,14 @@ public abstract class ScriptVMMixin implements RSClient ScriptCallbackEvent event = new ScriptCallbackEvent(); event.setScript(currentScript); event.setEventName(stringOp); - client.getCallbacks().post(ScriptCallbackEvent.class, event); + client.getCallbacks().post(event); return true; case INVOKE: int scriptId = currentScript.getIntOperands()[currentScriptPC]; - client.getCallbacks().post(ScriptPreFired.class, new ScriptPreFired(scriptId, null)); + client.getCallbacks().post(new ScriptPreFired(scriptId, null)); return false; case RETURN: - client.getCallbacks().post(ScriptPostFired.class, new ScriptPostFired((int) currentScript.getHash())); + client.getCallbacks().post(new ScriptPostFired((int) currentScript.getHash())); return false; } return false; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/SoundEffectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/SoundEffectMixin.java index 4edad7245b..c03f57e08a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/SoundEffectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/SoundEffectMixin.java @@ -91,7 +91,7 @@ public abstract class SoundEffectMixin implements RSClient lastSoundEffectSourceNPCid = -1; event.setSoundId(client.getQueuedSoundEffectIDs()[soundIndex]); event.setDelay(client.getQueuedSoundEffectDelays()[soundIndex]); - client.getCallbacks().post(SoundEffectPlayed.class, event); + client.getCallbacks().post(event); consumed = event.isConsumed(); } else @@ -108,7 +108,7 @@ public abstract class SoundEffectMixin implements RSClient event.setSceneY(y); event.setRange(range); event.setDelay(client.getQueuedSoundEffectDelays()[soundIndex]); - client.getCallbacks().post(AreaSoundEffectPlayed.class, event); + client.getCallbacks().post(event); consumed = event.isConsumed(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index dacc020063..5b5de27a60 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -338,10 +338,10 @@ public interface RSClient extends RSGameShell, Client void addRSChatMessage(int type, String name, String message, String sender); @Import("getObjectDefinition") - RSObjectDefinition getRSObjectDefinition(int objectId); + RSObjectComposition getRSObjectComposition(int objectId); @Import("getNpcDefinition") - RSNPCComposition getRSNpcDefinition(int npcId); + RSNPCComposition getRSNpcComposition(int npcId); @Import("viewportZoom") @Override @@ -577,7 +577,7 @@ public interface RSClient extends RSGameShell, Client @Construct @Override - RSSpritePixels createSprite(int[] pixels, int width, int height); + RSSpritePixels createSpritePixels(int[] pixels, int width, int height); @Import("destinationX") int getDestinationX(); @@ -1080,7 +1080,7 @@ public interface RSClient extends RSGameShell, Client int getSelectedSpellFlags(); @Import("isSpellSelected") - boolean isSpellSelected(); + boolean getSpellSelected(); @Import("readSoundEffect") RSSoundEffect getTrack(RSAbstractArchive indexData, int id, int var0); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java index 8f3b7f5a52..68921954e6 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java @@ -7,7 +7,7 @@ public interface RSNPC extends RSActor, NPC { @Import("definition") @Override - RSNPCComposition getDefinition(); + RSNPCComposition getComposition(); @Override int getIndex(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectDefinition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java similarity index 82% rename from runescape-api/src/main/java/net/runelite/rs/api/RSObjectDefinition.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java index 7bd9db4f4e..9bbb9e64b0 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSObjectDefinition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java @@ -3,7 +3,7 @@ package net.runelite.rs.api; import net.runelite.api.ObjectDefinition; import net.runelite.mapping.Import; -public interface RSObjectDefinition extends ObjectDefinition +public interface RSObjectComposition extends ObjectDefinition { @Import("id") @Override @@ -31,5 +31,5 @@ public interface RSObjectDefinition extends ObjectDefinition @Import("transform") @Override - RSObjectDefinition getImpostor(); + RSObjectComposition getImpostor(); } diff --git a/runescape-client/src/main/java/AbstractWorldMapData.java b/runescape-client/src/main/java/AbstractWorldMapData.java index 3905272427..1fdac0b116 100644 --- a/runescape-client/src/main/java/AbstractWorldMapData.java +++ b/runescape-client/src/main/java/AbstractWorldMapData.java @@ -281,7 +281,7 @@ public abstract class AbstractWorldMapData { garbageValue = "-942051498" ) @Export("worldToMinimap") - static final void worldToMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { + static final void worldToMinimap(int var0, int var1, int var2, int var3, SpritePixels var4, SpriteMask var5) { int var6 = var3 * var3 + var2 * var2; // L: 10964 if (var6 > 4225 && var6 < 90000) { // L: 10965 int var7 = Client.camAngleY & 2047; // L: 10966 @@ -294,7 +294,7 @@ public abstract class AbstractWorldMapData { int var15 = (int)(Math.sin(var12) * (double)var14); // L: 10973 int var16 = (int)(Math.cos(var12) * (double)var14); // L: 10974 byte var17 = 20; // L: 10975 - ViewportMouse.redHintArrowSprite.method6189(var15 + (var0 + var5.width / 2 - var17 / 2), var5.height / 2 + var1 - var17 / 2 - var16 - 10, var17, var17, 15, 15, var12, 256); // L: 10976 + ViewportMouse.redHintArrowSpritePixels.method6189(var15 + (var0 + var5.width / 2 - var17 / 2), var5.height / 2 + var1 - var17 / 2 - var16 - 10, var17, var17, 15, 15, var12, 256); // L: 10976 } else { class25.drawSpriteOnMinimap(var0, var1, var2, var3, var4, var5); // L: 10978 } diff --git a/runescape-client/src/main/java/AbstractWorldMapIcon.java b/runescape-client/src/main/java/AbstractWorldMapIcon.java index 8ece74fb2a..d8a8054a5d 100644 --- a/runescape-client/src/main/java/AbstractWorldMapIcon.java +++ b/runescape-client/src/main/java/AbstractWorldMapIcon.java @@ -13,7 +13,7 @@ public abstract class AbstractWorldMapIcon { descriptor = "[Llm;" ) @Export("headIconHintSprites") - static Sprite[] headIconHintSprites; + static SpritePixels[] headIconHintSpritePixels; @ObfuscatedName("n") @ObfuscatedSignature( descriptor = "Lhs;" @@ -255,7 +255,7 @@ public abstract class AbstractWorldMapIcon { static final void drawActor2d(Actor var0, int var1, int var2, int var3, int var4, int var5) { if (var0 != null && var0.isVisible()) { // L: 4819 if (var0 instanceof NPC) { // L: 4820 - NPCDefinition var6 = ((NPC)var0).definition; // L: 4821 + NPCComposition var6 = ((NPC)var0).definition; // L: 4821 if (var6.transforms != null) { // L: 4822 var6 = var6.transform(); } @@ -294,8 +294,8 @@ public abstract class AbstractWorldMapIcon { } } else { HealthBarDefinition var80 = var87.definition; // L: 4844 - Sprite var13 = var80.getBackSprite(); // L: 4845 - Sprite var81 = var80.getFrontSprite(); // L: 4846 + SpritePixels var13 = var80.getBackSprite(); // L: 4845 + SpritePixels var81 = var80.getFrontSprite(); // L: 4846 int var82 = 0; // L: 4848 if (var13 != null && var81 != null) { // L: 4849 if (var80.widthPadding * 2 < var81.subWidth) { // L: 4850 @@ -384,12 +384,12 @@ public abstract class AbstractWorldMapIcon { if (Client.viewportTempX > -1) { // L: 4911 if (var88.headIconPk != -1) { // L: 4912 var76 += 25; // L: 4913 - Message.headIconPkSprites[var88.headIconPk].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4914 + Message.headIconPkSpritePixels[var88.headIconPk].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4914 } if (var88.headIconPrayer != -1) { // L: 4916 var76 += 25; // L: 4917 - Client.headIconPrayerSprites[var88.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4918 + Client.headIconPrayerSpritePixels[var88.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4918 } } } @@ -397,27 +397,27 @@ public abstract class AbstractWorldMapIcon { if (var1 >= 0 && Client.hintArrowType == 10 && var7[var1] == Client.hintArrowPlayerIndex) { // L: 4922 GrandExchangeEvents.method144(var0, var0.defaultHeight + 15); // L: 4923 if (Client.viewportTempX > -1) { // L: 4924 - var76 += headIconHintSprites[1].subHeight; // L: 4925 - headIconHintSprites[1].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4926 + var76 += headIconHintSpritePixels[1].subHeight; // L: 4925 + headIconHintSpritePixels[1].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); // L: 4926 } } } else { - NPCDefinition var89 = ((NPC)var0).definition; // L: 4931 + NPCComposition var89 = ((NPC)var0).definition; // L: 4931 if (var89.transforms != null) { // L: 4932 var89 = var89.transform(); } - if (var89.headIconPrayer >= 0 && var89.headIconPrayer < Client.headIconPrayerSprites.length) { // L: 4933 + if (var89.headIconPrayer >= 0 && var89.headIconPrayer < Client.headIconPrayerSpritePixels.length) { // L: 4933 GrandExchangeEvents.method144(var0, var0.defaultHeight + 15); // L: 4934 if (Client.viewportTempX > -1) { // L: 4935 - Client.headIconPrayerSprites[var89.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 30); // L: 4936 + Client.headIconPrayerSpritePixels[var89.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 30); // L: 4936 } } if (Client.hintArrowType == 1 && Client.npcIndices[var1 - var75] == Client.hintArrowNpcIndex && Client.cycle % 20 < 10) { // L: 4939 GrandExchangeEvents.method144(var0, var0.defaultHeight + 15); // L: 4940 if (Client.viewportTempX > -1) { // L: 4941 - headIconHintSprites[0].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 28); + headIconHintSpritePixels[0].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 28); } } } @@ -489,10 +489,10 @@ public abstract class AbstractWorldMapIcon { Client.viewportTempY -= 10; // L: 5001 } - Sprite var18 = null; // L: 5003 - Sprite var19 = null; // L: 5004 - Sprite var20 = null; // L: 5005 - Sprite var21 = null; // L: 5006 + SpritePixels var18 = null; // L: 5003 + SpritePixels var19 = null; // L: 5004 + SpritePixels var20 = null; // L: 5005 + SpritePixels var21 = null; // L: 5006 var22 = 0; // L: 5007 var23 = 0; // L: 5008 int var24 = 0; // L: 5009 @@ -501,10 +501,10 @@ public abstract class AbstractWorldMapIcon { int var27 = 0; // L: 5012 int var28 = 0; // L: 5013 int var29 = 0; // L: 5014 - Sprite var30 = null; // L: 5015 - Sprite var31 = null; // L: 5016 - Sprite var32 = null; // L: 5017 - Sprite var33 = null; // L: 5018 + SpritePixels var30 = null; // L: 5015 + SpritePixels var31 = null; // L: 5016 + SpritePixels var32 = null; // L: 5017 + SpritePixels var33 = null; // L: 5018 int var34 = 0; // L: 5019 int var35 = 0; // L: 5020 int var36 = 0; // L: 5021 diff --git a/runescape-client/src/main/java/Actor.java b/runescape-client/src/main/java/Actor.java index 40c320989b..1df5250d8d 100644 --- a/runescape-client/src/main/java/Actor.java +++ b/runescape-client/src/main/java/Actor.java @@ -12,7 +12,7 @@ public abstract class Actor extends Entity { descriptor = "[Llm;" ) @Export("mapDotSprites") - static Sprite[] mapDotSprites; + static SpritePixels[] mapDotSprites; @ObfuscatedName("an") @Export("isWalking") boolean isWalking; @@ -544,9 +544,9 @@ public abstract class Actor extends Entity { public static void method1821(AbstractArchive var0, AbstractArchive var1, boolean var2, Font var3) { NPC.ItemDefinition_archive = var0; // L: 84 VertexNormal.ItemDefinition_modelArchive = var1; // L: 85 - ItemDefinition.ItemDefinition_inMembersWorld = var2; // L: 86 + ItemComposition.ItemDefinition_inMembersWorld = var2; // L: 86 Varcs.ItemDefinition_fileCount = NPC.ItemDefinition_archive.getGroupFileCount(10); // L: 87 - ItemDefinition.ItemDefinition_fontPlain11 = var3; // L: 88 + ItemComposition.ItemDefinition_fontPlain11 = var3; // L: 88 } // L: 89 @ObfuscatedName("x") diff --git a/runescape-client/src/main/java/ArchiveLoader.java b/runescape-client/src/main/java/ArchiveLoader.java index 0180c660da..d5a24dbe3a 100644 --- a/runescape-client/src/main/java/ArchiveLoader.java +++ b/runescape-client/src/main/java/ArchiveLoader.java @@ -142,8 +142,8 @@ public class ArchiveLoader { int var32; int var39; if (Login.worldSelectOpen) { // L: 963 - if (class301.worldSelectBackSprites == null) { // L: 965 - class301.worldSelectBackSprites = class280.method5008(Messages.archive8, "sl_back", ""); + if (class301.worldSelectBackSpritePixels == null) { // L: 965 + class301.worldSelectBackSpritePixels = class280.method5008(Messages.archive8, "sl_back", ""); } if (class90.worldSelectFlagSprites == null) { // L: 966 @@ -240,7 +240,7 @@ public class ArchiveLoader { Rasterizer2D.Rasterizer2D_fillRectangle(Login.xPadding + 708, 4, 50, 16, 0); // L: 1007 var1.drawCentered("Cancel", Login.xPadding + 708 + 25, 16, 16777215, -1); // L: 1008 Login.hoveredWorldIndex = -1; // L: 1009 - if (class301.worldSelectBackSprites != null) { // L: 1010 + if (class301.worldSelectBackSpritePixels != null) { // L: 1010 var3 = 88; // L: 1011 byte var34 = 19; // L: 1012 var40 = 765 / (var3 + 1) - 1; // L: 1013 @@ -338,10 +338,10 @@ public class ArchiveLoader { if (MouseHandler.MouseHandler_x >= var13 && MouseHandler.MouseHandler_y >= var36 && MouseHandler.MouseHandler_x < var13 + var3 && MouseHandler.MouseHandler_y < var34 + var36 && var19) { // L: 1080 Login.hoveredWorldIndex = var17; // L: 1081 - class301.worldSelectBackSprites[var21].drawTransOverlayAt(var13, var36, 128, 16777215); // L: 1082 + class301.worldSelectBackSpritePixels[var21].drawTransOverlayAt(var13, var36, 128, 16777215); // L: 1082 var15 = true; // L: 1083 } else { - class301.worldSelectBackSprites[var21].drawAt(var13, var36); // L: 1085 + class301.worldSelectBackSpritePixels[var21].drawAt(var13, var36); // L: 1085 } if (class90.worldSelectFlagSprites != null) { // L: 1086 diff --git a/runescape-client/src/main/java/Canvas.java b/runescape-client/src/main/java/Canvas.java index d7bef347cb..7350a53c52 100644 --- a/runescape-client/src/main/java/Canvas.java +++ b/runescape-client/src/main/java/Canvas.java @@ -64,7 +64,7 @@ public final class Canvas extends java.awt.Canvas { Client.collisionMaps[var12] = new CollisionMap(104, 104); } - class25.sceneMinimapSprite = new Sprite(512, 512); // L: 1729 + class25.sceneMinimapSprite = new SpritePixels(512, 512); // L: 1729 Login.Login_loadingText = "Starting game engine..."; // L: 1730 Login.Login_loadingPercent = 5; // L: 1731 Client.titleLoadingStage = 20; // L: 1732 @@ -270,9 +270,9 @@ public final class Canvas extends java.awt.Canvas { var16 = DynamicObject.archive2; // L: 1912 Archive var4 = BuddyRankComparator.archive7; // L: 1913 boolean var17 = Client.isLowDetail; // L: 1914 - ObjectDefinition.ObjectDefinition_archive = var16; // L: 1916 - ObjectDefinition.ObjectDefinition_modelsArchive = var4; // L: 1917 - ObjectDefinition.ObjectDefinition_isLowDetail = var17; // L: 1918 + ObjectComposition.ObjectDefinition_archive = var16; // L: 1916 + ObjectComposition.ObjectDefinition_modelsArchive = var4; // L: 1917 + ObjectComposition.ObjectDefinition_isLowDetail = var17; // L: 1918 World.method1849(DynamicObject.archive2, BuddyRankComparator.archive7); // L: 1920 ParamDefinition.method4526(DynamicObject.archive2); // L: 1921 Actor.method1821(DynamicObject.archive2, BuddyRankComparator.archive7, Client.isMembersWorld, class297.fontPlain11); // L: 1922 @@ -313,8 +313,8 @@ public final class Canvas extends java.awt.Canvas { ++var12; // L: 1962 } - if (ViewportMouse.redHintArrowSprite == null) { // L: 1963 - ViewportMouse.redHintArrowSprite = Skills.SpriteBuffer_getSprite(Messages.archive8, WorldMapManager.spriteIds.field3845, 0); + if (ViewportMouse.redHintArrowSpritePixels == null) { // L: 1963 + ViewportMouse.redHintArrowSpritePixels = Skills.SpriteBuffer_getSprite(Messages.archive8, WorldMapManager.spriteIds.field3845, 0); } else { ++var12; // L: 1964 } @@ -357,26 +357,26 @@ public final class Canvas extends java.awt.Canvas { ++var12; // L: 2002 } - if (Message.headIconPkSprites == null) { // L: 2003 - Message.headIconPkSprites = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.headIconsPk, 0); + if (Message.headIconPkSpritePixels == null) { // L: 2003 + Message.headIconPkSpritePixels = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.headIconsPk, 0); } else { ++var12; // L: 2004 } - if (Client.headIconPrayerSprites == null) { // L: 2005 - Client.headIconPrayerSprites = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3844, 0); + if (Client.headIconPrayerSpritePixels == null) { // L: 2005 + Client.headIconPrayerSpritePixels = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3844, 0); } else { ++var12; // L: 2006 } - if (AbstractWorldMapIcon.headIconHintSprites == null) { // L: 2007 - AbstractWorldMapIcon.headIconHintSprites = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3843, 0); + if (AbstractWorldMapIcon.headIconHintSpritePixels == null) { // L: 2007 + AbstractWorldMapIcon.headIconHintSpritePixels = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3843, 0); } else { ++var12; // L: 2008 } - if (GrandExchangeOfferUnitPriceComparator.mapMarkerSprites == null) { // L: 2009 - GrandExchangeOfferUnitPriceComparator.mapMarkerSprites = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3846, 0); + if (GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels == null) { // L: 2009 + GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels = ClientPreferences.method1918(Messages.archive8, WorldMapManager.spriteIds.field3846, 0); } else { ++var12; // L: 2010 } @@ -466,7 +466,7 @@ public final class Canvas extends java.awt.Canvas { Login.Login_loadingPercent = 70; // L: 2093 } else { AbstractFont.AbstractFont_modIconSprites = class39.modIconSprites; // L: 2096 - ViewportMouse.redHintArrowSprite.normalize(); // L: 2097 + ViewportMouse.redHintArrowSpritePixels.normalize(); // L: 2097 int var13 = (int)(Math.random() * 21.0D) - 10; // L: 2098 int var14 = (int)(Math.random() * 21.0D) - 10; // L: 2099 var3 = (int)(Math.random() * 21.0D) - 10; // L: 2100 diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index b006deff11..5e657a1cdf 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -362,7 +362,7 @@ public final class Client extends GameShell implements Usernamed { descriptor = "[Llm;" ) @Export("mapIcons") - static Sprite[] mapIcons; + static SpritePixels[] mapIcons; @ObfuscatedName("rb") static short field828; @ObfuscatedName("ra") @@ -821,7 +821,7 @@ public final class Client extends GameShell implements Usernamed { descriptor = "[Llm;" ) @Export("headIconPrayerSprites") - static Sprite[] headIconPrayerSprites; + static SpritePixels[] headIconPrayerSpritePixels; @ObfuscatedName("hv") @ObfuscatedGetter( intValue = -1487008623 @@ -1513,7 +1513,7 @@ public final class Client extends GameShell implements Usernamed { mapIconCount = 0; // L: 572 mapIconXs = new int[1000]; // L: 573 mapIconYs = new int[1000]; // L: 574 - mapIcons = new Sprite[1000]; // L: 575 + mapIcons = new SpritePixels[1000]; // L: 575 destinationX = 0; // L: 576 destinationY = 0; // L: 577 minimapState = 0; // L: 584 @@ -1760,7 +1760,7 @@ public final class Client extends GameShell implements Usernamed { int var41 = var4 + var16; // L: 1007 int var42 = var5 + var15; // L: 1008 if (var41 > 0 && var42 > 0 && var41 < 103 && var42 < 103) { // L: 1009 - ObjectDefinition var20 = WorldMapDecoration.getObjectDefinition(var10); // L: 1010 + ObjectComposition var20 = WorldMapDecoration.getObjectDefinition(var10); // L: 1010 if (var17 != 22 || !isLowDetail || var20.int1 != 0 || var20.interactType == 1 || var20.boolean2) { // L: 1011 if (!var20.needsModelFiles()) { // L: 1012 ++field702; // L: 1013 @@ -1934,7 +1934,7 @@ public final class Client extends GameShell implements Usernamed { int var29 = var28 >> 2; // L: 1160 int var30 = var28 & 3; // L: 1161 if (var27 == var7 && var26 >= var16 && var26 < var16 + 8 && var25 >= var17 && var25 < var17 + 8) { // L: 1162 - ObjectDefinition var31 = WorldMapDecoration.getObjectDefinition(var21); // L: 1163 + ObjectComposition var31 = WorldMapDecoration.getObjectDefinition(var21); // L: 1163 int var32 = var14 + HitSplatDefinition.method4612(var26 & 7, var25 & 7, var46, var31.sizeX, var31.sizeY, var30); // L: 1164 int var33 = var15 + World.method1871(var26 & 7, var25 & 7, var46, var31.sizeX, var31.sizeY, var30); // L: 1165 if (var32 > 0 && var33 > 0 && var32 < 103 && var33 < 103) { // L: 1166 @@ -2031,7 +2031,7 @@ public final class Client extends GameShell implements Usernamed { } } - ObjectDefinition.ObjectDefinition_cachedModelData.clear(); // L: 1211 + ObjectComposition.ObjectDefinition_cachedModelData.clear(); // L: 1211 PacketBufferNode var49; if (WorldMapIcon_0.client.hasFrame()) { // L: 1212 var49 = ItemContainer.getPacketBufferNode(ClientPacket.field2299, packetWriter.isaacCipher); // L: 1214 @@ -4205,7 +4205,7 @@ public final class Client extends GameShell implements Usernamed { @Export("drawLoggedIn") final void drawLoggedIn() { if (rootInterface != -1) { // L: 4224 - NPCDefinition.method4759(rootInterface); + NPCComposition.method4759(rootInterface); } int var1; @@ -4914,7 +4914,7 @@ public final class Client extends GameShell implements Usernamed { } var58 = CollisionMap.getWidget(var16); // L: 6079 - ItemDefinition var42; + ItemComposition var42; if (!var58.isIf3) { // L: 6080 if (var18 == -1) { // L: 6081 var58.modelType = 0; // L: 6082 diff --git a/runescape-client/src/main/java/ClientPreferences.java b/runescape-client/src/main/java/ClientPreferences.java index 99fa5c687a..1da6898dbe 100644 --- a/runescape-client/src/main/java/ClientPreferences.java +++ b/runescape-client/src/main/java/ClientPreferences.java @@ -177,14 +177,14 @@ public class ClientPreferences { descriptor = "(Lib;IIB)[Llm;", garbageValue = "93" ) - public static Sprite[] method1918(AbstractArchive var0, int var1, int var2) { + public static SpritePixels[] method1918(AbstractArchive var0, int var1, int var2) { if (!class304.method5363(var0, var1, var2)) { // L: 23 return null; } else { - Sprite[] var4 = new Sprite[class336.SpriteBuffer_spriteCount]; // L: 26 + SpritePixels[] var4 = new SpritePixels[class336.SpriteBuffer_spriteCount]; // L: 26 for (int var5 = 0; var5 < class336.SpriteBuffer_spriteCount; ++var5) { // L: 27 - Sprite var6 = var4[var5] = new Sprite(); // L: 28 + SpritePixels var6 = var4[var5] = new SpritePixels(); // L: 28 var6.width = DirectByteArrayCopier.SpriteBuffer_spriteWidth; // L: 29 var6.height = class336.SpriteBuffer_spriteHeight; // L: 30 var6.xOffset = class336.SpriteBuffer_xOffsets[var5]; // L: 31 diff --git a/runescape-client/src/main/java/DirectByteArrayCopier.java b/runescape-client/src/main/java/DirectByteArrayCopier.java index 6e30367fe5..47d7de046b 100644 --- a/runescape-client/src/main/java/DirectByteArrayCopier.java +++ b/runescape-client/src/main/java/DirectByteArrayCopier.java @@ -112,7 +112,7 @@ public class DirectByteArrayCopier extends AbstractByteArrayCopier { for (var8 = 0; var8 < Client.npcCount; ++var8) { // L: 10895 NPC var9 = Client.npcs[Client.npcIndices[var8]]; // L: 10896 if (var9 != null && var9.isVisible()) { // L: 10897 - NPCDefinition var19 = var9.definition; // L: 10898 + NPCComposition var19 = var9.definition; // L: 10898 if (var19 != null && var19.transforms != null) { // L: 10899 var19 = var19.transform(); } @@ -156,14 +156,14 @@ public class DirectByteArrayCopier extends AbstractByteArrayCopier { if (var20 != null) { // L: 10925 var11 = var20.x / 32 - PlayerAppearance.localPlayer.x / 32; // L: 10926 var12 = var20.y / 32 - PlayerAppearance.localPlayer.y / 32; // L: 10927 - AbstractWorldMapData.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferUnitPriceComparator.mapMarkerSprites[1], var4); // L: 10928 + AbstractWorldMapData.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels[1], var4); // L: 10928 } } if (Client.hintArrowType == 2) { // L: 10931 var10 = Client.hintArrowX * 4 - NetFileRequest.baseX * 4 + 2 - PlayerAppearance.localPlayer.x / 32; // L: 10932 var11 = Client.hintArrowY * 4 - class41.baseY * 4 + 2 - PlayerAppearance.localPlayer.y / 32; // L: 10933 - AbstractWorldMapData.worldToMinimap(var1, var2, var10, var11, GrandExchangeOfferUnitPriceComparator.mapMarkerSprites[1], var4); // L: 10934 + AbstractWorldMapData.worldToMinimap(var1, var2, var10, var11, GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels[1], var4); // L: 10934 } if (Client.hintArrowType == 10 && Client.hintArrowPlayerIndex >= 0 && Client.hintArrowPlayerIndex < Client.players.length) { // L: 10936 @@ -171,7 +171,7 @@ public class DirectByteArrayCopier extends AbstractByteArrayCopier { if (var21 != null) { // L: 10938 var11 = var21.x / 32 - PlayerAppearance.localPlayer.x / 32; // L: 10939 var12 = var21.y / 32 - PlayerAppearance.localPlayer.y / 32; // L: 10940 - AbstractWorldMapData.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferUnitPriceComparator.mapMarkerSprites[1], var4); // L: 10941 + AbstractWorldMapData.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels[1], var4); // L: 10941 } } } @@ -179,7 +179,7 @@ public class DirectByteArrayCopier extends AbstractByteArrayCopier { if (Client.destinationX != 0) { // L: 10945 var10 = Client.destinationX * 4 + 2 - PlayerAppearance.localPlayer.x / 32; // L: 10946 var11 = Client.destinationY * 4 + 2 - PlayerAppearance.localPlayer.y / 32; // L: 10947 - class25.drawSpriteOnMinimap(var1, var2, var10, var11, GrandExchangeOfferUnitPriceComparator.mapMarkerSprites[0], var4); // L: 10948 + class25.drawSpriteOnMinimap(var1, var2, var10, var11, GrandExchangeOfferUnitPriceComparator.mapMarkerSpritePixels[0], var4); // L: 10948 } if (!PlayerAppearance.localPlayer.isHidden) { // L: 10950 diff --git a/runescape-client/src/main/java/DynamicObject.java b/runescape-client/src/main/java/DynamicObject.java index 837c3d69e4..0be7257fe0 100644 --- a/runescape-client/src/main/java/DynamicObject.java +++ b/runescape-client/src/main/java/DynamicObject.java @@ -145,7 +145,7 @@ public class DynamicObject extends Entity { this.cycleStart = Client.cycle - var1; // L: 60 } - ObjectDefinition var12 = WorldMapDecoration.getObjectDefinition(this.id); // L: 62 + ObjectComposition var12 = WorldMapDecoration.getObjectDefinition(this.id); // L: 62 if (var12.transforms != null) { // L: 63 var12 = var12.transform(); } diff --git a/runescape-client/src/main/java/FontName.java b/runescape-client/src/main/java/FontName.java index 88f0acb3b4..b20c892560 100644 --- a/runescape-client/src/main/java/FontName.java +++ b/runescape-client/src/main/java/FontName.java @@ -339,7 +339,7 @@ public class FontName { if (var10.itemIds[var19] <= 0) { // L: 9090 if (var10.inventorySprites != null && var19 < 20) { // L: 9135 - Sprite var46 = var10.getInventorySprite(var19); // L: 9136 + SpritePixels var46 = var10.getInventorySprite(var19); // L: 9136 if (var46 != null) { // L: 9137 var46.drawTransBgAt(var22, var23); } else if (Widget.field2603) { // L: 9138 @@ -351,7 +351,7 @@ public class FontName { boolean var38 = false; // L: 9092 var26 = var10.itemIds[var19] - 1; // L: 9093 if (var22 + 32 > var2 && var22 < var4 && var23 + 32 > var3 && var23 < var5 || var10 == class171.dragInventoryWidget && var19 == Client.dragItemSlotSource) { // L: 9094 - Sprite var35; + SpritePixels var35; if (Client.isItemSelected == 1 && var19 == ChatChannel.selectedItemSlot && var10.id == WorldMapLabelSize.selectedItemWidget) { // L: 9096 var35 = WorldMapManager.getItemSprite(var26, var10.itemQuantities[var19], 2, 0, 2, false); } else { @@ -483,7 +483,7 @@ public class FontName { } if (var10.isIf3 && var10.itemId != -1) { // L: 9192 - ItemDefinition var45 = SecureRandomCallable.ItemDefinition_get(var10.itemId); // L: 9193 + ItemComposition var45 = SecureRandomCallable.ItemDefinition_get(var10.itemId); // L: 9193 var44 = var45.name; // L: 9194 if (var44 == null) { // L: 9195 var44 = "null"; @@ -506,7 +506,7 @@ public class FontName { var39.drawLines(var44, var12, var13, var10.width, var10.height, var20, var10.textShadowed ? 0 : -1, var10.textXAlignment, var10.textYAlignment, var10.textLineHeight); // L: 9203 } } else if (var10.type == 5) { // L: 9206 - Sprite var40; + SpritePixels var40; if (!var10.isIf3) { // L: 9207 var40 = var10.getSprite(class8.runCs1(var10)); // L: 9208 if (var40 != null) { // L: 9209 @@ -561,7 +561,7 @@ public class FontName { } } } else { - ItemDefinition var33; + ItemComposition var33; if (var10.type == 6) { // L: 9244 boolean var36 = class8.runCs1(var10); // L: 9245 if (var36) { // L: 9247 diff --git a/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java b/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java index 7345006558..f3c2ba7981 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java @@ -20,7 +20,7 @@ final class GrandExchangeOfferAgeComparator implements Comparator { descriptor = "[Llm;" ) @Export("crossSprites") - static Sprite[] crossSprites; + static SpritePixels[] crossSprites; @ObfuscatedName("h") @ObfuscatedSignature( diff --git a/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java b/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java index e71907d892..611e3339e8 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java @@ -31,7 +31,7 @@ final class GrandExchangeOfferUnitPriceComparator implements Comparator { descriptor = "[Llm;" ) @Export("mapMarkerSprites") - static Sprite[] mapMarkerSprites; + static SpritePixels[] mapMarkerSpritePixels; @ObfuscatedName("h") @ObfuscatedSignature( diff --git a/runescape-client/src/main/java/HealthBarDefinition.java b/runescape-client/src/main/java/HealthBarDefinition.java index eb77b99556..9c8b1574b4 100644 --- a/runescape-client/src/main/java/HealthBarDefinition.java +++ b/runescape-client/src/main/java/HealthBarDefinition.java @@ -157,11 +157,11 @@ public class HealthBarDefinition extends DualNode { garbageValue = "-1946834755" ) @Export("getFrontSprite") - public Sprite getFrontSprite() { + public SpritePixels getFrontSprite() { if (this.frontSpriteID < 0) { // L: 74 return null; } else { - Sprite var1 = (Sprite)HealthBarDefinition_cachedSprites.get((long)this.frontSpriteID); + SpritePixels var1 = (SpritePixels)HealthBarDefinition_cachedSprites.get((long)this.frontSpriteID); if (var1 != null) { return var1; } else { @@ -181,11 +181,11 @@ public class HealthBarDefinition extends DualNode { garbageValue = "-8563" ) @Export("getBackSprite") - public Sprite getBackSprite() { + public SpritePixels getBackSprite() { if (this.backSpriteID < 0) { // L: 84 return null; } else { - Sprite var1 = (Sprite)HealthBarDefinition_cachedSprites.get((long)this.backSpriteID); // L: 85 + SpritePixels var1 = (SpritePixels)HealthBarDefinition_cachedSprites.get((long)this.backSpriteID); // L: 85 if (var1 != null) { return var1; // L: 86 } else { diff --git a/runescape-client/src/main/java/HitSplatDefinition.java b/runescape-client/src/main/java/HitSplatDefinition.java index 0db786a6b0..e570c01fc5 100644 --- a/runescape-client/src/main/java/HitSplatDefinition.java +++ b/runescape-client/src/main/java/HitSplatDefinition.java @@ -280,11 +280,11 @@ public class HitSplatDefinition extends DualNode { descriptor = "(I)Llm;", garbageValue = "-1476611889" ) - public Sprite method4583() { + public SpritePixels method4583() { if (this.field3365 < 0) { // L: 127 return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3365); // L: 128 + SpritePixels var1 = (SpritePixels)HitSplatDefinition_cachedSprites.get((long)this.field3365); // L: 128 if (var1 != null) { // L: 129 return var1; } else { @@ -303,11 +303,11 @@ public class HitSplatDefinition extends DualNode { descriptor = "(I)Llm;", garbageValue = "809304727" ) - public Sprite method4578() { + public SpritePixels method4578() { if (this.field3366 < 0) { // L: 137 return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3366); // L: 138 + SpritePixels var1 = (SpritePixels)HitSplatDefinition_cachedSprites.get((long)this.field3366); // L: 138 if (var1 != null) { // L: 139 return var1; } else { @@ -326,11 +326,11 @@ public class HitSplatDefinition extends DualNode { descriptor = "(I)Llm;", garbageValue = "644601071" ) - public Sprite method4587() { + public SpritePixels method4587() { if (this.field3355 < 0) { // L: 147 return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3355); // L: 148 + SpritePixels var1 = (SpritePixels)HitSplatDefinition_cachedSprites.get((long)this.field3355); // L: 148 if (var1 != null) { return var1; // L: 149 } else { @@ -349,11 +349,11 @@ public class HitSplatDefinition extends DualNode { descriptor = "(S)Llm;", garbageValue = "500" ) - public Sprite method4585() { + public SpritePixels method4585() { if (this.field3358 < 0) { // L: 157 return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3358); // L: 158 + SpritePixels var1 = (SpritePixels)HitSplatDefinition_cachedSprites.get((long)this.field3358); // L: 158 if (var1 != null) { return var1; // L: 159 } else { diff --git a/runescape-client/src/main/java/InvDefinition.java b/runescape-client/src/main/java/InvDefinition.java index 3b48ac629d..ab917857d9 100644 --- a/runescape-client/src/main/java/InvDefinition.java +++ b/runescape-client/src/main/java/InvDefinition.java @@ -111,7 +111,7 @@ public class InvDefinition extends DualNode { int var19 = Occluder.Entity_unpackID(ViewportMouse.ViewportMouse_entityTags[var8]); // L: 8590 int var20 = var19; // L: 8592 if (var17 == 2 && ArchiveLoader.scene.getObjectFlags(GameObject.Client_plane, var15, var16, var27) >= 0) { // L: 8593 8594 - ObjectDefinition var21 = WorldMapDecoration.getObjectDefinition(var19); // L: 8595 + ObjectComposition var21 = WorldMapDecoration.getObjectDefinition(var19); // L: 8595 if (var21.transforms != null) { // L: 8596 var21 = var21.transform(); } @@ -230,7 +230,7 @@ public class InvDefinition extends DualNode { NodeDeque var36 = Client.groundItems[GameObject.Client_plane][var15][var16]; // L: 8665 if (var36 != null) { // L: 8666 for (TileItem var35 = (TileItem)var36.first(); var35 != null; var35 = (TileItem)var36.next()) { // L: 8667 8668 8701 - ItemDefinition var39 = SecureRandomCallable.ItemDefinition_get(var35.id); // L: 8669 + ItemComposition var39 = SecureRandomCallable.ItemDefinition_get(var35.id); // L: 8669 if (Client.isItemSelected == 1) { // L: 8670 WorldMapRegion.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class23.colorStartTag(16748608) + var39.name, 16, var35.id, var15, var16); // L: 8671 } else if (Client.isSpellSelected) { // L: 8674 diff --git a/runescape-client/src/main/java/ItemDefinition.java b/runescape-client/src/main/java/ItemComposition.java similarity index 98% rename from runescape-client/src/main/java/ItemDefinition.java rename to runescape-client/src/main/java/ItemComposition.java index 9372696028..508edaa1f7 100644 --- a/runescape-client/src/main/java/ItemDefinition.java +++ b/runescape-client/src/main/java/ItemComposition.java @@ -6,7 +6,7 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jq") @Implements("ItemDefinition") -public class ItemDefinition extends DualNode { +public class ItemComposition extends DualNode { @ObfuscatedName("p") @Export("ItemDefinition_inMembersWorld") static boolean ItemDefinition_inMembersWorld; @@ -290,7 +290,7 @@ public class ItemDefinition extends DualNode { ItemDefinition_cachedSprites = new EvictingDualNodeHashTable(200); // L: 30 } - ItemDefinition() { + ItemComposition() { this.name = "null"; // L: 34 this.zoom2d = 2000; // L: 39 this.xan2d = 0; // L: 40 @@ -491,7 +491,7 @@ public class ItemDefinition extends DualNode { garbageValue = "1371211432" ) @Export("genCert") - void genCert(ItemDefinition var1, ItemDefinition var2) { + void genCert(ItemComposition var1, ItemComposition var2) { this.model = var1.model; // L: 219 this.zoom2d = var1.zoom2d; // L: 220 this.xan2d = var1.xan2d; // L: 221 @@ -515,7 +515,7 @@ public class ItemDefinition extends DualNode { garbageValue = "-1959177502" ) @Export("genBought") - void genBought(ItemDefinition var1, ItemDefinition var2) { + void genBought(ItemComposition var1, ItemComposition var2) { this.model = var1.model; // L: 237 this.zoom2d = var1.zoom2d; // L: 238 this.xan2d = var1.xan2d; // L: 239 @@ -559,7 +559,7 @@ public class ItemDefinition extends DualNode { garbageValue = "312275833" ) @Export("genPlaceholder") - void genPlaceholder(ItemDefinition var1, ItemDefinition var2) { + void genPlaceholder(ItemComposition var1, ItemComposition var2) { this.model = var1.model; // L: 270 this.zoom2d = var1.zoom2d; // L: 271 this.xan2d = var1.xan2d; // L: 272 @@ -684,7 +684,7 @@ public class ItemDefinition extends DualNode { garbageValue = "-1807857103" ) @Export("getCountObj") - public ItemDefinition getCountObj(int var1) { + public ItemComposition getCountObj(int var1) { if (this.countobj != null && var1 > 1) { // L: 342 int var2 = -1; // L: 343 diff --git a/runescape-client/src/main/java/Message.java b/runescape-client/src/main/java/Message.java index c19c0bba74..f282a55542 100644 --- a/runescape-client/src/main/java/Message.java +++ b/runescape-client/src/main/java/Message.java @@ -15,7 +15,7 @@ public class Message extends DualNode { descriptor = "[Llm;" ) @Export("headIconPkSprites") - static Sprite[] headIconPkSprites; + static SpritePixels[] headIconPkSpritePixels; @ObfuscatedName("h") @ObfuscatedGetter( intValue = -1661930895 diff --git a/runescape-client/src/main/java/MouseRecorder.java b/runescape-client/src/main/java/MouseRecorder.java index 3bc3d629ca..3f8ad9959b 100644 --- a/runescape-client/src/main/java/MouseRecorder.java +++ b/runescape-client/src/main/java/MouseRecorder.java @@ -132,7 +132,7 @@ public class MouseRecorder implements Runnable { TileItem var6; for (var6 = (TileItem)var2.last(); var6 != null; var6 = (TileItem)var2.previous()) { // L: 7036 7037 7045 - ItemDefinition var7 = SecureRandomCallable.ItemDefinition_get(var6.id); // L: 7038 + ItemComposition var7 = SecureRandomCallable.ItemDefinition_get(var6.id); // L: 7038 long var11 = (long)var7.price; // L: 7039 if (var7.isStackable == 1) { // L: 7040 var11 *= (long)(var6.quantity + 1); diff --git a/runescape-client/src/main/java/NPC.java b/runescape-client/src/main/java/NPC.java index b27944b5aa..f82a5c4de0 100644 --- a/runescape-client/src/main/java/NPC.java +++ b/runescape-client/src/main/java/NPC.java @@ -22,7 +22,7 @@ public final class NPC extends Actor { descriptor = "Ljd;" ) @Export("definition") - NPCDefinition definition; + NPCComposition definition; NPC() { } // L: 12 diff --git a/runescape-client/src/main/java/NPCDefinition.java b/runescape-client/src/main/java/NPCComposition.java similarity index 98% rename from runescape-client/src/main/java/NPCDefinition.java rename to runescape-client/src/main/java/NPCComposition.java index 4090904a19..b5f6f85d01 100644 --- a/runescape-client/src/main/java/NPCDefinition.java +++ b/runescape-client/src/main/java/NPCComposition.java @@ -6,7 +6,7 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jd") @Implements("NPCDefinition") -public class NPCDefinition extends DualNode { +public class NPCComposition extends DualNode { @ObfuscatedName("h") @ObfuscatedSignature( descriptor = "Lib;" @@ -192,7 +192,7 @@ public class NPCDefinition extends DualNode { NpcDefinition_cachedModels = new EvictingDualNodeHashTable(50); // L: 19 } - NPCDefinition() { + NPCComposition() { this.name = "null"; // L: 21 this.size = 1; // L: 22 this.idleSequence = -1; // L: 25 @@ -378,7 +378,7 @@ public class NPCDefinition extends DualNode { @Export("getModel") public final Model getModel(SequenceDefinition var1, int var2, SequenceDefinition var3, int var4) { if (this.transforms != null) { // L: 163 - NPCDefinition var12 = this.transform(); // L: 164 + NPCComposition var12 = this.transform(); // L: 164 return var12 == null ? null : var12.getModel(var1, var2, var3, var4); // L: 165 166 } else { Model var5 = (Model)NpcDefinition_cachedModels.get((long)this.id); // L: 168 @@ -452,7 +452,7 @@ public class NPCDefinition extends DualNode { @Export("getModelData") public final ModelData getModelData() { if (this.transforms != null) { // L: 201 - NPCDefinition var7 = this.transform(); // L: 202 + NPCComposition var7 = this.transform(); // L: 202 return var7 == null ? null : var7.getModelData(); // L: 203 204 } else if (this.field3502 == null) { // L: 206 return null; @@ -505,7 +505,7 @@ public class NPCDefinition extends DualNode { garbageValue = "-51" ) @Export("transform") - public final NPCDefinition transform() { + public final NPCComposition transform() { int var1 = -1; // L: 229 if (this.transformVarbit != -1) { // L: 230 var1 = Coord.getVarbit(this.transformVarbit); diff --git a/runescape-client/src/main/java/ObjectDefinition.java b/runescape-client/src/main/java/ObjectComposition.java similarity index 99% rename from runescape-client/src/main/java/ObjectDefinition.java rename to runescape-client/src/main/java/ObjectComposition.java index d3e729c37e..5a90164d10 100644 --- a/runescape-client/src/main/java/ObjectDefinition.java +++ b/runescape-client/src/main/java/ObjectComposition.java @@ -6,7 +6,7 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jm") @Implements("ObjectDefinition") -public class ObjectDefinition extends DualNode { +public class ObjectComposition extends DualNode { @ObfuscatedName("h") @Export("ObjectDefinition_isLowDetail") public static boolean ObjectDefinition_isLowDetail; @@ -270,7 +270,7 @@ public class ObjectDefinition extends DualNode { field3386 = new ModelData[4]; // L: 24 } - ObjectDefinition() { + ObjectComposition() { this.name = "null"; this.sizeX = 1; this.sizeY = 1; @@ -844,7 +844,7 @@ public class ObjectDefinition extends DualNode { garbageValue = "2135439243" ) @Export("transform") - public final ObjectDefinition transform() { + public final ObjectComposition transform() { int var1 = -1; // L: 385 if (this.transformVarbit != -1) { // L: 386 var1 = Coord.getVarbit(this.transformVarbit); @@ -920,7 +920,7 @@ public class ObjectDefinition extends DualNode { } else { for (int var1 = 0; var1 < this.transforms.length; ++var1) { // L: 433 if (this.transforms[var1] != -1) { // L: 434 - ObjectDefinition var2 = WorldMapDecoration.getObjectDefinition(this.transforms[var1]); // L: 435 + ObjectComposition var2 = WorldMapDecoration.getObjectDefinition(this.transforms[var1]); // L: 435 if (var2.ambientSoundId != -1 || var2.soundEffectIds != null) { // L: 436 return true; } diff --git a/runescape-client/src/main/java/ObjectSound.java b/runescape-client/src/main/java/ObjectSound.java index 7d789d4251..1a0179a566 100644 --- a/runescape-client/src/main/java/ObjectSound.java +++ b/runescape-client/src/main/java/ObjectSound.java @@ -89,7 +89,7 @@ public final class ObjectSound extends Node { descriptor = "Ljm;" ) @Export("obj") - ObjectDefinition obj; + ObjectComposition obj; static { objectSounds = new NodeDeque(); // L: 11 @@ -106,7 +106,7 @@ public final class ObjectSound extends Node { @Export("set") void set() { int var1 = this.soundEffectId; // L: 30 - ObjectDefinition var2 = this.obj.transform(); // L: 31 + ObjectComposition var2 = this.obj.transform(); // L: 31 if (var2 != null) { // L: 32 this.soundEffectId = var2.ambientSoundId; // L: 33 this.field1086 = var2.int4 * 128; // L: 34 diff --git a/runescape-client/src/main/java/PlayerType.java b/runescape-client/src/main/java/PlayerType.java index 3a1b4853b8..3001c8563e 100644 --- a/runescape-client/src/main/java/PlayerType.java +++ b/runescape-client/src/main/java/PlayerType.java @@ -90,9 +90,9 @@ public enum PlayerType implements Enumerated { descriptor = "(IIII)Llm;", garbageValue = "-320192439" ) - static Sprite method4170(int var0, int var1, int var2) { + static SpritePixels method4170(int var0, int var1, int var2) { DemotingHashTable var3 = WorldMapRegion.WorldMapRegion_cachedSprites; // L: 38 long var4 = (long)(var2 << 16 | var0 << 8 | var1); // L: 41 - return (Sprite)var3.get(var4); // L: 43 + return (SpritePixels)var3.get(var4); // L: 43 } } diff --git a/runescape-client/src/main/java/RouteStrategy.java b/runescape-client/src/main/java/RouteStrategy.java index af01cc9d5f..d6a2051cbe 100644 --- a/runescape-client/src/main/java/RouteStrategy.java +++ b/runescape-client/src/main/java/RouteStrategy.java @@ -779,7 +779,7 @@ public abstract class RouteStrategy { Client.mouseCrossState = 0; // L: 7872 var13 = Client.npcs[var3]; // L: 7873 if (var13 != null) { // L: 7874 - NPCDefinition var17 = var13.definition; // L: 7875 + NPCComposition var17 = var13.definition; // L: 7875 if (var17.transforms != null) { // L: 7876 var17 = var17.transform(); } diff --git a/runescape-client/src/main/java/ScriptEvent.java b/runescape-client/src/main/java/ScriptEvent.java index 9beb8cbc63..d4f9ce83aa 100644 --- a/runescape-client/src/main/java/ScriptEvent.java +++ b/runescape-client/src/main/java/ScriptEvent.java @@ -112,7 +112,7 @@ public class ScriptEvent extends Node { garbageValue = "-82" ) static final void method1259(int var0, int var1, int var2, int var3, int var4, int var5, int var6, Scene var7, CollisionMap var8) { - ObjectDefinition var9 = WorldMapDecoration.getObjectDefinition(var4); // L: 899 + ObjectComposition var9 = WorldMapDecoration.getObjectDefinition(var4); // L: 899 int var10; int var11; if (var5 != 1 && var5 != 3) { // L: 902 diff --git a/runescape-client/src/main/java/SecureRandomCallable.java b/runescape-client/src/main/java/SecureRandomCallable.java index ec055fdbb4..01a6eb62bb 100644 --- a/runescape-client/src/main/java/SecureRandomCallable.java +++ b/runescape-client/src/main/java/SecureRandomCallable.java @@ -27,13 +27,13 @@ public class SecureRandomCallable implements Callable { garbageValue = "97561494" ) @Export("ItemDefinition_get") - public static ItemDefinition ItemDefinition_get(int var0) { - ItemDefinition var1 = (ItemDefinition)ItemDefinition.ItemDefinition_cached.get((long)var0); // L: 92 + public static ItemComposition ItemDefinition_get(int var0) { + ItemComposition var1 = (ItemComposition) ItemComposition.ItemDefinition_cached.get((long)var0); // L: 92 if (var1 != null) { // L: 93 return var1; } else { byte[] var2 = NPC.ItemDefinition_archive.takeFile(10, var0); // L: 94 - var1 = new ItemDefinition(); // L: 95 + var1 = new ItemComposition(); // L: 95 var1.id = var0; // L: 96 if (var2 != null) { // L: 97 var1.decode(new Buffer(var2)); @@ -52,7 +52,7 @@ public class SecureRandomCallable implements Callable { var1.genPlaceholder(ItemDefinition_get(var1.placeholderTemplate), ItemDefinition_get(var1.placeholder)); } - if (!ItemDefinition.ItemDefinition_inMembersWorld && var1.isMembersOnly) { // L: 102 + if (!ItemComposition.ItemDefinition_inMembersWorld && var1.isMembersOnly) { // L: 102 var1.name = "Members object"; // L: 103 var1.isTradable = false; // L: 104 var1.groundActions = null; // L: 105 @@ -77,7 +77,7 @@ public class SecureRandomCallable implements Callable { } } - ItemDefinition.ItemDefinition_cached.put(var1, (long)var0); // L: 119 + ItemComposition.ItemDefinition_cached.put(var1, (long)var0); // L: 119 return var1; // L: 120 } } diff --git a/runescape-client/src/main/java/SecureRandomFuture.java b/runescape-client/src/main/java/SecureRandomFuture.java index fcc9c06517..77116494b4 100644 --- a/runescape-client/src/main/java/SecureRandomFuture.java +++ b/runescape-client/src/main/java/SecureRandomFuture.java @@ -75,9 +75,9 @@ public class SecureRandomFuture { garbageValue = "109574038" ) public static void method2205(boolean var0) { - if (var0 != ItemDefinition.ItemDefinition_inMembersWorld) { // L: 571 + if (var0 != ItemComposition.ItemDefinition_inMembersWorld) { // L: 571 TileItem.method2187(); // L: 572 - ItemDefinition.ItemDefinition_inMembersWorld = var0; // L: 573 + ItemComposition.ItemDefinition_inMembersWorld = var0; // L: 573 } } // L: 575 @@ -545,7 +545,7 @@ public class SecureRandomFuture { if (Client.hintArrowType == 2) { // L: 4621 GrandExchangeOffer.worldToScreen((Client.hintArrowX - NetFileRequest.baseX << 7) + Client.hintArrowSubX, (Client.hintArrowY - class41.baseY << 7) + Client.hintArrowSubY, Client.hintArrowHeight * 2); // L: 4622 if (Client.viewportTempX > -1 && Client.cycle % 20 < 10) { // L: 4623 - AbstractWorldMapIcon.headIconHintSprites[0].drawTransBgAt(var0 + Client.viewportTempX - 12, Client.viewportTempY + var1 - 28); + AbstractWorldMapIcon.headIconHintSpritePixels[0].drawTransBgAt(var0 + Client.viewportTempX - 12, Client.viewportTempY + var1 - 28); } } diff --git a/runescape-client/src/main/java/Skeleton.java b/runescape-client/src/main/java/Skeleton.java index 68b38ed3ce..66e7b665b8 100644 --- a/runescape-client/src/main/java/Skeleton.java +++ b/runescape-client/src/main/java/Skeleton.java @@ -120,7 +120,7 @@ public class Skeleton extends Node { InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var3.id); // L: 10605 if (var4 != null) { // L: 10606 - NPCDefinition.method4759(var4.group); + NPCComposition.method4759(var4.group); } } diff --git a/runescape-client/src/main/java/Skills.java b/runescape-client/src/main/java/Skills.java index 5d2fd3c6e2..cdcbc49810 100644 --- a/runescape-client/src/main/java/Skills.java +++ b/runescape-client/src/main/java/Skills.java @@ -33,11 +33,11 @@ public class Skills { garbageValue = "71" ) @Export("SpriteBuffer_getSprite") - public static Sprite SpriteBuffer_getSprite(AbstractArchive var0, int var1, int var2) { + public static SpritePixels SpriteBuffer_getSprite(AbstractArchive var0, int var1, int var2) { if (!class304.method5363(var0, var1, var2)) { return null; } else { - Sprite var4 = new Sprite(); // L: 57 + SpritePixels var4 = new SpritePixels(); // L: 57 var4.width = DirectByteArrayCopier.SpriteBuffer_spriteWidth; // L: 58 var4.height = class336.SpriteBuffer_spriteHeight; var4.xOffset = class336.SpriteBuffer_xOffsets[0]; // L: 60 diff --git a/runescape-client/src/main/java/Sprite.java b/runescape-client/src/main/java/SpritePixels.java similarity index 99% rename from runescape-client/src/main/java/Sprite.java rename to runescape-client/src/main/java/SpritePixels.java index 2d0a9a6617..4913c582a8 100644 --- a/runescape-client/src/main/java/Sprite.java +++ b/runescape-client/src/main/java/SpritePixels.java @@ -5,7 +5,7 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("lm") @Implements("Sprite") -public final class Sprite extends Rasterizer2D { +public final class SpritePixels extends Rasterizer2D { @ObfuscatedName("h") @Export("pixels") public int[] pixels; @@ -28,7 +28,7 @@ public final class Sprite extends Rasterizer2D { @Export("height") public int height; - public Sprite(int[] var1, int var2, int var3) { + public SpritePixels(int[] var1, int var2, int var3) { this.pixels = var1; // L: 26 this.subWidth = this.width = var2; // L: 27 this.subHeight = this.height = var3; // L: 28 @@ -36,11 +36,11 @@ public final class Sprite extends Rasterizer2D { this.xOffset = 0; // L: 30 } // L: 31 - public Sprite(int var1, int var2) { + public SpritePixels(int var1, int var2) { this(new int[var2 * var1], var1, var2); // L: 22 } // L: 23 - Sprite() { + SpritePixels() { } // L: 19 @ObfuscatedName("h") @@ -48,8 +48,8 @@ public final class Sprite extends Rasterizer2D { descriptor = "()Llm;" ) @Export("mirrorHorizontally") - public Sprite mirrorHorizontally() { - Sprite var1 = new Sprite(this.subWidth, this.subHeight); // L: 34 + public SpritePixels mirrorHorizontally() { + SpritePixels var1 = new SpritePixels(this.subWidth, this.subHeight); // L: 34 var1.width = this.width; // L: 35 var1.height = this.height; // L: 36 var1.xOffset = this.width - this.subWidth - this.xOffset; // L: 37 @@ -69,8 +69,8 @@ public final class Sprite extends Rasterizer2D { descriptor = "()Llm;" ) @Export("copyNormalized") - public Sprite copyNormalized() { - Sprite var1 = new Sprite(this.width, this.height); // L: 48 + public SpritePixels copyNormalized() { + SpritePixels var1 = new SpritePixels(this.width, this.height); // L: 48 for (int var2 = 0; var2 < this.subHeight; ++var2) { // L: 49 for (int var3 = 0; var3 < this.subWidth; ++var3) { // L: 50 diff --git a/runescape-client/src/main/java/StudioGame.java b/runescape-client/src/main/java/StudioGame.java index c93ee5e1b5..134a352f60 100644 --- a/runescape-client/src/main/java/StudioGame.java +++ b/runescape-client/src/main/java/StudioGame.java @@ -97,7 +97,7 @@ public enum StudioGame implements Enumerated { return 1; // L: 2797 } else { int var4; - ItemDefinition var5; + ItemComposition var5; if (var0 == ScriptOpcodes.OC_OP) { // L: 2799 VarcInt.Interpreter_intStackSize -= 2; // L: 2800 var6 = Interpreter.Interpreter_intStack[VarcInt.Interpreter_intStackSize]; // L: 2801 @@ -131,7 +131,7 @@ public enum StudioGame implements Enumerated { Interpreter.Interpreter_intStack[++VarcInt.Interpreter_intStackSize - 1] = SecureRandomCallable.ItemDefinition_get(var6).isStackable == 1 ? 1 : 0; // L: 2824 return 1; // L: 2825 } else { - ItemDefinition var7; + ItemComposition var7; if (var0 == ScriptOpcodes.OC_CERT) { // L: 2827 var6 = Interpreter.Interpreter_intStack[--VarcInt.Interpreter_intStackSize]; // L: 2828 var7 = SecureRandomCallable.ItemDefinition_get(var6); // L: 2829 diff --git a/runescape-client/src/main/java/TileItem.java b/runescape-client/src/main/java/TileItem.java index 826d1b1d63..46686b3cb0 100644 --- a/runescape-client/src/main/java/TileItem.java +++ b/runescape-client/src/main/java/TileItem.java @@ -154,9 +154,9 @@ public final class TileItem extends Entity { garbageValue = "-1747466644" ) public static void method2187() { - ItemDefinition.ItemDefinition_cached.clear(); // L: 565 - ItemDefinition.ItemDefinition_cachedModels.clear(); // L: 566 - ItemDefinition.ItemDefinition_cachedSprites.clear(); // L: 567 + ItemComposition.ItemDefinition_cached.clear(); // L: 565 + ItemComposition.ItemDefinition_cachedModels.clear(); // L: 566 + ItemComposition.ItemDefinition_cachedSprites.clear(); // L: 567 } // L: 568 @ObfuscatedName("jl") @@ -165,7 +165,7 @@ public final class TileItem extends Entity { garbageValue = "9349" ) @Export("addNpcToMenu") - static final void addNpcToMenu(NPCDefinition var0, int var1, int var2, int var3) { + static final void addNpcToMenu(NPCComposition var0, int var1, int var2, int var3) { if (Client.menuOptionsCount < 400) { // L: 8719 if (var0.transforms != null) { // L: 8720 var0 = var0.transform(); diff --git a/runescape-client/src/main/java/UrlRequester.java b/runescape-client/src/main/java/UrlRequester.java index 0256efd286..bf22d1ad7c 100644 --- a/runescape-client/src/main/java/UrlRequester.java +++ b/runescape-client/src/main/java/UrlRequester.java @@ -24,7 +24,7 @@ public class UrlRequester implements Runnable { descriptor = "Llm;" ) @Export("compass") - static Sprite compass; + static SpritePixels compass; @ObfuscatedName("h") @Export("thread") final Thread thread; diff --git a/runescape-client/src/main/java/UserComparator4.java b/runescape-client/src/main/java/UserComparator4.java index 4a969a4bdf..180d62d37c 100644 --- a/runescape-client/src/main/java/UserComparator4.java +++ b/runescape-client/src/main/java/UserComparator4.java @@ -330,7 +330,7 @@ public class UserComparator4 implements Comparator { } if (var17 != null) { // L: 6854 - ObjectDefinition var18 = WorldMapDecoration.getObjectDefinition(var14); // L: 6855 + ObjectComposition var18 = WorldMapDecoration.getObjectDefinition(var14); // L: 6855 int var19; int var20; if (var5 != 1 && var5 != 3) { // L: 6858 diff --git a/runescape-client/src/main/java/UserComparator9.java b/runescape-client/src/main/java/UserComparator9.java index 0b9528d4ff..c571e7ae01 100644 --- a/runescape-client/src/main/java/UserComparator9.java +++ b/runescape-client/src/main/java/UserComparator9.java @@ -86,7 +86,7 @@ public class UserComparator9 extends AbstractUserComparator { int var5 = Interpreter.Interpreter_intStack[VarcInt.Interpreter_intStackSize + 1]; // L: 743 var3.itemId = var4; // L: 744 var3.itemQuantity = var5; // L: 745 - ItemDefinition var6 = SecureRandomCallable.ItemDefinition_get(var4); // L: 746 + ItemComposition var6 = SecureRandomCallable.ItemDefinition_get(var4); // L: 746 var3.modelAngleX = var6.xan2d; // L: 747 var3.modelAngleY = var6.yan2d; // L: 748 var3.modelAngleZ = var6.zan2d; // L: 749 diff --git a/runescape-client/src/main/java/VarbitDefinition.java b/runescape-client/src/main/java/VarbitDefinition.java index f5304f1d5c..68adb621fb 100644 --- a/runescape-client/src/main/java/VarbitDefinition.java +++ b/runescape-client/src/main/java/VarbitDefinition.java @@ -115,7 +115,7 @@ public class VarbitDefinition extends DualNode { for (int var6 = var2; var6 < var3; ++var6) { // L: 82 char var7 = var0.charAt(var6); // L: 83 - if (ObjectDefinition.method4657(var7)) { // L: 84 + if (ObjectComposition.method4657(var7)) { // L: 84 char var8 = UserComparator10.method3492(var7); // L: 85 if (var8 != 0) { // L: 86 var9.append(var8); // L: 87 diff --git a/runescape-client/src/main/java/ViewportMouse.java b/runescape-client/src/main/java/ViewportMouse.java index 7639cc1b9b..7eced93120 100644 --- a/runescape-client/src/main/java/ViewportMouse.java +++ b/runescape-client/src/main/java/ViewportMouse.java @@ -68,7 +68,7 @@ public class ViewportMouse { descriptor = "Llm;" ) @Export("redHintArrowSprite") - static Sprite redHintArrowSprite; + static SpritePixels redHintArrowSpritePixels; static { ViewportMouse_isInViewport = false; // L: 4 diff --git a/runescape-client/src/main/java/Widget.java b/runescape-client/src/main/java/Widget.java index 7cacc96e05..06e20ce555 100644 --- a/runescape-client/src/main/java/Widget.java +++ b/runescape-client/src/main/java/Widget.java @@ -1245,7 +1245,7 @@ public class Widget extends Node { garbageValue = "14" ) @Export("getSprite") - public Sprite getSprite(boolean var1) { + public SpritePixels getSprite(boolean var1) { field2603 = false; // L: 530 int var2; if (var1) { // L: 532 @@ -1258,7 +1258,7 @@ public class Widget extends Node { return null; } else { long var3 = ((long)this.spriteShadow << 40) + ((this.spriteFlipV ? 1L : 0L) << 38) + ((long)this.outline << 36) + (long)var2 + ((this.spriteFlipH ? 1L : 0L) << 39); // L: 535 - Sprite var5 = (Sprite)Widget_cachedSprites.get(var3); // L: 536 + SpritePixels var5 = (SpritePixels)Widget_cachedSprites.get(var3); // L: 536 if (var5 != null) { // L: 537 return var5; } else { @@ -1331,14 +1331,14 @@ public class Widget extends Node { garbageValue = "1550530577" ) @Export("getInventorySprite") - public Sprite getInventorySprite(int var1) { + public SpritePixels getInventorySprite(int var1) { field2603 = false; // L: 565 if (var1 >= 0 && var1 < this.inventorySprites.length) { // L: 566 int var2 = this.inventorySprites[var1]; // L: 567 if (var2 == -1) { // L: 568 return null; } else { - Sprite var3 = (Sprite)Widget_cachedSprites.get((long)var2); // L: 569 + SpritePixels var3 = (SpritePixels)Widget_cachedSprites.get((long)var2); // L: 569 if (var3 != null) { // L: 570 return var3; } else { @@ -1418,7 +1418,7 @@ public class Widget extends Node { } if (var5 == 4) { // L: 619 - ItemDefinition var9 = SecureRandomCallable.ItemDefinition_get(var6); // L: 620 + ItemComposition var9 = SecureRandomCallable.ItemDefinition_get(var6); // L: 620 var8 = var9.getModelData(10); // L: 621 if (var8 == null) { // L: 622 field2603 = true; // L: 623 @@ -1459,11 +1459,11 @@ public class Widget extends Node { if (var5 != null) { // L: 642 return var5; } else { - Sprite var6 = this.getSprite(var1); // L: 643 + SpritePixels var6 = this.getSprite(var1); // L: 643 if (var6 == null) { // L: 644 return null; } else { - Sprite var7 = var6.copyNormalized(); // L: 645 + SpritePixels var7 = var6.copyNormalized(); // L: 645 int[] var8 = new int[var7.subHeight]; // L: 646 int[] var9 = new int[var7.subHeight]; // L: 647 diff --git a/runescape-client/src/main/java/World.java b/runescape-client/src/main/java/World.java index 02ef661570..3424e260f3 100644 --- a/runescape-client/src/main/java/World.java +++ b/runescape-client/src/main/java/World.java @@ -172,8 +172,8 @@ public class World { garbageValue = "-186964533" ) public static void method1849(AbstractArchive var0, AbstractArchive var1) { - NPCDefinition.NpcDefinition_archive = var0; // L: 57 - NPCDefinition.NpcDefinition_modelArchive = var1; // L: 58 + NPCComposition.NpcDefinition_archive = var0; // L: 57 + NPCComposition.NpcDefinition_modelArchive = var1; // L: 58 } // L: 59 @ObfuscatedName("x") diff --git a/runescape-client/src/main/java/WorldMap.java b/runescape-client/src/main/java/WorldMap.java index c319a48bb9..3286c4f2d0 100644 --- a/runescape-client/src/main/java/WorldMap.java +++ b/runescape-client/src/main/java/WorldMap.java @@ -260,7 +260,7 @@ public class WorldMap { descriptor = "Llm;" ) @Export("sprite") - Sprite sprite; + SpritePixels spritePixels; @ObfuscatedName("bn") @ObfuscatedGetter( intValue = -905159911 @@ -802,9 +802,9 @@ public class WorldMap { garbageValue = "-90" ) boolean method6515(int var1, int var2, int var3, int var4, int var5, int var6) { - if (this.sprite == null) { // L: 449 + if (this.spritePixels == null) { // L: 449 return true; - } else if (this.sprite.subWidth == var1 && this.sprite.subHeight == var2) { // L: 450 + } else if (this.spritePixels.subWidth == var1 && this.spritePixels.subHeight == var2) { // L: 450 if (this.worldMapManager.pixelsPerTile != this.cachedPixelsPerTile) { // L: 451 return true; } else if (this.field4048 != Client.field915) { // L: 452 @@ -837,16 +837,16 @@ public class WorldMap { int var13 = var1 - (var7 + var11 - this.minCachedTileX) * this.worldMapManager.pixelsPerTile; // L: 468 int var14 = var2 - this.worldMapManager.pixelsPerTile * (var7 - (var12 - this.minCachedTileY)); // L: 469 if (this.method6515(var8, var9, var13, var14, var3, var4)) { // L: 470 - if (this.sprite != null && this.sprite.subWidth == var8 && this.sprite.subHeight == var9) { // L: 471 - Arrays.fill(this.sprite.pixels, 0); // L: 474 + if (this.spritePixels != null && this.spritePixels.subWidth == var8 && this.spritePixels.subHeight == var9) { // L: 471 + Arrays.fill(this.spritePixels.pixels, 0); // L: 474 } else { - this.sprite = new Sprite(var8, var9); // L: 472 + this.spritePixels = new SpritePixels(var8, var9); // L: 472 } this.minCachedTileX = this.getDisplayX() - var5 / 2 - var7; // L: 475 this.minCachedTileY = this.getDisplayY() - var6 / 2 - var7; // L: 476 this.cachedPixelsPerTile = this.worldMapManager.pixelsPerTile; // L: 477 - WorldMapIcon_0.field148.method4346(this.minCachedTileX, this.minCachedTileY, this.sprite, (float)this.cachedPixelsPerTile / var10); // L: 478 + WorldMapIcon_0.field148.method4346(this.minCachedTileX, this.minCachedTileY, this.spritePixels, (float)this.cachedPixelsPerTile / var10); // L: 478 this.field4048 = Client.field915; // L: 479 var13 = var1 - (var7 + var11 - this.minCachedTileX) * this.worldMapManager.pixelsPerTile; // L: 480 var14 = var2 - this.worldMapManager.pixelsPerTile * (var7 - (var12 - this.minCachedTileY)); // L: 481 @@ -854,9 +854,9 @@ public class WorldMap { Rasterizer2D.Rasterizer2D_fillRectangleAlpha(var1, var2, var3, var4, 0, 128); // L: 483 if (1.0F == var10) { // L: 484 - this.sprite.method6181(var13, var14, 192); // L: 485 + this.spritePixels.method6181(var13, var14, 192); // L: 485 } else { - this.sprite.method6184(var13, var14, (int)((float)var8 * var10), (int)(var10 * (float)var9), 192); // L: 488 + this.spritePixels.method6184(var13, var14, (int)((float)var8 * var10), (int)(var10 * (float)var9), 192); // L: 488 } } diff --git a/runescape-client/src/main/java/WorldMapData_1.java b/runescape-client/src/main/java/WorldMapData_1.java index 3298ff5703..f359159bf7 100644 --- a/runescape-client/src/main/java/WorldMapData_1.java +++ b/runescape-client/src/main/java/WorldMapData_1.java @@ -402,7 +402,7 @@ public class WorldMapData_1 extends AbstractWorldMapData { int var14 = Occluder.Entity_unpackID(var7); // L: 6999 int var15 = var12 & 31; // L: 7000 int var16 = var12 >> 6 & 3; // L: 7001 - ObjectDefinition var13; + ObjectComposition var13; if (var1 == 0) { // L: 7002 ArchiveLoader.scene.removeBoundaryObject(var0, var2, var3); // L: 7003 var13 = WorldMapDecoration.getObjectDefinition(var14); // L: 7004 diff --git a/runescape-client/src/main/java/WorldMapDecoration.java b/runescape-client/src/main/java/WorldMapDecoration.java index 39045f3c0b..2dae17561a 100644 --- a/runescape-client/src/main/java/WorldMapDecoration.java +++ b/runescape-client/src/main/java/WorldMapDecoration.java @@ -39,13 +39,13 @@ public class WorldMapDecoration { garbageValue = "-671846279" ) @Export("getObjectDefinition") - public static ObjectDefinition getObjectDefinition(int var0) { - ObjectDefinition var1 = (ObjectDefinition)ObjectDefinition.ObjectDefinition_cached.get((long)var0); // L: 73 + public static ObjectComposition getObjectDefinition(int var0) { + ObjectComposition var1 = (ObjectComposition) ObjectComposition.ObjectDefinition_cached.get((long)var0); // L: 73 if (var1 != null) { // L: 74 return var1; } else { - byte[] var2 = ObjectDefinition.ObjectDefinition_archive.takeFile(6, var0); // L: 75 - var1 = new ObjectDefinition(); // L: 76 + byte[] var2 = ObjectComposition.ObjectDefinition_archive.takeFile(6, var0); // L: 75 + var1 = new ObjectComposition(); // L: 76 var1.id = var0; // L: 77 if (var2 != null) { // L: 78 var1.decode(new Buffer(var2)); @@ -57,7 +57,7 @@ public class WorldMapDecoration { var1.boolean1 = false; // L: 82 } - ObjectDefinition.ObjectDefinition_cached.put(var1, (long)var0); // L: 84 + ObjectComposition.ObjectDefinition_cached.put(var1, (long)var0); // L: 84 return var1; // L: 85 } } diff --git a/runescape-client/src/main/java/WorldMapElement.java b/runescape-client/src/main/java/WorldMapElement.java index bcf2fe0299..cd7d2cfd8f 100644 --- a/runescape-client/src/main/java/WorldMapElement.java +++ b/runescape-client/src/main/java/WorldMapElement.java @@ -277,7 +277,7 @@ public class WorldMapElement extends DualNode { garbageValue = "-375882692" ) @Export("getSpriteBool") - public Sprite getSpriteBool(boolean var1) { + public SpritePixels getSpriteBool(boolean var1) { int var2 = this.sprite1; // L: 161 return this.getSprite(var2); // L: 162 } @@ -288,11 +288,11 @@ public class WorldMapElement extends DualNode { garbageValue = "954144981" ) @Export("getSprite") - Sprite getSprite(int var1) { + SpritePixels getSprite(int var1) { if (var1 < 0) { // L: 166 return null; } else { - Sprite var2 = (Sprite)WorldMapElement_cachedSprites.get((long)var1); // L: 167 + SpritePixels var2 = (SpritePixels)WorldMapElement_cachedSprites.get((long)var1); // L: 167 if (var2 != null) { // L: 168 return var2; } else { diff --git a/runescape-client/src/main/java/WorldMapIcon_0.java b/runescape-client/src/main/java/WorldMapIcon_0.java index fb17454e94..db0a26b259 100644 --- a/runescape-client/src/main/java/WorldMapIcon_0.java +++ b/runescape-client/src/main/java/WorldMapIcon_0.java @@ -65,7 +65,7 @@ public class WorldMapIcon_0 extends AbstractWorldMapIcon { this.element = var3; // L: 15 this.label = var4; // L: 16 WorldMapElement var5 = UserComparator10.WorldMapElement_get(this.getElement()); // L: 17 - Sprite var6 = var5.getSpriteBool(false); // L: 18 + SpritePixels var6 = var5.getSpriteBool(false); // L: 18 if (var6 != null) { // L: 19 this.subWidth = var6.subWidth; // L: 20 this.subHeight = var6.subHeight; // L: 21 @@ -122,20 +122,20 @@ public class WorldMapIcon_0 extends AbstractWorldMapIcon { garbageValue = "-1562808952" ) @Export("getNpcDefinition") - public static NPCDefinition getNpcDefinition(int var0) { - NPCDefinition var1 = (NPCDefinition)NPCDefinition.NpcDefinition_cached.get((long)var0); // L: 62 + public static NPCComposition getNpcDefinition(int var0) { + NPCComposition var1 = (NPCComposition) NPCComposition.NpcDefinition_cached.get((long)var0); // L: 62 if (var1 != null) { // L: 63 return var1; } else { - byte[] var2 = NPCDefinition.NpcDefinition_archive.takeFile(9, var0); // L: 64 - var1 = new NPCDefinition(); // L: 65 + byte[] var2 = NPCComposition.NpcDefinition_archive.takeFile(9, var0); // L: 64 + var1 = new NPCComposition(); // L: 65 var1.id = var0; // L: 66 if (var2 != null) { // L: 67 var1.decode(new Buffer(var2)); } var1.postDecode(); // L: 68 - NPCDefinition.NpcDefinition_cached.put(var1, (long)var0); // L: 69 + NPCComposition.NpcDefinition_cached.put(var1, (long)var0); // L: 69 return var1; // L: 70 } } diff --git a/runescape-client/src/main/java/WorldMapIcon_1.java b/runescape-client/src/main/java/WorldMapIcon_1.java index 7b76a087ec..038bf382bb 100644 --- a/runescape-client/src/main/java/WorldMapIcon_1.java +++ b/runescape-client/src/main/java/WorldMapIcon_1.java @@ -110,7 +110,7 @@ public class WorldMapIcon_1 extends AbstractWorldMapIcon { this.element = WorldMapDecoration.getObjectDefinition(this.objectDefId).transform().mapIconId; // L: 24 this.label = this.region.createMapLabel(UserComparator10.WorldMapElement_get(this.element)); // L: 25 WorldMapElement var1 = UserComparator10.WorldMapElement_get(this.getElement()); // L: 26 - Sprite var2 = var1.getSpriteBool(false); // L: 27 + SpritePixels var2 = var1.getSpriteBool(false); // L: 27 if (var2 != null) { // L: 28 this.subWidth = var2.subWidth; // L: 29 this.subHeight = var2.subHeight; // L: 30 @@ -205,8 +205,8 @@ public class WorldMapIcon_1 extends AbstractWorldMapIcon { garbageValue = "620552386" ) public static void method339() { - NPCDefinition.NpcDefinition_cached.clear(); // L: 285 - NPCDefinition.NpcDefinition_cachedModels.clear(); // L: 286 + NPCComposition.NpcDefinition_cached.clear(); // L: 285 + NPCComposition.NpcDefinition_cachedModels.clear(); // L: 286 } // L: 287 @ObfuscatedName("q") diff --git a/runescape-client/src/main/java/WorldMapManager.java b/runescape-client/src/main/java/WorldMapManager.java index 69899cf43e..d616916975 100644 --- a/runescape-client/src/main/java/WorldMapManager.java +++ b/runescape-client/src/main/java/WorldMapManager.java @@ -47,7 +47,7 @@ public final class WorldMapManager { descriptor = "Llm;" ) @Export("compositeTextureSprite") - Sprite compositeTextureSprite; + SpritePixels compositeTextureSpritePixels; @ObfuscatedName("t") @Export("icons") HashMap icons; @@ -189,7 +189,7 @@ public final class WorldMapManager { System.nanoTime(); // L: 93 if (var1.isValidFileName(WorldMapCacheName.field327.name, var2)) { // L: 94 byte[] var20 = var1.takeFileByNames(WorldMapCacheName.field327.name, var2); // L: 95 - this.compositeTextureSprite = WorldMapSection0.convertJpgToSprite(var20); // L: 96 + this.compositeTextureSpritePixels = WorldMapSection0.convertJpgToSprite(var20); // L: 96 } System.nanoTime(); // L: 98 @@ -298,8 +298,8 @@ public final class WorldMapManager { ) @Export("drawOverview") public void drawOverview(int var1, int var2, int var3, int var4, HashSet var5, int var6, int var7) { - if (this.compositeTextureSprite != null) { // L: 166 - this.compositeTextureSprite.drawScaledAt(var1, var2, var3, var4); // L: 169 + if (this.compositeTextureSpritePixels != null) { // L: 166 + this.compositeTextureSpritePixels.drawScaledAt(var1, var2, var3, var4); // L: 169 if (var6 > 0 && var6 % var7 < var7 / 2) { // L: 170 if (this.icons == null) { // L: 173 this.buildIcons0(); // L: 174 @@ -777,7 +777,7 @@ public final class WorldMapManager { garbageValue = "-1786223770" ) @Export("getItemSprite") - public static final Sprite getItemSprite(int var0, int var1, int var2, int var3, int var4, boolean var5) { + public static final SpritePixels getItemSprite(int var0, int var1, int var2, int var3, int var4, boolean var5) { if (var1 == -1) { // L: 353 var4 = 0; } else if (var4 == 2 && var1 != 1) { // L: 354 @@ -785,15 +785,15 @@ public final class WorldMapManager { } long var6 = ((long)var3 << 42) + ((long)var4 << 40) + ((long)var2 << 38) + (long)var0 + ((long)var1 << 16); // L: 355 - Sprite var8; + SpritePixels var8; if (!var5) { // L: 357 - var8 = (Sprite)ItemDefinition.ItemDefinition_cachedSprites.get(var6); // L: 358 + var8 = (SpritePixels) ItemComposition.ItemDefinition_cachedSprites.get(var6); // L: 358 if (var8 != null) { // L: 359 return var8; } } - ItemDefinition var9 = SecureRandomCallable.ItemDefinition_get(var0); // L: 361 + ItemComposition var9 = SecureRandomCallable.ItemDefinition_get(var0); // L: 361 if (var1 > 1 && var9.countobj != null) { // L: 362 int var10 = -1; // L: 363 @@ -812,7 +812,7 @@ public final class WorldMapManager { if (var19 == null) { // L: 370 return null; } else { - Sprite var20 = null; // L: 371 + SpritePixels var20 = null; // L: 371 if (var9.noteTemplate != -1) { // L: 372 var20 = getItemSprite(var9.note, 10, 1, 0, 0, true); // L: 373 if (var20 == null) { // L: 374 @@ -835,7 +835,7 @@ public final class WorldMapManager { int var14 = Rasterizer2D.Rasterizer2D_height; // L: 386 int[] var15 = new int[4]; // L: 387 Rasterizer2D.Rasterizer2D_getClipArray(var15); // L: 388 - var8 = new Sprite(36, 32); // L: 389 + var8 = new SpritePixels(36, 32); // L: 389 Rasterizer2D.Rasterizer2D_replace(var8.pixels, 36, 32); // L: 390 Rasterizer2D.Rasterizer2D_clear(); // L: 391 Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); // L: 392 @@ -878,11 +878,11 @@ public final class WorldMapManager { } if (var4 == 1 || var4 == 2 && var9.isStackable == 1) { // L: 409 - ItemDefinition.ItemDefinition_fontPlain11.draw(class195.inventoryQuantityFormat(var1), 0, 9, 16776960, 1); // L: 410 + ItemComposition.ItemDefinition_fontPlain11.draw(class195.inventoryQuantityFormat(var1), 0, 9, 16776960, 1); // L: 410 } if (!var5) { // L: 412 - ItemDefinition.ItemDefinition_cachedSprites.put(var8, var6); + ItemComposition.ItemDefinition_cachedSprites.put(var8, var6); } Rasterizer2D.Rasterizer2D_replace(var12, var13, var14); // L: 413 diff --git a/runescape-client/src/main/java/WorldMapRectangle.java b/runescape-client/src/main/java/WorldMapRectangle.java index 502dcc6d06..96c0169d34 100644 --- a/runescape-client/src/main/java/WorldMapRectangle.java +++ b/runescape-client/src/main/java/WorldMapRectangle.java @@ -113,10 +113,10 @@ public final class WorldMapRectangle { FloorOverlayDefinition.FloorOverlayDefinition_cached.clear(); // L: 2863 MusicPatchPcmStream.method3953(); // L: 2865 UserComparator2.method5959(); // L: 2866 - ObjectDefinition.ObjectDefinition_cached.clear(); // L: 2868 - ObjectDefinition.ObjectDefinition_cachedModelData.clear(); // L: 2869 - ObjectDefinition.ObjectDefinition_cachedEntities.clear(); // L: 2870 - ObjectDefinition.ObjectDefinition_cachedModels.clear(); // L: 2871 + ObjectComposition.ObjectDefinition_cached.clear(); // L: 2868 + ObjectComposition.ObjectDefinition_cachedModelData.clear(); // L: 2869 + ObjectComposition.ObjectDefinition_cachedEntities.clear(); // L: 2870 + ObjectComposition.ObjectDefinition_cachedModels.clear(); // L: 2871 WorldMapIcon_1.method339(); // L: 2873 TileItem.method2187(); // L: 2874 SequenceDefinition.SequenceDefinition_cached.clear(); // L: 2876 diff --git a/runescape-client/src/main/java/WorldMapRegion.java b/runescape-client/src/main/java/WorldMapRegion.java index 4061bf3934..aaf411035a 100644 --- a/runescape-client/src/main/java/WorldMapRegion.java +++ b/runescape-client/src/main/java/WorldMapRegion.java @@ -95,7 +95,7 @@ public class WorldMapRegion { garbageValue = "-1252499183" ) void method534(int var1, int var2, int var3) { - Sprite var4 = PlayerType.method4170(this.regionX, this.regionY, this.pixelsPerTile); // L: 61 + SpritePixels var4 = PlayerType.method4170(this.regionX, this.regionY, this.pixelsPerTile); // L: 61 if (var4 != null) { // L: 62 if (var3 == this.pixelsPerTile * 64) { // L: 63 var4.drawAt(var1, var2); // L: 64 @@ -154,7 +154,7 @@ public class WorldMapRegion { WorldMapDecoration[] var10 = var9; // L: 99 for (int var11 = 0; var11 < var10.length; ++var11) { // L: 100 - ObjectDefinition var13; + ObjectComposition var13; boolean var14; label66: { WorldMapDecoration var12 = var10[var11]; // L: 101 @@ -164,7 +164,7 @@ public class WorldMapRegion { for (int var16 = 0; var16 < var15.length; ++var16) { // L: 109 int var17 = var15[var16]; // L: 110 - ObjectDefinition var18 = WorldMapDecoration.getObjectDefinition(var17); // L: 112 + ObjectComposition var18 = WorldMapDecoration.getObjectDefinition(var17); // L: 112 if (var18.mapIconId != -1) { // L: 113 var14 = true; // L: 114 break label66; @@ -196,7 +196,7 @@ public class WorldMapRegion { garbageValue = "1801137136" ) @Export("getIcon") - void getIcon(ObjectDefinition var1, int var2, int var3, int var4, AbstractWorldMapData var5) { + void getIcon(ObjectComposition var1, int var2, int var3, int var4, AbstractWorldMapData var5) { Coord var6 = new Coord(var2, var3 + this.regionX * 64, this.regionY * 64 + var4); // L: 141 Coord var7 = null; // L: 142 if (this.worldMapData_0 != null) { // L: 143 @@ -340,7 +340,7 @@ public class WorldMapRegion { if (var6) { // L: 254 byte[] var7 = var5.takeFileFlat(var8); // L: 255 WorldMapSprite var9 = DynamicObject.method2300(var7); // L: 256 - Sprite var10 = new Sprite(this.pixelsPerTile * 64, this.pixelsPerTile * 64); // L: 257 + SpritePixels var10 = new SpritePixels(this.pixelsPerTile * 64, this.pixelsPerTile * 64); // L: 257 var10.setRaster(); // L: 258 if (this.worldMapData_0 != null) { // L: 259 this.method471(var2, var3, var9); // L: 260 @@ -541,7 +541,7 @@ public class WorldMapRegion { int var11 = var9.decoration; // L: 402 boolean var10 = var11 >= WorldMapDecorationType.field2764.id && var11 <= WorldMapDecorationType.field2755.id; // L: 404 if (var10 || BoundaryObject.method3342(var9.decoration)) { // L: 406 - ObjectDefinition var12 = WorldMapDecoration.getObjectDefinition(var9.objectDefinitionId); // L: 407 + ObjectComposition var12 = WorldMapDecoration.getObjectDefinition(var9.objectDefinitionId); // L: 407 if (var12.mapSceneId != -1) { // L: 408 if (var12.mapSceneId != 46 && var12.mapSceneId != 52) { // L: 409 var4[var12.mapSceneId].method6141(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile * 2, this.pixelsPerTile * 2); // L: 413 @@ -570,7 +570,7 @@ public class WorldMapRegion { for (int var7 = 0; var7 < var6.length; ++var7) { // L: 431 WorldMapDecoration var8 = var6[var7]; // L: 432 if (FriendLoginUpdate.method5290(var8.decoration)) { // L: 434 - ObjectDefinition var9 = WorldMapDecoration.getObjectDefinition(var8.objectDefinitionId); // L: 435 + ObjectComposition var9 = WorldMapDecoration.getObjectDefinition(var8.objectDefinitionId); // L: 435 int var10 = var9.int1 != 0 ? -3407872 : -3355444; // L: 436 if (var8.decoration == WorldMapDecorationType.field2761.id) { // L: 437 this.method503(var1, var2, var8.rotation, var10); // L: 438 @@ -675,7 +675,7 @@ public class WorldMapRegion { ) @Export("drawBackgroundCircle") void drawBackgroundCircle(WorldMapElement var1, int var2, int var3, int var4, int var5) { - Sprite var6 = var1.getSpriteBool(false); // L: 506 + SpritePixels var6 = var1.getSpriteBool(false); // L: 506 if (var6 != null) { // L: 507 var6.drawTransBgAt(var2 - var6.subWidth / 2, var3 - var6.subHeight / 2); // L: 510 if (var4 % var5 < var5 / 2) { // L: 511 @@ -703,7 +703,7 @@ public class WorldMapRegion { garbageValue = "0" ) void method494(WorldMapElement var1, int var2, int var3) { - Sprite var4 = var1.getSpriteBool(false); // L: 524 + SpritePixels var4 = var1.getSpriteBool(false); // L: 524 if (var4 != null) { // L: 525 int var5 = this.method497(var4, var1.horizontalAlignment); // L: 526 int var6 = this.method498(var4, var1.verticalAlignment); // L: 527 @@ -757,7 +757,7 @@ public class WorldMapRegion { descriptor = "(Llm;Ljt;I)I", garbageValue = "-1268952607" ) - int method497(Sprite var1, HorizontalAlignment var2) { + int method497(SpritePixels var1, HorizontalAlignment var2) { switch(var2.value) { // L: 563 case 1: return -var1.subWidth / 2; // L: 570 @@ -773,7 +773,7 @@ public class WorldMapRegion { descriptor = "(Llm;Lit;S)I", garbageValue = "-11626" ) - int method498(Sprite var1, VerticalAlignment var2) { + int method498(SpritePixels var1, VerticalAlignment var2) { switch(var2.value) { // L: 580 case 1: return 0; // L: 583 @@ -1046,7 +1046,7 @@ public class WorldMapRegion { Client.dragItemSlotDestination = var15; // L: 9747 Occluder.hoveredItemContainer = var0; // L: 9748 if (var0.itemIds[var15] > 0) { // L: 9749 - ItemDefinition var8 = SecureRandomCallable.ItemDefinition_get(var0.itemIds[var15] - 1); // L: 9750 + ItemComposition var8 = SecureRandomCallable.ItemDefinition_get(var0.itemIds[var15] - 1); // L: 9750 if (Client.isItemSelected == 1 && class52.method844(FaceNormal.getWidgetFlags(var0))) { // L: 9751 if (var0.id != WorldMapLabelSize.selectedItemWidget || var15 != ChatChannel.selectedItemSlot) { // L: 9752 insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class23.colorStartTag(16748608) + var8.name, 31, var8.id, var15, var0.id); // L: 9753 diff --git a/runescape-client/src/main/java/WorldMapSection0.java b/runescape-client/src/main/java/WorldMapSection0.java index f272298f56..bef874f33e 100644 --- a/runescape-client/src/main/java/WorldMapSection0.java +++ b/runescape-client/src/main/java/WorldMapSection0.java @@ -219,7 +219,7 @@ public class WorldMapSection0 implements WorldMapSection { garbageValue = "1856556337" ) @Export("convertJpgToSprite") - public static final Sprite convertJpgToSprite(byte[] var0) { + public static final SpritePixels convertJpgToSprite(byte[] var0) { BufferedImage var1 = null; // L: 20 try { @@ -229,12 +229,12 @@ public class WorldMapSection0 implements WorldMapSection { int[] var4 = new int[var2 * var3]; // L: 25 PixelGrabber var5 = new PixelGrabber(var1, 0, 0, var2, var3, var4, 0, var2); // L: 26 var5.grabPixels(); // L: 27 - return new Sprite(var4, var2, var3); // L: 28 + return new SpritePixels(var4, var2, var3); // L: 28 } catch (IOException var7) { // L: 30 } catch (InterruptedException var8) { // L: 31 } - return new Sprite(0, 0); // L: 32 + return new SpritePixels(0, 0); // L: 32 } @ObfuscatedName("j") diff --git a/runescape-client/src/main/java/WorldMapSection1.java b/runescape-client/src/main/java/WorldMapSection1.java index c4a21d5bd6..e383cd225e 100644 --- a/runescape-client/src/main/java/WorldMapSection1.java +++ b/runescape-client/src/main/java/WorldMapSection1.java @@ -203,7 +203,7 @@ public class WorldMapSection1 implements WorldMapSection { static final void method626(double var0) { Rasterizer3D.Rasterizer3D_setBrightness(var0); // L: 10642 ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(var0); // L: 10643 - ItemDefinition.ItemDefinition_cachedSprites.clear(); // L: 10645 + ItemComposition.ItemDefinition_cachedSprites.clear(); // L: 10645 Timer.clientPreferences.field1057 = var0; // L: 10647 GrandExchangeOffer.savePreferences(); // L: 10648 } // L: 10649 @@ -220,7 +220,7 @@ public class WorldMapSection1 implements WorldMapSection { int var3 = 0; // L: 11104 for (int var4 = 0; var4 < Varcs.ItemDefinition_fileCount; ++var4) { // L: 11105 - ItemDefinition var9 = SecureRandomCallable.ItemDefinition_get(var4); // L: 11106 + ItemComposition var9 = SecureRandomCallable.ItemDefinition_get(var4); // L: 11106 if ((!var1 || var9.isTradable) && var9.noteTemplate == -1 && var9.name.toLowerCase().indexOf(var0) != -1) { // L: 11107 11108 11109 if (var3 >= 250) { // L: 11110 PacketBufferNode.foundItemIdCount = -1; // L: 11111 diff --git a/runescape-client/src/main/java/class1.java b/runescape-client/src/main/java/class1.java index 6ae48646fa..5a735674a1 100644 --- a/runescape-client/src/main/java/class1.java +++ b/runescape-client/src/main/java/class1.java @@ -85,7 +85,7 @@ final class class1 implements class0 { int[] var11 = class25.sceneMinimapSprite.pixels; // L: 5496 var12 = var1 * 4 + (103 - var2) * 2048 + 24624; // L: 5497 var13 = Occluder.Entity_unpackID(var5); // L: 5498 - ObjectDefinition var14 = WorldMapDecoration.getObjectDefinition(var13); // L: 5499 + ObjectComposition var14 = WorldMapDecoration.getObjectDefinition(var13); // L: 5499 if (var14.mapSceneId != -1) { // L: 5500 IndexedSprite var15 = WorldMapRegion.mapSceneSprites[var14.mapSceneId]; // L: 5501 if (var15 != null) { // L: 5502 @@ -162,7 +162,7 @@ final class class1 implements class0 { var8 = var7 >> 6 & 3; // L: 5572 var9 = var7 & 31; // L: 5573 var10 = Occluder.Entity_unpackID(var5); // L: 5574 - ObjectDefinition var24 = WorldMapDecoration.getObjectDefinition(var10); // L: 5575 + ObjectComposition var24 = WorldMapDecoration.getObjectDefinition(var10); // L: 5575 int var19; if (var24.mapSceneId != -1) { // L: 5576 IndexedSprite var20 = WorldMapRegion.mapSceneSprites[var24.mapSceneId]; // L: 5577 @@ -196,7 +196,7 @@ final class class1 implements class0 { var5 = ArchiveLoader.scene.getFloorDecorationTag(var0, var1, var2); // L: 5603 if (0L != var5) { // L: 5604 var7 = Occluder.Entity_unpackID(var5); // L: 5605 - ObjectDefinition var21 = WorldMapDecoration.getObjectDefinition(var7); // L: 5606 + ObjectComposition var21 = WorldMapDecoration.getObjectDefinition(var7); // L: 5606 if (var21.mapSceneId != -1) { // L: 5607 IndexedSprite var22 = WorldMapRegion.mapSceneSprites[var21.mapSceneId]; // L: 5608 if (var22 != null) { // L: 5609 diff --git a/runescape-client/src/main/java/class224.java b/runescape-client/src/main/java/class224.java index 64149f8ee1..cee734e455 100644 --- a/runescape-client/src/main/java/class224.java +++ b/runescape-client/src/main/java/class224.java @@ -17,7 +17,7 @@ public class class224 { descriptor = "Llm;" ) @Export("rightTitleSprite") - static Sprite rightTitleSprite; + static SpritePixels rightTitleSprite; @ObfuscatedName("l") @ObfuscatedSignature( descriptor = "Llo;" diff --git a/runescape-client/src/main/java/class234.java b/runescape-client/src/main/java/class234.java index e1358b5799..cc7aba3aad 100644 --- a/runescape-client/src/main/java/class234.java +++ b/runescape-client/src/main/java/class234.java @@ -30,7 +30,7 @@ public class class234 { garbageValue = "1847408099" ) static final boolean method4159(int var0, int var1) { - ObjectDefinition var2 = WorldMapDecoration.getObjectDefinition(var0); // L: 892 + ObjectComposition var2 = WorldMapDecoration.getObjectDefinition(var0); // L: 892 if (var1 == 11) { // L: 893 var1 = 10; } diff --git a/runescape-client/src/main/java/class248.java b/runescape-client/src/main/java/class248.java index 604a916867..84fa9303b7 100644 --- a/runescape-client/src/main/java/class248.java +++ b/runescape-client/src/main/java/class248.java @@ -62,7 +62,7 @@ public class class248 { } } - Sprite var11 = new Sprite(var6, var2, var2); // L: 59 + SpritePixels var11 = new SpritePixels(var6, var2, var2); // L: 59 this.spriteMap.put(var1, var11); // L: 60 } // L: 61 @@ -71,12 +71,12 @@ public class class248 { descriptor = "(II)Llm;", garbageValue = "-2015707218" ) - Sprite method4343(int var1) { + SpritePixels method4343(int var1) { if (!this.spriteMap.containsKey(var1)) { // L: 64 this.method4342(var1); // L: 65 } - return (Sprite)this.spriteMap.get(var1); // L: 67 + return (SpritePixels)this.spriteMap.get(var1); // L: 67 } @ObfuscatedName("w") @@ -106,9 +106,9 @@ public class class248 { descriptor = "(IILlm;FB)V", garbageValue = "-62" ) - public final void method4346(int var1, int var2, Sprite var3, float var4) { + public final void method4346(int var1, int var2, SpritePixels var3, float var4) { int var5 = (int)(var4 * 18.0F); // L: 82 - Sprite var6 = this.method4343(var5); // L: 83 + SpritePixels var6 = this.method4343(var5); // L: 83 int var7 = var5 * 2 + 1; // L: 84 Bounds var8 = new Bounds(0, 0, var3.subWidth, var3.subHeight); // L: 85 Bounds var9 = new Bounds(0, 0); // L: 86 @@ -157,7 +157,7 @@ public class class248 { descriptor = "(Llm;Llm;Llc;B)V", garbageValue = "36" ) - void method4347(Sprite var1, Sprite var2, Bounds var3) { + void method4347(SpritePixels var1, SpritePixels var2, Bounds var3) { if (var3.highX != 0 && var3.highY != 0) { // L: 118 int var4 = 0; // L: 119 int var5 = 0; // L: 120 diff --git a/runescape-client/src/main/java/class25.java b/runescape-client/src/main/java/class25.java index c2ff4136dd..16a30f82e4 100644 --- a/runescape-client/src/main/java/class25.java +++ b/runescape-client/src/main/java/class25.java @@ -11,7 +11,7 @@ public class class25 { descriptor = "Llm;" ) @Export("sceneMinimapSprite") - static Sprite sceneMinimapSprite; + static SpritePixels sceneMinimapSprite; @ObfuscatedName("rf") @ObfuscatedGetter( intValue = 487407289 @@ -22,7 +22,7 @@ public class class25 { descriptor = "Llm;" ) @Export("leftTitleSprite") - static Sprite leftTitleSprite; + static SpritePixels leftTitleSprite; @ObfuscatedName("al") @Export("garbageCollector") static GarbageCollectorMXBean garbageCollector; @@ -191,7 +191,7 @@ public class class25 { garbageValue = "-1541467427" ) @Export("drawSpriteOnMinimap") - static final void drawSpriteOnMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { + static final void drawSpriteOnMinimap(int var0, int var1, int var2, int var3, SpritePixels var4, SpriteMask var5) { if (var4 != null) { // L: 10982 int var6 = Client.camAngleY & 2047; // L: 10983 int var7 = var3 * var3 + var2 * var2; // L: 10984 diff --git a/runescape-client/src/main/java/class280.java b/runescape-client/src/main/java/class280.java index 81d564b0c9..5d7649b69b 100644 --- a/runescape-client/src/main/java/class280.java +++ b/runescape-client/src/main/java/class280.java @@ -8,7 +8,7 @@ public class class280 { descriptor = "(Lib;Ljava/lang/String;Ljava/lang/String;B)[Llm;", garbageValue = "0" ) - public static Sprite[] method5008(AbstractArchive var0, String var1, String var2) { + public static SpritePixels[] method5008(AbstractArchive var0, String var1, String var2) { int var3 = var0.getGroupId(var1); // L: 139 int var4 = var0.getFileId(var3, var2); // L: 140 return ClientPreferences.method1918(var0, var3, var4); // L: 141 diff --git a/runescape-client/src/main/java/class301.java b/runescape-client/src/main/java/class301.java index 6ba71b697c..8005cc950f 100644 --- a/runescape-client/src/main/java/class301.java +++ b/runescape-client/src/main/java/class301.java @@ -9,5 +9,5 @@ public final class class301 { descriptor = "[Llm;" ) @Export("worldSelectBackSprites") - static Sprite[] worldSelectBackSprites; + static SpritePixels[] worldSelectBackSpritePixels; } diff --git a/runescape-client/src/main/java/class7.java b/runescape-client/src/main/java/class7.java index f674b64a3b..d697d70e67 100644 --- a/runescape-client/src/main/java/class7.java +++ b/runescape-client/src/main/java/class7.java @@ -58,7 +58,7 @@ public enum class7 implements Enumerated { Tiles.Tiles_minPlane = var0; } - ObjectDefinition var8 = WorldMapDecoration.getObjectDefinition(var3); // L: 234 + ObjectComposition var8 = WorldMapDecoration.getObjectDefinition(var3); // L: 234 int var9; int var10; if (var4 != 1 && var4 != 3) { // L: 237 @@ -636,7 +636,7 @@ public enum class7 implements Enumerated { garbageValue = "1516995220" ) @Export("addWidgetItemMenuItem") - static final void addWidgetItemMenuItem(Widget var0, ItemDefinition var1, int var2, int var3, boolean var4) { + static final void addWidgetItemMenuItem(Widget var0, ItemComposition var1, int var2, int var3, boolean var4) { String[] var5 = var1.inventoryActions; // L: 9686 byte var6 = -1; // L: 9687 String var7 = null; // L: 9688 diff --git a/runescape-client/src/main/java/class89.java b/runescape-client/src/main/java/class89.java index c19077b368..aa16239f6b 100644 --- a/runescape-client/src/main/java/class89.java +++ b/runescape-client/src/main/java/class89.java @@ -113,7 +113,7 @@ public class class89 { Login.title_muteSprite = null; // L: 224 DirectByteArrayCopier.options_buttons_0Sprite = null; // L: 225 ItemContainer.options_buttons_2Sprite = null; // L: 226 - class301.worldSelectBackSprites = null; // L: 227 + class301.worldSelectBackSpritePixels = null; // L: 227 class90.worldSelectFlagSprites = null; // L: 228 WorldMapSectionType.worldSelectArrows = null; // L: 229 class349.worldSelectStars = null; // L: 230