diff --git a/gradlew b/gradlew old mode 100755 new mode 100644 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 d566d25296..50803d3751 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 @@ -64,7 +64,7 @@ public interface OpenOSRSConfig extends Config @ConfigItem( position = 3, keyName = "shareLogs", - name = "Anonymous error data", + name = "Share anonymous error data", description = "Share anonymous error data with the OpenOSRS developers", titleSection = "logTitle" ) @@ -108,101 +108,26 @@ public interface OpenOSRSConfig extends Config return SortStyle.CATEGORY; } - @ConfigTitleSection( - keyName = "hidePluginsTitle", - name = "Hide By Type", - description = "", + @ConfigItem( position = 4, - titleSection = "pluginsTitle" + keyName = "enableCategories", + name = "Categorize plugins", + description = "Show sections in the plugin list for each plugin type", + titleSection = "pluginSortingTitle", + hidden = true, + unhide = "pluginSortMode", + unhideValue = "Category" ) - default Title hidePluginsTitle() + default boolean enableCategories() { - 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; + return true; } @ConfigTitleSection( keyName = "pluginsColorTitle", name = "Colors", description = "", - position = 11, + position = 5, titleSection = "pluginsTitle" ) default Title pluginsColorTitle() @@ -210,26 +135,27 @@ public interface OpenOSRSConfig extends Config return new Title(); } - @Alpha @ConfigItem( - position = 12, - keyName = "externalColor", - name = "External color", - description = "Configure the color of external plugins", + position = 6, + keyName = "enabledColors", + name = "Enable plugin colors", + description = "Configure whether or not the plugins list should be colorcoded", titleSection = "pluginsColorTitle" ) - default Color externalColor() + default boolean enabledColors() { - return new Color(177, 156, 217, 255); + return true; } @Alpha @ConfigItem( - position = 13, + position = 7, keyName = "pvmColor", - name = "PVM color", - description = "Configure the color of PVM related plugins", - titleSection = "pluginsColorTitle" + name = "PvM color", + description = "Configure the color of PvM related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" ) default Color pvmColor() { @@ -238,24 +164,13 @@ public interface OpenOSRSConfig extends Config @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, + position = 8, keyName = "skillingColor", name = "Skilling color", - description = "Configure the color of Skilling related plugins", - titleSection = "pluginsColorTitle" + description = "Configure the color of skilling related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" ) default Color skillingColor() { @@ -264,22 +179,99 @@ public interface OpenOSRSConfig extends Config @Alpha @ConfigItem( - position = 16, + position = 9, + keyName = "pvpColor", + name = "PvP color", + description = "Configure the color of PvP related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" + ) + default Color pvpColor() + { + return new Color(255, 105, 97, 255); + } + + @Alpha + @ConfigItem( + position = 10, keyName = "utilityColor", name = "Utility color", - description = "Configure the color of Utility related plugins", - titleSection = "pluginsColorTitle" + description = "Configure the color of utility related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" ) default Color utilityColor() { return new Color(144, 212, 237, 255); } + @Alpha + @ConfigItem( + position = 11, + keyName = "minigameColor", + name = "Minigame color", + description = "Configure the color of minigame related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" + ) + default Color minigameColor() + { + return new Color(235, 130, 66, 255); + } + + @Alpha + @ConfigItem( + position = 12, + keyName = "miscellaneousColor", + name = "Miscellaneous color", + description = "Configure the color of miscellaneous related plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" + ) + default Color miscellaneousColor() + { + return new Color(243, 85, 136, 255); + } + + @Alpha + @ConfigItem( + position = 13, + keyName = "gamemodeColor", + name = "Gamemode color", + description = "Configure the color of gamemode plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" + ) + default Color gamemodeColor() + { + return new Color(244, 239, 211, 255); + } + + @Alpha + @ConfigItem( + position = 14, + keyName = "externalColor", + name = "External color", + description = "Configure the color of external plugins", + titleSection = "pluginsColorTitle", + hidden = true, + unhide = "enabledColors" + ) + default Color externalColor() + { + return new Color(177, 156, 217, 255); + } + @ConfigTitleSection( keyName = "externalPluginsTitle", name = "External", description = "", - position = 17, + position = 15, titleSection = "pluginsTitle" ) default Title externalPluginsTitle() @@ -291,7 +283,7 @@ public interface OpenOSRSConfig extends Config keyName = "enablePlugins", name = "Enable loading of external plugins", description = "Enable loading of external plugins", - position = 18, + position = 16, titleSection = "externalPluginsTitle" ) default boolean enablePlugins() @@ -303,7 +295,7 @@ public interface OpenOSRSConfig extends Config keyName = "opacityTitle", name = "Opacity", description = "", - position = 19 + position = 17 ) default Title opacityTitle() { @@ -314,7 +306,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 = 20, + position = 18, titleSection = "opacityTitle" ) default boolean enableOpacity() @@ -330,7 +322,7 @@ public interface OpenOSRSConfig extends Config keyName = "opacityPercentage", name = "Opacity percentage", description = "Changes the opacity of the window if opacity is enabled", - position = 21, + position = 19, titleSection = "opacityTitle" ) default int opacityPercentage() @@ -342,7 +334,7 @@ public interface OpenOSRSConfig extends Config keyName = "miscTitle", name = "Miscellaneous", description = "", - position = 22 + position = 20 ) default Title miscTitle() { @@ -353,7 +345,7 @@ public interface OpenOSRSConfig extends Config keyName = "keyboardPin", name = "Keyboard bank pin", description = "Enables you to type your bank pin", - position = 23, + position = 21, titleSection = "miscTitle" ) default boolean keyboardPin() @@ -365,7 +357,7 @@ public interface OpenOSRSConfig extends Config keyName = "detachHotkey", name = "Detach Cam", description = "Detach Camera hotkey, press this and it will activate detatched camera.", - position = 24, + position = 22, titleSection = "miscTitle" ) default Keybind detachHotkey() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java index 52e6a25391..3abf4f1c9e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java @@ -95,7 +95,7 @@ public class ExternalPluginLoader List loadedPlugins; try { - loadedPlugins = pluginManager.scanAndInstantiate(loader, null); + loadedPlugins = pluginManager.scanAndInstantiate(loader, null, true); } catch (IOException ex) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java index f654145cff..81b269f5a8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java @@ -59,5 +59,5 @@ public @interface PluginDescriptor boolean loadWhenOutdated() default false; - PluginType type() default PluginType.GENERAL_USE; + PluginType type() default PluginType.UNCATEGORIZED; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index ebca9bc207..8f1f097f26 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -213,7 +213,7 @@ public class PluginManager public void loadCorePlugins() throws IOException { - plugins.addAll(scanAndInstantiate(getClass().getClassLoader(), PLUGIN_PACKAGE)); + plugins.addAll(scanAndInstantiate(getClass().getClassLoader(), PLUGIN_PACKAGE, false)); } public void startCorePlugins() @@ -246,7 +246,7 @@ public class PluginManager } @SuppressWarnings("unchecked") - List scanAndInstantiate(ClassLoader classLoader, String packageName) throws IOException + List scanAndInstantiate(ClassLoader classLoader, String packageName, boolean external) throws IOException { RuneLiteSplashScreen.stage(.59, "Loading plugins"); MutableGraph> graph = GraphBuilder @@ -279,6 +279,12 @@ public class PluginManager continue; } + if (external && pluginDescriptor.type() != PluginType.EXTERNAL) + { + log.error("Class {} is using the external plugin loader but doesn't have PluginType.EXTERNAL", clazz); + continue; + } + if (!pluginDescriptor.loadWhenOutdated() && isOutdated) { continue; 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 93dc019e9f..b25fa53ed5 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 @@ -1,12 +1,29 @@ package net.runelite.client.plugins; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter(AccessLevel.PUBLIC) +@AllArgsConstructor public enum PluginType { - PVM, - PVP, - SKILLING, - UTILITY, - GENERAL_USE, - EXTERNAL, - IMPORTANT -} + PVM("PvM"), + PVP("PvP"), + SKILLING("Skilling"), + UTILITY("Utilities"), + MISCELLANEOUS("Miscellaneous"), + EXTERNAL("External"), + IMPORTANT("System"), + MINIGAME("Minigame"), + GAMEMODE("Gamemode"), + UNCATEGORIZED("Uncategorized"); + + private String name; + + @Override + public String toString() + { + return getName(); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java index 95e3dfeaaa..de6222c38f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java @@ -38,7 +38,8 @@ import net.runelite.client.plugins.PluginDescriptor; name = "Account", description = "Sync RuneLite config settings with your Google account", tags = {"external", "google", "integration"}, - loadWhenOutdated = true + loadWhenOutdated = true, + hidden = true ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java index b0211c33fe..531a655d9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java @@ -48,6 +48,7 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.achievementdiary.diaries.ArdougneDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.DesertDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.FaladorDiaryRequirement; @@ -65,7 +66,8 @@ import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequi @PluginDescriptor( name = "Diary Requirements", description = "Display level requirements in Achievement Diary interface", - tags = {"achievements", "tasks"} + tags = {"achievements", "tasks"}, + type = PluginType.UTILITY ) @Singleton public class DiaryRequirementsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 1ccf31b81e..d58d516978 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -77,6 +77,7 @@ import net.runelite.client.game.AgilityShortcut; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.ColorUtil; @@ -84,7 +85,8 @@ import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "Agility", description = "Show helpful information about agility courses and obstacles", - tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"} + tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"}, + type = PluginType.SKILLING ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java index 051229ee41..af4fcf5cde 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java @@ -39,12 +39,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Ammo", description = "Shows the current ammo the player has equipped", - tags = {"bolts", "darts", "chinchompa", "equipment"} + tags = {"bolts", "darts", "chinchompa", "equipment"}, + type = PluginType.UTILITY ) @Singleton public class AmmoPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java index 9a7050c0a4..ac411f525d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java @@ -33,12 +33,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Animation Smoothing", description = "Show smoother player, NPC, and object animations", tags = {"npcs", "objects", "players"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class AnimationSmoothingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java index 2e70cda3e8..29dc7792d4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java @@ -54,6 +54,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING; import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE_CASTING; import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER; @@ -62,7 +63,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Attack Styles", description = "Show your current attack style as an overlay", - tags = {"combat", "defence", "magic", "overlay", "ranged", "strength", "warn", "pure"} + tags = {"combat", "defence", "magic", "overlay", "ranged", "strength", "warn", "pure"}, + type = PluginType.UTILITY ) @Singleton public class AttackStylesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index 253cb2c95e..971731de4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -71,13 +71,15 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.banktags.tabs.BankSearch; import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Bank", description = "Modifications to the banking interface", - tags = {"grand", "exchange", "high", "alchemy", "prices", "deposit"} + tags = {"grand", "exchange", "high", "alchemy", "prices", "deposit"}, + type = PluginType.UTILITY ) @Singleton public class BankPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 7018939a22..7c3c680b31 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -79,6 +79,7 @@ import net.runelite.client.input.MouseWheelListener; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.banktags.tabs.BankSearch; import net.runelite.client.plugins.banktags.tabs.TabInterface; import static net.runelite.client.plugins.banktags.tabs.TabInterface.FILTERED_CHARS; @@ -89,7 +90,8 @@ import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Bank Tags", description = "Enable tagging of bank items and searching of bank tags", - tags = {"searching", "tagging"} + tags = {"searching", "tagging"}, + type = PluginType.UTILITY ) @PluginDependency(ClueScrollPlugin.class) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java index 15f44c09ca..e29d801d29 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java @@ -68,7 +68,7 @@ import org.jetbrains.annotations.NotNull; description = "Displays warning in chat when you join a" + "clan chat/new member join your clan chat and he is in a WDR/RuneWatch/Manual List", tags = {"PVM", "WDR", "RuneWatch"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java index 0db9e27d9b..02b83f4b18 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java @@ -106,7 +106,7 @@ import org.apache.commons.lang3.StringUtils; name = "Barbarian Assault", description = "Custom barbarian assault plugin, use along with BA Tools", tags = {"minigame", "overlay", "timer"}, - type = PluginType.PVM // don't remove this, added this because our barbarian assault plugin is big time modified + type = PluginType.MINIGAME // don't remove this, added this because our barbarian assault plugin is big time modified ) @Singleton public class BarbarianAssaultPlugin extends Plugin implements KeyListener diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java index 3157167fbf..6b8b102632 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java @@ -59,6 +59,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxPriority; @@ -67,7 +68,8 @@ import net.runelite.client.ui.overlay.infobox.LoopTimer; @PluginDescriptor( name = "Barrows Brothers", description = "Show helpful information for the Barrows minigame", - tags = {"combat", "minigame", "minimap", "bosses", "pve", "pvm"} + tags = {"combat", "minigame", "minimap", "bosses", "pve", "pvm"}, + type = PluginType.MINIGAME ) @Singleton public class BarrowsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java index 25080d2891..7821ad9e0d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java @@ -51,13 +51,15 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Blast Furnace", description = "Show helpful information for the Blast Furnace minigame", - tags = {"minigame", "overlay", "skilling", "smithing"} + tags = {"minigame", "overlay", "skilling", "smithing"}, + type = PluginType.MINIGAME ) @Singleton public class BlastFurnacePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java index c76bf99bdd..517c51b06d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java @@ -45,12 +45,14 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Blast Mine", description = "Show helpful information for the Blast Mine minigame", - tags = {"explode", "explosive", "mining", "minigame", "skilling"} + tags = {"explode", "explosive", "mining", "minigame", "skilling"}, + type = PluginType.MINIGAME ) @Singleton public class BlastMinePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java index c345eb734c..0c6241252b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java @@ -49,6 +49,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SkillIconManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.ImageUtil; @@ -56,7 +57,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Boosts Information", description = "Show combat and/or skill boost information", - tags = {"combat", "notifications", "skilling", "overlay"} + tags = {"combat", "notifications", "skilling", "overlay"}, + type = PluginType.UTILITY ) @Singleton public class BoostsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java index 9ba549be66..2ab37ba452 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java @@ -34,12 +34,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Boss Timers", description = "Show boss spawn timer overlays", - tags = {"combat", "pve", "overlay", "spawn"} + tags = {"combat", "pve", "overlay", "spawn"}, + type = PluginType.PVM ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java index 2c32a0d697..87bfb54f13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java @@ -43,7 +43,7 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Bronze Man Mode", description = "Restrict yourself as an Iron Meme with GE use for items you have unlocked.", tags = {"Bronze", "pve", "restrict", "game", "challenge", "bronzeman", "ironman"}, - type = PluginType.UTILITY, + type = PluginType.GAMEMODE, enabledByDefault = false ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java index 825e1ab590..be17a3906a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java @@ -51,13 +51,15 @@ import net.runelite.client.input.MouseListener; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.MiscUtils; @PluginDescriptor( name = "Camera Zoom", description = "Expands zoom limit, provides vertical camera, and remaps mouse input keys", tags = {"zoom", "limit", "vertical", "click", "mouse"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) public class CameraPlugin extends Plugin implements KeyListener, MouseListener { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index f75e66ba3f..208b571559 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -51,6 +51,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -59,7 +60,8 @@ import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Cannon", description = "Show information about cannon placement and/or amount of cannonballs", - tags = {"combat", "notifications", "ranged", "overlay"} + tags = {"combat", "notifications", "ranged", "overlay"}, + type = PluginType.UTILITY ) public class CannonPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java index 68bdedb1a4..2dfb84c7ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java @@ -41,12 +41,14 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Cerberus", description = "Show what to pray against the summoned souls", - tags = {"bosses", "combat", "ghosts", "prayer", "pve", "overlay", "souls"} + tags = {"bosses", "combat", "ghosts", "prayer", "pve", "overlay", "souls"}, + type = PluginType.PVM ) @Singleton public class CerberusPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java index 88d5dd65a1..f2fdbfaa33 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java @@ -42,9 +42,11 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( - name = "Chatbox performance" + name = "Chatbox performance", + type = PluginType.MISCELLANEOUS ) @Singleton public class ChatboxPerformancePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index b5c326c28f..a0d6d3d50a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -68,6 +68,7 @@ import net.runelite.client.game.ItemManager; 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.util.QuantityFormatter; import net.runelite.http.api.chat.ChatClient; import net.runelite.http.api.chat.Duels; @@ -84,7 +85,8 @@ import org.apache.commons.text.WordUtils; @PluginDescriptor( name = "Chat Commands", description = "Enable chat commands", - tags = {"grand", "exchange", "level", "prices"} + tags = {"grand", "exchange", "level", "prices"}, + type = PluginType.UTILITY ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index 5d244290a0..9e84d1701b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -50,12 +50,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import org.apache.commons.lang3.StringUtils; @PluginDescriptor( name = "Chat Filter", description = "Censor user configurable words or patterns from chat", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class ChatFilterPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java index 7a68d24622..7531e0aaa7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java @@ -52,12 +52,14 @@ 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 org.apache.commons.lang3.StringUtils; @PluginDescriptor( name = "Chat History", description = "Retain your chat history when logging in/out or world hopping", - tags = {"chat", "history", "retain", "cycle", "pm"} + tags = {"chat", "history", "retain", "cycle", "pm"}, + type = PluginType.MISCELLANEOUS ) @Singleton public class ChatHistoryPlugin extends Plugin implements KeyListener diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java index e1f38c3cdc..cd304fa09c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java @@ -51,12 +51,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Chat Notifications", description = "Highlight and notify you of chat messages", tags = {"duel", "messages", "notifications", "trade", "username"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class ChatNotificationsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java index 2f62859442..7a85bd3bb6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java @@ -39,7 +39,7 @@ import net.runelite.client.plugins.PluginType; name = "Chat Translator", description = "Translates messages from one Language to another.", tags = {"translate", "language", "english", "spanish", "dutch", "french", "welsh", "german"}, - type = PluginType.UTILITY + type = PluginType.MISCELLANEOUS ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java index 9d553d82b9..7870aa3bfd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java @@ -78,6 +78,7 @@ import net.runelite.client.game.SpriteManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND; import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND; import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; @@ -87,7 +88,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Clan Chat", description = "Add rank icons to users talking in clan chat", - tags = {"icons", "rank", "recent"} + tags = {"icons", "rank", "recent"}, + type = PluginType.UTILITY ) @Singleton public class ClanChatPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 3d1696fee6..ed294fe177 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -78,6 +78,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.cluescrolls.clues.AnagramClue; import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue; import net.runelite.client.plugins.cluescrolls.clues.CipherClue; @@ -107,7 +108,8 @@ import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Clue Scroll", description = "Show answers to clue scroll riddles, anagrams, ciphers, and cryptic clues", - tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"} + tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java index 4ac83f1bb0..02e825cbb9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java @@ -48,12 +48,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Combat Level", description = "Show a more accurate combat level in Combat Options panel and other combat level functions", - tags = {"wilderness", "attack", "range"} + tags = {"wilderness", "attack", "range"}, + type = PluginType.UTILITY ) @Singleton public class CombatLevelPlugin extends Plugin 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 ff256507c9..67ffd6fd58 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,15 +26,12 @@ 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; import java.awt.Component; import java.awt.Dimension; -import java.awt.FontMetrics; import java.awt.Insets; -import java.awt.Rectangle; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; @@ -45,16 +42,11 @@ import java.awt.image.BufferedImage; 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; import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ScheduledExecutorService; -import java.util.stream.Collectors; -import javax.inject.Singleton; +import javax.inject.Inject; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; @@ -72,6 +64,7 @@ import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.JToggleButton; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; import javax.swing.SpinnerModel; @@ -82,17 +75,12 @@ import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeListener; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; import javax.swing.plaf.basic.BasicSpinnerUI; import javax.swing.text.JTextComponent; import lombok.extern.slf4j.Slf4j; import net.runelite.api.util.Text; import net.runelite.client.config.Button; -import net.runelite.client.config.ChatColorConfig; -import net.runelite.client.config.Config; import net.runelite.client.config.ConfigDescriptor; -import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItemDescriptor; import net.runelite.client.config.ConfigManager; @@ -100,36 +88,29 @@ import net.runelite.client.config.ConfigSection; import net.runelite.client.config.ConfigTitleSection; import net.runelite.client.config.Keybind; import net.runelite.client.config.ModifierlessKeybind; -import net.runelite.client.config.OpenOSRSConfig; import net.runelite.client.config.Range; -import net.runelite.client.config.RuneLiteConfig; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginInstantiationException; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.PluginChanged; 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; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.ComboBoxListRenderer; -import net.runelite.client.ui.components.IconButton; -import net.runelite.client.ui.components.IconTextField; import net.runelite.client.ui.components.MinimumSizedPanel; import net.runelite.client.ui.components.colorpicker.ColorPickerManager; import net.runelite.client.ui.components.colorpicker.RuneliteColorPicker; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.MiscUtils; -import org.apache.commons.lang3.StringUtils; +import net.runelite.client.util.SwingUtil; @Slf4j -@Singleton -public class ConfigPanel extends PluginPanel +class ConfigPanel extends PluginPanel { private static final int SPINNER_FIELD_WIDTH = 6; - private static final int SCROLLBAR_WIDTH = 17; private static final int OFFSET = 6; + private static final ImageIcon BACK_ICON; private static final ImageIcon BACK_ICON_HOVER; private static final ImageIcon SECTION_EXPAND_ICON; @@ -137,30 +118,26 @@ public class ConfigPanel extends PluginPanel private static final ImageIcon SECTION_RETRACT_ICON; private static final ImageIcon SECTION_RETRACT_ICON_HOVER; - 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 CHAT_COLOR_PLUGIN = "Chat Color"; - private final PluginManager pluginManager; - private final ConfigManager configManager; - private final ScheduledExecutorService executorService; - private final RuneLiteConfig runeLiteConfig; - private final OpenOSRSConfig OpenOSRSConfig; - private final ChatColorConfig chatColorConfig; - private final ColorPickerManager colorPickerManager; - public static final List pluginList = new ArrayList<>(); - - private final IconTextField searchBar = new IconTextField(); - private final JPanel topPanel; - private final JPanel mainPanel; private final JScrollPane scrollPane; + private final FixedWidthPanel mainPanel; + private final JLabel title; + private final PluginToggleButton pluginToggle; - private boolean showingPluginList = true; - private int scrollBarPosition = 0; + @Inject + private PluginListPanel pluginList; - 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())); + @Inject + private ConfigManager configManager; + + @Inject + private PluginManager pluginManager; + + @Inject + private ColorPickerManager colorPickerManager; + + private PluginConfigurationDescriptor pluginConfig = null; + private final Map sectionWidgets = new HashMap<>(); + private final Map titleSectionWidgets = new HashMap<>(); static { @@ -179,50 +156,16 @@ public class ConfigPanel extends PluginPanel SECTION_EXPAND_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(sectionExpandIcon, -100)); } - ConfigPanel(PluginManager pluginManager, ConfigManager configManager, ScheduledExecutorService executorService, - RuneLiteConfig runeLiteConfig, OpenOSRSConfig OpenOSRSConfig, ChatColorConfig chatColorConfig, - ColorPickerManager colorPickerManager) + public ConfigPanel() { super(false); - this.pluginManager = pluginManager; - this.configManager = configManager; - this.executorService = executorService; - this.runeLiteConfig = runeLiteConfig; - this.OpenOSRSConfig = OpenOSRSConfig; - this.chatColorConfig = chatColorConfig; - this.colorPickerManager = colorPickerManager; - - searchBar.setIcon(IconTextField.Icon.SEARCH); - searchBar.setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH - 20, 30)); - searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR); - searchBar.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR); - searchBar.getDocument().addDocumentListener(new DocumentListener() - { - @Override - public void insertUpdate(DocumentEvent e) - { - onSearchBarChanged(); - } - - @Override - public void removeUpdate(DocumentEvent e) - { - onSearchBarChanged(); - } - - @Override - public void changedUpdate(DocumentEvent e) - { - onSearchBarChanged(); - } - }); setLayout(new BorderLayout()); setBackground(ColorScheme.DARK_GRAY_COLOR); - topPanel = new JPanel(); + JPanel topPanel = new JPanel(); topPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); - topPanel.setLayout(new BorderLayout(0, OFFSET)); + topPanel.setLayout(new BorderLayout(0, BORDER_OFFSET)); add(topPanel, BorderLayout.NORTH); mainPanel = new FixedWidthPanel(); @@ -238,257 +181,58 @@ public class ConfigPanel extends PluginPanel scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); add(scrollPane, BorderLayout.CENTER); - initializePluginList(); - refreshPluginList(); - } - - static class configTextArea extends JTextArea - { - private static final int WIDTH = 212; - private static final int HEIGHT_PADDING = 13; - - @Override - public void scrollRectToVisible(final Rectangle aRect) - { - // suppress scrollToRect in textarea - } - - @Override - public Dimension getSize() - { - if (StringUtils.isAllEmpty(getText())) - { - return super.getSize(); - } - - final ArrayList lines = new ArrayList<>(); - final FontMetrics fontMetrics = getFontMetrics(getFont()); - - StringBuilder sb = new StringBuilder(); - for (final Character c : getText().toCharArray()) - { - sb.append(c); - if (fontMetrics.stringWidth(sb.toString()) > WIDTH || c == '\n') - { - sb.setLength(sb.length() - 1); - lines.add(sb.toString()); - sb = new StringBuilder(c.toString()); - } - } - lines.add(sb.toString()); - - return new Dimension(WIDTH, (lines.size() * fontMetrics.getHeight()) + HEIGHT_PADDING); - } - } - - private void initializePluginList() - { - final List pinnedPlugins = getPinnedPluginNames(); - - // 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", 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", PluginType.IMPORTANT, "client"); - runeLite.setPinned(pinnedPlugins.contains(RUNELITE_PLUGIN)); - runeLite.nameLabel.setForeground(Color.WHITE); - pluginList.add(runeLite); - - // populate pluginList with all vanilla RL plugins - List plugins = new ArrayList<>(); - pluginManager.getPlugins().stream() - .filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden()) - .forEach(plugin -> - { - final PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class); - final Config config = pluginManager.getPluginConfigProxy(plugin); - final ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config); - - 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", PluginType.GENERAL_USE, "colour", "messages"); - chatColor.setPinned(pinnedPlugins.contains(CHAT_COLOR_PLUGIN)); - plugins.add(chatColor); - - pluginList.addAll(plugins); - - ConfigPanel.sortPluginList(OpenOSRSConfig, null); - } - - void refreshPluginList() - { - if (pluginManager != null) - { - // update enabled / disabled status of all items - pluginList.forEach(listItem -> - { - final Plugin plugin = listItem.getPlugin(); - if (plugin != null) - { - listItem.setPluginEnabled(pluginManager.isPluginEnabled(plugin)); - } - }); - } - - if (showingPluginList) - { - openConfigList(); - } - } - - void openConfigList() - { - if (showingPluginList) - { - scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); - } - - showingPluginList = true; - - topPanel.removeAll(); - mainPanel.removeAll(); - topPanel.add(searchBar, BorderLayout.CENTER); - - onSearchBarChanged(); - searchBar.requestFocusInWindow(); - validate(); - scrollPane.getVerticalScrollBar().setValue(scrollBarPosition); - } - - private void onSearchBarChanged() - { - final String text = searchBar.getText(); - - pluginList.forEach(mainPanel::remove); - - showMatchingPlugins(true, text); - showMatchingPlugins(false, text); - - revalidate(); - } - - private void showMatchingPlugins(boolean pinned, String text) - { - if (text.isEmpty()) - { - pluginList.stream().filter(item -> pinned == item.isPinned() && !item.isHidden()).forEach(mainPanel::add); - return; - } - - final String[] searchTerms = text.toLowerCase().split(" "); - pluginList.forEach(listItem -> - { - if (pinned == listItem.isPinned() && listItem.matchesSearchTerms(searchTerms) && !listItem.isHidden()) - { - mainPanel.add(listItem); - } - }); - } - - private Boolean parse(ConfigItem item, String value) - { - try - { - Method parse = item.clazz().getMethod(item.method(), String.class); - - return (boolean) parse.invoke(null, value); - } - catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) - { - log.error("Parsing failed: {}", ex.getMessage()); - } - - return null; - } - - private void parseLabel(ConfigItem item, JLabel label, String value) - { - Boolean result = parse(item, value); - - if (result == null) - { - label.setForeground(Color.RED); - label.setText("Parsing failed"); - } - else if (result) - { - label.setForeground(Color.GREEN); - label.setText("Valid input"); - } - else - { - label.setForeground(Color.RED); - label.setText("Error: Invalid input"); - } - } - - private void toggleSection(ConfigDescriptor cd, ConfigSection cs, IconButton button, JPanel contents) - { - boolean newState = !contents.isVisible(); - contents.setVisible(newState); - button.setIcon(newState ? SECTION_RETRACT_ICON : SECTION_EXPAND_ICON); - button.setHoverIcon(newState ? SECTION_RETRACT_ICON_HOVER : SECTION_EXPAND_ICON_HOVER); - configManager.setConfiguration(cd.getGroup().value(), cs.keyName(), newState); - button.setToolTipText(newState ? "Retract" : "Expand"); - SwingUtilities.invokeLater(() -> - { - contents.revalidate(); - contents.repaint(); - }); - } - - void openGroupConfigPanel(PluginListItem listItem, Config config, ConfigDescriptor cd) - { - openGroupConfigPanel(listItem, config, cd, false); - } - - @SuppressWarnings("unchecked") - private void openGroupConfigPanel(PluginListItem listItem, Config config, ConfigDescriptor cd, boolean refresh) - { - showingPluginList = false; - - scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); - topPanel.removeAll(); - mainPanel.removeAll(); - - final IconButton topPanelBackButton = new IconButton(BACK_ICON, BACK_ICON_HOVER); + JButton topPanelBackButton = new JButton(BACK_ICON); + topPanelBackButton.setRolloverIcon(BACK_ICON_HOVER); + SwingUtil.removeButtonDecorations(topPanelBackButton); topPanelBackButton.setPreferredSize(new Dimension(22, 0)); topPanelBackButton.setBorder(new EmptyBorder(0, 0, 0, 5)); - topPanelBackButton.addActionListener(e -> openConfigList()); + topPanelBackButton.addActionListener(e -> pluginList.getMuxer().popState()); topPanelBackButton.setToolTipText("Back"); topPanel.add(topPanelBackButton, BorderLayout.WEST); - String name = listItem.getName(); - JLabel title = new JLabel(name); - title.setForeground(listItem.getColor()); - title.setToolTipText("" + name + ":
" + listItem.getDescription() + ""); + pluginToggle = new PluginToggleButton(); + topPanel.add(pluginToggle, BorderLayout.EAST); + title = new JLabel(); + title.setForeground(Color.WHITE); + topPanel.add(title); + } - IconButton toggleButton = new IconButton(PluginListItem.OFF_SWITCHER); - toggleButton.setPreferredSize(new Dimension(25, 0)); - listItem.updateToggleButton(toggleButton); - listItem.attachToggleButtonListener(toggleButton); + void init(PluginConfigurationDescriptor pluginConfig) + { + assert this.pluginConfig == null; + this.pluginConfig = pluginConfig; - topPanel.add(toggleButton, BorderLayout.EAST); + String name = pluginConfig.getName(); + title.setText(name); + title.setForeground(Color.WHITE); + title.setToolTipText("" + name + ":
" + pluginConfig.getDescription() + ""); - final Map sectionWidgets = new HashMap<>(); - final Map titleSectionWidgets = new HashMap<>(); + if (pluginConfig.getPlugin() != null) + { + pluginToggle.setSelected(pluginManager.isPluginEnabled(pluginConfig.getPlugin())); + pluginToggle.addItemListener(i -> + { + if (pluginToggle.isSelected()) + { + pluginList.startPlugin(pluginConfig.getPlugin()); + } + else + { + pluginList.stopPlugin(pluginConfig.getPlugin()); + } + }); + } + else + { + pluginToggle.setVisible(false); + } + rebuild(false); + } + + private void getSections(ConfigDescriptor cd) + { for (ConfigSection cs : cd.getSections()) { final MinimumSizedPanel section = new MinimumSizedPanel(); @@ -499,7 +243,7 @@ public class ConfigPanel extends PluginPanel item.setLayout(new BorderLayout()); item.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); - name = cs.name(); + String name = cs.name(); String description = cs.description(); JLabel headerLabel = new JLabel(cs.name()); @@ -513,13 +257,18 @@ public class ConfigPanel extends PluginPanel final boolean state = Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cs.keyName())); - final IconButton collapse = new IconButton(state ? SECTION_RETRACT_ICON : SECTION_EXPAND_ICON); - collapse.setHoverIcon(state ? SECTION_RETRACT_ICON_HOVER : SECTION_EXPAND_ICON_HOVER); + final JToggleButton collapse = new JToggleButton(SECTION_EXPAND_ICON, state); + + SwingUtil.removeButtonDecorations(collapse); + collapse.setRolloverIcon(SECTION_EXPAND_ICON_HOVER); + collapse.setSelectedIcon(SECTION_RETRACT_ICON); + collapse.setRolloverSelectedIcon(SECTION_RETRACT_ICON_HOVER); collapse.setToolTipText(state ? "Retract" : "Expand"); collapse.setPreferredSize(new Dimension(20, 20)); collapse.setFont(collapse.getFont().deriveFont(16.0f)); collapse.setBorder(null); collapse.setMargin(new Insets(0, 0, 0, 0)); + headerLabel.setBorder(new EmptyBorder(0, 10, 0, 0)); item.add(collapse, BorderLayout.WEST); @@ -559,7 +308,10 @@ public class ConfigPanel extends PluginPanel parentSection.add(section); } } + } + private void getTitleSections(ConfigDescriptor cd) + { for (ConfigTitleSection cs : cd.getTitleSections()) { final MinimumSizedPanel titleSection = new MinimumSizedPanel(); @@ -606,6 +358,72 @@ public class ConfigPanel extends PluginPanel mainPanel.add(titleSection); } } + } + + + + private Boolean parse(ConfigItem item, String value) + { + try + { + Method parse = item.clazz().getMethod(item.method(), String.class); + + return (boolean) parse.invoke(null, value); + } + catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) + { + log.error("Parsing failed: {}", ex.getMessage()); + } + + return null; + } + + private void parseLabel(ConfigItem item, JLabel label, String value) + { + Boolean result = parse(item, value); + + if (result == null) + { + label.setForeground(Color.RED); + label.setText("Parsing failed"); + } + else if (result) + { + label.setForeground(Color.GREEN); + label.setText("Valid input"); + } + else + { + label.setForeground(Color.RED); + label.setText("Invalid input"); + } + } + + private void toggleSection(ConfigDescriptor cd, ConfigSection cs, JToggleButton button, JPanel contents) + { + boolean newState = !contents.isVisible(); + button.setSelected(newState); + contents.setVisible(newState); + configManager.setConfiguration(cd.getGroup().value(), cs.keyName(), newState); + button.setToolTipText(newState ? "Retract" : "Expand"); + SwingUtilities.invokeLater(() -> + { + contents.revalidate(); + contents.repaint(); + }); + } + + private void rebuild(boolean refresh) + { + int scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); + + mainPanel.removeAll(); + + ConfigDescriptor cd = pluginConfig.getConfigDescriptor(); + assert cd != null; + + getSections(cd); + getTitleSections(cd); List buttons = new ArrayList<>(); @@ -707,10 +525,8 @@ public class ConfigPanel extends PluginPanel JPanel item = new JPanel(); item.setLayout(new BorderLayout()); item.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); - name = cid.getItem().name(); - + String name = cid.getItem().name(); JLabel configEntryName = new JLabel(name); - configEntryName.setPreferredSize(new Dimension(PANEL_WIDTH, (int) configEntryName.getPreferredSize().getHeight())); configEntryName.setForeground(Color.WHITE); configEntryName.setToolTipText("" + name + ":
" + cid.getItem().description() + ""); item.add(configEntryName, cid.getType() != String.class ? BorderLayout.CENTER : BorderLayout.NORTH); @@ -720,12 +536,12 @@ public class ConfigPanel extends PluginPanel JCheckBox checkbox = new JCheckBox(); checkbox.setBackground(ColorScheme.LIGHT_GRAY_COLOR); checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()))); - checkbox.addActionListener(ae -> changeConfiguration(listItem, config, checkbox, cd, cid)); + checkbox.addActionListener(ae -> changeConfiguration(checkbox, cd, cid)); item.add(checkbox, BorderLayout.EAST); } - else if (cid.getType() == int.class) + if (cid.getType() == int.class) { int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); @@ -746,13 +562,12 @@ public class ConfigPanel extends PluginPanel JSlider slider = new JSlider(min, max, value); sliderValueLabel.setText(String.valueOf(slider.getValue())); slider.setPreferredSize(new Dimension(80, 25)); - slider.setBackground(Color.WHITE); slider.addChangeListener((l) -> { sliderValueLabel.setText(String.valueOf(slider.getValue())); if (!slider.getValueIsAdjusting()) { - changeConfiguration(listItem, config, slider, cd, cid); + changeConfiguration(slider, cd, cid); } } ); @@ -781,7 +596,7 @@ public class ConfigPanel extends PluginPanel spinner.addChangeListener((ce) -> { - changeConfiguration(listItem, config, spinner, cd, cid); + changeConfiguration(spinner, cd, cid); sliderValueLabel.setText(String.valueOf(spinner.getValue())); slider.setValue((Integer) spinner.getValue()); @@ -825,13 +640,13 @@ public class ConfigPanel extends PluginPanel Component editor = spinner.getEditor(); JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField(); spinnerTextField.setColumns(SPINNER_FIELD_WIDTH); - spinner.addChangeListener(ce -> changeConfiguration(listItem, config, spinner, cd, cid)); + spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid)); item.add(spinner, BorderLayout.EAST); } } - else if (cid.getType() == String.class) + if (cid.getType() == String.class) { JTextComponent textField; @@ -841,7 +656,7 @@ public class ConfigPanel extends PluginPanel } else { - final JTextArea textArea = new configTextArea(); + final JTextArea textArea = new JTextArea(); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textField = textArea; @@ -860,12 +675,12 @@ public class ConfigPanel extends PluginPanel if (result != null && result) { - changeConfiguration(listItem, config, textField, cd, cid); + changeConfiguration(textField, cd, cid); } } else { - changeConfiguration(listItem, config, textField, cd, cid); + changeConfiguration(textField, cd, cid); } }); textField.getDocument().addDocumentListener(listener); @@ -897,7 +712,7 @@ public class ConfigPanel extends PluginPanel } } - else if (cid.getType() == Color.class) + if (cid.getType() == Color.class) { String existing = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()); @@ -933,8 +748,7 @@ public class ConfigPanel extends PluginPanel colorPickerBtn.setBackground(c); colorPickerBtn.setText(ColorUtil.toHexColor(c).toUpperCase()); }); - - colorPicker.setOnClose(c -> changeConfiguration(listItem, config, colorPicker, cd, cid)); + colorPicker.setOnClose(c -> changeConfiguration(colorPicker, cd, cid)); colorPicker.setVisible(true); } }); @@ -942,7 +756,7 @@ public class ConfigPanel extends PluginPanel item.add(colorPickerBtn, BorderLayout.EAST); } - else if (cid.getType() == Dimension.class) + if (cid.getType() == Dimension.class) { JPanel dimensionPanel = new JPanel(); dimensionPanel.setLayout(new BorderLayout()); @@ -977,7 +791,7 @@ public class ConfigPanel extends PluginPanel item.add(dimensionPanel, BorderLayout.EAST); } - else if (cid.getType().isEnum()) + if (cid.getType().isEnum()) { Class type = (Class) cid.getType(); JComboBox box = new JComboBox(type.getEnumConstants()); @@ -990,7 +804,7 @@ public class ConfigPanel extends PluginPanel { Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); box.setSelectedItem(selectedItem); - box.setToolTipText(selectedItem.toString()); + box.setToolTipText(Text.titleCase(selectedItem)); } catch (IllegalArgumentException ex) { @@ -1000,14 +814,14 @@ public class ConfigPanel extends PluginPanel { if (e.getStateChange() == ItemEvent.SELECTED) { - changeConfiguration(listItem, config, box, cd, cid); - box.setToolTipText(Objects.requireNonNull(box.getSelectedItem()).toString()); + changeConfiguration(box, cd, cid); + box.setToolTipText(Text.titleCase((Enum) box.getSelectedItem())); } }); item.add(box, BorderLayout.EAST); } - else if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class) + if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class) { Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), @@ -1020,13 +834,12 @@ public class ConfigPanel extends PluginPanel @Override public void focusLost(FocusEvent e) { - changeConfiguration(listItem, config, button, cd, cid); + changeConfiguration(button, cd, cid); } }); item.add(button, BorderLayout.EAST); } - else if (cid.getType() == EnumSet.class) { @@ -1064,8 +877,7 @@ public class ConfigPanel extends PluginPanel jList.setCellRenderer(new ComboBoxListRenderer()); jList.setLayoutOrientation(JList.VERTICAL); jList.setSelectionBackground(Color.decode("708090")); - jList.addListSelectionListener(e -> - changeConfiguration(listItem, config, jList, cd, cid)); + jList.addListSelectionListener(e -> changeConfiguration(jList, cd, cid)); JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setViewportView(jList); jScrollPane.setViewportBorder(BorderFactory.createLoweredSoftBevelBorder()); @@ -1102,16 +914,15 @@ public class ConfigPanel extends PluginPanel if (result == JOptionPane.YES_OPTION) { - configManager.setDefaultConfiguration(config, true); + configManager.setDefaultConfiguration(pluginConfig.getConfig(), true); - // Reload configuration panel - openGroupConfigPanel(listItem, config, cd); + rebuild(false); } }); mainPanel.add(resetButton); JButton backButton = new JButton("Back"); - backButton.addActionListener(e -> openConfigList()); + backButton.addActionListener(e -> pluginList.getMuxer().popState()); mainPanel.add(backButton); if (refresh) @@ -1122,10 +933,11 @@ public class ConfigPanel extends PluginPanel { scrollPane.getVerticalScrollBar().setValue(0); } + revalidate(); } - private void changeConfiguration(PluginListItem listItem, Config config, Component component, ConfigDescriptor cd, ConfigItemDescriptor cid) + private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid) { final ConfigItem configItem = cid.getItem(); @@ -1137,7 +949,7 @@ public class ConfigPanel extends PluginPanel if (result != JOptionPane.YES_OPTION) { - openGroupConfigPanel(listItem, config, cd); + rebuild(false); return; } } @@ -1146,44 +958,17 @@ public class ConfigPanel extends PluginPanel { JCheckBox checkbox = (JCheckBox) component; configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), "" + checkbox.isSelected()); - - for (ConfigItemDescriptor cid2 : cd.getItems()) - { - if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) - { - List itemHide = Splitter - .onPattern("\\|\\|") - .trimResults() - .omitEmptyStrings() - .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); - - if (itemHide.contains(cid.getItem().keyName())) - { - // If another options visibility changes depending on the value of this checkbox, then render the entire menu again - reloadPluginlist(listItem, config, cd); - } - } - - if (checkbox.isSelected()) - { - if (cid2.getItem().enabledBy().contains(cid.getItem().keyName())) - { - configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); - reloadPluginlist(listItem, config, cd); - } - else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName())) - { - configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); - reloadPluginlist(listItem, config, cd); - } - } - } } else if (component instanceof JSpinner) { JSpinner spinner = (JSpinner) component; configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), "" + spinner.getValue()); } + else if (component instanceof JSlider) + { + JSlider slider = (JSlider) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), slider.getValue()); + } else if (component instanceof JTextComponent) { JTextComponent textField = (JTextComponent) component; @@ -1197,37 +982,7 @@ public class ConfigPanel extends PluginPanel else if (component instanceof JComboBox) { JComboBox jComboBox = (JComboBox) component; - configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), ((Enum) Objects.requireNonNull(jComboBox.getSelectedItem())).name()); - - for (ConfigItemDescriptor cid2 : cd.getItems()) - { - if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) - { - List itemHide = Splitter - .onPattern("\\|\\|") - .trimResults() - .omitEmptyStrings() - .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); - - if (itemHide.contains(cid.getItem().keyName())) - { - reloadPluginlist(listItem, config, cd); - } - - String changedVal = ((Enum) jComboBox.getSelectedItem()).name(); - - if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) - { - configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); - reloadPluginlist(listItem, config, cd); - } - else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) - { - configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); - reloadPluginlist(listItem, config, cd); - } - } - } + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), ((Enum) jComboBox.getSelectedItem()).name()); } else if (component instanceof JList) { @@ -1248,8 +1003,22 @@ public class ConfigPanel extends PluginPanel jList.getSelectedValuesList().forEach(value -> finalEnumSet.add(Enum.valueOf(cid.getItem().enumClass(), value.toString()))); - configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), finalEnumSet); + } + else if (component instanceof HotkeyButton) + { + HotkeyButton hotkeyButton = (HotkeyButton) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), hotkeyButton.getValue()); + } + + hideUnhide(component, cd, cid); + } + + private void hideUnhide(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid) + { + if (component instanceof JCheckBox) + { + JCheckBox checkbox = (JCheckBox) component; for (ConfigItemDescriptor cid2 : cd.getItems()) { @@ -1263,7 +1032,76 @@ public class ConfigPanel extends PluginPanel if (itemHide.contains(cid.getItem().keyName())) { - reloadPluginlist(listItem, config, cd); + rebuild(true); + } + } + + if (checkbox.isSelected()) + { + if (cid2.getItem().enabledBy().contains(cid.getItem().keyName())) + { + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild(true); + } + else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName())) + { + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild(true); + } + } + } + } + else if (component instanceof JComboBox) + { + JComboBox jComboBox = (JComboBox) component; + + for (ConfigItemDescriptor cid2 : cd.getItems()) + { + if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) + { + List itemHide = Splitter + .onPattern("\\|\\|") + .trimResults() + .omitEmptyStrings() + .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); + + if (itemHide.contains(cid.getItem().keyName())) + { + rebuild(true); + } + + String changedVal = ((Enum) jComboBox.getSelectedItem()).name(); + + if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) + { + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild(true); + } + else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) + { + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild(true); + } + } + } + } + else if (component instanceof JList) + { + JList jList = (JList) component; + + for (ConfigItemDescriptor cid2 : cd.getItems()) + { + if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) + { + List itemHide = Splitter + .onPattern("\\|\\|") + .trimResults() + .omitEmptyStrings() + .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); + + if (itemHide.contains(cid.getItem().keyName())) + { + rebuild(true); } String changedVal = String.valueOf((jList.getSelectedValues())); @@ -1271,109 +1109,16 @@ public class ConfigPanel extends PluginPanel if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) { configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); - reloadPluginlist(listItem, config, cd); + rebuild(true); } else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) { configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); - reloadPluginlist(listItem, config, cd); + rebuild(true); } } } } - else if (component instanceof HotkeyButton) - { - HotkeyButton hotkeyButton = (HotkeyButton) component; - configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), hotkeyButton.getValue()); - } - else if (component instanceof JSlider) - { - JSlider slider = (JSlider) component; - configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), slider.getValue()); - } - } - - void startPlugin(Plugin plugin, PluginListItem listItem) - { - executorService.submit(() -> - { - pluginManager.setPluginEnabled(plugin, true); - - try - { - pluginManager.startPlugin(plugin); - } - catch (PluginInstantiationException ex) - { - log.warn("Error when starting plugin {}", plugin.getClass().getSimpleName(), ex); - } - - listItem.setPluginEnabled(true); - }); - } - - void stopPlugin(Plugin plugin, PluginListItem listItem) - { - executorService.submit(() -> - { - pluginManager.setPluginEnabled(plugin, false); - - try - { - pluginManager.stopPlugin(plugin); - } - catch (PluginInstantiationException ex) - { - log.warn("Error when stopping plugin {}", plugin.getClass().getSimpleName(), ex); - } - - listItem.setPluginEnabled(false); - }); - } - - private List getPinnedPluginNames() - { - final String config = configManager.getConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY); - - if (config == null) - { - return Collections.emptyList(); - } - - return Text.fromCSV(config); - } - - void savePinnedPlugins() - { - final String value = pluginList.stream() - .filter(PluginListItem::isPinned) - .map(PluginListItem::getName) - .collect(Collectors.joining(",")); - - configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value); - } - - void openConfigurationPanel(String configGroup) - { - for (PluginListItem pluginListItem : pluginList) - { - if (pluginListItem.getName().equals(configGroup)) - { - openGroupConfigPanel(pluginListItem, pluginListItem.getConfig(), pluginListItem.getConfigDescriptor()); - break; - } - } - } - - @Override - public void onActivate() - { - super.onActivate(); - - if (searchBar.getParent() != null) - { - searchBar.requestFocusInWindow(); - } } @Override @@ -1382,85 +1127,15 @@ public class ConfigPanel extends PluginPanel return new Dimension(PANEL_WIDTH + SCROLLBAR_WIDTH, super.getPreferredSize().height); } - - private static class FixedWidthPanel extends JPanel + @Subscribe + public void onPluginChanged(PluginChanged event) { - @Override - public Dimension getPreferredSize() + if (event.getPlugin() == this.pluginConfig.getPlugin()) { - return new Dimension(PANEL_WIDTH, super.getPreferredSize().height); - } - - } - - private void reloadPluginlist(PluginListItem listItem, Config config, ConfigDescriptor cd) - { - 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)); + SwingUtilities.invokeLater(() -> + { + pluginToggle.setSelected(event.isLoaded()); + }); } } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java index 2acaf6af08..b8422e9d01 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java @@ -25,28 +25,21 @@ package net.runelite.client.plugins.config; import java.awt.image.BufferedImage; -import java.lang.reflect.Method; -import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; -import javax.inject.Singleton; +import javax.inject.Provider; import javax.swing.SwingUtilities; import net.runelite.api.MenuOpcode; -import net.runelite.client.RuneLite; -import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.OpenOSRSConfig; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.OverlayMenuClicked; -import net.runelite.client.events.PluginChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginManager; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; -import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.NavigationButton; -import net.runelite.client.ui.components.colorpicker.ColorPickerManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.util.ImageUtil; @@ -56,42 +49,48 @@ import net.runelite.client.util.ImageUtil; loadWhenOutdated = true, hidden = true // prevent users from disabling ) -@Singleton public class ConfigPlugin extends Plugin { - @Inject private ClientToolbar clientToolbar; + @Inject + private Provider pluginListPanelProvider; + @Inject private ConfigManager configManager; - @Inject - private PluginManager pluginManager; - - @Inject - private ScheduledExecutorService executorService; - @Inject private RuneLiteConfig runeLiteConfig; @Inject - private OpenOSRSConfig OpenOSRSConfig; + private OpenOSRSConfig openOSRSConfig; @Inject private ChatColorConfig chatColorConfig; - @Inject - private ColorPickerManager colorPickerManager; + private PluginListPanel pluginListPanel; - private ConfigPanel configPanel; private NavigationButton navButton; @Override - protected void startUp() + protected void startUp() throws Exception { - - configPanel = new ConfigPanel(pluginManager, configManager, executorService, runeLiteConfig, OpenOSRSConfig, chatColorConfig, colorPickerManager); + pluginListPanel = pluginListPanelProvider.get(); + pluginListPanel.addFakePlugin( + new PluginConfigurationDescriptor( + "OpenOSRS", "OpenOSRS client settings", PluginType.IMPORTANT, new String[]{"client"}, + null, openOSRSConfig, configManager.getConfigDescriptor(openOSRSConfig) + ), + new PluginConfigurationDescriptor( + "RuneLite", "RuneLite client settings", PluginType.IMPORTANT, new String[]{"client"}, + null, runeLiteConfig, configManager.getConfigDescriptor(runeLiteConfig) + ), + new PluginConfigurationDescriptor( + "Chat Color", "Recolor chat text", PluginType.MISCELLANEOUS, new String[]{"colour", "messages"}, + null, chatColorConfig, configManager.getConfigDescriptor(chatColorConfig) + )); + pluginListPanel.rebuildPluginList(); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "config_icon.png"); @@ -99,42 +98,20 @@ public class ConfigPlugin extends Plugin .tooltip("Configuration") .icon(icon) .priority(0) - .panel(configPanel) + .panel(pluginListPanel.getMuxer()) .build(); clientToolbar.addNavigation(navButton); } @Override - public void shutDown() + protected void shutDown() throws Exception { clientToolbar.removeNavigation(navButton); - RuneLite.getInjector().getInstance(ClientThread.class).invokeLater(() -> - { - try - { - ConfigPanel.pluginList.clear(); - pluginManager.setPluginEnabled(this, true); - pluginManager.startPlugin(this); - Method expand = ClientUI.class.getDeclaredMethod("expand", NavigationButton.class); - expand.setAccessible(true); - expand.invoke(RuneLite.getInjector().getInstance(ClientUI.class), navButton); - } - catch (Exception e) - { - System.out.println(e.getMessage()); - } - }); } @Subscribe - private void onPluginChanged(PluginChanged event) - { - SwingUtilities.invokeLater(configPanel::refreshPluginList); - } - - @Subscribe - private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) + public void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); if (overlayMenuEntry.getMenuOpcode() == MenuOpcode.RUNELITE_OVERLAY_CONFIG) @@ -154,8 +131,8 @@ public class ConfigPlugin extends Plugin { navButton.getOnSelect().run(); } - configPanel.openConfigurationPanel(descriptor.name()); + pluginListPanel.openConfigurationPanel(descriptor.name()); }); } } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginConfigurationDescriptor.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginConfigurationDescriptor.java new file mode 100644 index 0000000000..9098342d81 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginConfigurationDescriptor.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019 Abex + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.config; + +import javax.annotation.Nullable; +import lombok.Value; +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigDescriptor; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginType; + +@Value +public class PluginConfigurationDescriptor +{ + private final String name; + private final String description; + private final PluginType pluginType; + private final String[] tags; + + // Can be null if its not an actual plugin (RuneLite / ChatColors) + @Nullable + private final Plugin plugin; + + // Can be null if it has no more configuration than the on/off toggle + @Nullable + private final Config config; + + @Nullable + private final ConfigDescriptor configDescriptor; + + boolean hasConfigurables() + { + return configDescriptor != null && !configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden()); + } +} \ 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 fa5b34e8ba..4add0a8a05 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 @@ -28,100 +28,57 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.annotation.Nullable; -import javax.inject.Singleton; import javax.swing.ImageIcon; +import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; -import lombok.AccessLevel; +import javax.swing.JToggleButton; import lombok.Getter; -import net.runelite.client.config.Config; -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 lombok.extern.slf4j.Slf4j; 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; import net.runelite.client.util.ImageUtil; +import net.runelite.client.util.SwingUtil; import org.apache.commons.text.similarity.JaroWinklerDistance; -@Singleton +@Slf4j public class PluginListItem extends JPanel { private static final JaroWinklerDistance DISTANCE = new JaroWinklerDistance(); - public JLabel nameLabel; private static final ImageIcon CONFIG_ICON; private static final ImageIcon CONFIG_ICON_HOVER; - private static final ImageIcon ON_SWITCHER; - public static final ImageIcon OFF_SWITCHER; private static final ImageIcon ON_STAR; private static final ImageIcon OFF_STAR; - private final ConfigPanel configPanel; + private final PluginListPanel pluginListPanel; - @Getter(AccessLevel.PACKAGE) - @Nullable - private final Plugin plugin; - - @Nullable - @Getter(AccessLevel.PACKAGE) - private final Config config; - - @Nullable - @Getter(AccessLevel.PACKAGE) - public final ConfigDescriptor configDescriptor; - - @Getter(AccessLevel.PUBLIC) - private final String name; - - @Getter(AccessLevel.PUBLIC) - private final String description; - - @Getter(AccessLevel.PUBLIC) - private final PluginType pluginType; + @Getter + private final PluginConfigurationDescriptor pluginConfig; 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(AccessLevel.PACKAGE) - private boolean isPluginEnabled = false; - - @Getter(AccessLevel.PACKAGE) - private boolean isPinned = false; - - @Getter(AccessLevel.PACKAGE) - private boolean isHidden = false; + public JLabel nameLabel; + private final JToggleButton pinButton; + private final JToggleButton onOffToggle; private Color color = null; static { BufferedImage configIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_edit_icon.png"); - 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(ImageUtil.recolorImage(onSwitcher, ColorScheme.BRAND_BLUE)); ON_STAR = new ImageIcon(ImageUtil.recolorImage(onStar, ColorScheme.BRAND_BLUE)); CONFIG_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(configIcon, -100)); - BufferedImage offSwitcherImage = ImageUtil.flipImage( - ImageUtil.luminanceScale( - ImageUtil.grayscaleImage(onSwitcher), - 0.61f - ), - true, - false - ); - OFF_SWITCHER = new ImageIcon(offSwitcherImage); + BufferedImage offStar = ImageUtil.luminanceScale( ImageUtil.grayscaleImage(onStar), 0.77f @@ -129,131 +86,103 @@ public class PluginListItem extends JPanel OFF_STAR = new ImageIcon(offStar); } - /** - * Creates a new {@code PluginListItem} for a plugin. - *

- * Note that {@code config} and {@code configDescriptor} can be {@code null} - * if there is no configuration associated with the plugin. - */ - PluginListItem(ConfigPanel configPanel, ConfigManager configManager, Plugin plugin, PluginDescriptor descriptor, - @Nullable Config config, @Nullable ConfigDescriptor configDescriptor) + PluginListItem(PluginListPanel pluginListPanel, PluginConfigurationDescriptor pluginConfig) { - this(configPanel, configManager, plugin, config, configDescriptor, - descriptor.name(), descriptor.description(), descriptor.type(), descriptor.tags()); - } + this.pluginListPanel = pluginListPanel; + this.pluginConfig = pluginConfig; - /** - * Creates a new {@code PluginListItem} for a core configuration. - */ - PluginListItem(ConfigPanel configPanel, ConfigManager configManager, Config config, ConfigDescriptor configDescriptor, - String name, String description, PluginType pluginType, String... 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, PluginType pluginType, String... tags) - { - this.configPanel = configPanel; - this.plugin = plugin; - this.config = config; - 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); + Collections.addAll(keywords, pluginConfig.getName().toLowerCase().split(" ")); + Collections.addAll(keywords, pluginConfig.getDescription().toLowerCase().split(" ")); + Collections.addAll(keywords, pluginConfig.getTags()); setLayout(new BorderLayout(3, 0)); setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH, 20)); - nameLabel = new JLabel(name); + nameLabel = new JLabel(pluginConfig.getName()); + nameLabel.setForeground(Color.WHITE); - if (!description.isEmpty()) + if (!pluginConfig.getDescription().isEmpty()) { - nameLabel.setToolTipText("" + name + ":
" + description + ""); + nameLabel.setToolTipText("" + pluginConfig.getName() + ":
" + pluginConfig.getDescription() + ""); } - add(nameLabel, BorderLayout.CENTER); - + pinButton = new JToggleButton(OFF_STAR); + pinButton.setSelectedIcon(ON_STAR); + SwingUtil.removeButtonDecorations(pinButton); + SwingUtil.addModalTooltip(pinButton, "Unpin plugin", "Pin plugin"); pinButton.setPreferredSize(new Dimension(21, 0)); add(pinButton, BorderLayout.LINE_START); pinButton.addActionListener(e -> { - setPinned(!isPinned); - configPanel.savePinnedPlugins(); - configPanel.openConfigList(); + pluginListPanel.savePinnedPlugins(); + pluginListPanel.refresh(); }); - final JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(1, 2)); add(buttonPanel, BorderLayout.LINE_END); - configButton.setPreferredSize(new Dimension(25, 0)); - configButton.setVisible(false); - buttonPanel.add(configButton); - - // add a listener to configButton only if there are config items to show - if (configDescriptor != null && config != null && !configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden())) + if (pluginConfig.hasConfigurables()) { + JButton configButton = new JButton(CONFIG_ICON); + configButton.setRolloverIcon(CONFIG_ICON_HOVER); + SwingUtil.removeButtonDecorations(configButton); + configButton.setPreferredSize(new Dimension(25, 0)); + configButton.setVisible(false); + buttonPanel.add(configButton); + configButton.addActionListener(e -> { configButton.setIcon(CONFIG_ICON); - configPanel.openGroupConfigPanel(PluginListItem.this, config, configDescriptor); + openGroupConfigPanel(); }); configButton.setVisible(true); configButton.setToolTipText("Edit plugin configuration"); } - toggleButton.setPreferredSize(new Dimension(25, 0)); - attachToggleButtonListener(toggleButton); + addLabelMouseOver(nameLabel); + add(nameLabel, BorderLayout.CENTER); - buttonPanel.add(toggleButton); - } - - void attachToggleButtonListener(IconButton button) - { - // no need for a listener if there is no plugin to enable / disable - if (plugin == null) + onOffToggle = new PluginToggleButton(); + buttonPanel.add(onOffToggle); + if (pluginConfig.getPlugin() != null) { - button.setVisible(false); - return; + onOffToggle.addItemListener(i -> + { + if (onOffToggle.isSelected()) + { + pluginListPanel.startPlugin(pluginConfig.getPlugin()); + } + else + { + pluginListPanel.stopPlugin(pluginConfig.getPlugin()); + } + }); } - - button.addActionListener(e -> + else { - if (isPluginEnabled) - { - configPanel.stopPlugin(plugin, PluginListItem.this); - } - else - { - configPanel.startPlugin(plugin, PluginListItem.this); - } - - setPluginEnabled(!isPluginEnabled); - updateToggleButton(button); - }); + onOffToggle.setVisible(false); + } } - void setPluginEnabled(boolean enabled) + boolean isPinned() { - isPluginEnabled = enabled; - updateToggleButton(toggleButton); + return pinButton.isSelected(); } void setPinned(boolean pinned) { - isPinned = pinned; - pinButton.setIcon(pinned ? ON_STAR : OFF_STAR); - pinButton.setToolTipText(pinned ? "Unpin plugin" : "Pin plugin"); + pinButton.setSelected(pinned); } - Color getColor() + public PluginType getPluginType() + { + return pluginConfig.getPluginType(); + } + + public Color getColor() { return this.color == null ? Color.WHITE : this.color; } @@ -266,18 +195,13 @@ public class PluginListItem extends JPanel } this.color = color; + log.info("{}, updated to {}", nameLabel.getText(), color); this.nameLabel.setForeground(color); } - public void setHidden(boolean hidden) + void setPluginEnabled(boolean enabled) { - isHidden = hidden; - } - - void updateToggleButton(IconButton button) - { - button.setIcon(isPluginEnabled ? ON_SWITCHER : OFF_SWITCHER); - button.setToolTipText(isPluginEnabled ? "Disable plugin" : "Enable plugin"); + onOffToggle.setSelected(enabled); } /** @@ -297,4 +221,37 @@ public class PluginListItem extends JPanel } return true; } -} + + private void openGroupConfigPanel() + { + pluginListPanel.openConfigurationPanel(pluginConfig); + } + + /** + * Adds a mouseover effect to change the text of the passed label to {@link ColorScheme#BRAND_BLUE} color + * + * @param label The label to attach the mouseover and click effects to + */ + static void addLabelMouseOver(final JLabel label) + { + final Color labelForeground = label.getForeground(); + + label.addMouseListener(new MouseAdapter() + { + private Color lastForeground; + + @Override + public void mouseEntered(MouseEvent mouseEvent) + { + lastForeground = label.getForeground(); + label.setForeground(ColorScheme.BRAND_BLUE); + } + + @Override + public void mouseExited(MouseEvent mouseEvent) + { + label.setForeground(lastForeground); + } + }); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListPanel.java new file mode 100644 index 0000000000..ba2e335393 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListPanel.java @@ -0,0 +1,606 @@ +/* + * 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.plugins.config; + +import com.google.common.collect.ImmutableList; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Insets; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ScheduledExecutorService; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JToggleButton; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.EmptyBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.util.Text; +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigDescriptor; +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.config.OpenOSRSConfig; +import net.runelite.client.config.RuneLiteConfig; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.events.PluginChanged; +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; +import net.runelite.client.ui.MultiplexingPluginPanel; +import net.runelite.client.ui.PluginPanel; +import net.runelite.client.ui.components.IconTextField; +import net.runelite.client.ui.components.MinimumSizedPanel; +import net.runelite.client.util.ImageUtil; +import net.runelite.client.util.SwingUtil; + +@Slf4j +@Singleton +public class PluginListPanel extends PluginPanel +{ + private static final int OFFSET = 6; + + private static final ImageIcon SECTION_EXPAND_ICON; + private static final ImageIcon SECTION_EXPAND_ICON_HOVER; + private static final ImageIcon SECTION_RETRACT_ICON; + private static final ImageIcon SECTION_RETRACT_ICON_HOVER; + + 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 List colorOptions = Arrays.asList("enabledColors", "pvmColor", "pvpColor", "skillingColor", "utilityColor", "minigameColor", "miscellaneousColor", "gamemodeColor"); + private static final ImmutableList definedOrder = ImmutableList.of(PluginType.IMPORTANT, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.MINIGAME, PluginType.MISCELLANEOUS, PluginType.GAMEMODE, PluginType.EXTERNAL, PluginType.UNCATEGORIZED); + private static final Comparator categoryComparator = Comparator.comparing(plugin -> definedOrder.indexOf(plugin.getPluginType())); + + private final ConfigManager configManager; + private final PluginManager pluginManager; + private final ScheduledExecutorService executorService; + private final Provider configPanelProvider; + private final OpenOSRSConfig openOSRSConfig; + private final List fakePlugins = new ArrayList<>(); + + @Getter + private final MultiplexingPluginPanel muxer; + private final IconTextField searchBar; + private final JScrollPane scrollPane; + private final FixedWidthPanel mainPanel; + private final Set sectionsCopy = new HashSet<>(); + + public static List pluginList; + + static + { + final BufferedImage backIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_back_icon.png"); + 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); + SECTION_RETRACT_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(sectionRetractIcon, -100)); + + final BufferedImage sectionExpandIcon = ImageUtil.rotateImage(orangeBackIcon, Math.PI); + SECTION_EXPAND_ICON = new ImageIcon(sectionExpandIcon); + SECTION_EXPAND_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(sectionExpandIcon, -100)); + } + + @Inject + public PluginListPanel( + ConfigManager configManager, + PluginManager pluginManager, + ScheduledExecutorService executorService, + Provider configPanelProvider, + OpenOSRSConfig openOSRSConfig, + EventBus eventBus) + { + super(false); + + this.configManager = configManager; + this.pluginManager = pluginManager; + this.executorService = executorService; + this.configPanelProvider = configPanelProvider; + this.openOSRSConfig = openOSRSConfig; + + eventBus.subscribe(ConfigChanged.class, this, ev -> { + if (!ev.getGroup().equals("openosrs")) + { + return; + } + + if (ev.getKey().equals("enableCategories") || ev.getKey().equals("pluginSortMode")) + { + rebuildPluginList(); + } + + if (ev.getKey().equals("pluginSortMode")) + { + sortPluginList(null); + } + + if (colorOptions.stream().anyMatch(option -> option.equals(ev.getKey()))) + { + pluginList.forEach(listItem -> + { + if (listItem.getPluginType() == PluginType.IMPORTANT) + { + return; + } + + listItem.setColor(getColorByCategory(listItem.getPluginType())); + }); + } + }); + + muxer = new MultiplexingPluginPanel(this); + + searchBar = new IconTextField(); + searchBar.setIcon(IconTextField.Icon.SEARCH); + searchBar.setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH - 20, 30)); + searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR); + searchBar.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR); + searchBar.getDocument().addDocumentListener(new DocumentListener() + { + @Override + public void insertUpdate(DocumentEvent e) + { + onSearchBarChanged(); + } + + @Override + public void removeUpdate(DocumentEvent e) + { + onSearchBarChanged(); + } + + @Override + public void changedUpdate(DocumentEvent e) + { + onSearchBarChanged(); + } + }); + + setLayout(new BorderLayout()); + setBackground(ColorScheme.DARK_GRAY_COLOR); + + JPanel topPanel = new JPanel(); + topPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); + topPanel.setLayout(new BorderLayout(0, BORDER_OFFSET)); + topPanel.add(searchBar, BorderLayout.CENTER); + add(topPanel, BorderLayout.NORTH); + + mainPanel = new FixedWidthPanel(); + mainPanel.setBorder(new EmptyBorder(8, 10, 10, 10)); + mainPanel.setLayout(new DynamicGridLayout(0, 1, 0, 5)); + mainPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + JPanel northPanel = new FixedWidthPanel(); + northPanel.setLayout(new BorderLayout()); + northPanel.add(mainPanel, BorderLayout.NORTH); + + scrollPane = new JScrollPane(northPanel); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + add(scrollPane, BorderLayout.CENTER); + } + + void rebuildPluginList() + { + final List pinnedPlugins = getPinnedPluginNames(); + + // populate pluginList with all non-hidden plugins + pluginList = Stream.concat( + fakePlugins.stream(), + pluginManager.getPlugins().stream() + .filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden()) + .map(plugin -> + { + PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class); + Config config = pluginManager.getPluginConfigProxy(plugin); + ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config); + + return new PluginConfigurationDescriptor( + descriptor.name(), + descriptor.description(), + descriptor.type(), + descriptor.tags(), + plugin, + config, + configDescriptor); + }) + ).map(desc -> + { + PluginListItem listItem = new PluginListItem(this, desc); + listItem.setPinned(pinnedPlugins.contains(desc.getName())); + listItem.setColor(getColorByCategory(listItem.getPluginType())); + + return listItem; + }).collect(Collectors.toList()); + + sortPluginList(null); + mainPanel.removeAll(); + refresh(); + } + + void addFakePlugin(PluginConfigurationDescriptor... descriptor) + { + Collections.addAll(fakePlugins, descriptor); + } + + void refresh() + { + // update enabled / disabled status of all items + pluginList.forEach(listItem -> + { + final Plugin plugin = listItem.getPluginConfig().getPlugin(); + if (plugin != null) + { + listItem.setPluginEnabled(pluginManager.isPluginEnabled(plugin)); + } + }); + + int scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); + + onSearchBarChanged(); + searchBar.requestFocusInWindow(); + validate(); + + scrollPane.getVerticalScrollBar().setValue(scrollBarPosition); + } + + private void onSearchBarChanged() + { + final String text = searchBar.getText(); + + pluginList.forEach(mainPanel::remove); + + sectionsCopy.forEach(mainPanel::remove); + sectionsCopy.clear(); + + showMatchingPlugins(true, text); + showMatchingPlugins(false, text); + + revalidate(); + } + + private void generatePluginList(List pluginListItems) + { + final Map sections = new HashMap<>(); + + for (PluginListItem pluginListItem : pluginListItems) + { + if (pluginListItem.isPinned()) + { + if (!sections.containsKey("Pinned")) + { + sections.put("Pinned", addSection("Pinned")); + } + + sections.get("Pinned").add(pluginListItem); + continue; + } + + String sectionName = pluginListItem.getPluginConfig().getPluginType().getName(); + + if (!sections.containsKey(sectionName)) + { + sections.put(sectionName, addSection(sectionName)); + } + + sections.get(sectionName).add(pluginListItem); + + } + } + + private void showMatchingPlugins(boolean pinned, String text) + { + final List plugins = new ArrayList<>(); + + if (text.isEmpty()) + { + if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.ALPHABETICALLY || !openOSRSConfig.enableCategories()) + { + pluginList.stream().filter(item -> pinned == item.isPinned()).forEach(mainPanel::add); + } + else + { + pluginList.stream().filter(item -> pinned == item.isPinned()).forEach(plugins::add); + } + } + else + { + final String[] searchTerms = text.toLowerCase().split(" "); + pluginList.forEach(listItem -> + { + if (pinned == listItem.isPinned() && listItem.matchesSearchTerms(searchTerms)) + { + if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.ALPHABETICALLY || !openOSRSConfig.enableCategories()) + { + mainPanel.add(listItem); + } + else + { + plugins.add(listItem); + } + } + }); + } + + if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.CATEGORY && openOSRSConfig.enableCategories()) + { + generatePluginList(plugins); + } + } + + void openConfigurationPanel(String configGroup) + { + for (PluginListItem pluginListItem : pluginList) + { + if (pluginListItem.getPluginConfig().getName().equals(configGroup)) + { + openConfigurationPanel(pluginListItem.getPluginConfig()); + break; + } + } + } + + void openConfigurationPanel(PluginConfigurationDescriptor plugin) + { + ConfigPanel panel = configPanelProvider.get(); + panel.init(plugin); + muxer.pushState(panel); + } + + void startPlugin(Plugin plugin) + { + executorService.submit(() -> + { + pluginManager.setPluginEnabled(plugin, true); + + try + { + pluginManager.startPlugin(plugin); + } + catch (PluginInstantiationException ex) + { + log.warn("Error when starting plugin {}", plugin.getClass().getSimpleName(), ex); + } + }); + } + + void stopPlugin(Plugin plugin) + { + executorService.submit(() -> + { + pluginManager.setPluginEnabled(plugin, false); + + try + { + pluginManager.stopPlugin(plugin); + } + catch (PluginInstantiationException ex) + { + log.warn("Error when stopping plugin {}", plugin.getClass().getSimpleName(), ex); + } + }); + } + + private List getPinnedPluginNames() + { + final String config = configManager.getConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY); + + if (config == null) + { + return Collections.emptyList(); + } + + return Text.fromCSV(config); + } + + void savePinnedPlugins() + { + final String value = pluginList.stream() + .filter(PluginListItem::isPinned) + .map(p -> p.getPluginConfig().getName()) + .collect(Collectors.joining(",")); + + configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value); + } + + @Subscribe + public void onPluginChanged(PluginChanged event) + { + SwingUtilities.invokeLater(this::refresh); + } + + @Override + public Dimension getPreferredSize() + { + return new Dimension(PANEL_WIDTH + SCROLLBAR_WIDTH, super.getPreferredSize().height); + } + + @Override + public void onActivate() + { + super.onActivate(); + + if (searchBar.getParent() != null) + { + searchBar.requestFocusInWindow(); + } + } + + private JPanel addSection(String name) + { + final MinimumSizedPanel section = new MinimumSizedPanel(); + section.setLayout(new BoxLayout(section, BoxLayout.Y_AXIS)); + section.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); + + JPanel item = new JPanel(); + item.setLayout(new BorderLayout()); + item.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); + + JLabel headerLabel = new JLabel(name); + headerLabel.setFont(FontManager.getRunescapeFont()); + headerLabel.setForeground(ColorScheme.BRAND_BLUE); + headerLabel.setPreferredSize(new Dimension(PANEL_WIDTH, (int) headerLabel.getPreferredSize().getHeight())); + + final boolean state = Boolean.parseBoolean(configManager.getConfiguration("pluginlist", name)); + final JToggleButton collapse = new JToggleButton(SECTION_EXPAND_ICON, state); + + SwingUtil.removeButtonDecorations(collapse); + collapse.setRolloverIcon(SECTION_EXPAND_ICON_HOVER); + collapse.setSelectedIcon(SECTION_RETRACT_ICON); + collapse.setRolloverSelectedIcon(SECTION_RETRACT_ICON_HOVER); + collapse.setToolTipText(state ? "Retract" : "Expand"); + collapse.setPreferredSize(new Dimension(20, 20)); + collapse.setFont(collapse.getFont().deriveFont(16.0f)); + collapse.setBorder(null); + collapse.setMargin(new Insets(0, 0, 0, 0)); + + headerLabel.setBorder(new EmptyBorder(0, 10, 0, 0)); + + item.add(collapse, BorderLayout.WEST); + item.add(headerLabel, BorderLayout.CENTER); + + final JPanel sectionContents = new JPanel(); + sectionContents.setLayout(new DynamicGridLayout(0, 1, 0, 5)); + sectionContents.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); + sectionContents.setBorder(new EmptyBorder(OFFSET, 5, 0, 0)); + section.add(item, BorderLayout.NORTH); + section.add(sectionContents, BorderLayout.SOUTH); + + sectionContents.setVisible(state); + + // Add listeners to each part of the header so that it's easier to toggle them + final MouseAdapter adapter = new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + toggleSection("pluginlist", name, collapse, sectionContents); + } + }; + collapse.addActionListener(e -> toggleSection("pluginlist", name, collapse, sectionContents)); + headerLabel.addMouseListener(adapter); + + // Allow for sub-sections + mainPanel.add(section); + sectionsCopy.add(section); + + return sectionContents; + } + + private void toggleSection(String group, String key, JToggleButton button, JPanel contents) + { + boolean newState = !contents.isVisible(); + button.setSelected(newState); + contents.setVisible(newState); + configManager.setConfiguration(group, key, newState); + button.setToolTipText(newState ? "Retract" : "Expand"); + SwingUtilities.invokeLater(() -> + { + contents.revalidate(); + contents.repaint(); + }); + } + + private Color getColorByCategory(PluginType pluginType) + { + if (!openOSRSConfig.enabledColors()) + { + return Color.LIGHT_GRAY; + } + + 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(); + case MISCELLANEOUS: + return openOSRSConfig.miscellaneousColor(); + case MINIGAME: + return openOSRSConfig.minigameColor(); + case GAMEMODE: + return openOSRSConfig.gamemodeColor(); + case IMPORTANT: + return Color.WHITE; + } + + return Color.LIGHT_GRAY; + } + + public void sortPluginList(Comparator comparator) + { + if (comparator != null) + { + pluginList.sort(comparator.thenComparing(ev -> ev.getPluginConfig().getName())); + return; + } + + if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.CATEGORY) + { + pluginList.sort(categoryComparator.thenComparing(ev -> ev.getPluginConfig().getName())); + } + else + { + pluginList.sort(Comparator.comparing(ev -> ev.getPluginConfig().getName())); + } + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginToggleButton.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginToggleButton.java new file mode 100644 index 0000000000..1134e8d41f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginToggleButton.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2019 Abex + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.client.plugins.config; + +import java.awt.Dimension; +import java.awt.image.BufferedImage; +import javax.swing.ImageIcon; +import javax.swing.JToggleButton; +import net.runelite.client.ui.ColorScheme; +import net.runelite.client.util.ImageUtil; +import net.runelite.client.util.SwingUtil; + +class PluginToggleButton extends JToggleButton +{ + private static final ImageIcon ON_SWITCHER; + private static final ImageIcon OFF_SWITCHER; + + static + { + BufferedImage onSwitcher = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "switcher_on.png"); + ON_SWITCHER = new ImageIcon(ImageUtil.recolorImage(onSwitcher, ColorScheme.BRAND_BLUE)); + OFF_SWITCHER = new ImageIcon(ImageUtil.flipImage( + ImageUtil.luminanceScale( + ImageUtil.grayscaleImage(onSwitcher), + 0.61f + ), + true, + false + )); + } + + public PluginToggleButton() + { + super(OFF_SWITCHER); + setSelectedIcon(ON_SWITCHER); + SwingUtil.removeButtonDecorations(this); + setPreferredSize(new Dimension(25, 0)); + SwingUtil.addModalTooltip(this, "Disable plugin", "Enable plugin"); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java index e8ba114f82..498927c7ae 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java @@ -51,6 +51,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -59,7 +60,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Cooking", description = "Show cooking statistics", - tags = {"overlay", "skilling", "cook"} + tags = {"overlay", "skilling", "cook"}, + type = PluginType.SKILLING ) @Singleton @PluginDependency(XpTrackerPlugin.class) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java index 5ba48932e1..f1da1d2bb1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java @@ -55,12 +55,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Corporeal Beast", description = "Show damage statistics and highlight dark energy cores", - tags = {"bosses", "combat", "pve", "overlay"} + tags = {"bosses", "combat", "pve", "overlay"}, + type = PluginType.PVM ) @Slf4j public class CorpPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java index 431d1006dc..e066f8b57a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java @@ -37,6 +37,7 @@ import net.runelite.api.events.GameTick; import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; @@ -50,7 +51,8 @@ import org.jetbrains.annotations.NotNull; name = "Crystal Math Labs", description = "Automatically updates your stats on Crystal Math Labs when you log out", tags = {"cml", "external", "integration"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customclientresizing/CustomClientResizingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/customclientresizing/CustomClientResizingPlugin.java index 1a1b77c6e1..c125fd1be4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/customclientresizing/CustomClientResizingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/customclientresizing/CustomClientResizingPlugin.java @@ -31,7 +31,7 @@ import net.runelite.client.util.ImageUtil; name = "Custom Client Resizing", description = "Resize the window to saved profiles", tags = {"resize", "window", "position", "layout", "manage"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) public class CustomClientResizingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java index 6f66cef621..723b17e7cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java @@ -40,13 +40,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientUI; @Slf4j @PluginDescriptor( name = "Custom Cursor", description = "Replaces your mouse cursor image", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class CustomCursorPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java index 6b3769f315..cf4269c4a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java @@ -47,10 +47,12 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Daily Task Indicator", - description = "Show chat notifications for daily tasks upon login" + description = "Show chat notifications for daily tasks upon login", + type = PluginType.UTILITY ) @Singleton public class DailyTasksPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java index 5568934fa3..5470e9aedb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java @@ -61,6 +61,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.Timer; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; @@ -69,7 +70,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Death Indicator", description = "Show where you last died, and on what world", - tags = {"arrow", "hints", "world", "map", "overlay"} + tags = {"arrow", "hints", "world", "map", "overlay"}, + type = PluginType.UTILITY ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java index 006f05601f..0f98862c3a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java @@ -37,6 +37,7 @@ import net.runelite.client.events.SessionOpen; import net.runelite.client.game.WorldService; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.WorldUtil; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldResult; @@ -44,7 +45,8 @@ import net.runelite.http.api.worlds.WorldResult; @PluginDescriptor( name = "Default World", description = "Enable a default world to be selected when launching the client", - tags = {"home"} + tags = {"home"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java index 5599484b7e..6c0dbeffd5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java @@ -61,12 +61,14 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Demonic Gorillas", description = "Count demonic gorilla attacks and display their next possible attack styles", - tags = {"combat", "overlay", "pve", "pvm"} + tags = {"combat", "overlay", "pve", "pvm"}, + type = PluginType.PVM ) @Singleton public class DemonicGorillaPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index 710c9dbad1..861d4440c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -54,6 +54,7 @@ import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.JagexColors; import net.runelite.client.ui.NavigationButton; @@ -66,7 +67,8 @@ import org.slf4j.LoggerFactory; @PluginDescriptor( name = "Developer Tools", tags = {"panel"}, - developerPlugin = true + developerPlugin = true, + type = PluginType.MISCELLANEOUS ) @Getter(AccessLevel.PACKAGE) public class DevToolsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index 40fa5ffafd..036a31782f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -60,6 +60,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PartyChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; @@ -81,7 +82,8 @@ import org.jetbrains.annotations.NotNull; @PluginDescriptor( name = "Discord", description = "Show your status and activity in the Discord user panel", - tags = {"action", "activity", "external", "integration", "status"} + tags = {"action", "activity", "external", "integration", "status"}, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java index 79e3ead171..a53b40aa70 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java @@ -53,7 +53,7 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Drop Party", description = "Marks where a user ran, for drop partys", tags = {"Drop", "Party", "marker", "player"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java index cafd835cce..10e3663e17 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java @@ -45,12 +45,14 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Emojis", description = "Replaces common emoticons such as :) with their corresponding emoji in the chat", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java index e89ac5a252..e0b202c434 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java @@ -43,12 +43,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Entity Hider", description = "Hide players, NPCs, and/or projectiles", tags = {"npcs", "players", "projectiles"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class EntityHiderPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 8d717782ee..5c1178cc92 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -59,6 +59,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.examine.ExamineClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; @@ -71,7 +72,8 @@ import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; @PluginDescriptor( name = "Examine", description = "Send examine information to the API", - tags = {"npcs", "items", "inventory", "objects"} + tags = {"npcs", "items", "inventory", "objects"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java index c26b51a2e6..b381fcb49c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java @@ -58,13 +58,16 @@ import net.runelite.client.game.NPCManager; import net.runelite.client.game.XpDropEvent; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "XP Drop", description = "Enable customization of the way XP drops are displayed", - tags = {"experience", "levels", "tick"}) + tags = {"experience", "levels", "tick"}, + type = PluginType.UTILITY +) @Singleton public class XpDropPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java index f52c6c7d11..d08810b03d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java @@ -61,12 +61,14 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @Slf4j @PluginDescriptor( name = "Fairy Rings", description = "Show the location of the fairy ring teleport", - tags = {"teleportation"} + tags = {"teleportation"}, + type = PluginType.UTILITY ) @Singleton public class FairyRingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java index 15824c894e..a8d9b0c1ad 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java @@ -40,6 +40,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; @@ -51,7 +52,8 @@ import net.runelite.http.api.feed.FeedResult; name = "News Feed", description = "Show the latest RuneLite blog posts, OSRS news, and JMod Twitter posts", tags = {"external", "integration", "panel", "twitter"}, - loadWhenOutdated = true + loadWhenOutdated = true, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index b7c17443d4..278d054b9d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -71,6 +71,7 @@ import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -79,7 +80,8 @@ import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Fishing", description = "Show fishing stats and mark fishing spots", - tags = {"overlay", "skilling"} + tags = {"overlay", "skilling"}, + type = PluginType.SKILLING ) @PluginDependency(XpTrackerPlugin.class) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java index 24767d2b7d..88d732d1cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java @@ -33,6 +33,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.DrawManager; import net.runelite.client.ui.overlay.OverlayManager; @@ -50,7 +51,8 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Performance", description = "Show current FPS or set an FPS limit", tags = {"frames", "framerate", "limit", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class FpsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java index 84d27d15f3..cc7b766a53 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java @@ -35,10 +35,12 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Friend List", - description = "Add extra information to the friend and ignore lists" + description = "Add extra information to the friend and ignore lists", + type = PluginType.MISCELLANEOUS ) @Singleton public class FriendListPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index 272ae40e96..7f0e2f2489 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -50,13 +50,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @Slf4j @PluginDescriptor( name = "Friend Notes", - description = "Store notes about your friends" + description = "Store notes about your friends", + type = PluginType.MISCELLANEOUS ) @Singleton public class FriendNotesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index 89e385bf9a..a989da6805 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -76,6 +76,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 static net.runelite.client.plugins.gpu.GLUtil.*; import net.runelite.client.plugins.gpu.config.AnisotropicFilteringMode; import net.runelite.client.plugins.gpu.config.AntiAliasingMode; @@ -87,7 +88,8 @@ import net.runelite.client.util.OSType; name = "GPU", description = "Utilizes the GPU", enabledByDefault = false, - tags = {"fog", "draw distance"} + tags = {"fog", "draw distance"}, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 6fbe6cbe7f..4c958d6179 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -80,6 +80,7 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; @@ -93,7 +94,8 @@ import net.runelite.http.api.osbuddy.OSBGrandExchangeResult; @PluginDescriptor( name = "Grand Exchange", description = "Provide additional and/or easier access to Grand Exchange information", - tags = {"external", "integration", "notifications", "panel", "prices", "trade"} + tags = {"external", "integration", "notifications", "panel", "prices", "trade"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 7309679418..00633d0863 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -89,6 +89,7 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.grounditems.config.ItemHighlightMode; import static net.runelite.client.plugins.grounditems.config.ItemHighlightMode.OVERLAY; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; @@ -105,7 +106,8 @@ import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Ground Items", description = "Highlight ground items and/or show price information", - tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"} + tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"}, + type = PluginType.UTILITY ) @Singleton public class GroundItemsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java index c57feb16b2..d249d0090f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java @@ -63,6 +63,7 @@ import net.runelite.client.events.ConfigChanged; 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.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @@ -70,7 +71,8 @@ import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "Ground Markers", description = "Enable marking of tiles using the Shift key", - tags = {"overlay", "tiles"} + tags = {"overlay", "tiles"}, + type = PluginType.UTILITY ) @Singleton public class GroundMarkerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java index 0ef828c8e9..933432fde4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java @@ -63,12 +63,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Herbiboar", description = "Highlight starting rocks, trails, and the objects to search at the end of each trail", - tags = {"herblore", "hunter", "skilling", "overlay"} + tags = {"herblore", "hunter", "skilling", "overlay"}, + type = PluginType.SKILLING ) @Singleton public class HerbiboarPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index d10c55ff15..a329333e0e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -54,6 +54,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; @@ -63,7 +64,8 @@ import org.apache.commons.lang3.ArrayUtils; name = "HiScore", description = "Enable the HiScore panel and an optional Lookup option on players", tags = {"panel", "players"}, - loadWhenOutdated = true + loadWhenOutdated = true, + type = PluginType.MISCELLANEOUS ) @Singleton public class HiscorePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java index fbf164e897..7fd25e2b7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java @@ -51,13 +51,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( name = "Hunter", description = "Show the state of your traps", - tags = {"overlay", "skilling", "timers"} + tags = {"overlay", "skilling", "timers"}, + type = PluginType.SKILLING ) @Singleton public class HunterPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index 8b33be30ef..2bf947033d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -77,13 +77,15 @@ import net.runelite.client.game.Sound; import net.runelite.client.game.SoundManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.PvPUtil; import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Idle Notifier", description = "Send a notification when going idle, or when HP/Prayer reaches a threshold", - tags = {"health", "hitpoints", "notifications", "prayer", "pvp", "pker"} + tags = {"health", "hitpoints", "notifications", "prayer", "pvp", "pker"}, + type = PluginType.MISCELLANEOUS ) @Singleton public class IdleNotifierPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java index ddc289c807..b4ab31cc99 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java @@ -47,12 +47,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Implings", description = "Highlight nearby implings on the minimap and on-screen", - tags = {"hunter", "minimap", "overlay", "imp"} + tags = {"hunter", "minimap", "overlay", "imp"}, + type = PluginType.SKILLING ) @Singleton public class ImplingsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java index adb8db9f09..6523490be4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java @@ -35,6 +35,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; @@ -43,7 +44,8 @@ import net.runelite.client.util.ImageUtil; name = "Info Panel", description = "Enable the Info panel", tags = {"info", "github", "patreon", "dir", "discord"}, - loadWhenOutdated = true + loadWhenOutdated = true, + type = PluginType.MISCELLANEOUS ) @Singleton public class InfoPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java index f27bee9ae0..ab6dd42ae0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java @@ -38,11 +38,13 @@ import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Instance Map", - description = "Add an instanced map, accessible by right-clicking the map button" + description = "Add an instanced map, accessible by right-clicking the map button", + type = PluginType.UTILITY ) @Singleton public class InstanceMapPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java index 668afae749..87324b2677 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java @@ -49,6 +49,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.ImageUtil; @Slf4j @@ -56,7 +57,8 @@ import net.runelite.client.util.ImageUtil; name = "Interface Styles", description = "Change the interface style to the 2005/2010 interface", tags = {"2005", "2010", "skin", "theme", "ui"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class InterfaceStylesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java index 2abecac755..a800cc81b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java @@ -36,13 +36,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Inventory Grid", description = "Shows a grid over the inventory and a preview of where items will be dragged", tags = {"items", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class InventoryGridPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java index 65ba41e5c3..9616257c96 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java @@ -45,6 +45,7 @@ import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @@ -52,7 +53,8 @@ import net.runelite.client.util.ColorUtil; name = "Inventory Tags", description = "Add the ability to tag items in your inventory", tags = {"highlight", "items", "overlay", "tagging"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class InventoryTagsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java index 9e1b7b6252..1633df6e84 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java @@ -34,13 +34,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Inventory Viewer", description = "Add an overlay showing the contents of your inventory", tags = {"alternate", "items", "overlay", "second"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class InventoryViewerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 6d409b143f..c69c52df92 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -62,13 +62,15 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Item Charges", description = "Show number of item charges remaining", - tags = {"inventory", "notifications", "overlay"} + tags = {"inventory", "notifications", "overlay"}, + type = PluginType.UTILITY ) @Singleton public class ItemChargePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java index bdfb38feaf..4d5da8776b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java @@ -35,12 +35,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Item Identification", description = "Show identifying text over items with difficult to distinguish sprites", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class ItemIdentificationPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java index 957805663e..066eeea0fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java @@ -34,13 +34,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Item Prices", description = "Show prices on hover for items in your inventory and bank", tags = {"bank", "inventory", "overlay", "high", "alchemy", "grand", "exchange", "tooltips"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class ItemPricesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java index f4b2142bbd..8538d39248 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java @@ -66,13 +66,15 @@ import net.runelite.client.game.ItemMapping; import net.runelite.client.game.ItemReclaimCost; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Items Kept on Death", description = "Updates the Items Kept on Death interface to be more accurate", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java index 45dfaef6e3..04faa57ec4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java @@ -62,6 +62,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.JagexColors; import net.runelite.client.ui.overlay.OverlayManager; @@ -72,7 +73,8 @@ import net.runelite.http.api.item.ItemStats; @PluginDescriptor( name = "Item Stats", description = "Show information about food and potion effects", - tags = {"food", "inventory", "overlay", "potion"} + tags = {"food", "inventory", "overlay", "potion"}, + type = PluginType.UTILITY ) public class ItemStatPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java index 3302c72cb7..7215139ffc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java @@ -48,6 +48,7 @@ import net.runelite.client.events.ConfigChanged; 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.ui.JagexColors; import net.runelite.client.util.ColorUtil; @@ -55,7 +56,8 @@ import net.runelite.client.util.ColorUtil; name = "Key Remapping", description = "Allows use of WASD keys for camera movement with 'Press Enter to Chat', and remapping number keys to F-keys", tags = {"enter", "chat", "wasd", "camera"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class KeyRemappingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java index 5779567d48..85a3dabc51 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java @@ -52,13 +52,15 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Kingdom of Miscellania", description = "Show various informations about your Kingdom of Miscellania", tags = {"favor", "favour", "managing", "overlay", "indication", "notification"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index 304274c9b7..d58e55de97 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -65,6 +65,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; @@ -73,7 +74,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Kourend Library", description = "Show where the books are found in the Kourend Library", - tags = {"arceuus", "magic", "runecrafting", "overlay", "panel"} + tags = {"arceuus", "magic", "runecrafting", "overlay", "panel"}, + type = PluginType.MINIGAME ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java index d4bcfcba6a..cf418e3a26 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java @@ -48,6 +48,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.WorldService; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.ImageUtil; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldResult; @@ -56,7 +57,8 @@ import net.runelite.http.api.worlds.WorldType; @PluginDescriptor( name = "League Chat Icons", description = "Changes the chat icon for players on league worlds", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Slf4j public class LeagueChatIconsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java index 3324f69452..a04f374873 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java @@ -45,11 +45,13 @@ 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.util.OSType; @PluginDescriptor( name = "Login Screen", - description = "Provides various enhancements for login screen" + description = "Provides various enhancements for login screen", + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index b004c56732..3e3d54d545 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -113,6 +113,7 @@ import net.runelite.client.game.ItemStack; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry; import net.runelite.client.plugins.loottracker.localstorage.LTRecord; import net.runelite.client.plugins.loottracker.localstorage.LootRecordWriter; @@ -139,7 +140,8 @@ import org.jooq.impl.SQLDataType; name = "Loot Tracker", description = "Tracks loot from monsters and minigames", tags = {"drops"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java index a2051838aa..63ee2ca8b2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java @@ -33,12 +33,14 @@ import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Low Detail", description = "Turn off ground decorations and certain textures, reducing memory usage", tags = {"memory", "usage", "ground", "decorations"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) public class LowMemoryPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/PrioParse.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/PrioParse.java index 63ca44de58..7e84f55e21 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/PrioParse.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/PrioParse.java @@ -33,6 +33,11 @@ public class PrioParse { public static boolean parse(String value) { + if (value.equals("")) + { + return true; + } + try { final StringBuilder sb = new StringBuilder(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java index 1434c07294..ca98b13184 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java @@ -46,12 +46,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Metronome", description = "Play sounds in a customisable pattern", tags = {"skilling", "tick", "timers"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java index 134c78db92..90fc7df40c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java @@ -40,11 +40,13 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Minimap", description = "Customize the color of minimap dots", - tags = {"items", "npcs", "players", "hd"} + tags = {"items", "npcs", "players", "hd"}, + type = PluginType.UTILITY ) public class MinimapPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java index 67a64cd674..0a2b6727a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java @@ -69,13 +69,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Mining", description = "Show ore respawn timers and coal bag overlay", tags = {"overlay", "skilling", "timers", "coal", "coalbag", "coal bag"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.SKILLING ) @Singleton public class MiningPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index a4c38eded1..03612a1797 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -90,6 +90,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -98,7 +99,8 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry; name = "Motherlode Mine", description = "Show helpful information inside the Motherload Mine", tags = {"pay", "dirt", "mining", "mlm", "skilling", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.SKILLING ) @Singleton public class MotherlodePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java index eadb926055..2b91d50bb2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java @@ -42,12 +42,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Mouse Tooltips", description = "Render default actions as a tooltip", - tags = {"actions", "overlay", "tooltip", "hide"} + tags = {"actions", "overlay", "tooltip", "hide"}, + type = PluginType.UTILITY ) @Singleton public class MouseHighlightPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java index 282a52c76c..8487fed645 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java @@ -33,6 +33,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.mta.alchemy.AlchemyRoom; import net.runelite.client.plugins.mta.enchantment.EnchantmentRoom; import net.runelite.client.plugins.mta.graveyard.GraveyardRoom; @@ -42,7 +43,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Mage Training Arena", description = "Show helpful information for the Mage Training Arena minigame", - tags = {"mta", "magic", "minigame", "overlay"} + tags = {"mta", "magic", "minigame", "overlay"}, + type = PluginType.MINIGAME ) @Singleton public class MTAPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index 7ee6ca418f..a7a2b2cef7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -70,11 +70,13 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Music", description = "Adds search and filter for the music list, and additional volume control", - tags = {"sound", "volume"} + tags = {"sound", "volume"}, + type = PluginType.MISCELLANEOUS ) public class MusicPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java index 4eda504879..4a2adde239 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java @@ -47,12 +47,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Nightmare Zone", description = "Show NMZ points/absorption and/or notify about expiring potions", - tags = {"combat", "nmz", "minigame", "notifications"} + tags = {"combat", "nmz", "minigame", "notifications"}, + type = PluginType.MINIGAME ) @Singleton public class NightmareZonePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java index 13d30f2a94..4eb2b95b08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java @@ -33,6 +33,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.SessionOpen; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; @@ -41,7 +42,8 @@ import net.runelite.client.util.ImageUtil; name = "Notes", description = "Enable the Notes panel", tags = {"panel"}, - loadWhenOutdated = true + loadWhenOutdated = true, + type = PluginType.MISCELLANEOUS ) @Singleton public class NotesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 1912a1c492..413c69a44a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -69,6 +69,7 @@ import net.runelite.client.events.ConfigChanged; 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.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.WildcardMatcher; @@ -76,7 +77,8 @@ import net.runelite.client.util.WildcardMatcher; @PluginDescriptor( name = "NPC Indicators", description = "Highlight NPCs on-screen and/or on the minimap", - tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"} + tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java index 29ebd0a5f5..c05332585c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java @@ -62,6 +62,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.WildcardMatcher; @@ -70,7 +71,8 @@ import net.runelite.client.util.WildcardMatcher; name = "NPC Aggression Timer", description = "Highlights the unaggressive area of NPCs nearby and timer until it becomes active", tags = {"highlight", "lines", "unaggro", "aggro", "aggressive", "npcs", "area", "slayer"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class NpcAggroAreaPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index abbde8a845..a53072b79f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -77,13 +77,15 @@ 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.ui.overlay.OverlayManager; @PluginDescriptor( name = "Object Markers", description = "Enable marking of objects using the Shift key", tags = {"overlay", "objects", "mark", "marker"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton @Slf4j 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 0f04abb77c..ab291c7161 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,8 +27,6 @@ package net.runelite.client.plugins.openosrs; import java.awt.event.KeyEvent; -import java.util.Arrays; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; @@ -64,8 +62,6 @@ 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( @@ -78,7 +74,6 @@ import net.runelite.client.util.HotkeyListener; public class OpenOSRSPlugin extends Plugin { private final openosrsKeyListener keyListener = new openosrsKeyListener(); - private static final List HidePlugins = Arrays.asList("hidePlugins", "hidePvmPlugins", "hidePvpPlugins", "hideSkillingPlugins", "hideUtilityPlugins", "hideExternalPlugins"); @Inject private OpenOSRSConfig config; @@ -147,16 +142,6 @@ public class OpenOSRSPlugin extends Plugin return; } - if (HidePlugins.stream().anyMatch(option -> option.equals(event.getKey()))) - { - updatePlugins(); - } - - if (event.getKey().equals("pluginSortMode")) - { - ConfigPanel.sortPluginList(config, null); - } - this.keybind = config.detachHotkey(); if (!config.keyboardPin()) @@ -378,20 +363,6 @@ public class OpenOSRSPlugin extends Plugin } } - private void updatePlugins() - { - ConfigPanel.pluginList.forEach(listItem -> - { - 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())); - }); - } - private class openosrsKeyListener implements KeyListener { private int lastKeyCycle; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java index 79c35128c0..7472db0806 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java @@ -57,6 +57,7 @@ import net.runelite.client.game.NPCManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; import net.runelite.http.api.hiscore.HiscoreEndpoint; @@ -65,7 +66,8 @@ import net.runelite.http.api.hiscore.HiscoreResult; @PluginDescriptor( name = "Opponent Information", description = "Show name and hitpoints information about the NPC you are fighting", - tags = {"combat", "health", "hitpoints", "npcs", "overlay"} + tags = {"combat", "health", "hitpoints", "npcs", "overlay"}, + type = PluginType.UTILITY ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java index 5fa8ea24d0..8d270b93cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java @@ -68,6 +68,7 @@ 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.party.data.PartyData; import net.runelite.client.plugins.party.data.PartyTilePingData; import net.runelite.client.plugins.party.messages.LocationUpdate; @@ -87,7 +88,8 @@ import net.runelite.http.api.ws.messages.party.UserSync; @PluginDescriptor( name = "Party", - description = "Shows useful information about current party" + description = "Shows useful information about current party", + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java index d007cd4067..18add1f20f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java @@ -63,6 +63,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.pestcontrol.config.HighlightPortalOption; import net.runelite.client.plugins.pestcontrol.config.NpcHighlightStyle; import net.runelite.client.ui.overlay.OverlayManager; @@ -72,7 +73,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Pest Control", description = "Show helpful information for the Pest Control minigame", - tags = {"minigame", "overlay"} + tags = {"minigame", "overlay"}, + type = PluginType.MINIGAME ) @Singleton public class PestControlPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java index e9e92da487..74c84e866f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java @@ -61,6 +61,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.HiscoreManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.http.api.hiscore.HiscoreEndpoint; import net.runelite.http.api.hiscore.HiscoreResult; @@ -69,7 +70,8 @@ import net.runelite.http.api.hiscore.Skill; @PluginDescriptor( name = "Player-owned House", description = "Show minimap icons and mark unlit/lit burners", - tags = {"construction", "poh", "minimap", "overlay"} + tags = {"construction", "poh", "minimap", "overlay"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java index f94edc9b5b..4208a3575f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java @@ -60,6 +60,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -69,7 +70,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Poison", description = "Tracks current damage values for Poison and Venom", - tags = {"combat", "poison", "venom", "heart", "hp"} + tags = {"combat", "poison", "venom", "heart", "hp"}, + type = PluginType.UTILITY ) @Singleton public class PoisonPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index 5a03729055..f17499c121 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -47,6 +47,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.http.api.item.ItemStats; @@ -54,7 +55,8 @@ import net.runelite.http.api.item.ItemStats; @PluginDescriptor( name = "Prayer", description = "Show various information related to prayer", - tags = {"combat", "flicking", "overlay"} + tags = {"combat", "flicking", "overlay"}, + type = PluginType.UTILITY ) @Singleton public class PrayerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java index 22bdf73d80..a9bce44342 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java @@ -47,7 +47,7 @@ import net.runelite.client.util.StringFileUtils; name = "Private Server", description = "Settings for connecting to non official servers", tags = {"RSPS", "Server", "Private"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java index 0c05298d2f..5721638979 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java @@ -47,7 +47,7 @@ import net.runelite.client.util.ImageUtil; name = "Account Switcher", description = "Allow for a allows you to easily switch between multiple OSRS Accounts", tags = {"profile", "account", "login", "log in", "pklite"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java index 0b5a0abe3e..7fc3645b66 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java @@ -55,6 +55,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.puzzlesolver.lightbox.Combination; import net.runelite.client.plugins.puzzlesolver.lightbox.LightBox; import net.runelite.client.plugins.puzzlesolver.lightbox.LightboxSolution; @@ -66,7 +67,8 @@ import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "Puzzle Solver", description = "Show you where to click to solve puzzle boxes", - tags = {"clues", "scrolls", "overlay"} + tags = {"clues", "scrolls", "overlay"}, + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java index 01d31f0986..5c70cecba7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java @@ -68,7 +68,7 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; name = "PyramidPlunder", description = "Highlights doors and spear traps in pyramid plunder and adds a numerical timer", tags = {"pyramidplunder", "pyramid", "plunder", "overlay", "skilling", "thieving"}, - type = PluginType.UTILITY, + type = PluginType.MINIGAME, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java index afcbecd694..684a5dc9bc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java @@ -61,10 +61,12 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Quest List", - description = "Adds searching and filtering to the quest list" + description = "Adds searching and filtering to the quest list", + type = PluginType.UTILITY ) @Singleton public class QuestListPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java index 215ce4be83..30af13dba8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java @@ -46,11 +46,13 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Random Events", description = "Notify when random events appear and remove talk/dismiss options on events that aren't yours.", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Slf4j public class RandomEventPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java index 3e35f9be5c..05983de7c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java @@ -52,7 +52,7 @@ import net.runelite.client.task.Schedule; description = "various reminders", tags = {"session", "reminder", "hydrate", "hydration"}, enabledByDefault = false, - type = PluginType.UTILITY + type = PluginType.MISCELLANEOUS ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java index b8cb501cbb..074e715c1b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java @@ -53,10 +53,12 @@ import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Reorder Prayers", - description = "Reorder the prayers displayed on the Prayer panel" + description = "Reorder the prayers displayed on the Prayer panel", + type = PluginType.UTILITY ) @Singleton public class ReorderPrayersPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java index e828693114..e072e76642 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java @@ -48,12 +48,14 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.task.Schedule; @PluginDescriptor( name = "Report Button", description = "Replace the text on the Report button with the current time", - tags = {"time", "utc"} + tags = {"time", "utc"}, + type = PluginType.MISCELLANEOUS ) @Singleton public class ReportButtonPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java index c7012beb07..1f6969727a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java @@ -52,13 +52,15 @@ import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Rogues' Den", description = "Mark tiles and clickboxes to help traverse the maze", - tags = {"agility", "maze", "minigame", "overlay", "thieving"} + tags = {"agility", "maze", "minigame", "overlay", "thieving"}, + type = PluginType.MINIGAME ) public class RoguesDenPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index 88f09eda54..911e684d83 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -62,6 +62,7 @@ import static net.runelite.client.menus.ComparableEntries.newBaseComparableEntry import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.menuentryswapper.comparables.BankComparableEntry; import net.runelite.client.plugins.menuentryswapper.comparables.EquipmentComparableEntry; import static net.runelite.client.plugins.runecraft.AbyssRifts.*; @@ -71,7 +72,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Runecraft", description = "Show minimap icons and clickboxes for abyssal rifts", - tags = {"abyssal", "minimap", "overlay", "rifts", "rc", "runecrafting"} + tags = {"abyssal", "minimap", "overlay", "rifts", "rc", "runecrafting"}, + type = PluginType.SKILLING ) @Singleton @Getter(AccessLevel.PACKAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java index 8b90d7a785..d454722b84 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java @@ -43,7 +43,7 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Runedoku Solver", description = "Show solutions for current Runedoku puzzle.", tags = {"overlay", "runedoku", "sudoku", "puzzle", "solving"}, - type = PluginType.UTILITY, + type = PluginType.MINIGAME, enabledByDefault = false ) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java index aa7c89c0de..b753a5ecb9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java @@ -35,13 +35,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.runepouch.config.RunePouchOverlayMode; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Rune Pouch", description = "Show the contents of your rune pouch", - tags = {"combat", "magic", "overlay"} + tags = {"combat", "magic", "overlay"}, + type = PluginType.UTILITY ) @Singleton public class RunepouchPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java index df3ff29ff5..3e50540ee2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java @@ -48,6 +48,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.screenmarkers.ui.ScreenMarkerPluginPanel; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; @@ -58,7 +59,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Screen Markers", description = "Enable drawing of screen markers on top of the client", - tags = {"boxes", "overlay", "panel"} + tags = {"boxes", "overlay", "panel"}, + type = PluginType.UTILITY ) @Singleton public class ScreenMarkerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index c8a41586f4..2aacbcd7d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -95,6 +95,7 @@ import net.runelite.client.game.SpriteManager; 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.screenshot.imgur.ImageUploadRequest; import net.runelite.client.plugins.screenshot.imgur.ImageUploadResponse; import net.runelite.client.ui.ClientToolbar; @@ -118,7 +119,8 @@ import org.jetbrains.annotations.Nullable; @PluginDescriptor( name = "Screenshot", description = "Enable the manual and automatic taking of screenshots", - tags = {"external", "images", "imgur", "integration", "notifications"} + tags = {"external", "images", "imgur", "integration", "notifications"}, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java index 7f3248dcd9..50bffc6dd6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java @@ -46,6 +46,7 @@ import net.runelite.client.game.SkillIconManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.skillcalculator.banked.BankedCalculatorPanel; import net.runelite.client.plugins.skillcalculator.banked.beans.Activity; import net.runelite.client.plugins.skillcalculator.banked.beans.CriticalItem; @@ -56,7 +57,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Skill Calculator", description = "Enable the Skill Calculator panel", - tags = {"panel", "skilling"} + tags = {"panel", "skilling"}, + type = PluginType.MISCELLANEOUS ) public class SkillCalculatorPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java index 6a22b01d5c..c56278d72f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java @@ -36,12 +36,14 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Skybox", description = "Draws an oldschool styled skybox", enabledByDefault = false, - tags = {"sky"} + tags = {"sky"}, + type = PluginType.MISCELLANEOUS ) @Singleton public class SkyboxPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index b8960e7b89..57f9e44b83 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -92,6 +92,7 @@ import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; @@ -106,7 +107,8 @@ import net.runelite.http.api.chat.ChatClient; @PluginDescriptor( name = "Slayer", description = "Show additional slayer task related information", - tags = {"combat", "notifications", "overlay", "tasks"} + tags = {"combat", "notifications", "overlay", "tasks"}, + type = PluginType.SKILLING ) @PluginDependency(XpTrackerPlugin.class) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java index 038812ab06..f6b89039df 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java @@ -73,7 +73,7 @@ import net.runelite.client.plugins.PluginType; name = "Slayermusiq1 Guides", description = "Adds a right-click option to go to Slayermusiq1's guides from the quest tab", tags = {"quest", "guide", "slayermusiq"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java index 3513345728..a2ef5cf6ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java @@ -42,6 +42,7 @@ import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -49,7 +50,8 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry; @PluginDescriptor( name = "Smelting", description = "Show Smelting stats", - tags = {"overlay", "skilling"} + tags = {"overlay", "skilling"}, + type = PluginType.SKILLING ) @Singleton @PluginDependency(XpTrackerPlugin.class) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java index 747e991b5e..44303cf512 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java @@ -55,6 +55,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ws.PartyService; import net.runelite.client.ws.WSClient; @@ -65,7 +66,8 @@ import lombok.extern.slf4j.Slf4j; name = "Special Attack Counter", description = "Track DWH, Arclight, Darklight, and BGS special attacks used on NPCs", tags = {"combat", "npcs", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java index af35083571..69ddec2dc4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java @@ -46,6 +46,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.itemstats.ItemStatPlugin; import net.runelite.client.plugins.statusbars.config.BarMode; import net.runelite.client.plugins.statusbars.renderer.BarRenderer; @@ -58,7 +59,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Status Bars", description = "Draws status bars next to players inventory showing currentValue and restore amounts", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton @PluginDependency(ItemStatPlugin.class) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java index 976678f1ff..8431cc7bf9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java @@ -55,6 +55,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Graceful; import net.runelite.client.util.ImageUtil; @@ -63,7 +64,8 @@ import org.apache.commons.lang3.StringUtils; @PluginDescriptor( name = "Status Orbs", description = "Configure settings for the Minimap orbs", - tags = {"minimap", "orb", "regen", "energy", "special"} + tags = {"minimap", "orb", "regen", "energy", "special"}, + type = PluginType.UTILITY ) public class StatusOrbsPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java index b5b17b9371..b6246f1b02 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java @@ -53,6 +53,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry; import net.runelite.client.plugins.loottracker.localstorage.LTRecord; import net.runelite.client.plugins.loottracker.localstorage.LootRecordWriter; @@ -68,7 +69,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Stoned Tracker", description = "Local data persistence and unique UI for the Loot Tracker.", - tags = {"Stoned", "Loot", "Tracker"} + tags = {"Stoned", "Loot", "Tracker"}, + type = PluginType.MISCELLANEOUS ) @Slf4j public class StonedTrackerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java index f1b9d1fc4f..606f2795ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java @@ -36,12 +36,14 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; @PluginDescriptor( name = "Stretched Mode", description = "Stretches the game in fixed and resizable modes.", tags = {"resize", "ui", "interface", "stretch", "scaling", "fixed"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class StretchedModePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java index dc10b1104c..bc7a1fb06a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java @@ -80,7 +80,7 @@ import net.runelite.http.api.item.ItemPrice; name = "Supplies Used Tracker", description = "Tracks supplies used during the session", tags = {"cost"}, - type = PluginType.UTILITY, + type = PluginType.MISCELLANEOUS, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java index 3d083a4855..d67737167e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java @@ -53,7 +53,7 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Tarn's Lair", description = "Mark tiles and clickboxes to help traverse the maze", tags = {"agility", "maze", "minigame", "overlay"}, - type = PluginType.UTILITY, + type = PluginType.MINIGAME, enabledByDefault = false ) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java index 4740a15fea..9d35a5b106 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java @@ -40,6 +40,7 @@ import net.runelite.api.Player; 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.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; @@ -47,7 +48,8 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "Team Capes", description = "Show the different team capes in your area and the amount of each", tags = {"overlay", "players"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Singleton public class TeamCapesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java index 83ed902dec..407845dfcc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java @@ -42,12 +42,14 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Tears Of Guthix", description = "Show timers for the Tears Of Guthix streams", - tags = {"minigame", "overlay", "skilling", "timers", "tog"} + tags = {"minigame", "overlay", "skilling", "timers", "tog"}, + type = PluginType.MINIGAME ) @Singleton public class TearsOfGuthixPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java index c6a583e84f..a9d2532d5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java @@ -35,13 +35,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Tile Indicators", description = "Highlight the tile you are currently moving to", tags = {"highlight", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class TileIndicatorsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index c7da8e40ff..0f621b8286 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -76,6 +76,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import static net.runelite.client.plugins.timers.GameIndicator.VENGEANCE_ACTIVE; import static net.runelite.client.plugins.timers.GameTimer.*; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -83,7 +84,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Timers", description = "Show various timers in an infobox", - tags = {"combat", "items", "magic", "potions", "prayer", "overlay", "abyssal", "sire"} + tags = {"combat", "items", "magic", "potions", "prayer", "overlay", "abyssal", "sire"}, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java index 660214932e..5aa41eb4ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java @@ -45,13 +45,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "Chat Timestamps", description = "Add timestamps to chat messages", tags = {"timestamp"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class TimestampPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java index 19768a707c..9a6d209125 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java @@ -46,6 +46,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import static net.runelite.client.plugins.timetracking.TimeTrackingConfig.CONFIG_GROUP; import static net.runelite.client.plugins.timetracking.TimeTrackingConfig.STOPWATCHES; import static net.runelite.client.plugins.timetracking.TimeTrackingConfig.TIMERS; @@ -60,7 +61,8 @@ import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Time Tracking", description = "Enable the Time Tracking panel, which contains timers, stopwatches, and farming and bird house trackers", - tags = {"birdhouse", "farming", "hunter", "notifications", "skilling", "stopwatches", "timers", "panel"} + tags = {"birdhouse", "farming", "hunter", "notifications", "skilling", "stopwatches", "timers", "panel"}, + type = PluginType.MISCELLANEOUS ) public class TimeTrackingPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java index b3a5839c11..1de8a68ad3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java @@ -42,13 +42,15 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( name = "Tithe Farm", description = "Show timers for the farming patches within the Tithe Farm minigame", - tags = {"farming", "minigame", "overlay", "skilling", "timers"} + tags = {"farming", "minigame", "overlay", "skilling", "timers"}, + type = PluginType.MINIGAME ) @Singleton public class TitheFarmPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java index ae5d7be18e..89190880b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java @@ -45,6 +45,7 @@ import net.runelite.client.events.ChatboxInput; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.twitch.irc.TwitchIRCClient; import net.runelite.client.plugins.twitch.irc.TwitchListener; import net.runelite.client.task.Schedule; @@ -52,7 +53,8 @@ import net.runelite.client.task.Schedule; @PluginDescriptor( name = "Twitch", description = "Integrates Twitch chat", - enabledByDefault = false + enabledByDefault = false, + type = PluginType.MISCELLANEOUS ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java index f054a037a9..d57df705eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java @@ -63,12 +63,14 @@ 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; @PluginDescriptor( name = "Virtual Levels", description = "Shows virtual levels (beyond 99) and virtual skill total on the skills tab.", tags = {"skill", "total", "max"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton public class VirtualLevelsPlugin extends Plugin implements KeyListener diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java index aa338b5adb..e31de55d56 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java @@ -52,6 +52,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.util.LinkBrowser; import okhttp3.HttpUrl; import org.apache.commons.lang3.StringUtils; @@ -60,7 +61,8 @@ import org.jetbrains.annotations.Nullable; @Slf4j @PluginDescriptor( name = "Wiki", - description = "Adds a Wiki button that takes you to the OSRS Wiki" + description = "Adds a Wiki button that takes you to the OSRS Wiki", + type = PluginType.UTILITY ) public class WikiPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index ee679b0087..206f8774e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -57,6 +57,7 @@ import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @@ -64,7 +65,8 @@ import net.runelite.client.util.ColorUtil; @PluginDescriptor( name = "Wintertodt", description = "Show helpful information for the Wintertodt boss", - tags = {"minigame", "firemaking", "boss"} + tags = {"minigame", "firemaking", "boss"}, + type = PluginType.MINIGAME ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index 980b42a72a..3cd457ed51 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -59,6 +59,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -67,7 +68,8 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry; name = "Woodcutting", description = "Show woodcutting statistics and/or bird nest notifications", tags = {"birds", "nest", "notifications", "overlay", "skilling", "wc"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.SKILLING ) @PluginDependency(XpTrackerPlugin.class) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 1ce01e5c4b..a9b0e668d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -78,6 +78,7 @@ import net.runelite.client.game.WorldService; 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.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; @@ -93,7 +94,8 @@ import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "World Hopper", - description = "Allows you to quickly hop worlds" + description = "Allows you to quickly hop worlds", + type = PluginType.UTILITY ) @Slf4j @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index 804dc13ed6..d54a54262e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -45,13 +45,15 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.AgilityShortcut; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "World Map", description = "Enhance the world map to display additional information", - tags = {"agility", "fairy", "farming", "rings", "teleports"} + tags = {"agility", "fairy", "farming", "rings", "teleports"}, + type = PluginType.UTILITY ) public class WorldMapPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java index 0c9b81f286..2ecbaa93cb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java @@ -45,6 +45,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; @@ -53,7 +54,8 @@ import net.runelite.client.ui.overlay.OverlayManager; name = "XP Globes", description = "Show XP globes for the respective skill when gaining XP", tags = {"experience", "levels", "overlay"}, - enabledByDefault = false + enabledByDefault = false, + type = PluginType.UTILITY ) @Singleton @PluginDependency(XpTrackerPlugin.class) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 10bcc97e5c..e31c30fef0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -68,6 +68,7 @@ import net.runelite.client.game.NPCManager; import net.runelite.client.game.SkillIconManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import static net.runelite.client.plugins.xptracker.XpWorldType.NORMAL; import net.runelite.client.task.Schedule; import net.runelite.client.ui.ClientToolbar; @@ -79,7 +80,8 @@ import net.runelite.http.api.xp.XpClient; @PluginDescriptor( name = "XP Tracker", description = "Enable the XP Tracker panel", - tags = {"experience", "levels", "panel"} + tags = {"experience", "levels", "panel"}, + type = PluginType.UTILITY ) @Slf4j public class XpTrackerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/ui/MultiplexingPluginPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/MultiplexingPluginPanel.java new file mode 100644 index 0000000000..b51ce4027d --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/ui/MultiplexingPluginPanel.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2019 Abex + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.ui; + +import java.awt.CardLayout; + +public class MultiplexingPluginPanel extends PluginPanel +{ + private final CardLayout layout; + private boolean active = false; + private PluginPanel current; + + public MultiplexingPluginPanel(PluginPanel root) + { + super(false); + + layout = new CardLayout(); + setLayout(layout); + pushState(root); + } + + public void destroy() + { + for (int i = getComponentCount() - 1; i > 0; i--) + { + remove(i); + } + } + + public void pushState(PluginPanel subpanel) + { + int index = -1; + for (int i = getComponentCount() - 1; i >= 0; i--) + { + if (getComponent(i) == subpanel) + { + index = i; + break; + } + } + + if (active) + { + current.onDeactivate(); + subpanel.onActivate(); + } + current = subpanel; + + String name = System.identityHashCode(subpanel) + ""; + + if (index != -1) + { + for (int i = getComponentCount() - 1; i > index; i--) + { + popState(); + } + } + else + { + add(subpanel, name); + } + + layout.show(this, name); + revalidate(); + } + + public void popState() + { + int count = getComponentCount(); + if (count <= 1) + { + assert false : "Cannot pop last component"; + return; + } + + PluginPanel subpanel = (PluginPanel) getComponent(count - 2); + if (active) + { + current.onDeactivate(); + subpanel.onActivate(); + current = subpanel; + } + layout.show(this, System.identityHashCode(subpanel) + ""); + remove(count - 1); + revalidate(); + } + + @Override + public void onActivate() + { + active = true; + current.onActivate(); + } + + @Override + public void onDeactivate() + { + active = false; + current.onDeactivate(); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/IconButton.java b/runelite-client/src/main/java/net/runelite/client/ui/components/FixedWidthPanel.java similarity index 56% rename from runelite-client/src/main/java/net/runelite/client/ui/components/IconButton.java rename to runelite-client/src/main/java/net/runelite/client/ui/components/FixedWidthPanel.java index a9291230fe..fd951aac30 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/IconButton.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/FixedWidthPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Daniel Teo + * Copyright (c) 2017, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -24,56 +24,15 @@ */ package net.runelite.client.ui.components; -import java.awt.Insets; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JButton; +import java.awt.Dimension; +import javax.swing.JPanel; +import net.runelite.client.ui.PluginPanel; -/** - * A button that consists of an icon, without any background, borders, or margins. - */ -public class IconButton extends JButton +class FixedWidthPanel extends JPanel { - public IconButton(ImageIcon icon) + @Override + public Dimension getPreferredSize() { - this(icon, null); - } - - public IconButton(ImageIcon icon, ImageIcon hoverIcon) - { - setIcon(icon); - setBorderPainted(false); - setContentAreaFilled(false); - setFocusPainted(false); - setMargin(new Insets(0, 0, 0, 0)); - setOpaque(false); - setRolloverEnabled(false); - - setHoverIcon(hoverIcon); - } - - public void setHoverIcon(ImageIcon hoverIcon) - { - if (hoverIcon == null) - { - return; - } - final Icon icon = getIcon(); - addMouseListener(new MouseAdapter() - { - @Override - public void mouseEntered(MouseEvent e) - { - setIcon(hoverIcon); - } - - @Override - public void mouseExited(MouseEvent e) - { - setIcon(icon); - } - }); + return new Dimension(PluginPanel.PANEL_WIDTH, super.getPreferredSize().height); } } \ No newline at end of file