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 index 9d9628c79b..9d9e7936a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/OpenOSRSConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/OpenOSRSConfig.java @@ -26,9 +26,30 @@ */ package net.runelite.client.config; +import java.awt.Color; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + @ConfigGroup("openosrs") public interface OpenOSRSConfig extends Config { + @Getter(AccessLevel.PUBLIC) + @AllArgsConstructor + enum SortStyle + { + CATEGORY("Category"), + ALPHABETICALLY("Alphabetically"); + + private String name; + + @Override + public String toString() + { + return getName(); + } + } + @ConfigTitleSection( keyName = "pluginsTitle", name = "Plugins", @@ -40,12 +61,215 @@ public interface OpenOSRSConfig extends Config return new Title(); } + @ConfigTitleSection( + keyName = "pluginSortingTitle", + name = "Sorting", + description = "", + position = 2, + titleSection = "pluginsTitle" + ) + default Title pluginSortingTitle() + { + return new Title(); + } + + @ConfigItem( + position = 3, + keyName = "pluginSortMode", + name = "Sorting mode", + description = "Sorts plugins ", + titleSection = "pluginSortingTitle" + ) + default SortStyle pluginSortMode() + { + return SortStyle.CATEGORY; + } + + @ConfigTitleSection( + keyName = "hidePluginsTitle", + name = "Hide By Type", + description = "", + position = 4, + titleSection = "pluginsTitle" + ) + default Title hidePluginsTitle() + { + return new Title(); + } + + @ConfigItem( + position = 5, + keyName = "hidePlugins", + name = "Hide All Plugins", + description = "Hides all OpenOSRS plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePvmPlugins || hidePvpPlugins || hideSkillingPlugins || hideUtilityPlugins || hideExternalPlugins" + ) + default boolean hidePlugins() + { + return false; + } + + @ConfigItem( + position = 6, + keyName = "hideExternalPlugins", + name = "Hide External Plugins", + description = "Hides all OpenOSRS external plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePlugins" + ) + default boolean hideExternalPlugins() + { + return false; + } + + @ConfigItem( + position = 7, + keyName = "hidePvmPlugins", + name = "Hide PvM Plugins", + description = "Hides all OpenOSRS PvM plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePlugins" + ) + default boolean hidePvmPlugins() + { + return false; + } + + @ConfigItem( + position = 8, + keyName = "hideSkillingPlugins", + name = "Hide Skilling Plugins", + description = "Hides all OpenOSRS skilling plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePlugins" + ) + default boolean hideSkillingPlugins() + { + return false; + } + + @ConfigItem( + position = 9, + keyName = "hidePvpPlugins", + name = "Hide PvP Plugins", + description = "Hides all OpenOSRS Pvp plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePlugins" + ) + default boolean hidePvpPlugins() + { + return false; + } + + @ConfigItem( + position = 10, + keyName = "hideUtilityPlugins", + name = "Hide Utility Plugins", + description = "Hides all OpenOSRS utility plugins if checked", + titleSection = "hidePluginsTitle", + hide = "hidePlugins" + ) + default boolean hideUtilityPlugins() + { + return false; + } + + @ConfigTitleSection( + keyName = "pluginsColorTitle", + name = "Colors", + description = "", + position = 11, + titleSection = "pluginsTitle" + ) + default Title pluginsColorTitle() + { + return new Title(); + } + + @Alpha + @ConfigItem( + position = 12, + keyName = "externalColor", + name = "External color", + description = "Configure the color of external plugins", + titleSection = "pluginsColorTitle" + ) + default Color externalColor() + { + return new Color(177, 156, 217, 255); + } + + @Alpha + @ConfigItem( + position = 13, + keyName = "pvmColor", + name = "PVM color", + description = "Configure the color of PVM related plugins", + titleSection = "pluginsColorTitle" + ) + default Color pvmColor() + { + return new Color(119, 221, 119, 255); + } + + @Alpha + @ConfigItem( + position = 14, + keyName = "pvpColor", + name = "PVP color", + description = "Configure the color of PVP related plugins", + titleSection = "pluginsColorTitle" + ) + default Color pvpColor() + { + return new Color(255, 105, 97, 255); + } + + @Alpha + @ConfigItem( + position = 15, + keyName = "skillingColor", + name = "Skilling color", + description = "Configure the color of Skilling related plugins", + titleSection = "pluginsColorTitle" + ) + default Color skillingColor() + { + return new Color(252, 252, 100, 255); + } + + @Alpha + @ConfigItem( + position = 16, + keyName = "utilityColor", + name = "Utility color", + description = "Configure the color of Utility related plugins", + titleSection = "pluginsColorTitle" + ) + default Color utilityColor() + { + return new Color(144, 212, 237, 255); + } + + @ConfigTitleSection( + keyName = "externalPluginsTitle", + name = "External", + description = "", + position = 17, + titleSection = "pluginsTitle" + ) + default Title externalPluginsTitle() + { + return new Title(); + } + @ConfigItem( keyName = "enablePlugins", name = "Enable loading of external plugins", description = "Enable loading of external plugins", - position = 2, - titleSection = "pluginsTitle" + position = 18, + titleSection = "externalPluginsTitle" ) default boolean enablePlugins() { @@ -56,7 +280,7 @@ public interface OpenOSRSConfig extends Config keyName = "opacityTitle", name = "Opacity", description = "", - position = 3 + position = 19 ) default Title opacityTitle() { @@ -67,7 +291,7 @@ public interface OpenOSRSConfig extends Config keyName = "enableOpacity", name = "Enable opacity", description = "Enables opacity for the whole window.
NOTE: This only stays enabled if your pc supports this!", - position = 4, + position = 20, titleSection = "opacityTitle" ) default boolean enableOpacity() @@ -83,7 +307,7 @@ public interface OpenOSRSConfig extends Config keyName = "opacityPercentage", name = "Opacity percentage", description = "Changes the opacity of the window if opacity is enabled", - position = 5, + position = 21, titleSection = "opacityTitle" ) default int opacityPercentage() @@ -95,7 +319,7 @@ public interface OpenOSRSConfig extends Config keyName = "miscTitle", name = "Miscellaneous", description = "", - position = 6 + position = 22 ) default Title miscTitle() { @@ -106,7 +330,7 @@ public interface OpenOSRSConfig extends Config keyName = "keyboardPin", name = "Keyboard bank pin", description = "Enables you to type your bank pin", - position = 7, + position = 23, titleSection = "miscTitle" ) default boolean keyboardPin() @@ -118,7 +342,7 @@ public interface OpenOSRSConfig extends Config keyName = "detachHotkey", name = "Detach Cam", description = "Detach Camera hotkey, press this and it will activate detatched camera.", - position = 8, + position = 24, titleSection = "miscTitle" ) default Keybind detachHotkey() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginType.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginType.java index 6d9b568c11..93dc019e9f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginType.java @@ -8,6 +8,5 @@ public enum PluginType UTILITY, GENERAL_USE, EXTERNAL, - PLUGIN_ORGANIZER, IMPORTANT } 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 d9c8164ef8..b8ef9d4ff6 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 @@ -26,6 +26,7 @@ package net.runelite.client.plugins.config; import com.google.common.base.Splitter; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import java.awt.BorderLayout; import java.awt.Color; @@ -45,6 +46,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.EnumSet; import java.util.HashMap; import java.util.List; @@ -105,6 +107,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginInstantiationException; import net.runelite.client.plugins.PluginManager; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.FontManager; @@ -137,7 +140,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; @@ -156,6 +159,9 @@ public class ConfigPanel extends PluginPanel private boolean showingPluginList = true; private int scrollBarPosition = 0; + private static final ImmutableList definedOrder = ImmutableList.of(PluginType.IMPORTANT, PluginType.EXTERNAL, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.GENERAL_USE); + private static final Comparator categoryComparator = Comparator.comparing(plugin -> definedOrder.indexOf(plugin.getPluginType())); + static { final BufferedImage backIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_back_icon.png"); @@ -282,15 +288,15 @@ public class ConfigPanel extends PluginPanel // 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.setPinned(pinnedPlugins.contains(openosrs_PLUGIN)); + OPENOSRS_PLUGIN, "OpenOSRS client settings", PluginType.IMPORTANT, "client"); + openosrs.setPinned(pinnedPlugins.contains(OPENOSRS_PLUGIN)); openosrs.nameLabel.setForeground(Color.WHITE); pluginList.add(openosrs); // set RuneLite config on top, as it should always have been final PluginListItem runeLite = new PluginListItem(this, configManager, runeLiteConfig, configManager.getConfigDescriptor(runeLiteConfig), - RUNELITE_PLUGIN, "RuneLite client settings", "client"); + RUNELITE_PLUGIN, "RuneLite client settings", PluginType.IMPORTANT, "client"); runeLite.setPinned(pinnedPlugins.contains(RUNELITE_PLUGIN)); runeLite.nameLabel.setForeground(Color.WHITE); pluginList.add(runeLite); @@ -307,18 +313,21 @@ public class ConfigPanel extends PluginPanel final PluginListItem listItem = new PluginListItem(this, configManager, plugin, descriptor, config, configDescriptor); listItem.setPinned(pinnedPlugins.contains(listItem.getName())); + listItem.setColor(getColorByCategory(OpenOSRSConfig, listItem.getPluginType())); + listItem.setHidden(getHiddenByCategory(OpenOSRSConfig, listItem.getPluginType())); plugins.add(listItem); } ); final PluginListItem chatColor = new PluginListItem(this, configManager, chatColorConfig, configManager.getConfigDescriptor(chatColorConfig), - CHAT_COLOR_PLUGIN, "Recolor chat text", "colour", "messages"); + CHAT_COLOR_PLUGIN, "Recolor chat text", PluginType.GENERAL_USE, "colour", "messages"); chatColor.setPinned(pinnedPlugins.contains(CHAT_COLOR_PLUGIN)); - chatColor.nameLabel.setForeground(Color.WHITE); plugins.add(chatColor); pluginList.addAll(plugins); + + ConfigPanel.sortPluginList(OpenOSRSConfig, null); } void refreshPluginList() @@ -466,10 +475,17 @@ public class ConfigPanel extends PluginPanel String name = listItem.getName(); JLabel title = new JLabel(name); - title.setForeground(Color.WHITE); + title.setForeground(listItem.getColor()); title.setToolTipText("" + name + ":
" + listItem.getDescription() + ""); topPanel.add(title); + IconButton toggleButton = new IconButton(PluginListItem.OFF_SWITCHER); + toggleButton.setPreferredSize(new Dimension(25, 0)); + listItem.updateToggleButton(toggleButton); + listItem.attachToggleButtonListener(toggleButton); + + topPanel.add(toggleButton, BorderLayout.EAST); + final Map sectionWidgets = new HashMap<>(); final Map titleSectionWidgets = new HashMap<>(); @@ -1379,4 +1395,70 @@ public class ConfigPanel extends PluginPanel { openGroupConfigPanel(listItem, config, cd, true); } + + public static Color getColorByCategory(OpenOSRSConfig openOSRSConfig, PluginType pluginType) + { + switch (pluginType) + { + case EXTERNAL: + return openOSRSConfig.externalColor(); + case PVM: + return openOSRSConfig.pvmColor(); + case PVP: + return openOSRSConfig.pvpColor(); + case SKILLING: + return openOSRSConfig.skillingColor(); + case UTILITY: + return openOSRSConfig.utilityColor(); + } + + return null; + } + + public static boolean getHiddenByCategory(OpenOSRSConfig openOSRSConfig, PluginType pluginType) + { + if (pluginType == PluginType.IMPORTANT || pluginType == PluginType.GENERAL_USE) + { + return false; + } + + if (openOSRSConfig.hidePlugins()) + { + return true; + } + + switch (pluginType) + { + case EXTERNAL: + return openOSRSConfig.hideExternalPlugins(); + case PVM: + return openOSRSConfig.hidePvmPlugins(); + case PVP: + return openOSRSConfig.hidePvpPlugins(); + case SKILLING: + return openOSRSConfig.hideSkillingPlugins(); + case UTILITY: + return openOSRSConfig.hideUtilityPlugins(); + } + + return false; + } + + public static void sortPluginList(OpenOSRSConfig openOSRSConfig, Comparator comparator) + { + if (comparator != null) + { + ConfigPanel.pluginList.sort(comparator.thenComparing(PluginListItem::getName)); + return; + } + + if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.CATEGORY) + { + ConfigPanel.pluginList.sort(categoryComparator.thenComparing(PluginListItem::getName)); + } + else + { + ConfigPanel.pluginList.sort(Comparator.comparing(PluginListItem::getName)); + } + } } \ No newline at end of file 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 934071652b..05f8f3c513 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; @@ -43,6 +44,7 @@ import net.runelite.client.config.ConfigDescriptor; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.IconButton; @@ -58,7 +60,7 @@ public class PluginListItem extends JPanel private static final ImageIcon CONFIG_ICON; private static final ImageIcon CONFIG_ICON_HOVER; private static final ImageIcon ON_SWITCHER; - private static final ImageIcon OFF_SWITCHER; + public static final ImageIcon OFF_SWITCHER; private static final ImageIcon ON_STAR; private static final ImageIcon OFF_STAR; @@ -82,12 +84,16 @@ public class PluginListItem extends JPanel @Getter(AccessLevel.PUBLIC) private final String description; + @Getter(AccessLevel.PUBLIC) + private final PluginType pluginType; + private final List keywords = new ArrayList<>(); private final IconButton pinButton = new IconButton(OFF_STAR); private final IconButton configButton = new IconButton(CONFIG_ICON, CONFIG_ICON_HOVER); private final IconButton toggleButton = new IconButton(OFF_SWITCHER); + @Getter private boolean isPluginEnabled = false; @Getter @@ -96,6 +102,8 @@ public class PluginListItem extends JPanel @Getter private boolean isHidden = false; + private Color color = null; + static { BufferedImage configIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_edit_icon.png"); @@ -131,20 +139,20 @@ public class PluginListItem extends JPanel @Nullable Config config, @Nullable ConfigDescriptor configDescriptor) { this(configPanel, configManager, plugin, config, configDescriptor, - descriptor.name(), descriptor.description(), descriptor.tags()); + descriptor.name(), descriptor.description(), descriptor.type(), descriptor.tags()); } /** * Creates a new {@code PluginListItem} for a core configuration. */ PluginListItem(ConfigPanel configPanel, ConfigManager configManager, Config config, ConfigDescriptor configDescriptor, - String name, String description, String... tags) + String name, String description, PluginType pluginType, String... tags) { - this(configPanel, configManager, null, config, configDescriptor, name, description, tags); + this(configPanel, configManager, null, config, configDescriptor, name, description, pluginType, tags); } private PluginListItem(ConfigPanel configPanel, ConfigManager configManager, @Nullable Plugin plugin, @Nullable Config config, - @Nullable ConfigDescriptor configDescriptor, String name, String description, String... tags) + @Nullable ConfigDescriptor configDescriptor, String name, String description, PluginType pluginType, String... tags) { this.configPanel = configPanel; this.plugin = plugin; @@ -152,6 +160,7 @@ public class PluginListItem extends JPanel this.configDescriptor = configDescriptor; this.name = name; this.description = description; + this.pluginType = pluginType; Collections.addAll(keywords, name.toLowerCase().split(" ")); Collections.addAll(keywords, description.toLowerCase().split(" ")); Collections.addAll(keywords, tags); @@ -206,7 +215,7 @@ public class PluginListItem extends JPanel buttonPanel.add(toggleButton); } - private void attachToggleButtonListener(IconButton button) + void attachToggleButtonListener(IconButton button) { // no need for a listener if there is no plugin to enable / disable if (plugin == null) @@ -231,15 +240,6 @@ public class PluginListItem extends JPanel }); } - IconButton createToggleButton() - { - IconButton button = new IconButton(OFF_SWITCHER); - button.setPreferredSize(new Dimension(25, 0)); - updateToggleButton(button); - attachToggleButtonListener(button); - return button; - } - void setPluginEnabled(boolean enabled) { isPluginEnabled = enabled; @@ -253,12 +253,28 @@ public class PluginListItem extends JPanel pinButton.setToolTipText(pinned ? "Unpin plugin" : "Pin plugin"); } + Color getColor() + { + return this.color == null ? Color.WHITE : this.color; + } + + public void setColor(Color color) + { + if (color == null) + { + return; + } + + this.color = color; + this.nameLabel.setForeground(color); + } + public void setHidden(boolean hidden) { isHidden = hidden; } - private void updateToggleButton(IconButton button) + void updateToggleButton(IconButton button) { button.setIcon(isPluginEnabled ? ON_SWITCHER : OFF_SWITCHER); button.setToolTipText(isPluginEnabled ? "Disable plugin" : "Enable plugin"); 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 526341633d..df5ba2b6e6 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 @@ -27,6 +27,8 @@ package net.runelite.client.plugins.openosrs; import java.awt.event.KeyEvent; +import java.util.Arrays; +import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; @@ -37,7 +39,6 @@ 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; @@ -45,6 +46,8 @@ import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; +import net.runelite.client.plugins.config.ConfigPanel; import net.runelite.client.util.HotkeyListener; @PluginDescriptor( @@ -57,6 +60,8 @@ import net.runelite.client.util.HotkeyListener; public class OpenOSRSPlugin extends Plugin { private final openosrsKeyListener keyListener = new openosrsKeyListener(); + private final List colorOptions = Arrays.asList("externalColor", "pvmColor", "pvpColor", "skillingColor", "utilityColor"); + @Inject private OpenOSRSConfig config; @@ -72,9 +77,6 @@ public class OpenOSRSPlugin extends Plugin @Inject private EventBus eventbus; - @Inject - private ConfigManager configManager; - private HotkeyListener hotkeyListener = new HotkeyListener(() -> this.keybind) { @Override @@ -94,7 +96,6 @@ public class OpenOSRSPlugin extends Plugin @Override protected void startUp() throws Exception { - migrateConfigs(); addSubscriptions(); entered = -1; @@ -123,6 +124,16 @@ public class OpenOSRSPlugin extends Plugin return; } + if (colorOptions.stream().anyMatch(option -> option.equals(event.getKey()))) + { + updatePlugins(); + } + + if (event.getKey().equals("pluginSortMode")) + { + ConfigPanel.sortPluginList(config, null); + } + this.keybind = config.detachHotkey(); if (!config.keyboardPin()) @@ -254,35 +265,17 @@ 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() + private void updatePlugins() { - 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) + ConfigPanel.pluginList.forEach(listItem -> { - configManager.setConfiguration("openosrs", key, value); - configManager.unsetConfiguration(group, key); - } + if (listItem.getPluginType() == PluginType.GENERAL_USE || listItem.getPluginType() == PluginType.IMPORTANT) + { + return; + } + + listItem.setColor(ConfigPanel.getColorByCategory(config, listItem.getPluginType())); + listItem.setHidden(ConfigPanel.getHiddenByCategory(config, listItem.getPluginType())); + }); } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterConfig.java deleted file mode 100644 index f13343db7b..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterConfig.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2018, https://openosrs.com - * 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.pluginsorter; - -import java.awt.Color; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; -import net.runelite.client.config.Alpha; -import net.runelite.client.config.Config; -import net.runelite.client.config.ConfigGroup; -import net.runelite.client.config.ConfigItem; -import net.runelite.client.config.ConfigTitleSection; -import net.runelite.client.config.Title; - -@ConfigGroup("pluginsorter") -public interface PluginSorterConfig extends Config -{ - @Getter(AccessLevel.PACKAGE) - @AllArgsConstructor - enum SortStyle - { - CATEGORY("Category"), - ALPHABETICALLY("Alphabetically"); - - private String name; - - @Override - public String toString() - { - return getName(); - } - } - - @ConfigTitleSection( - keyName = "pluginSortingTitle", - name = "Sorting", - description = "", - position = 0 - ) - default Title pluginSortingTitle() - { - return new Title(); - } - - @ConfigItem( - position = 1, - keyName = "pluginSortMode", - name = "Sorting mode", - description = "Sorts plugins ", - titleSection = "pluginSortingTitle" - ) - default SortStyle pluginSortMode() - { - return SortStyle.CATEGORY; - } - - @ConfigTitleSection( - keyName = "hidePluginsTitle", - name = "Hide By Type", - description = "", - position = 2 - ) - default Title hidePluginsTitle() - { - return new Title(); - } - - @ConfigItem( - position = 3, - keyName = "hidePlugins", - name = "Hide All Plugins", - description = "Hides all OpenOSRS plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePvmPlugins || hidePvpPlugins || hideSkillingPlugins || hideUtilityPlugins || hideExternalPlugins" - ) - default boolean hidePlugins() - { - return false; - } - - @ConfigItem( - position = 4, - keyName = "hideExternalPlugins", - name = "Hide External Plugins", - description = "Hides all OpenOSRS external plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePlugins" - ) - default boolean hideExternalPlugins() - { - return false; - } - - @ConfigItem( - position = 5, - keyName = "hidePvmPlugins", - name = "Hide PvM Plugins", - description = "Hides all OpenOSRS PvM plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePlugins" - ) - default boolean hidePvmPlugins() - { - return false; - } - - @ConfigItem( - position = 6, - keyName = "hideSkillingPlugins", - name = "Hide Skilling Plugins", - description = "Hides all OpenOSRS skilling plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePlugins" - ) - default boolean hideSkillingPlugins() - { - return false; - } - - @ConfigItem( - position = 7, - keyName = "hidePvpPlugins", - name = "Hide PvP Plugins", - description = "Hides all OpenOSRS Pvp plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePlugins" - ) - default boolean hidePvpPlugins() - { - return false; - } - - @ConfigItem( - position = 8, - keyName = "hideUtilityPlugins", - name = "Hide Utility Plugins", - description = "Hides all OpenOSRS utility plugins if checked", - titleSection = "hidePluginsTitle", - hide = "hidePlugins" - ) - default boolean hideUtilityPlugins() - { - return false; - } - - @ConfigTitleSection( - keyName = "pluginsColorTitle", - name = "Colors", - description = "", - position = 9 - ) - default Title pluginsColorTitle() - { - return new Title(); - } - - @Alpha - @ConfigItem( - position = 10, - keyName = "externalColor", - name = "External color", - description = "Configure the color of external plugins", - titleSection = "pluginsColorTitle" - ) - default Color externalColor() - { - return new Color(177, 156, 217, 255); - } - - @Alpha - @ConfigItem( - position = 11, - keyName = "pvmColor", - name = "PVM color", - description = "Configure the color of PVM related plugins", - titleSection = "pluginsColorTitle" - ) - default Color pvmColor() - { - return new Color(119, 221, 119, 255); - } - - @Alpha - @ConfigItem( - position = 12, - keyName = "pvpColor", - name = "PVP color", - description = "Configure the color of PVP related plugins", - titleSection = "pluginsColorTitle" - ) - default Color pvpColor() - { - return new Color(255, 105, 97, 255); - } - - @Alpha - @ConfigItem( - position = 13, - keyName = "skillingColor", - name = "Skilling color", - description = "Configure the color of Skilling related plugins", - titleSection = "pluginsColorTitle" - ) - default Color skillingColor() - { - return new Color(252, 252, 100, 255); - } - - @Alpha - @ConfigItem( - position = 14, - keyName = "utilityColor", - name = "Utility color", - description = "Configure the color of Utility related plugins", - titleSection = "pluginsColorTitle" - ) - default Color utilityColor() - { - return new Color(144, 212, 237, 255); - } - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java index fa6d450453..e6b8ad44f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java @@ -24,168 +24,64 @@ */ package net.runelite.client.plugins.pluginsorter; -import com.google.common.collect.ImmutableList; -import com.google.inject.Provides; -import java.awt.Color; -import java.util.Comparator; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.events.ConfigChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.events.PluginChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.plugins.config.ConfigPanel; -import net.runelite.client.plugins.config.PluginListItem; @PluginDescriptor( name = "Plugin Organizer", - description = "Hides and colors 3rd party plugins for better control", - tags = {"plugins", "organizer"}, - type = PluginType.PLUGIN_ORGANIZER + hidden = true ) @Singleton public class PluginSorterPlugin extends Plugin { @Inject - private PluginSorterConfig config; + private ConfigManager configManager; - @Inject - private EventBus eventBus; - - private PluginSorterConfig.SortStyle pluginSortMode; - private Color externalColor; - private Color pvmColor; - private Color pvpColor; - private Color skillingColor; - private Color utilityColor; - - private final ImmutableList definedOrder = ImmutableList.of(PluginType.IMPORTANT, PluginType.EXTERNAL, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.GENERAL_USE, PluginType.PLUGIN_ORGANIZER); - private final Comparator pluginTypeComparator = Comparator.comparing(plugin -> + /** + * Migrates configs from plugin organizer to the OpenOSRS global plugin and deletes the old config values. + * This method should be removed after a reasonable amount of time. + */ + @Deprecated + private void migrateConfigs() { - PluginType type = PluginType.GENERAL_USE; - Plugin sortPlugin = plugin.getPlugin(); - if (sortPlugin != null) - { - type = sortPlugin.getClass().getAnnotation(PluginDescriptor.class).type(); - } - else if (plugin.configDescriptor.getGroup().value().equals("openosrs") || plugin.configDescriptor.getGroup().value().equals("runelite")) - { - type = PluginType.IMPORTANT; - } + migrateConfig("pluginsorter", "pluginSortMode"); + migrateConfig("pluginsorter", "hidePlugins"); + migrateConfig("pluginsorter", "hideExternalPlugins"); + migrateConfig("pluginsorter", "hidePvmPlugins"); + migrateConfig("pluginsorter", "hideSkillingPlugins"); + migrateConfig("pluginsorter", "hidePvpPlugins"); + migrateConfig("pluginsorter", "hideUtilityPlugins"); + migrateConfig("pluginsorter", "externalColor"); + migrateConfig("pluginsorter", "pvmColor"); + migrateConfig("pluginsorter", "pvpColor"); + migrateConfig("pluginsorter", "skillingColor"); + migrateConfig("pluginsorter", "utilityColor"); + } - return definedOrder.indexOf(type); - }); - - @Provides - PluginSorterConfig provideConfig(ConfigManager configManager) + /** + * 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) { - return configManager.getConfig(PluginSorterConfig.class); + String value = configManager.getConfiguration(group, key); + if (value != null) + { + configManager.setConfiguration("openosrs", key, value); + configManager.unsetConfiguration(group, key); + } } @Override protected void startUp() throws Exception { - updateConfig(); - addSubscriptions(); - - updatePlugins(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(PluginChanged.class, this, this::onPluginChanged); - } - - private void onPluginChanged(PluginChanged pluginChanged) - { - validatePlugins(); - } - - private void validatePlugins() - { - updatePlugins(); - } - - private void onConfigChanged(ConfigChanged configChanged) - { - if (!configChanged.getGroup().equals("pluginsorter")) - { - return; - } - - updateConfig(); - updatePlugins(); - } - - private void updatePlugins() - { - boolean hidePlugins = config.hidePlugins(); - boolean hidePvmPlugins = config.hidePvmPlugins(); - boolean hidePvpPlugins = config.hidePvpPlugins(); - boolean hideSkillingPlugins = config.hideSkillingPlugins(); - boolean hideUtilityPlugins = config.hideUtilityPlugins(); - boolean hideExternalPlugins = config.hideExternalPlugins(); - - for (PluginListItem pli : ConfigPanel.pluginList) - { - if (pli.getPlugin() != null) - { - switch (pli.getPlugin().getClass().getAnnotation(PluginDescriptor.class).type()) - { - case EXTERNAL: - pli.nameLabel.setForeground(this.externalColor); - pli.setHidden(hidePlugins || hideExternalPlugins); - break; - case PVM: - pli.nameLabel.setForeground(this.pvmColor); - pli.setHidden(hidePlugins || hidePvmPlugins); - break; - case PVP: - pli.nameLabel.setForeground(this.pvpColor); - pli.setHidden(hidePlugins || hidePvpPlugins); - break; - case SKILLING: - pli.nameLabel.setForeground(this.skillingColor); - pli.setHidden(hidePlugins || hideSkillingPlugins); - break; - case UTILITY: - pli.nameLabel.setForeground(this.utilityColor); - pli.setHidden(hidePlugins || hideUtilityPlugins); - break; - default: - pli.nameLabel.setForeground(Color.WHITE); - break; - } - } - } - - if (this.pluginSortMode == PluginSorterConfig.SortStyle.CATEGORY) - { - ConfigPanel.pluginList.sort(pluginTypeComparator.thenComparing(PluginListItem::getName)); - } - else - { - ConfigPanel.pluginList.sort(Comparator.comparing(PluginListItem::getName)); - } - } - - private void updateConfig() - { - this.pluginSortMode = config.pluginSortMode(); - this.externalColor = config.externalColor(); - this.pvmColor = config.pvmColor(); - this.pvpColor = config.pvpColor(); - this.skillingColor = config.skillingColor(); - this.utilityColor = config.utilityColor(); + migrateConfigs(); } }