diff --git a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java index 3c30a8fc7f..a8829d2b96 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java @@ -26,11 +26,7 @@ package net.runelite.client.config; import java.awt.Color; -@ConfigGroup( - keyName = "textrecolor", - name = "Chat Text Recolor", - description = "Configuration for chat text recoloring" -) +@ConfigGroup("textrecolor") public interface ChatColorConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigGroup.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigGroup.java index 434fd4ca9d..7f9293cf8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigGroup.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigGroup.java @@ -33,9 +33,11 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) public @interface ConfigGroup { - String keyName(); - - String name(); - - String description(); + /** + * The key name of the config group used for storing configuration within the config group. + * This should typically be a lowercased version of your plugin name, with all spaces removed. + *

+ * For example, the {@code Grand Exchange} plugin uses the key name {@code grandexchange}. + */ + String value(); } diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java index 59eb3dc14f..5450a9132f 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java @@ -64,7 +64,7 @@ class ConfigInvocationHandler implements InvocationHandler if (args == null) { // Getting configuration item - String value = manager.getConfiguration(group.keyName(), item.keyName()); + String value = manager.getConfiguration(group.value(), item.keyName()); if (value == null) { @@ -85,7 +85,7 @@ class ConfigInvocationHandler implements InvocationHandler } catch (Exception e) { - log.warn("Unable to unmarshal {}.{} ", group.keyName(), item.keyName(), e); + log.warn("Unable to unmarshal {}.{} ", group.value(), item.keyName(), e); if (method.isDefault()) { return callDefaultMethod(proxy, method, null); @@ -111,19 +111,19 @@ class ConfigInvocationHandler implements InvocationHandler if (Objects.equal(newValue, defaultValue)) { // Just unset if it goes back to the default - manager.unsetConfiguration(group.keyName(), item.keyName()); + manager.unsetConfiguration(group.value(), item.keyName()); return null; } } if (newValue == null) { - manager.unsetConfiguration(group.keyName(), item.keyName()); + manager.unsetConfiguration(group.value(), item.keyName()); } else { String newValueStr = ConfigManager.objectToString(newValue); - manager.setConfiguration(group.keyName(), item.keyName(), newValueStr); + manager.setConfiguration(group.value(), item.keyName(), newValueStr); } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index e829992b04..ba63df7e3c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -386,11 +386,11 @@ public class ConfigManager { if (override) { - String current = getConfiguration(group.keyName(), item.keyName()); + String current = getConfiguration(group.value(), item.keyName()); // only unset if already set if (current != null) { - unsetConfiguration(group.keyName(), item.keyName()); + unsetConfiguration(group.value(), item.keyName()); } } continue; @@ -398,7 +398,7 @@ public class ConfigManager if (!override) { - String current = getConfiguration(group.keyName(), item.keyName()); + String current = getConfiguration(group.value(), item.keyName()); if (current != null) { continue; // something else is already set @@ -416,16 +416,16 @@ public class ConfigManager continue; } - String current = getConfiguration(group.keyName(), item.keyName()); + String current = getConfiguration(group.value(), item.keyName()); String valueString = objectToString(defaultValue); if (Objects.equals(current, valueString)) { continue; // already set to the default value } - log.debug("Setting default configuration value for {}.{} to {}", group.keyName(), item.keyName(), defaultValue); + log.debug("Setting default configuration value for {}.{} to {}", group.value(), item.keyName(), defaultValue); - setConfiguration(group.keyName(), item.keyName(), valueString); + setConfiguration(group.value(), item.keyName(), valueString); } } diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java index ff799c5238..61bd4b1258 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java @@ -27,11 +27,7 @@ package net.runelite.client.config; import java.awt.Dimension; import net.runelite.api.Constants; -@ConfigGroup( - keyName = "runelite", - name = "RuneLite", - description = "Configuration for RuneLite client options" -) +@ConfigGroup("runelite") public interface RuneLiteConfig extends Config { @ConfigItem( 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 2db2db78fa..540adecc24 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 @@ -37,11 +37,21 @@ public @interface PluginDescriptor { String name(); + /** + * A short, one-line summary of the plugin. + */ + String description() default ""; + + /** + * A list of plugin keywords, used (together with the name) when searching for plugins. + * Each tag should not contain any spaces, and should be fully lowercase. + */ + String[] tags() default {}; + boolean enabledByDefault() default true; /** * Whether or not plugin is hidden from configuration panel - * @return */ boolean hidden() default false; 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 6ae56398b0..b5e2e0a284 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 @@ -99,7 +99,7 @@ public class PluginManager private final List plugins = new CopyOnWriteArrayList<>(); private final List activePlugins = new CopyOnWriteArrayList<>(); private final String runeliteGroupName = RuneLiteConfig.class - .getAnnotation(ConfigGroup.class).keyName(); + .getAnnotation(ConfigGroup.class).value(); @Subscribe public void onSessionOpen(SessionOpen event) 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 5db3b1db28..fd113413aa 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 @@ -44,6 +44,8 @@ import net.runelite.client.util.RunnableExceptionLogger; @PluginDescriptor( name = "Account", + description = "Sync RuneLite config settings with your Google account", + tags = {"external", "google", "integration"}, loadWhenOutdated = true ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java index 55945fb4bb..ff121e1e7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "agility", - name = "Agility", - description = "Configuration for the Agility plugin" -) +@ConfigGroup("agility") public interface AgilityConfig extends Config { @ConfigItem( 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 ca60b9312e..625b37ab6f 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 @@ -68,7 +68,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Agility" + name = "Agility", + description = "Show helpful information about agility courses and obstacles", + tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"} ) @Slf4j public class AgilityPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingConfig.java index 7c4218658c..9260e9ef56 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = AnimationSmoothingPlugin.CONFIG_GROUP, - name = "Smooth Animations", - description = "Configuration for the smooth animations plugin" -) +@ConfigGroup(AnimationSmoothingPlugin.CONFIG_GROUP) public interface AnimationSmoothingConfig extends Config { 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 d5b994638d..300e581a0e 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 @@ -35,6 +35,8 @@ import javax.inject.Inject; @PluginDescriptor( name = "Animation Smoothing", + description = "Show smoother player, NPC, and object animations", + tags = {"npcs", "objects", "players"}, enabledByDefault = false ) public class AnimationSmoothingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragConfig.java index 64ba9570ba..1bed02603e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "antiDrag", - name = "Anti Drag", - description = "Configuration for the anti drag plugin (shift only)" -) +@ConfigGroup("antiDrag") public interface AntiDragConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java index 63d2fb1202..cae25bae3e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java @@ -36,7 +36,11 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -@PluginDescriptor(name = "Shift Anti Drag") +@PluginDescriptor( + name = "Shift Anti Drag", + description = "Prevent dragging an item for a specified delay", + tags = {"antidrag", "delay", "inventory", "items"} +) public class AntiDragPlugin extends Plugin implements KeyListener { private static final int DEFAULT_DELAY = 5; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesConfig.java index f9c63bc7b9..111fb9dc85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "attackIndicator", - name = "Attack Styles", - description = "Configuration for the attack styles plugin" -) +@ConfigGroup("attackIndicator") public interface AttackStylesConfig extends Config { @ConfigItem( 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 42bb0de5a9..0601f2703c 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 @@ -56,7 +56,9 @@ import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Attack Styles" + name = "Attack Styles", + description = "Show your current attack style as an overlay", + tags = {"combat", "defence", "magic", "overlay", "ranged", "strength"} ) @Slf4j public class AttackStylesPlugin 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 5aac02c642..cc13cea331 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 @@ -48,7 +48,9 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Bank Tags" + name = "Bank Tags", + description = "Enable tagging of bank items and searching of bank tags", + tags = {"searching", "tagging"} ) @Slf4j public class BankTagsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValueConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValueConfig.java index 707dfccb7d..c03557e2c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValueConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValueConfig.java @@ -29,10 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "bankvalue", - name = "Bank Value", - description = "Shows the value of your bank and/or current tab") +@ConfigGroup("bankvalue") public interface BankValueConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValuePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValuePlugin.java index e4739cfa56..277a3cf204 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValuePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bankvalue/BankValuePlugin.java @@ -36,7 +36,11 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -@PluginDescriptor(name = "Bank Value") +@PluginDescriptor( + name = "Bank Value", + description = "Show the value of your bank and/or current tab", + tags = {"grand", "exchange", "high", "alchemy", "prices"} +) public class BankValuePlugin extends Plugin { @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java index 8f4e06ed03..ef27117e06 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "barbarianAssault", - name = "Barbarian Assault", - description = "Configuration for the barbarian assault plugin" -) +@ConfigGroup("barbarianAssault") public interface BarbarianAssaultConfig extends Config { @ConfigItem( 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 140a7456f7..01edaebce0 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 @@ -48,7 +48,9 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Barbarian Assault" + name = "Barbarian Assault", + description = "Show a timer to the next call change", + tags = {"minigame", "overlay"} ) public class BarbarianAssaultPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java index 7494d639d4..6fc2e05947 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "barrows", - name = "Barrows Brothers", - description = "Configuration for the Barrows plugin" -) +@ConfigGroup("barrows") public interface BarrowsConfig extends Config { @ConfigItem( 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 c499c955ef..fa4424a102 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 @@ -66,7 +66,9 @@ import net.runelite.client.util.StackFormatter; import net.runelite.http.api.item.ItemPrice; @PluginDescriptor( - name = "Barrows Brothers" + name = "Barrows Brothers", + description = "Show helpful information for the Barrows minigame", + tags = {"combat", "minigame", "minimap"} ) @Slf4j public class BarrowsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceConfig.java index f1f738a543..b823ae50d7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "blastfurnace", - name = "Blast Furnace", - description = "Configuration for the Blast furnace plugin" -) +@ConfigGroup("blastfurnace") public interface BlastFurnaceConfig extends Config { @ConfigItem( 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 0b377a5b19..dc713e970f 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 @@ -42,7 +42,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Blast Furnace" + name = "Blast Furnace", + description = "Show helpful information for the Blast Furnace minigame", + tags = {"minigame", "overlay", "skilling", "smithing"} ) 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 28f6677ea3..95a5be6b05 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 @@ -44,7 +44,11 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; -@PluginDescriptor(name = "Blast Mine") +@PluginDescriptor( + name = "Blast Mine", + description = "Show helpful information for the Blast Mine minigame", + tags = {"explode", "explosive", "mining", "minigame", "skilling"} +) public class BlastMinePlugin extends Plugin { @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePluginConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePluginConfig.java index d2ce5cf186..76848a66e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePluginConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePluginConfig.java @@ -30,11 +30,7 @@ import net.runelite.client.config.ConfigItem; import java.awt.Color; -@ConfigGroup( - keyName = "blastmine", - name = "Blast Mine", - description = "Configuration for the Blast Mine plugin" -) +@ConfigGroup("blastmine") public interface BlastMinePluginConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java index 05b0889572..3e2a04edc9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "boosts", - name = "Boosts Information", - description = "Configuration for the Boosts plugin" -) +@ConfigGroup("boosts") public interface BoostsConfig extends Config { @ConfigItem( 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 02cfdb0772..0efb989ac0 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,7 +49,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Boosts Information" + name = "Boosts Information", + description = "Show combat and/or skill boost information", + tags = {"combat", "notifications", "skilling", "overlay"} ) @Slf4j 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 fdb100dd68..159681998a 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 @@ -36,7 +36,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Boss Timers" + name = "Boss Timers", + description = "Show boss spawn timer overlays", + tags = {"combat", "pve", "overlay", "spawn"} ) @Slf4j public class BossTimersPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonConfig.java index 0af2a463da..1ac2825df7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "cannon", - name = "Cannon", - description = "Configuration for the Cannon plugin" -) +@ConfigGroup("cannon") public interface CannonConfig extends Config { @ConfigItem( 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 28ec9c5473..08bc5a878a 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 @@ -61,7 +61,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Cannon" + name = "Cannon", + description = "Show information about cannon placement and/or amount of cannonballs", + tags = {"combat", "notifications", "ranged", "overlay"} ) 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 fea88a58f6..345fe5c766 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 @@ -42,7 +42,11 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; -@PluginDescriptor(name = "Cerberus") +@PluginDescriptor( + name = "Cerberus", + description = "Show what to pray against the summoned souls", + tags = {"bosses", "combat", "ghosts", "prayer", "pve", "overlay", "souls"} +) @Singleton public class CerberusPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java index 49289582c9..215fd75fc6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "chatcommands", - name = "Chat Commands", - description = "Configuration for chat commands" -) +@ConfigGroup("chatcommands") public interface ChatCommandsConfig extends Config { @ConfigItem( 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 c09805b1a3..7c75780739 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 @@ -63,7 +63,9 @@ import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.SearchResult; @PluginDescriptor( - name = "Chat Commands" + name = "Chat Commands", + description = "Enable chat commands", + tags = {"grand", "exchange", "level", "prices"} ) @Slf4j public class ChatCommandsPlugin 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 dbdd62e29b..aabfd1eb89 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 @@ -38,7 +38,10 @@ import net.runelite.client.chat.QueuedMessage; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -@PluginDescriptor(name = "Chat History") +@PluginDescriptor( + name = "Chat History", + description = "Retain your chat history when logging in/out or world hopping" +) public class ChatHistoryPlugin extends Plugin { private static final String WELCOME_MESSAGE = "Welcome to RuneScape."; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java index c8196d9826..ff1c45e2e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "chatnotification", - name = "Chat Notifications", - description = "Highlights and notifies you of chat messages" -) +@ConfigGroup("chatnotification") public interface ChatNotificationsConfig extends Config { @ConfigItem( 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 f4ba3099a6..ecbd4730bc 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 @@ -50,6 +50,8 @@ import net.runelite.client.util.Text; @PluginDescriptor( name = "Chat Notifications", + description = "Highlight and notify you of chat messages", + tags = {"duel", "messages", "notifications", "trade", "username"}, enabledByDefault = false ) public class ChatNotificationsPlugin extends Plugin 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 b7031212fc..91859a9da8 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 @@ -41,7 +41,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; @PluginDescriptor( - name = "Clan Chat" + name = "Clan Chat", + description = "Add rank icons to users talking in clan chat", + tags = {"icons", "rank"} ) @Slf4j public class ClanChatPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollConfig.java index 16c1995a34..f95341e50d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - name = "Clue Scroll", - keyName = "cluescroll", - description = "Configuration for the clue scroll plugin" -) +@ConfigGroup("cluescroll") public interface ClueScrollConfig extends Config { @ConfigItem( 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 53e1057c7b..3046eb100e 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 @@ -87,7 +87,9 @@ import net.runelite.client.util.QueryRunner; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Clue Scroll" + name = "Clue Scroll", + description = "Show answers to clue scroll riddles, anagrams, ciphers, and cryptic clues", + tags = {"arrow", "hints", "world", "map"} ) @Slf4j public class ClueScrollPlugin extends Plugin 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 758505137e..d6fac5e1c2 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 @@ -38,7 +38,8 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Combat Level" + name = "Combat Level", + description = "Show a more accurate combat level in Combat Options panel" ) 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 2a5573f0ed..632b365611 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 @@ -24,12 +24,12 @@ */ package net.runelite.client.plugins.config; +import com.google.common.base.Splitter; import com.google.common.base.Strings; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.GridLayout; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -39,10 +39,12 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; -import java.util.Map; -import java.util.TreeMap; +import java.util.List; import java.util.concurrent.ScheduledExecutorService; +import java.util.stream.Collectors; import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.ImageIcon; @@ -59,6 +61,7 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTextArea; +import javax.swing.ScrollPaneConstants; import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; @@ -70,6 +73,7 @@ import lombok.extern.slf4j.Slf4j; 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; @@ -83,6 +87,7 @@ import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; 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.util.SwingUtil; @@ -90,24 +95,42 @@ import net.runelite.client.util.SwingUtil; public class ConfigPanel extends PluginPanel { private static final int SPINNER_FIELD_WIDTH = 6; - - private static final ImageIcon CONFIG_ICON; - private static final ImageIcon CONFIG_ICON_HOVER; - private static final ImageIcon ON_SWITCHER; - private static final ImageIcon OFF_SWITCHER; + 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 SEARCH; + 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 CHAT_COLOR_PLUGIN = "Chat Color"; + private static final Splitter COMMA_SPLITTER = Splitter.on(','); + + private final PluginManager pluginManager; + private final ConfigManager configManager; + private final ScheduledExecutorService executorService; + private final RuneLiteConfig runeLiteConfig; + private final ChatColorConfig chatColorConfig; + private final IconTextField searchBar = new IconTextField(); + private final List pluginList = new ArrayList<>(); + + private final JPanel topPanel; + private final JPanel mainPanel; + private final JScrollPane scrollPane; + + private boolean showingPluginList = true; + private int scrollBarPosition = 0; + static { try { synchronized (ImageIO.class) { - BufferedImage configIcon = ImageIO.read(ConfigPanel.class.getResourceAsStream("config_edit_icon.png")); - CONFIG_ICON = new ImageIcon(configIcon); - CONFIG_ICON_HOVER = new ImageIcon(SwingUtil.grayscaleOffset(configIcon, -100)); - ON_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/on.png"))); - OFF_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/off.png"))); + BufferedImage backIcon = ImageIO.read(ConfigPanel.class.getResourceAsStream("config_back_icon.png")); + BACK_ICON = new ImageIcon(backIcon); + BACK_ICON_HOVER = new ImageIcon(SwingUtil.grayscaleOffset(backIcon, -100)); SEARCH = new ImageIcon(ImageIO.read(IconTextField.class.getResourceAsStream("search.png"))); } } @@ -117,19 +140,10 @@ public class ConfigPanel extends PluginPanel } } - private final PluginManager pluginManager; - private final ConfigManager configManager; - private final ScheduledExecutorService executorService; - private final RuneLiteConfig runeLiteConfig; - private final ChatColorConfig chatColorConfig; - private final IconTextField searchBar = new IconTextField(); - private Map children = new TreeMap<>(); - private int scrollBarPosition = 0; - - public ConfigPanel(PluginManager pluginManager, ConfigManager configManager, ScheduledExecutorService executorService, + ConfigPanel(PluginManager pluginManager, ConfigManager configManager, ScheduledExecutorService executorService, RuneLiteConfig runeLiteConfig, ChatColorConfig chatColorConfig) { - super(); + super(false); this.pluginManager = pluginManager; this.configManager = configManager; this.executorService = executorService; @@ -137,7 +151,7 @@ public class ConfigPanel extends PluginPanel this.chatColorConfig = chatColorConfig; searchBar.setIcon(SEARCH); - searchBar.setPreferredSize(new Dimension(100, 30)); + 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() @@ -161,292 +175,159 @@ public class ConfigPanel extends PluginPanel } }); - setBorder(new EmptyBorder(10, 10, 10, 10)); - setLayout(new DynamicGridLayout(0, 1, 0, 5)); + setLayout(new BorderLayout()); setBackground(ColorScheme.DARK_GRAY_COLOR); - rebuildPluginList(); - openConfigList(); + topPanel = new JPanel(); + topPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); + topPanel.setLayout(new BorderLayout(0, OFFSET)); + 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); + + initializePluginList(); + refreshPluginList(); } - final void rebuildPluginList() + private void initializePluginList() { - scrollBarPosition = getScrollPane().getVerticalScrollBar().getValue(); - Map newChildren = new TreeMap<>(); + final List pinnedPlugins = getPinnedPluginNames(); + // populate pluginList with all non-hidden plugins pluginManager.getPlugins().stream() .filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden()) - .sorted(Comparator.comparing(left -> left.getClass().getAnnotation(PluginDescriptor.class).name())) .forEach(plugin -> { - final Config pluginConfigProxy = pluginManager.getPluginConfigProxy(plugin); - final String pluginName = plugin.getClass().getAnnotation(PluginDescriptor.class).name(); + final PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class); + final Config config = pluginManager.getPluginConfigProxy(plugin); + final ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config); - final JPanel groupPanel = buildGroupPanel(); - - JLabel name = new JLabel(pluginName); - name.setForeground(Color.WHITE); - - groupPanel.add(name, BorderLayout.CENTER); - - final JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new GridLayout(1, 2)); - groupPanel.add(buttonPanel, BorderLayout.LINE_END); - - final JLabel editConfigButton = buildConfigButton(pluginConfigProxy); - buttonPanel.add(editConfigButton); - - final JLabel toggleButton = buildToggleButton(plugin); - toggleButton.setHorizontalAlignment(SwingConstants.RIGHT); - buttonPanel.add(toggleButton); - - newChildren.put(pluginName, groupPanel); + final PluginListItem listItem = new PluginListItem(this, plugin, descriptor, config, configDescriptor); + listItem.setPinned(pinnedPlugins.contains(listItem.getName())); + pluginList.add(listItem); }); - addCoreConfig(newChildren, "RuneLite", runeLiteConfig); - addCoreConfig(newChildren, "Chat Color", chatColorConfig); + // add special entries for core client configurations + final PluginListItem runeLite = new PluginListItem(this, runeLiteConfig, + configManager.getConfigDescriptor(runeLiteConfig), + RUNELITE_PLUGIN, "RuneLite client settings", "client"); + runeLite.setPinned(pinnedPlugins.contains(RUNELITE_PLUGIN)); + pluginList.add(runeLite); - children = newChildren; - openConfigList(); + final PluginListItem chatColor = new PluginListItem(this, chatColorConfig, + configManager.getConfigDescriptor(chatColorConfig), + CHAT_COLOR_PLUGIN, "Recolor chat text", "colour", "messages"); + chatColor.setPinned(pinnedPlugins.contains(CHAT_COLOR_PLUGIN)); + pluginList.add(chatColor); + + pluginList.sort(Comparator.comparing(PluginListItem::getName)); } - private void addCoreConfig(Map newChildren, String configName, Config config) + void refreshPluginList() { - final JPanel groupPanel = buildGroupPanel(); - - JLabel name = new JLabel(configName); - name.setForeground(Color.WHITE); - - groupPanel.add(name, BorderLayout.CENTER); - - final JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new GridLayout(1, 2)); - groupPanel.add(buttonPanel, BorderLayout.LINE_END); - - final JLabel editConfigButton = buildConfigButton(config); - buttonPanel.add(editConfigButton); - - final JLabel toggleButton = buildToggleButton(null); - toggleButton.setVisible(false); - buttonPanel.add(toggleButton); - - newChildren.put(configName, groupPanel); - } - - private JPanel buildGroupPanel() - { - // Create base panel for the config button and enabled/disabled button - final JPanel groupPanel = new JPanel(); - groupPanel.setLayout(new BorderLayout(3, 0)); - groupPanel.setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH, 20)); - return groupPanel; - } - - private JLabel buildConfigButton(Config config) - { - // Create edit config button and disable it by default - final JLabel editConfigButton = new JLabel(CONFIG_ICON); - editConfigButton.setPreferredSize(new Dimension(25, 0)); - editConfigButton.setVisible(false); - - // If we have configuration proxy enable the button and add edit config listener - if (config != null) + // update enabled / disabled status of all items + pluginList.forEach(listItem -> { - final ConfigDescriptor configDescriptor = configManager.getConfigDescriptor(config); - final boolean configEmpty = configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden()); - - if (!configEmpty) + final Plugin plugin = listItem.getPlugin(); + if (plugin != null) { - editConfigButton.addMouseListener(new MouseAdapter() - { - @Override - public void mousePressed(MouseEvent mouseEvent) - { - editConfigButton.setIcon(CONFIG_ICON); - openGroupConfigPanel(config, configDescriptor, configManager); - } - - @Override - public void mouseEntered(MouseEvent e) - { - editConfigButton.setIcon(CONFIG_ICON_HOVER); - } - - @Override - public void mouseExited(MouseEvent e) - { - editConfigButton.setIcon(CONFIG_ICON); - } - }); - editConfigButton.setVisible(true); - editConfigButton.setToolTipText("Edit plugin configuration"); - } - } - - return editConfigButton; - } - - private JLabel buildToggleButton(Plugin plugin) - { - // Create enabling/disabling button - final JLabel toggleButton = new JLabel(ON_SWITCHER); - toggleButton.setPreferredSize(new Dimension(25, 0)); - - if (plugin == null) - { - toggleButton.setEnabled(false); - return toggleButton; - } - - highlightButton(toggleButton, pluginManager.isPluginEnabled(plugin)); - - toggleButton.addMouseListener(new MouseAdapter() - { - @Override - public void mousePressed(MouseEvent mouseEvent) - { - executorService.submit(() -> - { - final boolean enabled = pluginManager.isPluginEnabled(plugin); - pluginManager.setPluginEnabled(plugin, !enabled); - - try - { - if (enabled) - { - pluginManager.stopPlugin(plugin); - } - else - { - pluginManager.startPlugin(plugin); - } - } - catch (PluginInstantiationException ex) - { - log.warn("Error during starting/stopping plugin {}", plugin.getClass().getSimpleName(), ex); - } - - highlightButton(toggleButton, !enabled); - }); + listItem.setPluginEnabled(pluginManager.isPluginEnabled(plugin)); } }); - return toggleButton; + if (showingPluginList) + { + openConfigList(); + } } - private void highlightButton(JLabel button, boolean enabled) + void openConfigList() { - button.setIcon(enabled ? ON_SWITCHER : OFF_SWITCHER); - button.setToolTipText(enabled ? "Disable plugin" : "Enable plugin"); + if (showingPluginList) + { + scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); + } + + showingPluginList = true; + + topPanel.removeAll(); + mainPanel.removeAll(); + + JLabel title = new JLabel("Configuration", SwingConstants.LEFT); + title.setForeground(Color.WHITE); + + topPanel.add(title, BorderLayout.NORTH); + topPanel.add(searchBar, BorderLayout.CENTER); + + onSearchBarChanged(); + searchBar.requestFocusInWindow(); + validate(); + scrollPane.getVerticalScrollBar().setValue(scrollBarPosition); } private void onSearchBarChanged() { final String text = searchBar.getText(); - children.values().forEach(this::remove); + pluginList.forEach(mainPanel::remove); - if (text.isEmpty()) - { - children.values().forEach(this::add); - revalidate(); - return; - } + showMatchingPlugins(true, text); + showMatchingPlugins(false, text); - FuzzySearch.findAndProcess(text, children.keySet(), (k) -> add(children.get(k))); revalidate(); } - @Override - public void onActivate() + private void showMatchingPlugins(boolean pinned, String text) { - super.onActivate(); - if (searchBar.getParent() != null) + if (text.isEmpty()) { - searchBar.requestFocusInWindow(); + pluginList.stream().filter(item -> pinned == item.isPinned()).forEach(mainPanel::add); + return; } - } - private void openConfigList() - { - removeAll(); - - JLabel title = new JLabel("Configuration", SwingConstants.LEFT); - title.setForeground(Color.WHITE); - - add(title); - add(searchBar); - - onSearchBarChanged(); - searchBar.requestFocusInWindow(); - JScrollPane scrollbar = getScrollPane(); - scrollbar.validate(); - scrollbar.getVerticalScrollBar().setValue(scrollBarPosition); - } - - private void changeConfiguration(Config config, JComponent component, ConfigDescriptor cd, ConfigItemDescriptor cid) - { - ConfigItem configItem = cid.getItem(); - - if (!Strings.isNullOrEmpty(configItem.warning())) + final String[] searchTerms = text.toLowerCase().split(" "); + pluginList.forEach(listItem -> { - final int result = JOptionPane.showOptionDialog(component, configItem.warning(), - "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, - null, new String[]{"Yes", "No"}, "No"); - - if (result != JOptionPane.YES_OPTION) + if (pinned == listItem.isPinned() && listItem.matchesSearchTerms(searchTerms)) { - openGroupConfigPanel(config, cd, configManager); - return; + mainPanel.add(listItem); } - } - - if (component instanceof JCheckBox) - { - JCheckBox checkbox = (JCheckBox) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), "" + checkbox.isSelected()); - } - - if (component instanceof JSpinner) - { - JSpinner spinner = (JSpinner) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), "" + spinner.getValue()); - } - - if (component instanceof JTextArea) - { - JTextArea textField = (JTextArea) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), textField.getText()); - } - - if (component instanceof JColorChooser) - { - JColorChooser jColorChooser = (JColorChooser) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), String.valueOf(jColorChooser.getColor().getRGB())); - } - - if (component instanceof JComboBox) - { - JComboBox jComboBox = (JComboBox) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), ((Enum) jComboBox.getSelectedItem()).name()); - } - - if (component instanceof HotkeyButton) - { - HotkeyButton hotkeyButton = (HotkeyButton) component; - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), hotkeyButton.getValue()); - } + }); } - private void openGroupConfigPanel(Config config, ConfigDescriptor cd, ConfigManager configManager) + void openGroupConfigPanel(PluginListItem listItem, Config config, ConfigDescriptor cd) { - scrollBarPosition = getScrollPane().getVerticalScrollBar().getValue(); - removeAll(); - String name = cd.getGroup().name() + " Configuration"; - JLabel title = new JLabel(name, SwingConstants.CENTER); + showingPluginList = false; + + scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); + topPanel.removeAll(); + mainPanel.removeAll(); + + final IconButton topPanelBackButton = new IconButton(BACK_ICON, BACK_ICON_HOVER); + topPanelBackButton.setPreferredSize(new Dimension(22, 0)); + topPanelBackButton.setBorder(new EmptyBorder(0, 0, 0, 5)); + topPanelBackButton.addActionListener(e -> openConfigList()); + topPanelBackButton.setToolTipText("Back"); + topPanel.add(topPanelBackButton, BorderLayout.WEST); + + topPanel.add(listItem.createToggleButton(), BorderLayout.EAST); + + String name = listItem.getName(); + JLabel title = new JLabel(name); title.setForeground(Color.WHITE); - title.setToolTipText(cd.getGroup().description()); - add(title); + title.setToolTipText("" + name + ":
" + listItem.getDescription() + ""); + topPanel.add(title); for (ConfigItemDescriptor cid : cd.getItems()) { @@ -457,6 +338,7 @@ public class ConfigPanel extends PluginPanel JPanel item = new JPanel(); item.setLayout(new BorderLayout()); + item.setMinimumSize(new Dimension(PANEL_WIDTH, 0)); name = cid.getItem().name(); JLabel configEntryName = new JLabel(name); configEntryName.setForeground(Color.WHITE); @@ -467,22 +349,22 @@ public class ConfigPanel extends PluginPanel { JCheckBox checkbox = new JCheckBox(); checkbox.setBackground(ColorScheme.LIGHT_GRAY_COLOR); - checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()))); - checkbox.addActionListener(ae -> changeConfiguration(config, checkbox, cd, cid)); + checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()))); + checkbox.addActionListener(ae -> changeConfiguration(listItem, config, checkbox, cd, cid)); item.add(checkbox, BorderLayout.EAST); } if (cid.getType() == int.class) { - int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())); + int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); SpinnerModel model = new SpinnerNumberModel(value, 0, Integer.MAX_VALUE, 1); JSpinner spinner = new JSpinner(model); Component editor = spinner.getEditor(); JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField(); spinnerTextField.setColumns(SPINNER_FIELD_WIDTH); - spinner.addChangeListener(ce -> changeConfiguration(config, spinner, cd, cid)); + spinner.addChangeListener(ce -> changeConfiguration(listItem, config, spinner, cd, cid)); item.add(spinner, BorderLayout.EAST); } @@ -493,14 +375,14 @@ public class ConfigPanel extends PluginPanel textField.setLineWrap(true); textField.setWrapStyleWord(true); textField.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - textField.setText(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())); + textField.setText(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); textField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { - changeConfiguration(config, textField, cd, cid); + changeConfiguration(listItem, config, textField, cd, cid); } }); @@ -509,7 +391,7 @@ public class ConfigPanel extends PluginPanel if (cid.getType() == Color.class) { - String existing = configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()); + String existing = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()); Color existingColor; JButton colorPicker; @@ -544,7 +426,7 @@ public class ConfigPanel extends PluginPanel @Override public void windowClosing(WindowEvent e) { - changeConfiguration(config, jColorChooser, cd, cid); + changeConfiguration(listItem, config, jColorChooser, cd, cid); } }); parent.add(jColorChooser); @@ -560,7 +442,7 @@ public class ConfigPanel extends PluginPanel JPanel dimensionPanel = new JPanel(); dimensionPanel.setLayout(new BorderLayout()); - String str = configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()); + String str = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()); String[] splitStr = str.split("x"); int width = Integer.parseInt(splitStr[0]); int height = Integer.parseInt(splitStr[1]); @@ -578,7 +460,7 @@ public class ConfigPanel extends PluginPanel heightSpinnerTextField.setColumns(4); ChangeListener listener = e -> - configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue()); + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue()); widthSpinner.addChangeListener(listener); heightSpinner.addChangeListener(listener); @@ -601,7 +483,7 @@ public class ConfigPanel extends PluginPanel box.setPrototypeDisplayValue("XXXXXXXX"); //sorry but this is the way to keep the size of the combobox in check. try { - Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())); + Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); box.setSelectedItem(selectedItem); box.setToolTipText(selectedItem.toString()); } @@ -613,7 +495,7 @@ public class ConfigPanel extends PluginPanel { if (e.getStateChange() == ItemEvent.SELECTED) { - changeConfiguration(config, box, cd, cid); + changeConfiguration(listItem, config, box, cd, cid); box.setToolTipText(box.getSelectedItem().toString()); } }); @@ -622,7 +504,7 @@ public class ConfigPanel extends PluginPanel if (cid.getType() == Keybind.class) { - Keybind startingValue = configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), Keybind.class); + Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), Keybind.class); HotkeyButton button = new HotkeyButton(startingValue); @@ -631,14 +513,14 @@ public class ConfigPanel extends PluginPanel @Override public void focusLost(FocusEvent e) { - changeConfiguration(config, button, cd, cid); + changeConfiguration(listItem, config, button, cd, cid); } }); item.add(button, BorderLayout.EAST); } - add(item); + mainPanel.add(item); } JButton resetButton = new JButton("Reset"); @@ -647,15 +529,151 @@ public class ConfigPanel extends PluginPanel configManager.setDefaultConfiguration(config, true); // Reload configuration panel - openGroupConfigPanel(config, cd, configManager); + openGroupConfigPanel(listItem, config, cd); }); - add(resetButton); + mainPanel.add(resetButton); JButton backButton = new JButton("Back"); backButton.addActionListener(e -> openConfigList()); - add(backButton); + mainPanel.add(backButton); revalidate(); - getScrollPane().getVerticalScrollBar().setValue(0); + scrollPane.getVerticalScrollBar().setValue(0); + } + + private void changeConfiguration(PluginListItem listItem, Config config, JComponent component, ConfigDescriptor cd, ConfigItemDescriptor cid) + { + final ConfigItem configItem = cid.getItem(); + + if (!Strings.isNullOrEmpty(configItem.warning())) + { + final int result = JOptionPane.showOptionDialog(component, configItem.warning(), + "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, + null, new String[]{"Yes", "No"}, "No"); + + if (result != JOptionPane.YES_OPTION) + { + openGroupConfigPanel(listItem, config, cd); + return; + } + } + + if (component instanceof JCheckBox) + { + JCheckBox checkbox = (JCheckBox) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), "" + checkbox.isSelected()); + } + else if (component instanceof JSpinner) + { + JSpinner spinner = (JSpinner) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), "" + spinner.getValue()); + } + else if (component instanceof JTextArea) + { + JTextArea textField = (JTextArea) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), textField.getText()); + } + else if (component instanceof JColorChooser) + { + JColorChooser jColorChooser = (JColorChooser) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), String.valueOf(jColorChooser.getColor().getRGB())); + } + else if (component instanceof JComboBox) + { + JComboBox jComboBox = (JComboBox) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), ((Enum) jComboBox.getSelectedItem()).name()); + } + else if (component instanceof HotkeyButton) + { + HotkeyButton hotkeyButton = (HotkeyButton) component; + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), hotkeyButton.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 COMMA_SPLITTER.splitToList(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); + } + + @Override + public void onActivate() + { + super.onActivate(); + + if (searchBar.getParent() != null) + { + searchBar.requestFocusInWindow(); + } + } + + @Override + public Dimension getPreferredSize() + { + return new Dimension(PANEL_WIDTH + SCROLLBAR_WIDTH, super.getPreferredSize().height); + } + + private class FixedWidthPanel extends JPanel + { + @Override + public Dimension getPreferredSize() + { + return new Dimension(PANEL_WIDTH, super.getPreferredSize().height); + } + } } \ 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 f61c244c97..28040909f3 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 @@ -98,6 +98,6 @@ public class ConfigPlugin extends Plugin @Subscribe public void onPluginChanged(PluginChanged event) { - SwingUtilities.invokeLater(configPanel::rebuildPluginList); + SwingUtilities.invokeLater(configPanel::refreshPluginList); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/FuzzySearch.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/FuzzySearch.java deleted file mode 100644 index 72f03e6c6e..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/FuzzySearch.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2018, Tomas Slusny - * 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.util.Collection; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import lombok.Value; -import org.apache.commons.text.similarity.JaroWinklerDistance; - -public class FuzzySearch -{ - private static final JaroWinklerDistance FUZZY_SCORE = new JaroWinklerDistance(); - private static final double STRING_OCCURRENCE_MULTIPLIER = 3d; - - /** - * Try to find a match and call callback on each match, sorted by score and filtered by average - * - * @param query query to search for - * @param entries entries to search in - * @param callback callback to call - */ - public static void findAndProcess(final String query, final Collection entries, final Consumer callback) - { - // Calculate score for each entry matching query - final Set matches = entries.stream() - .map(entry -> new FuzzyMatch( - FUZZY_SCORE.apply(query, entry) - + calculateStringOccurrenceBonus(entry, query) - * STRING_OCCURRENCE_MULTIPLIER, - entry)) - .collect(Collectors.toSet()); - - // Calculate average score of the matches to filter out the less relevant ones - final double average = matches.stream().mapToDouble(m -> m.score).average().orElse(0); - final double max = matches.stream().mapToDouble(m -> m.score).max().orElse(0); - final double limit = Math.min(average * 1.7, max); - - matches.stream() - .filter(m -> m.score >= limit) - .sorted((left, right) -> Double.compare(right.score, left.score)) - .map(m -> m.value) - .forEach(callback); - } - - /** - * Calculates string occurrence bonus of query in the entry string - * @param entry entry string - * @param query query string - * @return string occurrence bonus - */ - private static double calculateStringOccurrenceBonus(final String entry, final String query) - { - // Exit early, no occurrence bonus for too long query - if (query.length() > entry.length()) - { - return 0; - } - - // Create relaxed variants of the input (e.g lower cased ones) - final String relaxedEntry = entry.toLowerCase(); - final String relaxedQuery = query.toLowerCase(); - - // Create base bonus - final double base = 1d / 6d; - - if (entry.equals(query)) - { - return base * 6d; - } - if (entry.equals(relaxedQuery) || relaxedQuery.equals(entry)) - { - return base * 5d; - } - if (relaxedEntry.equals(relaxedQuery)) - { - return base * 4d; - } - if (entry.contains(query)) - { - return base * 3d; - } - if (entry.contains(relaxedQuery) || relaxedEntry.contains(query)) - { - return base * 2d; - } - if (relaxedEntry.contains(relaxedQuery)) - { - return base; - } - - return 0; - } - - @Value - private static class FuzzyMatch - { - /** - * Score of the match - */ - double score; - - /** - * Match value - */ - String value; - } -} 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 new file mode 100644 index 0000000000..0514795de1 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2018, Daniel Teo + * 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.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import lombok.Getter; +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigDescriptor; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.ui.PluginPanel; +import net.runelite.client.ui.components.IconButton; +import net.runelite.client.util.SwingUtil; +import org.apache.commons.text.similarity.JaroWinklerDistance; + +class PluginListItem extends JPanel +{ + private static final JaroWinklerDistance DISTANCE = new JaroWinklerDistance(); + + private static final ImageIcon CONFIG_ICON; + private static final ImageIcon CONFIG_ICON_HOVER; + private static final ImageIcon ON_SWITCHER; + private static final ImageIcon OFF_SWITCHER; + private static final ImageIcon ON_STAR; + private static final ImageIcon OFF_STAR; + + private final ConfigPanel configPanel; + + @Getter + @Nullable + private final Plugin plugin; + + @Getter + private final String name; + + @Getter + private final String description; + + 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); + + private boolean isPluginEnabled = false; + + @Getter + private boolean isPinned = false; + + static + { + try + { + BufferedImage configIcon; + + synchronized (ImageIO.class) + { + configIcon = ImageIO.read(ConfigPanel.class.getResourceAsStream("config_edit_icon.png")); + CONFIG_ICON = new ImageIcon(configIcon); + ON_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/on.png"))); + OFF_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/off.png"))); + ON_STAR = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("stars/on.png"))); + OFF_STAR = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("stars/off.png"))); + } + + CONFIG_ICON_HOVER = new ImageIcon(SwingUtil.grayscaleOffset(configIcon, -100)); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * 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, Plugin plugin, PluginDescriptor descriptor, + @Nullable Config config, @Nullable ConfigDescriptor configDescriptor) + { + this(configPanel, plugin, config, configDescriptor, + descriptor.name(), descriptor.description(), descriptor.tags()); + } + + /** + * Creates a new {@code PluginListItem} for a core configuration. + */ + PluginListItem(ConfigPanel configPanel, Config config, ConfigDescriptor configDescriptor, + String name, String description, String... tags) + { + this(configPanel, null, config, configDescriptor, name, description, tags); + } + + private PluginListItem(ConfigPanel configPanel, @Nullable Plugin plugin, @Nullable Config config, + @Nullable ConfigDescriptor configDescriptor, String name, String description, String... tags) + { + this.configPanel = configPanel; + this.plugin = plugin; + this.name = name; + this.description = description; + Collections.addAll(keywords, name.toLowerCase().split(" ")); + Collections.addAll(keywords, tags); + + setLayout(new BorderLayout(3, 0)); + setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH, 20)); + + JLabel nameLabel = new JLabel(name); + nameLabel.setForeground(Color.WHITE); + + if (!description.isEmpty()) + { + nameLabel.setToolTipText("" + name + ":
" + description + ""); + } + + add(nameLabel, BorderLayout.CENTER); + + pinButton.setPreferredSize(new Dimension(21, 0)); + add(pinButton, BorderLayout.LINE_START); + + pinButton.addActionListener(e -> + { + setPinned(!isPinned); + configPanel.savePinnedPlugins(); + configPanel.openConfigList(); + }); + + 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 (config != null && !configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden())) + { + configButton.addActionListener(e -> + { + configButton.setIcon(CONFIG_ICON); + configPanel.openGroupConfigPanel(PluginListItem.this, config, configDescriptor); + }); + + configButton.setVisible(true); + configButton.setToolTipText("Edit plugin configuration"); + } + + toggleButton.setPreferredSize(new Dimension(25, 0)); + attachToggleButtonListener(toggleButton); + buttonPanel.add(toggleButton); + } + + private void attachToggleButtonListener(IconButton button) + { + // no need for a listener if there is no plugin to enable / disable + if (plugin == null) + { + button.setVisible(false); + return; + } + + button.addActionListener(e -> + { + if (isPluginEnabled) + { + configPanel.stopPlugin(plugin, PluginListItem.this); + } + else + { + configPanel.startPlugin(plugin, PluginListItem.this); + } + + setPluginEnabled(!isPluginEnabled); + updateToggleButton(button); + }); + } + + IconButton createToggleButton() + { + IconButton button = new IconButton(OFF_SWITCHER); + button.setPreferredSize(new Dimension(25, 0)); + updateToggleButton(button); + attachToggleButtonListener(button); + return button; + } + + void setPluginEnabled(boolean enabled) + { + isPluginEnabled = enabled; + updateToggleButton(toggleButton); + } + + void setPinned(boolean pinned) + { + isPinned = pinned; + pinButton.setIcon(pinned ? ON_STAR : OFF_STAR); + pinButton.setToolTipText(pinned ? "Unpin plugin" : "Pin plugin"); + } + + private void updateToggleButton(IconButton button) + { + button.setIcon(isPluginEnabled ? ON_SWITCHER : OFF_SWITCHER); + button.setToolTipText(isPluginEnabled ? "Disable plugin" : "Enable plugin"); + } + + /** + * Checks if all the search terms in the given list matches at least one keyword. + * @return true if all search terms matches at least one keyword, or false if otherwise. + */ + boolean matchesSearchTerms(String[] searchTerms) + { + for (String term : searchTerms) + { + if (keywords.stream().noneMatch((t) -> t.contains(term) || + DISTANCE.apply(t, term) > 0.9)) + { + return false; + } + } + return true; + } +} 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 91cca066ba..2dd3c069f9 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 @@ -51,7 +51,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Corporeal Beast" + name = "Corporeal Beast", + description = "Show damage statistics and highlight dark energy cores", + tags = {"bosses", "combat", "pve", "overlay"} ) 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 2aa8e58538..f8a4b2a667 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 @@ -44,6 +44,8 @@ import okhttp3.Response; @PluginDescriptor( name = "Crystal Math Labs", + description = "Automatically updates your stats on Crystal Math Labs when you log out", + tags = {"cml", "external", "integration"}, enabledByDefault = false ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java index d06df94c9e..9dc1aee151 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "dailytaskindicators", - name = "Daily Task Indicators", - description = "Configuration for Daily Task Indicators plugin" -) +@ConfigGroup("dailytaskindicators") public interface DailyTasksConfig extends Config { @ConfigItem( 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 914f7e0bd6..460696482d 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 @@ -46,6 +46,7 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Daily Task Indicator", + description = "Show chat notifications for daily tasks upon login", enabledByDefault = false ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorConfig.java index eae1cea01d..e35b7cc93f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "deathIndicator", - name = "Death Indicator", - description = "Configuration for the death indicator plugin" -) +@ConfigGroup("deathIndicator") public interface DeathIndicatorConfig extends Config { @ConfigItem( 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 1944ca3d9b..a739568db1 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 @@ -53,7 +53,9 @@ import net.runelite.client.ui.overlay.infobox.Timer; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; @PluginDescriptor( - name = "Death Indicator" + name = "Death Indicator", + description = "Show where you last died, and on what world", + tags = {"arrow", "hints", "world", "map", "overlay"} ) @Slf4j public class DeathIndicatorPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java index 5e6b787001..480d4c891d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "defaultworld", - name = "Default World", - description = "Sets the default world and remembers it" -) +@ConfigGroup("defaultworld") public interface DefaultWorldConfig extends Config { @ConfigItem( 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 58f1170b1d..078444bb16 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 @@ -42,7 +42,10 @@ import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldClient; import net.runelite.http.api.worlds.WorldResult; -@PluginDescriptor(name = "Default World") +@PluginDescriptor( + name = "Default World", + description = "Enable a default world to be selected when launching the client" +) @Slf4j public class DefaultWorldPlugin extends Plugin { 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 2563fb28f0..9947b5c2be 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,7 +61,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Demonic Gorillas" + name = "Demonic Gorillas", + description = "Count demonic gorilla attacks and display their next possible attack styles", + tags = {"combat", "overlay"} ) @Slf4j public class DemonicGorillaPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsConfig.java index e65d86586e..a08edfd26c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsConfig.java @@ -27,11 +27,7 @@ package net.runelite.client.plugins.devtools; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "devtools", - name = "Dev Tools", - description = "Configuration for developer tools" -) +@ConfigGroup("devtools") public interface DevToolsConfig { @ConfigItem( 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 2ca4c940ac..78dfea5a02 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 @@ -55,6 +55,7 @@ import org.slf4j.LoggerFactory; @PluginDescriptor( name = "Developer Tools", + tags = {"panel"}, developerPlugin = true ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java index 44aba43b4d..fd992b7d77 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "discord", - name = "Discord", - description = "Configuration for Discord plugin" -) +@ConfigGroup("discord") public interface DiscordConfig extends Config { @ConfigItem( 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 defce8acb8..c542c76191 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 @@ -48,7 +48,9 @@ import net.runelite.client.ui.TitleToolbar; import net.runelite.client.util.LinkBrowser; @PluginDescriptor( - name = "Discord" + name = "Discord", + description = "Show your status and activity in the Discord user panel", + tags = {"action", "activity", "external", "integration", "status"} ) public class DiscordPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java index e34f83364d..caca619791 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "entityhider", - name = "Entity Hider", - description = "Hides various entities such as players and NPCs" -) +@ConfigGroup("entityhider") public interface EntityHiderConfig extends Config { @ConfigItem( 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 be96f494af..c7b99a2cf4 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 @@ -36,6 +36,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Entity Hider", + description = "Hide players, NPCs, and/or projectiles", + tags = {"npcs", "players", "projectiles"}, enabledByDefault = false ) 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 d8cd6205dd..a28926a2be 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 @@ -61,7 +61,9 @@ import net.runelite.http.api.item.ItemPrice; * @author Adam */ @PluginDescriptor( - name = "Examine" + name = "Examine", + description = "Send examine information to the API", + tags = {"npcs", "items", "inventory", "objects"} ) @Slf4j public class ExaminePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java index f49eb7c872..7477f285c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "xpdrop", - name = "XP Drop", - description = "Configuration for XP drop customization" -) +@ConfigGroup("xpdrop") public interface XpDropConfig extends Config { @ConfigItem( 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 f81b6279d1..b7a3ad197c 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 @@ -41,7 +41,9 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "XP Drop" + name = "XP Drop", + description = "Enable customization of the way XP drops are displayed", + tags = {"experience", "levels"} ) 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 56b7ecd20f..9c23437522 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 @@ -39,7 +39,9 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Fairy Ring Helper" + name = "Fairy Ring Helper", + description = "Show the location of the fairy ring teleport", + tags = {"teleportation"} ) public class FairyRingPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerConfig.java index b0eb9a04c0..30653b5aa9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "farmingTracker", - name = "Farming Tracker", - description = "Configuration for the farming tracker" -) +@ConfigGroup("farmingTracker") public interface FarmingTrackerConfig extends Config { String KEY_NAME = "farmingTracker"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPlugin.java index c9fc8e21b9..3bbb6f8bc6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPlugin.java @@ -48,7 +48,9 @@ import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; @PluginDescriptor( - name = "Farming Tracker" + name = "Farming Tracker", + description = "Show when your farming plots would be fully grown", + tags = {"skilling", "panel", "timers"} ) @Slf4j public class FarmingTrackerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedConfig.java index 936a632a88..74ed8cf97c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedConfig.java @@ -4,11 +4,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "feed", - name = "News Feed", - description = "Displays client and game-related news" -) +@ConfigGroup("feed") public interface FeedConfig extends Config { @ConfigItem( 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 317cfa8e88..2b4d29ffc8 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 @@ -48,6 +48,8 @@ import net.runelite.http.api.feed.FeedResult; @PluginDescriptor( name = "News Feed", + description = "Show the latest RuneLite blog posts, OSRS news, and JMod Twitter posts", + tags = {"external", "integration", "panel", "twitter"}, loadWhenOutdated = true ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java index ee0e743ed5..8d00090672 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java @@ -39,7 +39,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Fight Cave" + name = "Fight Cave", + description = "Show what to pray against Jad", + tags = {"bosses", "combat", "minigame", "overlay", "prayer", "pve"} ) public class FightCavePlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java index 75f4f05906..8f1871a8a3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "fishing", - name = "Fishing", - description = "Configuration for the fishing plugin" -) +@ConfigGroup("fishing") public interface FishingConfig extends Config { @ConfigItem( 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 83782ad881..e5a7fb50b6 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 @@ -53,7 +53,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.QueryRunner; @PluginDescriptor( - name = "Fishing" + name = "Fishing", + description = "Show fishing stats and mark fishing spots", + tags = {"overlay", "skilling"} ) @PluginDependency(XpTrackerPlugin.class) @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java index 114c005fd7..73e7f3f8c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = FpsPlugin.CONFIG_GROUP_KEY, - name = "FPS Control", - description = "Lets you control what your game frame rate is, often helps keep CPU down too" -) +@ConfigGroup(FpsPlugin.CONFIG_GROUP_KEY) public interface FpsConfig extends Config { @ConfigItem( 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 9428b0e4a0..a218d51e4a 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 @@ -47,6 +47,8 @@ import net.runelite.client.ui.overlay.OverlayManager; */ @PluginDescriptor( name = "FPS Control", + description = "Show current FPS and/or set an FPS limit", + tags = {"frames", "framerate", "limit", "overlay"}, enabledByDefault = false ) public class FpsPlugin 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 4a979d2c75..31475f882c 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 @@ -52,7 +52,10 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Text; @Slf4j -@PluginDescriptor(name = "Friend Notes") +@PluginDescriptor( + name = "Friend Notes", + description = "Store notes about your friends" +) public class FriendNotesPlugin extends Plugin { private static final String CONFIG_GROUP = "friendNotes"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java index 951ffa461e..0c2638b67a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "grandexchange", - name = "Grand Exchange", - description = "Configuration for the Grand Exchange" -) +@ConfigGroup("grandexchange") public interface GrandExchangeConfig extends Config { @ConfigItem( 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 182e8e81a7..44b5f783bc 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 @@ -71,7 +71,9 @@ import net.runelite.http.api.osbuddy.GrandExchangeClient; import net.runelite.http.api.osbuddy.GrandExchangeResult; @PluginDescriptor( - name = "Grand Exchange" + name = "Grand Exchange", + description = "Provide additional and/or easier access to Grand Exchange information", + tags = {"external", "integration", "notifications", "panel", "prices", "trade"} ) @Slf4j public class GrandExchangePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index 0aa8d1471e..2065d50c36 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -33,11 +33,7 @@ import net.runelite.client.plugins.grounditems.config.ItemHighlightMode; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; -@ConfigGroup( - keyName = "grounditems", - name = "Ground Items", - description = "Configuration for the ground items plugin" -) +@ConfigGroup("grounditems") public interface GroundItemsConfig extends Config { @ConfigItem( 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 9e875d39d1..67b38a0756 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 @@ -85,7 +85,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.http.api.item.ItemPrice; @PluginDescriptor( - name = "Ground Items" + name = "Ground Items", + description = "Highlight ground items and/or show price information", + tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"} ) @Slf4j public class GroundItemsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerConfig.java index 468dc20372..b42b6e5857 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerConfig.java @@ -32,11 +32,7 @@ import net.runelite.client.config.ConfigItem; import java.awt.Color; -@ConfigGroup( - keyName = "groundMarker", - name = "Ground Marker", - description = "Mark ground tiles" -) +@ConfigGroup("groundMarker") public interface GroundMarkerConfig extends Config { @ConfigItem( 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 090420bee1..592547607c 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 @@ -60,7 +60,9 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( - name = "Ground Markers" + name = "Ground Markers", + description = "Enable marking of tiles using the Shift key", + tags = {"overlay", "tiles"} ) public class GroundMarkerPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarConfig.java index c1a7191f3e..15b27bf79f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "herbiboar", - name = "Herbiboar", - description = "Configuration for the herbiboar plugin" -) +@ConfigGroup("herbiboar") public interface HerbiboarConfig extends Config { @ConfigItem( 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 ad94be4af4..337d2c6348 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 @@ -61,7 +61,9 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( - name = "Herbiboar" + name = "Herbiboar", + description = "Highlight starting rocks, trails, and the objects to search at the end of each trail", + tags = {"herblore", "hunter", "skilling", "overlay"} ) public class HerbiboarPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java index 8c300289b9..89d9632850 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "hiscore", - name = "HiScore", - description = "Configuration for the hiscore plugin" -) +@ConfigGroup("hiscore") public interface HiscoreConfig extends Config { @ConfigItem( 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 17217bd68c..f51787ca20 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 @@ -53,6 +53,8 @@ import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "HiScore", + description = "Enable the HiScore panel and an optional Lookup option on players", + tags = {"panel", "players"}, loadWhenOutdated = true ) public class HiscorePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterConfig.java index 91d7f94f8c..87df9baadd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "hunterplugin", - name = "Hunter", - description = "Configuration for the hunter plugin" -) +@ConfigGroup("hunterplugin") public interface HunterConfig extends Config { @ConfigItem( 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 a863e6d64b..b82d8e40e8 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 @@ -52,7 +52,9 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( - name = "Hunter" + name = "Hunter", + description = "Show the state of your traps", + tags = {"overlay", "skilling", "timers"} ) public class HunterPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierConfig.java index cf877eb45d..2cc9b17989 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "idlenotifier", - name = "Idle Notifier", - description = "Configuration for the idle notifier plugin" -) +@ConfigGroup("idlenotifier") public interface IdleNotifierConfig extends Config { @ConfigItem( 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 a62934b2e9..16aae22cff 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 @@ -46,7 +46,9 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Idle Notifier" + name = "Idle Notifier", + description = "Send a notification when going idle, or when HP/Prayer reaches a threshold", + tags = {"health", "hitpoints", "notifications", "prayer"} ) public class IdleNotifierPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java index c4f2b46f03..ecb513127a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java @@ -33,11 +33,7 @@ import net.runelite.client.config.ConfigItem; * * @author robin */ -@ConfigGroup( - keyName = "implings", - name = "Implings", - description = "Configuration for the implings plugin" -) +@ConfigGroup("implings") public interface ImplingsConfig extends Config { @ConfigItem( 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 42766db2b2..01e0e8d9b1 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 @@ -46,7 +46,9 @@ import net.runelite.client.ui.overlay.OverlayManager; * @author robin */ @PluginDescriptor( - name = "Implings" + name = "Implings", + description = "Highlight nearby implings on the minimap and on-screen", + tags = {"hunter", "minimap", "overlay"} ) 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 4da0f1d8ad..f7734b96a4 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 @@ -34,6 +34,7 @@ import net.runelite.client.ui.PluginToolbar; @PluginDescriptor( name = "Info Panel", + description = "Enable the Info panel", loadWhenOutdated = true ) 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 266ed52f54..1b85a143ff 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 @@ -40,7 +40,8 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Instance Map" + name = "Instance Map", + description = "Add an instanced map, accessible by right-clicking the map button" ) public class InstanceMapPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java index 8258c2ffa3..e86fe0d2bb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java @@ -30,11 +30,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "interfaceStyles", - name = "Interface Styles", - description = "Configuration for the Interface Styles plugin" -) +@ConfigGroup("interfaceStyles") public interface InterfaceStylesConfig extends Config { @ConfigItem( 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 3a610c6b62..fad212186a 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 @@ -53,6 +53,8 @@ import net.runelite.client.plugins.PluginDescriptor; @Slf4j @PluginDescriptor( name = "Interface Styles", + description = "Change the interface style to the 2005/2010 interface", + tags = {"2005", "2010"}, enabledByDefault = false ) public class InterfaceStylesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsConfig.java index aa436769eb..12cff9fcec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "inventorytags", - name = "Inventory Tags", - description = "Configuration for the Inventory Item Tagging plugin" -) +@ConfigGroup("inventorytags") public interface InventoryTagsConfig extends Config { String GROUP = "inventorytags"; 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 cf89ff6129..e9e3363799 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 @@ -52,6 +52,8 @@ import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Inventory Tags", + description = "Add the ability to tag items in your inventory", + tags = {"highlight", "items", "overlay", "tagging"}, enabledByDefault = false ) 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 1346d44765..92fe518ce0 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 @@ -31,6 +31,8 @@ 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 ) public class InventoryViewerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index e02ac1d3ac..794f24437e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "itemCharge", - name = "Item Charges", - description = "Configuration for the Item Charges plugin" -) +@ConfigGroup("itemCharge") public interface ItemChargeConfig extends Config { @ConfigItem( 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 166e418ff9..37334abc3b 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 @@ -40,7 +40,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Item Charges" + name = "Item Charges", + description = "Show number of item charges remaining", + tags = {"inventory", "notifications", "overlay"} ) public class ItemChargePlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesConfig.java index 36b8ffa0aa..ed69408341 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "itemprices", - name = "Item Prices", - description = "Configuration for the Item Prices plugin" -) +@ConfigGroup("itemprices") public interface ItemPricesConfig extends Config { @ConfigItem( 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 a166b4df66..576c28a737 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 @@ -33,6 +33,8 @@ 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"}, enabledByDefault = false ) public class ItemPricesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java index 7eec4c8a96..ec9d083044 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "itemstat", - name = "Item Stats", - description = "Show stat changes on items" -) +@ConfigGroup("itemstat") public interface ItemStatConfig extends Config { @ConfigItem( 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 1572842e9b..e00bf2b931 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 @@ -32,7 +32,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Item Stats" + name = "Item Stats", + description = "Show information about food and potion effects", + tags = {"food", "inventory", "overlay", "potion"} ) public class ItemStatPlugin 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 3c4d80e92d..9da8c27813 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 @@ -42,6 +42,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Kingdom of Miscellania", + description = "Show amount of favor when inside Miscellania", + tags = {"favor", "favour", "managing", "overlay"}, enabledByDefault = false ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java index af62e65223..e95389f50b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "kourendLibrary", - name = "Kourend Library", - description = "Configuration for the KourendLibrary plugin" -) +@ConfigGroup("kourendLibrary") public interface KourendLibraryConfig extends Config { String GROUP_KEY = "kourendLibrary"; 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 8224ad1b9b..c3e77b4641 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 @@ -55,7 +55,9 @@ import net.runelite.client.ui.PluginToolbar; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Kourend Library" + name = "Kourend Library", + description = "Show where the books are found in the Kourend Library", + tags = {"arceuus", "magic", "runecrafting", "overlay", "panel"} ) @Slf4j public class KourendLibraryPlugin extends Plugin 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 f6da263a0a..a5907541f3 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 @@ -34,6 +34,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Low Detail", + description = "Turn off ground decorations and certain textures, reducing memory usage", + tags = {"memory", "usage", "ground", "decorations"}, enabledByDefault = false ) public class LowMemoryPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 349c4a959f..b3920385e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "menuentryswapper", - name = "Menu Entry Swapper", - description = "Swap menu entry options" -) +@ConfigGroup("menuentryswapper") public interface MenuEntrySwapperConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index b8d7537da7..d20226a543 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -57,6 +57,8 @@ import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Menu Entry Swapper", + description = "Change the default option that is displayed when hovering over objects", + tags = {"npcs", "inventory", "items", "objects"}, enabledByDefault = false ) public class MenuEntrySwapperPlugin extends Plugin 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 f1216a1aef..239149d41d 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 @@ -37,6 +37,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Metronome", + description = "Play a sound on a specified tick to aid in efficient skilling", + tags = {"skilling", "tick", "timers"}, enabledByDefault = false ) public class MetronomePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePluginConfiguration.java b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePluginConfiguration.java index bd1d047880..cb2ff60889 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePluginConfiguration.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePluginConfiguration.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "metronome", - name = "Metronome", - description = "Plays a sound on the specified tick to aid in efficient skilling" -) +@ConfigGroup("metronome") public interface MetronomePluginConfiguration extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java index d1e2afa7ae..c771854645 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java @@ -29,10 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "minimap", - name = "Minimap", - description = "Configuration for the minimap") +@ConfigGroup("minimap") public interface MinimapConfig extends Config { @ConfigItem( 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 54adc239d5..7c017ab713 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 @@ -42,7 +42,9 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Minimap" + name = "Minimap", + description = "Customize the color of minimap dots", + tags = {"items", "npcs", "players"} ) public class MinimapPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeConfig.java index b7861b1f3f..e71afa5076 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "motherlode", - name = "Motherlode Mine", - description = "Configuration for the Motherlode Mine plugin" -) +@ConfigGroup("motherlode") public interface MotherlodeConfig extends Config { @ConfigItem( 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 6a1b7c6fb0..2943fbb6fd 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 @@ -74,6 +74,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Motherlode Mine", + description = "Show helpful information inside the Motherload Mine", + tags = {"pay", "dirt", "mining", "mlm", "skilling", "overlay"}, enabledByDefault = false ) public class MotherlodePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightConfig.java index a5f2e6d868..1c23e334cd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "mousehighlight", - name = "Mouse Tooltips", - description = "Configures the Mouse Tooltips plugin" -) +@ConfigGroup("mousehighlight") public interface MouseHighlightConfig extends Config { @ConfigItem( 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 d2f86ef48c..8881b92d93 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 @@ -32,7 +32,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Mouse Tooltips" + name = "Mouse Tooltips", + description = "Render default actions as a tooltip", + tags = {"actions", "overlay"} ) public class MouseHighlightPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAConfig.java index d5e356d579..25940d2ef5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "mta", - name = "Mage Training Arena", - description = "Configuration for the Mage Training Arena plugin" -) +@ConfigGroup("mta") public interface MTAConfig extends Config { @ConfigItem( 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 3e6ec44818..ad93152fcf 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 @@ -39,7 +39,11 @@ import net.runelite.client.plugins.mta.graveyard.GraveyardRoom; import net.runelite.client.plugins.mta.telekinetic.TelekineticRoom; import net.runelite.client.ui.overlay.OverlayManager; -@PluginDescriptor(name = "Mage Training Arena") +@PluginDescriptor( + name = "Mage Training Arena", + description = "Show helpful information for the Mage Training Arena minigame", + tags = {"mta", "magic", "minigame", "overlay"} +) public class MTAPlugin extends Plugin { @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneConfig.java index 99349971d7..d3c505bd30 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "nightmareZone", - name = "Nightmare Zone", - description = "Configuration for the nightmare zone plugin" -) +@ConfigGroup("nightmareZone") public interface NightmareZoneConfig extends Config { @ConfigItem( 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 7c58f16d95..ddbad3ec38 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 @@ -42,7 +42,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Nightmare Zone" + name = "Nightmare Zone", + description = "Show NMZ points/absorption and/or notify about expiring potions", + tags = {"combat", "nmz", "minigame", "notifications"} ) public class NightmareZonePlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesConfig.java index b82cc1ff5d..d8834bed5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "notes", - name = "Notes", - description = "Configuration for the Notes plugin" -) +@ConfigGroup("notes") public interface NotesConfig extends Config { @ConfigItem( 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 70403bbc96..6fa5131443 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 @@ -39,6 +39,8 @@ import net.runelite.client.ui.PluginToolbar; @PluginDescriptor( name = "Notes", + description = "Enable the Notes panel", + tags = {"panel"}, loadWhenOutdated = true ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java index a5fc0c332a..3e6b298cbb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "npcindicators", - name = "NPC Indicators", - description = "Configuration for the NPC indicators plugin" -) +@ConfigGroup("npcindicators") public interface NpcIndicatorsConfig extends Config { @ConfigItem( 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 3e9b92557b..b11fd9ce4f 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 @@ -65,7 +65,11 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.WildcardMatcher; -@PluginDescriptor(name = "NPC Indicators") +@PluginDescriptor( + name = "NPC Indicators", + description = "Highlight NPCs on-screen and/or on the minimap", + tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"} +) public class NpcIndicatorsPlugin extends Plugin { private static final int MAX_ACTOR_VIEW_RANGE = 15; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java index 929fbed33f..36ec066b31 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "opponentinfo", - name = "Opponent Info", - description = "Configuration for the Opponent info plugin" -) +@ConfigGroup("opponentinfo") public interface OpponentInfoConfig extends Config { @ConfigItem( 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 309f96c2cb..b94541b4c7 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 @@ -53,7 +53,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.http.api.hiscore.HiscoreEndpoint; @PluginDescriptor( - name = "Opponent Information" + name = "Opponent Information", + description = "Show name and hitpoints information about the NPC you are fighting", + tags = {"combat", "health", "hitpoints", "npcs", "overlay"} ) public class OpponentInfoPlugin extends Plugin { 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 f8ff927da0..0d0eee54b1 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 @@ -30,7 +30,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Pest Control" + name = "Pest Control", + description = "Show helpful information for the Pest Control minigame", + tags = {"minigame", "overlay"} ) public class PestControlPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java index 0b46a97895..c40d4a9020 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "playerindicators", - name = "Player Indicators", - description = "Configuration for the player indicators plugin" -) +@ConfigGroup("playerindicators") public interface PlayerIndicatorsConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index 60bc8eb93e..e9ed2a99c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -42,7 +42,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Player Indicators" + name = "Player Indicators", + description = "Highlight players on-screen and/or on the minimap", + tags = {"highlight", "minimap", "overlay", "players"} ) public class PlayerIndicatorsPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohConfig.java index 81f8590e93..f9780fa677 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "poh", - name = "Player-owned House", - description = "Configuration for the POH plugin" -) +@ConfigGroup("poh") public interface PohConfig extends Config { @ConfigItem( 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 ad8a3f17af..4149c82f35 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 @@ -56,7 +56,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Player-owned House" + name = "Player-owned House", + description = "Show minimap icons and mark unlit/lit burners", + tags = {"construction", "poh", "minimap", "overlay"} ) public class PohPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java index 47a83d7b13..ad0b8b056a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "prayer", - name = "Prayer", - description = "Various tools related to prayer" -) +@ConfigGroup("prayer") public interface PrayerConfig extends Config { @ConfigItem( 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 44eab5c7d0..8abaf47610 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 @@ -44,7 +44,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Prayer" + name = "Prayer", + description = "Show various information related to prayer", + tags = {"combat", "flicking", "overlay"} ) public class PrayerPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java index 902afd0d3d..eee4a3ab63 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "puzzlesolver", - name = "Puzzle Solver", - description = "Shows you where to press to solve puzzle boxes" -) +@ConfigGroup("puzzlesolver") public interface PuzzleSolverConfig extends Config { @ConfigItem( 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 0484ce6c37..9dda36c2b9 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 @@ -56,7 +56,9 @@ import net.runelite.client.plugins.puzzlesolver.lightbox.LightboxState; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Puzzle Solver" + name = "Puzzle Solver", + description = "Show you where to click to solve puzzle boxes", + tags = {"clues", "scrolls", "overlay"} ) @Slf4j public class PuzzleSolverPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java index 9e18494dcf..bbc0b55ae7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "raids", - name = "Chambers Of Xeric", - description = "Configuration for the raids plugin" -) +@ConfigGroup("raids") public interface RaidsConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index f0908a721d..46f04e3759 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -70,7 +70,9 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Chambers Of Xeric" + name = "Chambers Of Xeric", + description = "Show helpful information for the Chambers of Xeric raid", + tags = {"combat", "raid", "overlay"} ) @Slf4j public class RaidsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterConfig.java index da1dd73d3f..b3b4dd546c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "regenmeter", - name = "Regeneration Meter", - description = "Configuration for the data orb regeneration meters" -) +@ConfigGroup("regenmeter") public interface RegenMeterConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java index 52df8e2400..e0f3be5d4d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java @@ -43,7 +43,11 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; -@PluginDescriptor(name = "Regeneration Meter") +@PluginDescriptor( + name = "Regeneration Meter", + description = "Track and show the hitpoints and special attack regeneration timers", + tags = {"combat", "health", "hitpoints", "special", "attack", "overlay"} +) public class RegenMeterPlugin extends Plugin { private static final int SPEC_REGEN_TICKS = 50; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersConfig.java index 807955f104..7a73dae268 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = ReorderPrayersPlugin.CONFIG_GROUP_KEY, - name = "Reorder Prayers", - description = "Configuration for the data orb regeneration meters" -) +@ConfigGroup(ReorderPrayersPlugin.CONFIG_GROUP_KEY) public interface ReorderPrayersConfig extends Config { 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 8d7690579a..3c84a69d5d 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 @@ -55,7 +55,10 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @Slf4j -@PluginDescriptor(name = "Reorder Prayers") +@PluginDescriptor( + name = "Reorder Prayers", + description = "Reorder the prayers displayed on the Prayer panel" +) public class ReorderPrayersPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonConfig.java index a12b3faba7..7848b20a7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "reportButton", - name = "Report Button", - description = "Configuration for report button" -) +@ConfigGroup("reportButton") public interface ReportButtonConfig extends Config { @ConfigItem( 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 215b977b9f..98b848a63e 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 @@ -47,7 +47,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; @PluginDescriptor( - name = "Report Button" + name = "Report Button", + description = "Replace the text on the Report button with the current time", + tags = {"time", "utc"} ) @Slf4j 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 bf6d8401e2..81b2c1b7f2 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,7 +52,9 @@ import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Rogues' Den" + name = "Rogues' Den", + description = "Mark tiles and clickboxes to help traverse the maze", + tags = {"agility", "maze", "minigame", "overlay", "thieving"} ) @Slf4j public class RoguesDenPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java index 4838e30b63..ef1733cb54 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "runecraft", - name = "Runecraft", - description = "Configuration for the runecrafting plugin" -) +@ConfigGroup("runecraft") public interface RunecraftConfig extends Config { @ConfigItem( 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 afd3e9055d..d51c7e1a25 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 @@ -61,7 +61,9 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.QueryRunner; @PluginDescriptor( - name = "Runecraft" + name = "Runecraft", + description = "Show minimap icons and clickboxes for abyssal rifts", + tags = {"abyssal", "minimap", "overlay", "rifts", "rc", "runecrafting"} ) public class RunecraftPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchConfig.java index 663dd9d94a..4ca92fc4b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchConfig.java @@ -30,11 +30,7 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; import net.runelite.client.plugins.runepouch.config.RunePouchOverlayMode; -@ConfigGroup( - keyName = "runepouch", - name = "Rune Pouch", - description = "Configuration for the Runepouch plugin" -) +@ConfigGroup("runepouch") public interface RunepouchConfig extends Config { @ConfigItem( 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 537e0a5a1d..031f0900e1 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 @@ -32,7 +32,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Rune Pouch" + name = "Rune Pouch", + description = "Show the contents of your rune pouch", + tags = {"combat", "magic", "overlay"} ) 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 963eeb6548..2242f6ce28 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 @@ -55,7 +55,9 @@ import net.runelite.client.ui.PluginToolbar; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Screen Markers" + name = "Screen Markers", + description = "Enable drawing of screen markers on top of the client", + tags = {"boxes", "overlay", "panel"} ) @Slf4j public class ScreenMarkerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java index ea1b5a842f..b8f6901f1e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; import net.runelite.client.config.Keybind; -@ConfigGroup( - keyName = "screenshot", - name = "Screenshot", - description = "Configuration for the Screenshot plugin" -) +@ConfigGroup("screenshot") public interface ScreenshotConfig extends Config { @ConfigItem( 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 36e994d0cc..53146ec599 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 @@ -94,7 +94,9 @@ import okhttp3.RequestBody; import okhttp3.Response; @PluginDescriptor( - name = "Screenshot" + name = "Screenshot", + description = "Enable the manual and automatic taking of screenshots", + tags = {"external", "images", "imgur", "integration", "notifications"} ) @Slf4j public class ScreenshotPlugin extends Plugin 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 90a70bac1c..3bf4240cdb 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 @@ -38,7 +38,11 @@ import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; -@PluginDescriptor(name = "Skill Calculator") +@PluginDescriptor( + name = "Skill Calculator", + description = "Enable the Skill Calculator panel", + tags = {"panel", "skilling"} +) public class SkillCalculatorPlugin extends Plugin { @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java index 30b3b68532..c3dd2dd752 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java @@ -30,11 +30,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "slayer", - name = "Slayer", - description = "Configuration for the slayer plugin" -) +@ConfigGroup("slayer") public interface SlayerConfig extends Config { @ConfigItem( 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 031b25ba2c..62088c3e4a 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 @@ -67,7 +67,9 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Slayer" + name = "Slayer", + description = "Show additional slayer task related information", + tags = {"combat", "notifications", "overlay", "tasks"} ) @Slf4j public class SlayerPlugin extends Plugin 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 bacb8a9098..b41dc9fc3f 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 @@ -48,6 +48,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Special Attack Counter", + description = "Track DWH, Arclight, Darklight, and BGS special attacks used on NPCs", + tags = {"combat", "npcs", "overlay"}, enabledByDefault = false ) public class SpecialCounterPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java index 00cd9d48b2..691e5c2eab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModeConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "stretchedfixedmode", - name = "Stretched Fixed Mode", - description = "Resizes the game while in fixed mode" -) +@ConfigGroup("stretchedfixedmode") public interface StretchedFixedModeConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java index f06b9957f2..1e34c6c2df 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedfixedmode/StretchedFixedModePlugin.java @@ -37,6 +37,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Stretched Fixed Mode", + description = "Resize the game while in fixed mode", + tags = {"resize"}, enabledByDefault = false ) public class StretchedFixedModePlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesConfig.java index 12dcbe3c2b..17e42e0f24 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "teamCapes", - name = "Team Capes", - description = "Configuration for the team cape plugin" -) +@ConfigGroup("teamCapes") public interface TeamCapesConfig extends Config { @ConfigItem( 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 e928bdcb8b..f31a56d7b0 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 @@ -44,6 +44,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Team Capes", + description = "Show the different team capes in your area and the amount of each", + tags = {"overlay", "players"}, enabledByDefault = false ) public class TeamCapesPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsConfig.java index 3feff0ef13..a45df8ae82 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "tileindicators", - name = "Tile Indicators", - description = "Configuration for the tile indicators plugin" -) +@ConfigGroup("tileindicators") public interface TileIndicatorsConfig extends Config { @ConfigItem( 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 488698ac7d..7347c8611e 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 @@ -33,6 +33,8 @@ 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 ) public class TileIndicatorsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java index 0b97832aed..86562f6577 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "timers", - name = "Timers", - description = "Configuration for the timers plugin" -) +@ConfigGroup("timers") public interface TimersConfig extends Config { @ConfigItem( 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 339ca571e6..cbbe15343b 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 @@ -86,7 +86,9 @@ import static net.runelite.client.plugins.timers.GameTimer.VENGEANCEOTHER; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( - name = "Timers" + name = "Timers", + description = "Show various timers in an infobox", + tags = {"combat", "items", "magic", "potions", "prayer", "overlay"} ) public class TimersPlugin 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 93ed21b7d2..c366c2b74c 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 @@ -43,7 +43,9 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j @PluginDescriptor( - name = "Tithe Farm" + name = "Tithe Farm", + description = "Show timers for the farming patches within the Tithe Farm minigame", + tags = {"farming", "minigame", "overlay", "skilling", "timers"} ) public class TitheFarmPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPluginConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPluginConfig.java index de41ca4f36..153d7e5a98 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPluginConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPluginConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "tithefarmplugin", - name = "Tithe Farm", - description = "Configuration for the Tithe Farm plugin" -) +@ConfigGroup("tithefarmplugin") public interface TitheFarmPluginConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerConfig.java index b312a66681..fe8803a2e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "rememberusername", - name = "Username Syncer", - description = "Syncs the username that is currently remembered between computers" -) +@ConfigGroup("rememberusername") public interface UsernameSyncerConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerPlugin.java index b4086c6bb6..e8ada7b48a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/usernamesyncer/UsernameSyncerPlugin.java @@ -38,7 +38,8 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( - name = "Username Syncer" + name = "Username Syncer", + description = "Save your username to the config, allowing it to be synced" ) @Slf4j public class UsernameSyncerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java index dc59dcf4d8..55cb5e3637 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "woodcutting", - name = "Woodcutting", - description = "Configuration for the woodcutting plugin" -) +@ConfigGroup("woodcutting") public interface WoodcuttingConfig extends Config { @ConfigItem( 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 3215a87b63..771e612ca2 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 @@ -53,7 +53,9 @@ import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Woodcutting" + name = "Woodcutting", + description = "Show woodcutting statistics and/or bird nest notifications", + tags = {"birds", "nest", "notifications", "overlay", "skilling", "wc"} ) @PluginDependency(XpTrackerPlugin.class) public class WoodcuttingPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java index c7d60c6a50..0cfb68e823 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = WorldMapPlugin.CONFIG_KEY, - name = "World Map", - description = "Various World Map enhancements" -) +@ConfigGroup(WorldMapPlugin.CONFIG_KEY) public interface WorldMapConfig extends Config { @ConfigItem( 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 b389392487..8f2e701299 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 @@ -43,7 +43,9 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; @PluginDescriptor( - name = "World Map" + name = "World Map", + description = "Enhance the world map to display additional information", + tags = {"agility", "fairy", "rings", "teleports"} ) public class WorldMapPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java index 97eb1e8197..dc6000228c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java @@ -29,11 +29,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "xpglobes", - name = "XP Globes", - description = "Configuration for the XP globes plugin" -) +@ConfigGroup("xpglobes") public interface XpGlobesConfig extends Config { @ConfigItem( 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 69ff1cfefe..e51ff9d010 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 @@ -46,7 +46,9 @@ import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "XP Globes" + name = "XP Globes", + description = "Show XP globes for the respective skill when gaining XP", + tags = {"experience", "levels", "overlay"} ) @PluginDependency(XpTrackerPlugin.class) public class XpGlobesPlugin extends Plugin 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 93a9e0e718..2ad92cb1c9 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 @@ -56,7 +56,9 @@ import net.runelite.http.api.worlds.WorldType; import net.runelite.http.api.xp.XpClient; @PluginDescriptor( - name = "XP Tracker" + name = "XP Tracker", + description = "Enable the XP Tracker panel", + tags = {"experience", "levels", "panel"} ) @Slf4j public class XpTrackerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java index 68d37ecb2e..4b70b48401 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java @@ -28,11 +28,7 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup( - keyName = "zoom", - name = "Camera Zoom", - description = "Configuration for the camera zoom limit" -) +@ConfigGroup("zoom") public interface ZoomConfig extends Config { @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java index 07544f6d9e..b25bdebfe9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java @@ -38,6 +38,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Camera Zoom", + description = "Expand zoom limit and/or enable vertical camera", + tags = {"limit", "vertical"}, enabledByDefault = false ) @Slf4j 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/IconButton.java new file mode 100644 index 0000000000..1d54bf601c --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/IconButton.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018, Daniel Teo + * 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.components; + +import java.awt.Insets; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.ImageIcon; +import javax.swing.JButton; + +/** + * A button that consists of an icon, without any background, borders, or margins. + */ +public class IconButton extends JButton +{ + public IconButton(ImageIcon icon) + { + 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); + + if (hoverIcon != null) + { + addMouseListener(new MouseAdapter() + { + @Override + public void mouseEntered(MouseEvent e) + { + setIcon(hoverIcon); + } + + @Override + public void mouseExited(MouseEvent e) + { + setIcon(icon); + } + }); + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index 9dd419573c..6f7453271b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -53,7 +53,7 @@ public class OverlayManager private static final String OVERLAY_CONFIG_PREFERRED_LOCATION = "_preferredLocation"; private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize"; - private static final String RUNELITE_CONFIG_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).keyName(); + private static final String RUNELITE_CONFIG_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).value(); @VisibleForTesting static final Comparator OVERLAY_COMPARATOR = (a, b) -> diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/config_back_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/config_back_icon.png new file mode 100644 index 0000000000..8749d54b23 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/config_back_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/off.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/off.png new file mode 100644 index 0000000000..b030162e0c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/off.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/on.png b/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/on.png new file mode 100644 index 0000000000..3e416f5ab4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/config/stars/on.png differ diff --git a/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java b/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java index 7b2bfe02da..9bc5f29b37 100644 --- a/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java +++ b/runelite-client/src/test/java/net/runelite/client/config/TestConfig.java @@ -24,11 +24,7 @@ */ package net.runelite.client.config; -@ConfigGroup( - keyName = "test", - name = "test", - description = "test" -) +@ConfigGroup("test") public interface TestConfig { @ConfigItem(