From 55839f684c20ba711f342480acf8315f4d0305fe Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Thu, 3 Oct 2019 06:00:19 +0200 Subject: [PATCH] client: Rebase further --- README.md | 8 ++-- .../net/runelite/http/api/RuneLiteAPI.java | 8 ++-- .../build.gradle | 2 +- .../service/SpringBootWebApplication.java | 4 +- .../http/service/SpringWebMvcConfigurer.java | 0 .../service/animation/AnimationCache.java | 0 .../animation/AnimationController.java | 0 .../service/animation/AnimationEndpoint.java | 0 .../service/animation/AnimationEntry.java | 0 .../http/service/chat/ChatController.java | 0 .../http/service/chat/ChatService.java | 0 .../runelite/http/service/xtea/XteaCache.java | 0 .../http/service/xtea/XteaController.java | 0 .../http/service/xtea/XteaEndpoint.java | 0 .../runelite/http/service/xtea/XteaEntry.java | 0 .../src/main/resources/application-dev.yaml | 0 .../src/main/resources/application.yaml | 0 .../net/runelite/http/service/xp/schema.sql | 0 .../src/main/templates/markdown.hbs | 0 .../src/main/templates/operation.hbs | 0 .../src/main/templates/security.hbs | 0 .../src/main/templates/template.html.hbs | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../src/test/resources/application-test.yaml | 0 .../runelite/http/service/worlds/worldlist | Bin .../java/net/runelite/client/RuneLite.java | 2 +- ...penosrsConfig.java => OpenOSRSConfig.java} | 0 .../client/database/DatabaseManager.java | 2 +- .../client/plugins/config/ConfigPanel.java | 17 +++----- .../client/plugins/config/PluginListItem.java | 7 ++-- .../client/plugins/fightcave/WaveOverlay.java | 2 +- .../client/plugins/info/InfoPanel.java | 4 +- .../plugins/openosrs/OpenOSRSPlugin.java | 39 +++++++++++++++++- .../plugins/worldhopper/WorldTableHeader.java | 2 +- .../net/runelite/client/rs/ClientLoader.java | 2 +- .../java/net/runelite/client/ui/ClientUI.java | 2 +- .../net/runelite/client/ui/ColorScheme.java | 12 +++--- .../client/ui/RuneLiteSplashScreen.java | 2 +- .../client/ui/components/FlatTextField.java | 2 +- .../client/ui/components/InfoPanel.java | 12 ++---- .../client/ui/components/MessagePanel.java | 6 +-- .../components/materialtabs/MaterialTab.java | 2 +- .../net/runelite/client/util/ImageUtil.java | 18 ++++++++ .../net/runelite/client/util/SwingUtil.java | 16 +++---- .../src/main/resources/openosrs.png | Bin 25982 -> 13802 bytes .../main/resources/openosrs_transparent.png | Bin 23294 -> 0 bytes settings.gradle | 4 +- 47 files changed, 111 insertions(+), 64 deletions(-) rename {http-service-plus => http-service-openosrs}/build.gradle (97%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/SpringBootWebApplication.java (98%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/SpringWebMvcConfigurer.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/animation/AnimationCache.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/animation/AnimationController.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/animation/AnimationEndpoint.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/animation/AnimationEntry.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/chat/ChatController.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/chat/ChatService.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/xtea/XteaCache.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/xtea/XteaController.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/xtea/XteaEndpoint.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/java/net/runelite/http/service/xtea/XteaEntry.java (100%) rename {http-service-plus => http-service-openosrs}/src/main/resources/application-dev.yaml (100%) rename {http-service-plus => http-service-openosrs}/src/main/resources/application.yaml (100%) rename {http-service-plus => http-service-openosrs}/src/main/resources/net/runelite/http/service/xp/schema.sql (100%) rename {http-service-plus => http-service-openosrs}/src/main/templates/markdown.hbs (100%) rename {http-service-plus => http-service-openosrs}/src/main/templates/operation.hbs (100%) rename {http-service-plus => http-service-openosrs}/src/main/templates/security.hbs (100%) rename {http-service-plus => http-service-openosrs}/src/main/templates/template.html.hbs (100%) rename {http-service-plus => http-service-openosrs}/src/main/webapp/WEB-INF/web.xml (100%) rename {http-service-plus => http-service-openosrs}/src/test/resources/application-test.yaml (100%) rename {http-service-plus => http-service-openosrs}/src/test/resources/net/runelite/http/service/worlds/worldlist (100%) rename runelite-client/src/main/java/net/runelite/client/config/{openosrsConfig.java => OpenOSRSConfig.java} (100%) delete mode 100644 runelite-client/src/main/resources/openosrs_transparent.png diff --git a/README.md b/README.md index 57ff919d26..e00759a008 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ -# openosrs +# OpenOSRS [![Build Status](https://github.com/runelite-extended/runelite/workflows/openosrs%20-%20CI/badge.svg)](https://github.com/runelite-extended/runelite/actions) [![HitCount](http://hits.dwyl.io/runelite-extended/runelite.svg)](http://hits.dwyl.io/runelite-extended/runelite) -[openosrs](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying more open-source. We are not affiliated with RuneLite. +[OpenOSRS](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying more open-source. We are not affiliated with RuneLite. ## Discord [![Discord](https://img.shields.io/discord/373382904769675265.svg)](https://discord.gg/HN5gf3m) @@ -14,7 +14,7 @@ - [cache](cache/src/main/java/net/runelite/cache) - Libraries used for reading/writing cache files, as well as the data in it - [deobfuscator](deobfuscator/src/main/java/net/runelite/deob) - Can decompile and cleanup gamepacks as well as map updates to newer revs -- [http-api](http-api/src/main/java/net/runelite/http/api) - API for runelite and openosrs +- [http-api](http-api/src/main/java/net/runelite/http/api) - API for runelite and OpenOSRS - [http-service](http-service/src/main/java/net/runelite/http/service) - Service for https://api.runelite.net - [http-service-plus](http-service-plus/src/main/java/net/runelite/http/service) - Service for https://api.openosrs.com - [injector-plugin](injector-plugin/src/main/java/net/runelite/injector) - Tool for implementing our modifications to the gamepack @@ -49,7 +49,7 @@ Disable Default World plugin if you have it enabled, this causes issues with cod ``` ## License -openosrs is licensed under the BSD 2-clause license. See the license header in the respective file to be sure. +OpenOSRS is licensed under the BSD 2-clause license. See the license header in the respective file to be sure. ## Contribute and Develop 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 94779595ac..623a1402b2 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 @@ -70,7 +70,7 @@ public class RuneLiteAPI "http://repo.runelite.net/net/runelite/runelite-parent/maven-metadata.xml"; private static final Properties properties = new Properties(); private static String rlUserAgent; - private static String rlpUserAgent; + private static String openosrsUserAgent; static { @@ -83,7 +83,7 @@ public class RuneLiteAPI String rlpCommit = properties.getProperty("runelite.commit"); boolean dirty = Boolean.parseBoolean(properties.getProperty("runelite.dirty")); - rlpUserAgent = "openosrs/" + version + "-" + rlpCommit + (dirty ? "+" : ""); + openosrsUserAgent = "openosrs/" + version + "-" + rlpCommit + (dirty ? "+" : ""); rlUserAgent = "openosrs/" + version; rsVersion = Integer.parseInt(properties.getProperty("rs.version")); @@ -128,7 +128,7 @@ public class RuneLiteAPI { Request userAgentRequest = chain.request() .newBuilder() - .header("User-Agent", rlpUserAgent) + .header("User-Agent", openosrsUserAgent) .build(); return chain.proceed(userAgentRequest); } @@ -206,7 +206,7 @@ public class RuneLiteAPI byte[] chunk = new byte[4096]; int bytesRead; URLConnection conn = toDownload.openConnection(); - conn.setRequestProperty("User-Agent", rlpUserAgent); + conn.setRequestProperty("User-Agent", openosrsUserAgent); stream = conn.getInputStream(); while ((bytesRead = stream.read(chunk)) > 0) diff --git a/http-service-plus/build.gradle b/http-service-openosrs/build.gradle similarity index 97% rename from http-service-plus/build.gradle rename to http-service-openosrs/build.gradle index 3b3d4778d2..1aee171338 100644 --- a/http-service-plus/build.gradle +++ b/http-service-openosrs/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'war' -description = 'Web Service Plus' +description = 'Web Service OpenOSRS' dependencies { annotationProcessor group: 'org.projectlombok', name: 'lombok', version: lombok diff --git a/http-service-plus/src/main/java/net/runelite/http/service/SpringBootWebApplication.java b/http-service-openosrs/src/main/java/net/runelite/http/service/SpringBootWebApplication.java similarity index 98% rename from http-service-plus/src/main/java/net/runelite/http/service/SpringBootWebApplication.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/SpringBootWebApplication.java index 27562f09f5..cb935d1270 100644 --- a/http-service-plus/src/main/java/net/runelite/http/service/SpringBootWebApplication.java +++ b/http-service-openosrs/src/main/java/net/runelite/http/service/SpringBootWebApplication.java @@ -70,7 +70,7 @@ public class SpringBootWebApplication extends SpringBootServletInitializer @Override public void contextInitialized(ServletContextEvent sce) { - log.info("openosrs API started"); + log.info("OpenOSRS API started"); } @Override @@ -93,7 +93,7 @@ public class SpringBootWebApplication extends SpringBootServletInitializer log.warn(null, ex); } - log.info("openosrs API stopped"); + log.info("OpenOSRS API stopped"); } }; diff --git a/http-service-plus/src/main/java/net/runelite/http/service/SpringWebMvcConfigurer.java b/http-service-openosrs/src/main/java/net/runelite/http/service/SpringWebMvcConfigurer.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/SpringWebMvcConfigurer.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/SpringWebMvcConfigurer.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationCache.java b/http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationCache.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationCache.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationCache.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationController.java b/http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationController.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationController.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationController.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationEndpoint.java b/http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationEndpoint.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationEndpoint.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationEndpoint.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationEntry.java b/http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationEntry.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/animation/AnimationEntry.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/animation/AnimationEntry.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/chat/ChatController.java b/http-service-openosrs/src/main/java/net/runelite/http/service/chat/ChatController.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/chat/ChatController.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/chat/ChatController.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/chat/ChatService.java b/http-service-openosrs/src/main/java/net/runelite/http/service/chat/ChatService.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/chat/ChatService.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/chat/ChatService.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaCache.java b/http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaCache.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaCache.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaCache.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaController.java b/http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaController.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaController.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaController.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaEndpoint.java b/http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaEndpoint.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaEndpoint.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaEndpoint.java diff --git a/http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaEntry.java b/http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaEntry.java similarity index 100% rename from http-service-plus/src/main/java/net/runelite/http/service/xtea/XteaEntry.java rename to http-service-openosrs/src/main/java/net/runelite/http/service/xtea/XteaEntry.java diff --git a/http-service-plus/src/main/resources/application-dev.yaml b/http-service-openosrs/src/main/resources/application-dev.yaml similarity index 100% rename from http-service-plus/src/main/resources/application-dev.yaml rename to http-service-openosrs/src/main/resources/application-dev.yaml diff --git a/http-service-plus/src/main/resources/application.yaml b/http-service-openosrs/src/main/resources/application.yaml similarity index 100% rename from http-service-plus/src/main/resources/application.yaml rename to http-service-openosrs/src/main/resources/application.yaml diff --git a/http-service-plus/src/main/resources/net/runelite/http/service/xp/schema.sql b/http-service-openosrs/src/main/resources/net/runelite/http/service/xp/schema.sql similarity index 100% rename from http-service-plus/src/main/resources/net/runelite/http/service/xp/schema.sql rename to http-service-openosrs/src/main/resources/net/runelite/http/service/xp/schema.sql diff --git a/http-service-plus/src/main/templates/markdown.hbs b/http-service-openosrs/src/main/templates/markdown.hbs similarity index 100% rename from http-service-plus/src/main/templates/markdown.hbs rename to http-service-openosrs/src/main/templates/markdown.hbs diff --git a/http-service-plus/src/main/templates/operation.hbs b/http-service-openosrs/src/main/templates/operation.hbs similarity index 100% rename from http-service-plus/src/main/templates/operation.hbs rename to http-service-openosrs/src/main/templates/operation.hbs diff --git a/http-service-plus/src/main/templates/security.hbs b/http-service-openosrs/src/main/templates/security.hbs similarity index 100% rename from http-service-plus/src/main/templates/security.hbs rename to http-service-openosrs/src/main/templates/security.hbs diff --git a/http-service-plus/src/main/templates/template.html.hbs b/http-service-openosrs/src/main/templates/template.html.hbs similarity index 100% rename from http-service-plus/src/main/templates/template.html.hbs rename to http-service-openosrs/src/main/templates/template.html.hbs diff --git a/http-service-plus/src/main/webapp/WEB-INF/web.xml b/http-service-openosrs/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from http-service-plus/src/main/webapp/WEB-INF/web.xml rename to http-service-openosrs/src/main/webapp/WEB-INF/web.xml diff --git a/http-service-plus/src/test/resources/application-test.yaml b/http-service-openosrs/src/test/resources/application-test.yaml similarity index 100% rename from http-service-plus/src/test/resources/application-test.yaml rename to http-service-openosrs/src/test/resources/application-test.yaml diff --git a/http-service-plus/src/test/resources/net/runelite/http/service/worlds/worldlist b/http-service-openosrs/src/test/resources/net/runelite/http/service/worlds/worldlist similarity index 100% rename from http-service-plus/src/test/resources/net/runelite/http/service/worlds/worldlist rename to http-service-openosrs/src/test/resources/net/runelite/http/service/worlds/worldlist diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index eee889f244..59598740a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -273,7 +273,7 @@ public class RuneLite RuneLiteSplashScreen.setError("Error while loading!", "Please check your internet connection and your DNS settings."); }); - RuneLiteSplashScreen.stage(0, "Starting openosrs injector"); + RuneLiteSplashScreen.stage(0, "Starting OpenOSRS injector"); final long start = System.currentTimeMillis(); diff --git a/runelite-client/src/main/java/net/runelite/client/config/openosrsConfig.java b/runelite-client/src/main/java/net/runelite/client/config/OpenOSRSConfig.java similarity index 100% rename from runelite-client/src/main/java/net/runelite/client/config/openosrsConfig.java rename to runelite-client/src/main/java/net/runelite/client/config/OpenOSRSConfig.java diff --git a/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java index 64258fbc40..d52a266cd3 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java +++ b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java @@ -17,7 +17,7 @@ import org.jooq.impl.DSL; @Slf4j public class DatabaseManager { - private static final String DB_URL = "jdbc:h2:" + RUNELITE_DIR + File.separator + "openosrs;AUTO_SERVER=TRUE"; + private static final String DB_URL = "jdbc:h2:" + RUNELITE_DIR + File.separator + "RunelitePlus;AUTO_SERVER=TRUE"; // Database credentials private static final String USER = "RLP"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index f3f3b7aab1..8012e2ae62 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -139,7 +139,7 @@ public class ConfigPanel extends PluginPanel private static final String RUNELITE_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).value(); private static final String PINNED_PLUGINS_CONFIG_KEY = "pinnedPlugins"; private static final String RUNELITE_PLUGIN = "RuneLite"; - private static final String openosrs_PLUGIN = "openosrs"; + private static final String openosrs_PLUGIN = "OpenOSRS"; private static final String CHAT_COLOR_PLUGIN = "Chat Color"; private final PluginManager pluginManager; private final ConfigManager configManager; @@ -164,7 +164,7 @@ public class ConfigPanel extends PluginPanel BACK_ICON = new ImageIcon(backIcon); BACK_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(backIcon, -100)); - final BufferedImage orangeBackIcon = ImageUtil.fillImage(backIcon, ColorScheme.BRAND_ORANGE); + final BufferedImage orangeBackIcon = ImageUtil.fillImage(backIcon, ColorScheme.BRAND_BLUE); final BufferedImage sectionRetractIcon = ImageUtil.rotateImage(orangeBackIcon, Math.PI * 1.5); SECTION_RETRACT_ICON = new ImageIcon(sectionRetractIcon); @@ -289,10 +289,10 @@ public class ConfigPanel extends PluginPanel runeLite.nameLabel.setForeground(Color.WHITE); pluginList.add(runeLite); - // set openosrs config on top, as it should always have been + // set OpenOSRS config on top, as it should always have been final PluginListItem openosrs = new PluginListItem(this, configManager, OpenOSRSConfig, configManager.getConfigDescriptor(OpenOSRSConfig), - openosrs_PLUGIN, "openosrs client settings", "client"); + openosrs_PLUGIN, "OpenOSRS client settings", "client"); openosrs.setPinned(pinnedPlugins.contains(openosrs_PLUGIN)); openosrs.nameLabel.setForeground(Color.WHITE); pluginList.add(openosrs); @@ -578,11 +578,6 @@ public class ConfigPanel extends PluginPanel topPanelBackButton.setToolTipText("Back"); topPanel.add(topPanelBackButton, BorderLayout.WEST); - if (!listItem.getName().equals("openosrs")) - { - topPanel.add(listItem.createToggleButton(), BorderLayout.EAST); - } - String name = listItem.getName(); JLabel title = new JLabel(name); title.setForeground(Color.WHITE); @@ -607,7 +602,7 @@ public class ConfigPanel extends PluginPanel JLabel headerLabel = new JLabel(cs.name()); headerLabel.setFont(FontManager.getRunescapeFont()); - headerLabel.setForeground(ColorScheme.BRAND_ORANGE); + headerLabel.setForeground(ColorScheme.BRAND_BLUE); if (!description.equals("")) { headerLabel.setToolTipText("" + name + ":
" + description + ""); @@ -679,7 +674,7 @@ public class ConfigPanel extends PluginPanel JLabel configEntryName = new JLabel(cs.name()); configEntryName.setPreferredSize(new Dimension(PANEL_WIDTH, (int) configEntryName.getPreferredSize().getHeight())); - configEntryName.setForeground(ColorScheme.BRAND_ORANGE); + configEntryName.setForeground(ColorScheme.BRAND_BLUE); item.add(configEntryName, BorderLayout.NORTH); final JPanel sectionContents = new JPanel(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java index 736aabca26..e93ed64257 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java @@ -25,6 +25,7 @@ package net.runelite.client.plugins.config; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.image.BufferedImage; @@ -98,8 +99,8 @@ public class PluginListItem extends JPanel BufferedImage onSwitcher = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "switcher_on.png"); BufferedImage onStar = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "star_on.png"); CONFIG_ICON = new ImageIcon(configIcon); - ON_SWITCHER = new ImageIcon(onSwitcher); - ON_STAR = new ImageIcon(onStar); + ON_SWITCHER = new ImageIcon(ImageUtil.recolorImage(onSwitcher, new Color(0, 106, 221))); + ON_STAR = new ImageIcon(ImageUtil.recolorImage(onStar, new Color(0, 106, 221))); CONFIG_ICON_HOVER = new ImageIcon(ImageUtil.grayscaleOffset(configIcon, -100)); BufferedImage offSwitcherImage = ImageUtil.flipImage( ImageUtil.grayscaleOffset( @@ -199,7 +200,7 @@ public class PluginListItem extends JPanel toggleButton.setPreferredSize(new Dimension(25, 0)); attachToggleButtonListener(toggleButton); - if (name.equals("openosrs")) + if (name.equals("OpenOSRS")) { toggleButton.setVisible(false); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java index 12beb81be2..d38920a976 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/WaveOverlay.java @@ -44,7 +44,7 @@ import net.runelite.client.ui.overlay.components.table.TableComponent; @Singleton class WaveOverlay extends Overlay { - private static final Color HEADER_COLOR = ColorScheme.BRAND_ORANGE; + private static final Color HEADER_COLOR = ColorScheme.BRAND_BLUE; private final FightCaveConfig config; private final FightCavePlugin plugin; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index df34ef3d50..632f9f248f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -113,7 +113,7 @@ public class InfoPanel extends PluginPanel JLabel version = new JLabel(htmlLabel("RuneLite version: ", RuneLiteProperties.getVersion())); version.setFont(smallFont); - JLabel plusVersion = new JLabel(htmlLabel("Openosrs version: ", RuneLiteProperties.getPlusVersion())); + JLabel plusVersion = new JLabel(htmlLabel("OpenOSRS version: ", RuneLiteProperties.getPlusVersion())); plusVersion.setFont(smallFont); JLabel revision = new JLabel(); @@ -168,7 +168,7 @@ public class InfoPanel extends PluginPanel actionsContainer.add(buildLinkPanel(GITHUB_ICON, "License info", "for distribution", "https://github.com/runelite-extended/runelite/blob/master/LICENSE")); actionsContainer.add(buildLinkPanel(FOLDER_ICON, "Open logs directory", "(for bug reports)", LOGS_DIR)); actionsContainer.add(buildLinkPanel(DISCORD_ICON, "Talk to us on our", "discord server", "https://discord.gg/HN5gf3m")); - actionsContainer.add(buildLinkPanel(PATREON_ICON, "Patreon to support", "the openosrs devs", RuneLiteProperties.getPatreonLink())); + actionsContainer.add(buildLinkPanel(PATREON_ICON, "Patreon to support", "the OpenOSRS devs", RuneLiteProperties.getPatreonLink())); /* actionsContainer.add(buildLinkPanel(WIKI_ICON, "Information about", "RuneLite and plugins", runeLiteProperties.getWikiLink()));*/ add(versionPanel, BorderLayout.NORTH); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java index 05448c2497..526341633d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java @@ -37,6 +37,7 @@ import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.WidgetID; import static net.runelite.api.widgets.WidgetInfo.*; import net.runelite.client.callback.ClientThread; +import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; import net.runelite.client.config.OpenOSRSConfig; import net.runelite.client.eventbus.EventBus; @@ -49,7 +50,7 @@ import net.runelite.client.util.HotkeyListener; @PluginDescriptor( loadWhenOutdated = true, // prevent users from disabling hidden = true, // prevent users from disabling - name = "openosrs" + name = "OpenOSRS" ) @Singleton @Slf4j @@ -71,6 +72,9 @@ public class OpenOSRSPlugin extends Plugin @Inject private EventBus eventbus; + @Inject + private ConfigManager configManager; + private HotkeyListener hotkeyListener = new HotkeyListener(() -> this.keybind) { @Override @@ -90,6 +94,7 @@ public class OpenOSRSPlugin extends Plugin @Override protected void startUp() throws Exception { + migrateConfigs(); addSubscriptions(); entered = -1; @@ -248,4 +253,36 @@ public class OpenOSRSPlugin extends Plugin { } } + + /** + * Migrates configs from runenergy and regenmeter to this plugin and deletes the old config values. + * This method should be removed after a reasonable amount of time. + */ + @Deprecated + private void migrateConfigs() + { + migrateConfig("runeliteplus", "enableOpacity"); + migrateConfig("runeliteplus", "opacityPercentage"); + migrateConfig("runeliteplus", "keyboardPin"); + migrateConfig("runeliteplus", "enablePlugins"); + migrateConfig("runeliteplus", "detachHotkey"); + } + + /** + * Wrapper for migrating individual config options + * This method should be removed after a reasonable amount of time. + * + * @param group old group name + * @param key key name to migrate + */ + @Deprecated + private void migrateConfig(String group, String key) + { + String value = configManager.getConfiguration(group, key); + if (value != null) + { + configManager.setConfiguration("openosrs", key, value); + configManager.unsetConfiguration(group, key); + } + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java index 18b7fddbac..43e1aaa4b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java @@ -52,7 +52,7 @@ class WorldTableHeader extends JPanel private static final ImageIcon HIGHLIGHT_ARROW_UP; private static final Color ARROW_COLOR = ColorScheme.LIGHT_GRAY_COLOR; - private static final Color HIGHLIGHT_COLOR = ColorScheme.BRAND_ORANGE; + private static final Color HIGHLIGHT_COLOR = ColorScheme.BRAND_BLUE; static { 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 a573fab527..86c70afac9 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 @@ -81,7 +81,7 @@ public class ClientLoader catch (ClassNotFoundException e) { RuneLiteSplashScreen.setError("Unable to load client", "Class not found. This means you" - + " are not running openosrs with Gradle as the injected client" + + " are not running OpenOSRS with Gradle as the injected client" + " is not in your classpath."); log.error("Error loading RS!", e); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index cbf904ffcf..1fa67ec575 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -536,7 +536,7 @@ public class ClientUI if (client != null && !(client instanceof Client)) { SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(frame, - "openosrs has not yet been updated to work with the latest\n" + "OpenOSRS has not yet been updated to work with the latest\n" + "game update, it will work with reduced functionality until then.", "RuneLite is outdated", INFORMATION_MESSAGE)); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java b/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java index 5be1250547..56bb0e5214 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java @@ -31,11 +31,11 @@ import java.awt.Color; */ public class ColorScheme { - /* The orange color used for the branding's accents */ - public static final Color BRAND_ORANGE = new Color(220, 138, 0); + /* The blue color used for the branding's accents */ + public static final Color BRAND_BLUE = new Color(0, 106, 221); - /* The orange color used for the branding's accents, with lowered opacity */ - public static final Color BRAND_ORANGE_TRANSPARENT = new Color(220, 138, 0, 120); + /* The blue color used for the branding's accents, with lowered opacity */ + public static final Color BRAND_BLUE_TRANSPARENT = new Color(0, 106, 221, 120); public static final Color DARKER_GRAY_COLOR = new Color(30, 30, 30); public static final Color DARK_GRAY_COLOR = new Color(40, 40, 40); @@ -51,8 +51,8 @@ public class ColorScheme /* The color for the red progress bar (used in ge offers, farming tracker, etc)*/ public static final Color PROGRESS_ERROR_COLOR = new Color(230, 30, 30); - /* The color for the orange progress bar (used in ge offers, farming tracker, etc)*/ - public static final Color PROGRESS_INPROGRESS_COLOR = new Color(230, 150, 30); + /* The color for the blue progress bar (used in ge offers, farming tracker, etc)*/ + public static final Color PROGRESS_INPROGRESS_COLOR = new Color(0, 106, 221); /* The color for the price indicator in the ge search results */ public static final Color GRAND_EXCHANGE_PRICE = new Color(110, 225, 110); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/RuneLiteSplashScreen.java b/runelite-client/src/main/java/net/runelite/client/ui/RuneLiteSplashScreen.java index 4dbe23db63..b64fb2355f 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/RuneLiteSplashScreen.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/RuneLiteSplashScreen.java @@ -48,7 +48,7 @@ public class RuneLiteSplashScreen extends JFrame private RuneLiteSplashScreen() { - this.setTitle("openosrs"); + this.setTitle("OpenOSRS"); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setSize(FRAME_SIZE); this.setLayout(new BorderLayout()); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/FlatTextField.java b/runelite-client/src/main/java/net/runelite/client/ui/components/FlatTextField.java index 2ab50132e4..265c8d8c7a 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/FlatTextField.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/FlatTextField.java @@ -67,7 +67,7 @@ public class FlatTextField extends JPanel this.textField.setBorder(null); this.textField.setOpaque(false); this.textField.setSelectedTextColor(Color.WHITE); - this.textField.setSelectionColor(ColorScheme.BRAND_ORANGE_TRANSPARENT); + this.textField.setSelectionColor(ColorScheme.BRAND_BLUE_TRANSPARENT); add(textField, BorderLayout.CENTER); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java index 5cee418ede..1de2c12093 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java @@ -59,7 +59,7 @@ public class InfoPanel extends JPanel private static final String RUNELITE_PLUS_DATE = "open.osrs.builddate"; private static final Color DARK_GREY = new Color(10, 10, 10, 255); - private static final BufferedImage TRANSPARENT_LOGO = ImageUtil.getResourceStreamFromClass(InfoPanel.class, "/openosrs_transparent.png"); + private static final BufferedImage TRANSPARENT_LOGO = ImageUtil.getResourceStreamFromClass(InfoPanel.class, "/openosrs.png"); static final Dimension PANEL_SIZE = new Dimension(200, RuneLiteSplashScreen.FRAME_SIZE.height); private static final Dimension VERSION_SIZE = new Dimension(PANEL_SIZE.width, 25); private static final File RUNELITE_DIR = new File(System.getProperty("user.home"), ".runelite"); @@ -104,12 +104,8 @@ public class InfoPanel extends JPanel c.anchor = GridBagConstraints.SOUTH; c.weighty = 0; - // Version - this.add(createPanelTextButton("RuneLite Version: " + properties.getProperty(RUNELITE_VERSION)), c); - c.gridy++; - - // Plus version - this.add(createPanelTextButton("Plus Version: " + properties.getProperty(RUNELITE_PLUS_VERSION)), c); + // OpenOSRS version + this.add(createPanelTextButton("OpenOSRS Version: " + properties.getProperty(RUNELITE_PLUS_VERSION)), c); c.gridy++; // Build date @@ -138,7 +134,7 @@ public class InfoPanel extends JPanel final JLabel textButton = new JLabel(title); textButton.setFont(FontManager.getRunescapeSmallFont()); textButton.setHorizontalAlignment(JLabel.CENTER); - textButton.setForeground(ColorScheme.BRAND_ORANGE); + textButton.setForeground(ColorScheme.BRAND_BLUE); textButton.setBackground(null); textButton.setPreferredSize(VERSION_SIZE); textButton.setMinimumSize(VERSION_SIZE); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java index 3da446ec3d..3789fa67b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java @@ -80,7 +80,7 @@ public class MessagePanel extends JPanel c.gridy++; // alternate message action - messageArea = new JLabel("
Fork of RuneLite that provides more functionality and less restrictions whilst staying open source.
") + messageArea = new JLabel("
Open-source client for Old School RuneScape with more functionality and less restrictions.
") { @Override public Dimension getPreferredSize() @@ -118,8 +118,8 @@ public class MessagePanel extends JPanel this.add(barLabel, c); c.gridy++; - bar.setBackground(ColorScheme.BRAND_ORANGE_TRANSPARENT.darker()); - bar.setForeground(ColorScheme.BRAND_ORANGE); + bar.setBackground(ColorScheme.BRAND_BLUE_TRANSPARENT.darker()); + bar.setForeground(ColorScheme.BRAND_BLUE); bar.setMinimumSize(BAR_SIZE); bar.setMaximumSize(BAR_SIZE); bar.setBorder(new MatteBorder(0, 0, 0, 0, Color.LIGHT_GRAY)); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java b/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java index f4e7e835fc..fec220bfcd 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java @@ -51,7 +51,7 @@ import net.runelite.client.ui.ColorScheme; public class MaterialTab extends JLabel { private static final Border SELECTED_BORDER = new CompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, ColorScheme.BRAND_ORANGE), + BorderFactory.createMatteBorder(0, 0, 1, 0, ColorScheme.BRAND_BLUE), BorderFactory.createEmptyBorder(5, 10, 4, 10)); private static final Border UNSELECTED_BORDER = BorderFactory diff --git a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java index fdf214259f..f3e15a96cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java @@ -34,6 +34,7 @@ import java.awt.image.BufferedImage; import java.awt.image.DirectColorModel; import java.awt.image.PixelGrabber; import java.awt.image.RescaleOp; +import java.awt.image.WritableRaster; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -440,6 +441,23 @@ public class ImageUtil return recoloredImage; } + public static BufferedImage recolorImage(BufferedImage image, final Color color) { + int width = image.getWidth(); + int height = image.getHeight(); + WritableRaster raster = image.getRaster(); + + for (int xx = 0; xx < width; xx++) { + for (int yy = 0; yy < height; yy++) { + int[] pixels = raster.getPixel(xx, yy, (int[]) null); + pixels[0] = color.getRed(); + pixels[1] = color.getGreen(); + pixels[2] = color.getBlue(); + raster.setPixel(xx, yy, pixels); + } + } + return image; + } + /** * Performs a rescale operation on the image's color components. * diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index 92fc0dad7b..30e1f38226 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -98,15 +98,15 @@ public class SwingUtil UIManager.put("MenuItem.foreground", Color.WHITE); UIManager.put("Panel.background", ColorScheme.DARK_GRAY_COLOR); UIManager.put("ScrollBarUI", CustomScrollBarUI.class.getName()); - UIManager.put("TextField.selectionBackground", ColorScheme.BRAND_ORANGE_TRANSPARENT); + UIManager.put("TextField.selectionBackground", ColorScheme.BRAND_BLUE_TRANSPARENT); UIManager.put("TextField.selectionForeground", Color.WHITE); - UIManager.put("FormattedTextField.selectionBackground", ColorScheme.BRAND_ORANGE_TRANSPARENT); + UIManager.put("FormattedTextField.selectionBackground", ColorScheme.BRAND_BLUE_TRANSPARENT); UIManager.put("FormattedTextField.selectionForeground", Color.WHITE); - UIManager.put("TextArea.selectionBackground", ColorScheme.BRAND_ORANGE_TRANSPARENT); + UIManager.put("TextArea.selectionBackground", ColorScheme.BRAND_BLUE_TRANSPARENT); UIManager.put("TextArea.selectionForeground", Color.WHITE); - UIManager.put("ProgressBar.background", ColorScheme.BRAND_ORANGE_TRANSPARENT.darker()); - UIManager.put("ProgressBar.foreground", ColorScheme.BRAND_ORANGE); - UIManager.put("ProgressBar.selectionBackground", ColorScheme.BRAND_ORANGE); + UIManager.put("ProgressBar.background", ColorScheme.BRAND_BLUE_TRANSPARENT.darker()); + UIManager.put("ProgressBar.foreground", ColorScheme.BRAND_BLUE); + UIManager.put("ProgressBar.selectionBackground", ColorScheme.BRAND_BLUE); UIManager.put("ProgressBar.selectionForeground", Color.BLACK); UIManager.put("ProgressBar.border", new EmptyBorder(0, 0, 0, 0)); UIManager.put("ProgressBar.verticalSize", new Dimension(12, 10)); @@ -392,13 +392,13 @@ public class SwingUtil stylizeJPanels(pane); final Frame frame = component == null ? JOptionPane.getRootFrame() : JOptionPane.getFrameForComponent(component); - final JDialog dialog = new JDialog(frame, "openosrs Error", true); + final JDialog dialog = new JDialog(frame, "OpenOSRS Error", true); dialog.setContentPane(pane); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setAlwaysOnTop(true); dialog.setAutoRequestFocus(true); dialog.setLocationRelativeTo(null); - dialog.setIconImage(ImageUtil.getResourceStreamFromClass(SwingUtil.class, "/openosrs_transparent.png")); + dialog.setIconImage(ImageUtil.getResourceStreamFromClass(SwingUtil.class, "/openosrs.png")); // Listen for value changes and close dialog when necessary pane.addPropertyChangeListener(e -> { diff --git a/runelite-client/src/main/resources/openosrs.png b/runelite-client/src/main/resources/openosrs.png index e4057a808456fcdcf90d5ce57163b7c7bcc8f904..2d7f2e15a54eff7484e6b5ca643acae5b4e14376 100644 GIT binary patch literal 13802 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%0AO;)Ws0 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 literal 25982 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≷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