config: rework (#2204)

config: rework
This commit is contained in:
Owain van Brakel
2020-01-10 12:27:29 +01:00
committed by GitHub
154 changed files with 1804 additions and 1148 deletions

View File

@@ -64,7 +64,7 @@ public interface OpenOSRSConfig extends Config
@ConfigItem(
position = 3,
keyName = "shareLogs",
name = "Anonymous error data",
name = "Share anonymous error data",
description = "Share anonymous error data with the OpenOSRS developers",
titleSection = "logTitle"
)
@@ -108,101 +108,26 @@ public interface OpenOSRSConfig extends Config
return SortStyle.CATEGORY;
}
@ConfigTitleSection(
keyName = "hidePluginsTitle",
name = "Hide By Type",
description = "",
@ConfigItem(
position = 4,
titleSection = "pluginsTitle"
keyName = "enableCategories",
name = "Categorize plugins",
description = "Show sections in the plugin list for each plugin type",
titleSection = "pluginSortingTitle",
hidden = true,
unhide = "pluginSortMode",
unhideValue = "Category"
)
default Title hidePluginsTitle()
default boolean enableCategories()
{
return new Title();
}
@ConfigItem(
position = 5,
keyName = "hidePlugins",
name = "Hide All Plugins",
description = "Hides all OpenOSRS plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePvmPlugins || hidePvpPlugins || hideSkillingPlugins || hideUtilityPlugins || hideExternalPlugins"
)
default boolean hidePlugins()
{
return false;
}
@ConfigItem(
position = 6,
keyName = "hideExternalPlugins",
name = "Hide External Plugins",
description = "Hides all OpenOSRS external plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePlugins"
)
default boolean hideExternalPlugins()
{
return false;
}
@ConfigItem(
position = 7,
keyName = "hidePvmPlugins",
name = "Hide PvM Plugins",
description = "Hides all OpenOSRS PvM plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePlugins"
)
default boolean hidePvmPlugins()
{
return false;
}
@ConfigItem(
position = 8,
keyName = "hideSkillingPlugins",
name = "Hide Skilling Plugins",
description = "Hides all OpenOSRS skilling plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePlugins"
)
default boolean hideSkillingPlugins()
{
return false;
}
@ConfigItem(
position = 9,
keyName = "hidePvpPlugins",
name = "Hide PvP Plugins",
description = "Hides all OpenOSRS Pvp plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePlugins"
)
default boolean hidePvpPlugins()
{
return false;
}
@ConfigItem(
position = 10,
keyName = "hideUtilityPlugins",
name = "Hide Utility Plugins",
description = "Hides all OpenOSRS utility plugins if checked",
titleSection = "hidePluginsTitle",
hide = "hidePlugins"
)
default boolean hideUtilityPlugins()
{
return false;
return true;
}
@ConfigTitleSection(
keyName = "pluginsColorTitle",
name = "Colors",
description = "",
position = 11,
position = 5,
titleSection = "pluginsTitle"
)
default Title pluginsColorTitle()
@@ -210,26 +135,27 @@ public interface OpenOSRSConfig extends Config
return new Title();
}
@Alpha
@ConfigItem(
position = 12,
keyName = "externalColor",
name = "External color",
description = "Configure the color of external plugins",
position = 6,
keyName = "enabledColors",
name = "Enable plugin colors",
description = "Configure whether or not the plugins list should be colorcoded",
titleSection = "pluginsColorTitle"
)
default Color externalColor()
default boolean enabledColors()
{
return new Color(177, 156, 217, 255);
return true;
}
@Alpha
@ConfigItem(
position = 13,
position = 7,
keyName = "pvmColor",
name = "PVM color",
description = "Configure the color of PVM related plugins",
titleSection = "pluginsColorTitle"
name = "PvM color",
description = "Configure the color of PvM related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color pvmColor()
{
@@ -238,24 +164,13 @@ public interface OpenOSRSConfig extends Config
@Alpha
@ConfigItem(
position = 14,
keyName = "pvpColor",
name = "PVP color",
description = "Configure the color of PVP related plugins",
titleSection = "pluginsColorTitle"
)
default Color pvpColor()
{
return new Color(255, 105, 97, 255);
}
@Alpha
@ConfigItem(
position = 15,
position = 8,
keyName = "skillingColor",
name = "Skilling color",
description = "Configure the color of Skilling related plugins",
titleSection = "pluginsColorTitle"
description = "Configure the color of skilling related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color skillingColor()
{
@@ -264,22 +179,99 @@ public interface OpenOSRSConfig extends Config
@Alpha
@ConfigItem(
position = 16,
position = 9,
keyName = "pvpColor",
name = "PvP color",
description = "Configure the color of PvP related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color pvpColor()
{
return new Color(255, 105, 97, 255);
}
@Alpha
@ConfigItem(
position = 10,
keyName = "utilityColor",
name = "Utility color",
description = "Configure the color of Utility related plugins",
titleSection = "pluginsColorTitle"
description = "Configure the color of utility related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color utilityColor()
{
return new Color(144, 212, 237, 255);
}
@Alpha
@ConfigItem(
position = 11,
keyName = "minigameColor",
name = "Minigame color",
description = "Configure the color of minigame related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color minigameColor()
{
return new Color(235, 130, 66, 255);
}
@Alpha
@ConfigItem(
position = 12,
keyName = "miscellaneousColor",
name = "Miscellaneous color",
description = "Configure the color of miscellaneous related plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color miscellaneousColor()
{
return new Color(243, 85, 136, 255);
}
@Alpha
@ConfigItem(
position = 13,
keyName = "gamemodeColor",
name = "Gamemode color",
description = "Configure the color of gamemode plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color gamemodeColor()
{
return new Color(244, 239, 211, 255);
}
@Alpha
@ConfigItem(
position = 14,
keyName = "externalColor",
name = "External color",
description = "Configure the color of external plugins",
titleSection = "pluginsColorTitle",
hidden = true,
unhide = "enabledColors"
)
default Color externalColor()
{
return new Color(177, 156, 217, 255);
}
@ConfigTitleSection(
keyName = "externalPluginsTitle",
name = "External",
description = "",
position = 17,
position = 15,
titleSection = "pluginsTitle"
)
default Title externalPluginsTitle()
@@ -291,7 +283,7 @@ public interface OpenOSRSConfig extends Config
keyName = "enablePlugins",
name = "Enable loading of external plugins",
description = "Enable loading of external plugins",
position = 18,
position = 16,
titleSection = "externalPluginsTitle"
)
default boolean enablePlugins()
@@ -303,7 +295,7 @@ public interface OpenOSRSConfig extends Config
keyName = "opacityTitle",
name = "Opacity",
description = "",
position = 19
position = 17
)
default Title opacityTitle()
{
@@ -314,7 +306,7 @@ public interface OpenOSRSConfig extends Config
keyName = "enableOpacity",
name = "Enable opacity",
description = "Enables opacity for the whole window.<br>NOTE: This only stays enabled if your pc supports this!",
position = 20,
position = 18,
titleSection = "opacityTitle"
)
default boolean enableOpacity()
@@ -330,7 +322,7 @@ public interface OpenOSRSConfig extends Config
keyName = "opacityPercentage",
name = "Opacity percentage",
description = "Changes the opacity of the window if opacity is enabled",
position = 21,
position = 19,
titleSection = "opacityTitle"
)
default int opacityPercentage()
@@ -342,7 +334,7 @@ public interface OpenOSRSConfig extends Config
keyName = "miscTitle",
name = "Miscellaneous",
description = "",
position = 22
position = 20
)
default Title miscTitle()
{
@@ -353,7 +345,7 @@ public interface OpenOSRSConfig extends Config
keyName = "keyboardPin",
name = "Keyboard bank pin",
description = "Enables you to type your bank pin",
position = 23,
position = 21,
titleSection = "miscTitle"
)
default boolean keyboardPin()
@@ -365,7 +357,7 @@ public interface OpenOSRSConfig extends Config
keyName = "detachHotkey",
name = "Detach Cam",
description = "Detach Camera hotkey, press this and it will activate detatched camera.",
position = 24,
position = 22,
titleSection = "miscTitle"
)
default Keybind detachHotkey()

View File

@@ -95,7 +95,7 @@ public class ExternalPluginLoader
List<Plugin> loadedPlugins;
try
{
loadedPlugins = pluginManager.scanAndInstantiate(loader, null);
loadedPlugins = pluginManager.scanAndInstantiate(loader, null, true);
}
catch (IOException ex)
{

View File

@@ -59,5 +59,5 @@ public @interface PluginDescriptor
boolean loadWhenOutdated() default false;
PluginType type() default PluginType.GENERAL_USE;
PluginType type() default PluginType.UNCATEGORIZED;
}

View File

@@ -213,7 +213,7 @@ public class PluginManager
public void loadCorePlugins() throws IOException
{
plugins.addAll(scanAndInstantiate(getClass().getClassLoader(), PLUGIN_PACKAGE));
plugins.addAll(scanAndInstantiate(getClass().getClassLoader(), PLUGIN_PACKAGE, false));
}
public void startCorePlugins()
@@ -246,7 +246,7 @@ public class PluginManager
}
@SuppressWarnings("unchecked")
List<Plugin> scanAndInstantiate(ClassLoader classLoader, String packageName) throws IOException
List<Plugin> scanAndInstantiate(ClassLoader classLoader, String packageName, boolean external) throws IOException
{
RuneLiteSplashScreen.stage(.59, "Loading plugins");
MutableGraph<Class<? extends Plugin>> graph = GraphBuilder
@@ -279,6 +279,12 @@ public class PluginManager
continue;
}
if (external && pluginDescriptor.type() != PluginType.EXTERNAL)
{
log.error("Class {} is using the external plugin loader but doesn't have PluginType.EXTERNAL", clazz);
continue;
}
if (!pluginDescriptor.loadWhenOutdated() && isOutdated)
{
continue;

View File

@@ -1,12 +1,29 @@
package net.runelite.client.plugins;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter(AccessLevel.PUBLIC)
@AllArgsConstructor
public enum PluginType
{
PVM,
PVP,
SKILLING,
UTILITY,
GENERAL_USE,
EXTERNAL,
IMPORTANT
}
PVM("PvM"),
PVP("PvP"),
SKILLING("Skilling"),
UTILITY("Utilities"),
MISCELLANEOUS("Miscellaneous"),
EXTERNAL("External"),
IMPORTANT("System"),
MINIGAME("Minigame"),
GAMEMODE("Gamemode"),
UNCATEGORIZED("Uncategorized");
private String name;
@Override
public String toString()
{
return getName();
}
}

View File

@@ -38,7 +38,8 @@ import net.runelite.client.plugins.PluginDescriptor;
name = "Account",
description = "Sync RuneLite config settings with your Google account",
tags = {"external", "google", "integration"},
loadWhenOutdated = true
loadWhenOutdated = true,
hidden = true
)
@Slf4j
@Singleton

View File

@@ -48,6 +48,7 @@ import net.runelite.client.callback.ClientThread;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.achievementdiary.diaries.ArdougneDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.DesertDiaryRequirement;
import net.runelite.client.plugins.achievementdiary.diaries.FaladorDiaryRequirement;
@@ -65,7 +66,8 @@ import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequi
@PluginDescriptor(
name = "Diary Requirements",
description = "Display level requirements in Achievement Diary interface",
tags = {"achievements", "tasks"}
tags = {"achievements", "tasks"},
type = PluginType.UTILITY
)
@Singleton
public class DiaryRequirementsPlugin extends Plugin

View File

@@ -77,6 +77,7 @@ import net.runelite.client.game.AgilityShortcut;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.ColorUtil;
@@ -84,7 +85,8 @@ import net.runelite.client.util.ColorUtil;
@PluginDescriptor(
name = "Agility",
description = "Show helpful information about agility courses and obstacles",
tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"}
tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"},
type = PluginType.SKILLING
)
@Slf4j
@Singleton

View File

@@ -39,12 +39,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Ammo",
description = "Shows the current ammo the player has equipped",
tags = {"bolts", "darts", "chinchompa", "equipment"}
tags = {"bolts", "darts", "chinchompa", "equipment"},
type = PluginType.UTILITY
)
@Singleton
public class AmmoPlugin extends Plugin

View File

@@ -33,12 +33,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Animation Smoothing",
description = "Show smoother player, NPC, and object animations",
tags = {"npcs", "objects", "players"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class AnimationSmoothingPlugin extends Plugin

View File

@@ -54,6 +54,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING;
import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE_CASTING;
import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER;
@@ -62,7 +63,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Attack Styles",
description = "Show your current attack style as an overlay",
tags = {"combat", "defence", "magic", "overlay", "ranged", "strength", "warn", "pure"}
tags = {"combat", "defence", "magic", "overlay", "ranged", "strength", "warn", "pure"},
type = PluginType.UTILITY
)
@Singleton
public class AttackStylesPlugin extends Plugin

View File

@@ -71,13 +71,15 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.banktags.tabs.BankSearch;
import net.runelite.client.util.QuantityFormatter;
@PluginDescriptor(
name = "Bank",
description = "Modifications to the banking interface",
tags = {"grand", "exchange", "high", "alchemy", "prices", "deposit"}
tags = {"grand", "exchange", "high", "alchemy", "prices", "deposit"},
type = PluginType.UTILITY
)
@Singleton
public class BankPlugin extends Plugin

View File

@@ -79,6 +79,7 @@ import net.runelite.client.input.MouseWheelListener;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDependency;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.banktags.tabs.BankSearch;
import net.runelite.client.plugins.banktags.tabs.TabInterface;
import static net.runelite.client.plugins.banktags.tabs.TabInterface.FILTERED_CHARS;
@@ -89,7 +90,8 @@ import net.runelite.client.util.QuantityFormatter;
@PluginDescriptor(
name = "Bank Tags",
description = "Enable tagging of bank items and searching of bank tags",
tags = {"searching", "tagging"}
tags = {"searching", "tagging"},
type = PluginType.UTILITY
)
@PluginDependency(ClueScrollPlugin.class)
@Singleton

View File

@@ -68,7 +68,7 @@ import org.jetbrains.annotations.NotNull;
description = "Displays warning in chat when you join a" +
"clan chat/new member join your clan chat and he is in a WDR/RuneWatch/Manual List",
tags = {"PVM", "WDR", "RuneWatch"},
type = PluginType.UTILITY,
type = PluginType.MISCELLANEOUS,
enabledByDefault = false
)
@Singleton

View File

@@ -106,7 +106,7 @@ import org.apache.commons.lang3.StringUtils;
name = "Barbarian Assault",
description = "Custom barbarian assault plugin, use along with BA Tools",
tags = {"minigame", "overlay", "timer"},
type = PluginType.PVM // don't remove this, added this because our barbarian assault plugin is big time modified
type = PluginType.MINIGAME // don't remove this, added this because our barbarian assault plugin is big time modified
)
@Singleton
public class BarbarianAssaultPlugin extends Plugin implements KeyListener

View File

@@ -59,6 +59,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxPriority;
@@ -67,7 +68,8 @@ import net.runelite.client.ui.overlay.infobox.LoopTimer;
@PluginDescriptor(
name = "Barrows Brothers",
description = "Show helpful information for the Barrows minigame",
tags = {"combat", "minigame", "minimap", "bosses", "pve", "pvm"}
tags = {"combat", "minigame", "minimap", "bosses", "pve", "pvm"},
type = PluginType.MINIGAME
)
@Singleton
public class BarrowsPlugin extends Plugin

View File

@@ -51,13 +51,15 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Blast Furnace",
description = "Show helpful information for the Blast Furnace minigame",
tags = {"minigame", "overlay", "skilling", "smithing"}
tags = {"minigame", "overlay", "skilling", "smithing"},
type = PluginType.MINIGAME
)
@Singleton
public class BlastFurnacePlugin extends Plugin

View File

@@ -45,12 +45,14 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Blast Mine",
description = "Show helpful information for the Blast Mine minigame",
tags = {"explode", "explosive", "mining", "minigame", "skilling"}
tags = {"explode", "explosive", "mining", "minigame", "skilling"},
type = PluginType.MINIGAME
)
@Singleton
public class BlastMinePlugin extends Plugin

View File

@@ -49,6 +49,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.SkillIconManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.ImageUtil;
@@ -56,7 +57,8 @@ import net.runelite.client.util.ImageUtil;
@PluginDescriptor(
name = "Boosts Information",
description = "Show combat and/or skill boost information",
tags = {"combat", "notifications", "skilling", "overlay"}
tags = {"combat", "notifications", "skilling", "overlay"},
type = PluginType.UTILITY
)
@Singleton
public class BoostsPlugin extends Plugin

View File

@@ -34,12 +34,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Boss Timers",
description = "Show boss spawn timer overlays",
tags = {"combat", "pve", "overlay", "spawn"}
tags = {"combat", "pve", "overlay", "spawn"},
type = PluginType.PVM
)
@Singleton
@Slf4j

View File

@@ -58,7 +58,7 @@ import net.runelite.client.util.ImageUtil;
name = "Bronze Man Mode",
description = "Restrict yourself as an Iron Meme with GE use for items you have unlocked.",
tags = {"Bronze", "pve", "restrict", "game", "challenge", "bronzeman", "ironman"},
type = PluginType.UTILITY,
type = PluginType.GAMEMODE,
enabledByDefault = false
)
@Slf4j

View File

@@ -51,13 +51,15 @@ import net.runelite.client.input.MouseListener;
import net.runelite.client.input.MouseManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.MiscUtils;
@PluginDescriptor(
name = "Camera Zoom",
description = "Expands zoom limit, provides vertical camera, and remaps mouse input keys",
tags = {"zoom", "limit", "vertical", "click", "mouse"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
public class CameraPlugin extends Plugin implements KeyListener, MouseListener
{

View File

@@ -51,6 +51,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@@ -59,7 +60,8 @@ import net.runelite.client.util.ItemUtil;
@PluginDescriptor(
name = "Cannon",
description = "Show information about cannon placement and/or amount of cannonballs",
tags = {"combat", "notifications", "ranged", "overlay"}
tags = {"combat", "notifications", "ranged", "overlay"},
type = PluginType.UTILITY
)
public class CannonPlugin extends Plugin
{

View File

@@ -41,12 +41,14 @@ import net.runelite.api.events.NpcSpawned;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Cerberus",
description = "Show what to pray against the summoned souls",
tags = {"bosses", "combat", "ghosts", "prayer", "pve", "overlay", "souls"}
tags = {"bosses", "combat", "ghosts", "prayer", "pve", "overlay", "souls"},
type = PluginType.PVM
)
@Singleton
public class CerberusPlugin extends Plugin

View File

@@ -42,9 +42,11 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Chatbox performance"
name = "Chatbox performance",
type = PluginType.MISCELLANEOUS
)
@Singleton
public class ChatboxPerformancePlugin extends Plugin

View File

@@ -68,6 +68,7 @@ import net.runelite.client.game.ItemManager;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.QuantityFormatter;
import net.runelite.http.api.chat.ChatClient;
import net.runelite.http.api.chat.Duels;
@@ -84,7 +85,8 @@ import org.apache.commons.text.WordUtils;
@PluginDescriptor(
name = "Chat Commands",
description = "Enable chat commands",
tags = {"grand", "exchange", "level", "prices"}
tags = {"grand", "exchange", "level", "prices"},
type = PluginType.UTILITY
)
@Singleton
@Slf4j

View File

@@ -50,12 +50,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import org.apache.commons.lang3.StringUtils;
@PluginDescriptor(
name = "Chat Filter",
description = "Censor user configurable words or patterns from chat",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class ChatFilterPlugin extends Plugin

View File

@@ -52,12 +52,14 @@ import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import org.apache.commons.lang3.StringUtils;
@PluginDescriptor(
name = "Chat History",
description = "Retain your chat history when logging in/out or world hopping",
tags = {"chat", "history", "retain", "cycle", "pm"}
tags = {"chat", "history", "retain", "cycle", "pm"},
type = PluginType.MISCELLANEOUS
)
@Singleton
public class ChatHistoryPlugin extends Plugin implements KeyListener

View File

@@ -51,12 +51,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Chat Notifications",
description = "Highlight and notify you of chat messages",
tags = {"duel", "messages", "notifications", "trade", "username"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class ChatNotificationsPlugin extends Plugin

View File

@@ -39,7 +39,7 @@ import net.runelite.client.plugins.PluginType;
name = "Chat Translator",
description = "Translates messages from one Language to another.",
tags = {"translate", "language", "english", "spanish", "dutch", "french", "welsh", "german"},
type = PluginType.UTILITY
type = PluginType.MISCELLANEOUS
)
@Singleton
@Slf4j

View File

@@ -78,6 +78,7 @@ import net.runelite.client.game.SpriteManager;
import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND;
@@ -87,7 +88,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Clan Chat",
description = "Add rank icons to users talking in clan chat",
tags = {"icons", "rank", "recent"}
tags = {"icons", "rank", "recent"},
type = PluginType.UTILITY
)
@Singleton
public class ClanChatPlugin extends Plugin

View File

@@ -78,6 +78,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.cluescrolls.clues.AnagramClue;
import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue;
import net.runelite.client.plugins.cluescrolls.clues.CipherClue;
@@ -107,7 +108,8 @@ import net.runelite.client.util.ItemUtil;
@PluginDescriptor(
name = "Clue Scroll",
description = "Show answers to clue scroll riddles, anagrams, ciphers, and cryptic clues",
tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"}
tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"},
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -48,12 +48,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Combat Level",
description = "Show a more accurate combat level in Combat Options panel and other combat level functions",
tags = {"wilderness", "attack", "range"}
tags = {"wilderness", "attack", "range"},
type = PluginType.UTILITY
)
@Singleton
public class CombatLevelPlugin extends Plugin

View File

@@ -25,28 +25,21 @@
package net.runelite.client.plugins.config;
import java.awt.image.BufferedImage;
import java.lang.reflect.Method;
import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.inject.Provider;
import javax.swing.SwingUtilities;
import net.runelite.api.MenuOpcode;
import net.runelite.client.RuneLite;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ChatColorConfig;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.OpenOSRSConfig;
import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.events.PluginChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginManager;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.ClientUI;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.components.colorpicker.ColorPickerManager;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.util.ImageUtil;
@@ -56,42 +49,48 @@ import net.runelite.client.util.ImageUtil;
loadWhenOutdated = true,
hidden = true // prevent users from disabling
)
@Singleton
public class ConfigPlugin extends Plugin
{
@Inject
private ClientToolbar clientToolbar;
@Inject
private Provider<PluginListPanel> pluginListPanelProvider;
@Inject
private ConfigManager configManager;
@Inject
private PluginManager pluginManager;
@Inject
private ScheduledExecutorService executorService;
@Inject
private RuneLiteConfig runeLiteConfig;
@Inject
private OpenOSRSConfig OpenOSRSConfig;
private OpenOSRSConfig openOSRSConfig;
@Inject
private ChatColorConfig chatColorConfig;
@Inject
private ColorPickerManager colorPickerManager;
private PluginListPanel pluginListPanel;
private ConfigPanel configPanel;
private NavigationButton navButton;
@Override
protected void startUp()
protected void startUp() throws Exception
{
configPanel = new ConfigPanel(pluginManager, configManager, executorService, runeLiteConfig, OpenOSRSConfig, chatColorConfig, colorPickerManager);
pluginListPanel = pluginListPanelProvider.get();
pluginListPanel.addFakePlugin(
new PluginConfigurationDescriptor(
"OpenOSRS", "OpenOSRS client settings", PluginType.IMPORTANT, new String[]{"client"},
null, openOSRSConfig, configManager.getConfigDescriptor(openOSRSConfig)
),
new PluginConfigurationDescriptor(
"RuneLite", "RuneLite client settings", PluginType.IMPORTANT, new String[]{"client"},
null, runeLiteConfig, configManager.getConfigDescriptor(runeLiteConfig)
),
new PluginConfigurationDescriptor(
"Chat Color", "Recolor chat text", PluginType.MISCELLANEOUS, new String[]{"colour", "messages"},
null, chatColorConfig, configManager.getConfigDescriptor(chatColorConfig)
));
pluginListPanel.rebuildPluginList();
final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "config_icon.png");
@@ -99,42 +98,20 @@ public class ConfigPlugin extends Plugin
.tooltip("Configuration")
.icon(icon)
.priority(0)
.panel(configPanel)
.panel(pluginListPanel.getMuxer())
.build();
clientToolbar.addNavigation(navButton);
}
@Override
public void shutDown()
protected void shutDown() throws Exception
{
clientToolbar.removeNavigation(navButton);
RuneLite.getInjector().getInstance(ClientThread.class).invokeLater(() ->
{
try
{
ConfigPanel.pluginList.clear();
pluginManager.setPluginEnabled(this, true);
pluginManager.startPlugin(this);
Method expand = ClientUI.class.getDeclaredMethod("expand", NavigationButton.class);
expand.setAccessible(true);
expand.invoke(RuneLite.getInjector().getInstance(ClientUI.class), navButton);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
});
}
@Subscribe
private void onPluginChanged(PluginChanged event)
{
SwingUtilities.invokeLater(configPanel::refreshPluginList);
}
@Subscribe
private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked)
public void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked)
{
OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry();
if (overlayMenuEntry.getMenuOpcode() == MenuOpcode.RUNELITE_OVERLAY_CONFIG)
@@ -154,8 +131,8 @@ public class ConfigPlugin extends Plugin
{
navButton.getOnSelect().run();
}
configPanel.openConfigurationPanel(descriptor.name());
pluginListPanel.openConfigurationPanel(descriptor.name());
});
}
}
}
}

View File

@@ -0,0 +1,57 @@
/*
* Copyright (c) 2019 Abex
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.config;
import javax.annotation.Nullable;
import lombok.Value;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigDescriptor;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginType;
@Value
public class PluginConfigurationDescriptor
{
private final String name;
private final String description;
private final PluginType pluginType;
private final String[] tags;
// Can be null if its not an actual plugin (RuneLite / ChatColors)
@Nullable
private final Plugin plugin;
// Can be null if it has no more configuration than the on/off toggle
@Nullable
private final Config config;
@Nullable
private final ConfigDescriptor configDescriptor;
boolean hasConfigurables()
{
return configDescriptor != null && !configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden());
}
}

View File

@@ -28,100 +28,57 @@ import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
import javax.inject.Singleton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import lombok.AccessLevel;
import javax.swing.JToggleButton;
import lombok.Getter;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigDescriptor;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import lombok.extern.slf4j.Slf4j;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.PluginPanel;
import net.runelite.client.ui.components.IconButton;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.SwingUtil;
import org.apache.commons.text.similarity.JaroWinklerDistance;
@Singleton
@Slf4j
public class PluginListItem extends JPanel
{
private static final JaroWinklerDistance DISTANCE = new JaroWinklerDistance();
public JLabel nameLabel;
private static final ImageIcon CONFIG_ICON;
private static final ImageIcon CONFIG_ICON_HOVER;
private static final ImageIcon ON_SWITCHER;
public static final ImageIcon OFF_SWITCHER;
private static final ImageIcon ON_STAR;
private static final ImageIcon OFF_STAR;
private final ConfigPanel configPanel;
private final PluginListPanel pluginListPanel;
@Getter(AccessLevel.PACKAGE)
@Nullable
private final Plugin plugin;
@Nullable
@Getter(AccessLevel.PACKAGE)
private final Config config;
@Nullable
@Getter(AccessLevel.PACKAGE)
public final ConfigDescriptor configDescriptor;
@Getter(AccessLevel.PUBLIC)
private final String name;
@Getter(AccessLevel.PUBLIC)
private final String description;
@Getter(AccessLevel.PUBLIC)
private final PluginType pluginType;
@Getter
private final PluginConfigurationDescriptor pluginConfig;
private final List<String> keywords = new ArrayList<>();
private final IconButton pinButton = new IconButton(OFF_STAR);
private final IconButton configButton = new IconButton(CONFIG_ICON, CONFIG_ICON_HOVER);
private final IconButton toggleButton = new IconButton(OFF_SWITCHER);
@Getter(AccessLevel.PACKAGE)
private boolean isPluginEnabled = false;
@Getter(AccessLevel.PACKAGE)
private boolean isPinned = false;
@Getter(AccessLevel.PACKAGE)
private boolean isHidden = false;
public JLabel nameLabel;
private final JToggleButton pinButton;
private final JToggleButton onOffToggle;
private Color color = null;
static
{
BufferedImage configIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_edit_icon.png");
BufferedImage onSwitcher = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "switcher_on.png");
BufferedImage onStar = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "star_on.png");
CONFIG_ICON = new ImageIcon(configIcon);
ON_SWITCHER = new ImageIcon(ImageUtil.recolorImage(onSwitcher, ColorScheme.BRAND_BLUE));
ON_STAR = new ImageIcon(ImageUtil.recolorImage(onStar, ColorScheme.BRAND_BLUE));
CONFIG_ICON_HOVER = new ImageIcon(ImageUtil.luminanceOffset(configIcon, -100));
BufferedImage offSwitcherImage = ImageUtil.flipImage(
ImageUtil.luminanceScale(
ImageUtil.grayscaleImage(onSwitcher),
0.61f
),
true,
false
);
OFF_SWITCHER = new ImageIcon(offSwitcherImage);
BufferedImage offStar = ImageUtil.luminanceScale(
ImageUtil.grayscaleImage(onStar),
0.77f
@@ -129,131 +86,103 @@ public class PluginListItem extends JPanel
OFF_STAR = new ImageIcon(offStar);
}
/**
* Creates a new {@code PluginListItem} for a plugin.
* <p>
* Note that {@code config} and {@code configDescriptor} can be {@code null}
* if there is no configuration associated with the plugin.
*/
PluginListItem(ConfigPanel configPanel, ConfigManager configManager, Plugin plugin, PluginDescriptor descriptor,
@Nullable Config config, @Nullable ConfigDescriptor configDescriptor)
PluginListItem(PluginListPanel pluginListPanel, PluginConfigurationDescriptor pluginConfig)
{
this(configPanel, configManager, plugin, config, configDescriptor,
descriptor.name(), descriptor.description(), descriptor.type(), descriptor.tags());
}
this.pluginListPanel = pluginListPanel;
this.pluginConfig = pluginConfig;
/**
* Creates a new {@code PluginListItem} for a core configuration.
*/
PluginListItem(ConfigPanel configPanel, ConfigManager configManager, Config config, ConfigDescriptor configDescriptor,
String name, String description, PluginType pluginType, String... tags)
{
this(configPanel, configManager, null, config, configDescriptor, name, description, pluginType, tags);
}
private PluginListItem(ConfigPanel configPanel, ConfigManager configManager, @Nullable Plugin plugin, @Nullable Config config,
@Nullable ConfigDescriptor configDescriptor, String name, String description, PluginType pluginType, String... tags)
{
this.configPanel = configPanel;
this.plugin = plugin;
this.config = config;
this.configDescriptor = configDescriptor;
this.name = name;
this.description = description;
this.pluginType = pluginType;
Collections.addAll(keywords, name.toLowerCase().split(" "));
Collections.addAll(keywords, description.toLowerCase().split(" "));
Collections.addAll(keywords, tags);
Collections.addAll(keywords, pluginConfig.getName().toLowerCase().split(" "));
Collections.addAll(keywords, pluginConfig.getDescription().toLowerCase().split(" "));
Collections.addAll(keywords, pluginConfig.getTags());
setLayout(new BorderLayout(3, 0));
setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH, 20));
nameLabel = new JLabel(name);
nameLabel = new JLabel(pluginConfig.getName());
nameLabel.setForeground(Color.WHITE);
if (!description.isEmpty())
if (!pluginConfig.getDescription().isEmpty())
{
nameLabel.setToolTipText("<html>" + name + ":<br>" + description + "</html>");
nameLabel.setToolTipText("<html>" + pluginConfig.getName() + ":<br>" + pluginConfig.getDescription() + "</html>");
}
add(nameLabel, BorderLayout.CENTER);
pinButton = new JToggleButton(OFF_STAR);
pinButton.setSelectedIcon(ON_STAR);
SwingUtil.removeButtonDecorations(pinButton);
SwingUtil.addModalTooltip(pinButton, "Unpin plugin", "Pin plugin");
pinButton.setPreferredSize(new Dimension(21, 0));
add(pinButton, BorderLayout.LINE_START);
pinButton.addActionListener(e ->
{
setPinned(!isPinned);
configPanel.savePinnedPlugins();
configPanel.openConfigList();
pluginListPanel.savePinnedPlugins();
pluginListPanel.refresh();
});
final JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 2));
add(buttonPanel, BorderLayout.LINE_END);
configButton.setPreferredSize(new Dimension(25, 0));
configButton.setVisible(false);
buttonPanel.add(configButton);
// add a listener to configButton only if there are config items to show
if (configDescriptor != null && config != null && !configDescriptor.getItems().stream().allMatch(item -> item.getItem().hidden()))
if (pluginConfig.hasConfigurables())
{
JButton configButton = new JButton(CONFIG_ICON);
configButton.setRolloverIcon(CONFIG_ICON_HOVER);
SwingUtil.removeButtonDecorations(configButton);
configButton.setPreferredSize(new Dimension(25, 0));
configButton.setVisible(false);
buttonPanel.add(configButton);
configButton.addActionListener(e ->
{
configButton.setIcon(CONFIG_ICON);
configPanel.openGroupConfigPanel(PluginListItem.this, config, configDescriptor);
openGroupConfigPanel();
});
configButton.setVisible(true);
configButton.setToolTipText("Edit plugin configuration");
}
toggleButton.setPreferredSize(new Dimension(25, 0));
attachToggleButtonListener(toggleButton);
addLabelMouseOver(nameLabel);
add(nameLabel, BorderLayout.CENTER);
buttonPanel.add(toggleButton);
}
void attachToggleButtonListener(IconButton button)
{
// no need for a listener if there is no plugin to enable / disable
if (plugin == null)
onOffToggle = new PluginToggleButton();
buttonPanel.add(onOffToggle);
if (pluginConfig.getPlugin() != null)
{
button.setVisible(false);
return;
onOffToggle.addItemListener(i ->
{
if (onOffToggle.isSelected())
{
pluginListPanel.startPlugin(pluginConfig.getPlugin());
}
else
{
pluginListPanel.stopPlugin(pluginConfig.getPlugin());
}
});
}
button.addActionListener(e ->
else
{
if (isPluginEnabled)
{
configPanel.stopPlugin(plugin, PluginListItem.this);
}
else
{
configPanel.startPlugin(plugin, PluginListItem.this);
}
setPluginEnabled(!isPluginEnabled);
updateToggleButton(button);
});
onOffToggle.setVisible(false);
}
}
void setPluginEnabled(boolean enabled)
boolean isPinned()
{
isPluginEnabled = enabled;
updateToggleButton(toggleButton);
return pinButton.isSelected();
}
void setPinned(boolean pinned)
{
isPinned = pinned;
pinButton.setIcon(pinned ? ON_STAR : OFF_STAR);
pinButton.setToolTipText(pinned ? "Unpin plugin" : "Pin plugin");
pinButton.setSelected(pinned);
}
Color getColor()
public PluginType getPluginType()
{
return pluginConfig.getPluginType();
}
public Color getColor()
{
return this.color == null ? Color.WHITE : this.color;
}
@@ -266,18 +195,13 @@ public class PluginListItem extends JPanel
}
this.color = color;
log.info("{}, updated to {}", nameLabel.getText(), color);
this.nameLabel.setForeground(color);
}
public void setHidden(boolean hidden)
void setPluginEnabled(boolean enabled)
{
isHidden = hidden;
}
void updateToggleButton(IconButton button)
{
button.setIcon(isPluginEnabled ? ON_SWITCHER : OFF_SWITCHER);
button.setToolTipText(isPluginEnabled ? "Disable plugin" : "Enable plugin");
onOffToggle.setSelected(enabled);
}
/**
@@ -297,4 +221,37 @@ public class PluginListItem extends JPanel
}
return true;
}
}
private void openGroupConfigPanel()
{
pluginListPanel.openConfigurationPanel(pluginConfig);
}
/**
* Adds a mouseover effect to change the text of the passed label to {@link ColorScheme#BRAND_BLUE} color
*
* @param label The label to attach the mouseover and click effects to
*/
static void addLabelMouseOver(final JLabel label)
{
final Color labelForeground = label.getForeground();
label.addMouseListener(new MouseAdapter()
{
private Color lastForeground;
@Override
public void mouseEntered(MouseEvent mouseEvent)
{
lastForeground = label.getForeground();
label.setForeground(ColorScheme.BRAND_BLUE);
}
@Override
public void mouseExited(MouseEvent mouseEvent)
{
label.setForeground(lastForeground);
}
});
}
}

View File

@@ -0,0 +1,606 @@
/*
* Copyright (c) 2017, Adam <Adam@sigterm.info>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.config;
import com.google.common.collect.ImmutableList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.util.Text;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigDescriptor;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.OpenOSRSConfig;
import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.PluginChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginInstantiationException;
import net.runelite.client.plugins.PluginManager;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.DynamicGridLayout;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.MultiplexingPluginPanel;
import net.runelite.client.ui.PluginPanel;
import net.runelite.client.ui.components.IconTextField;
import net.runelite.client.ui.components.MinimumSizedPanel;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.SwingUtil;
@Slf4j
@Singleton
public class PluginListPanel extends PluginPanel
{
private static final int OFFSET = 6;
private static final ImageIcon SECTION_EXPAND_ICON;
private static final ImageIcon SECTION_EXPAND_ICON_HOVER;
private static final ImageIcon SECTION_RETRACT_ICON;
private static final ImageIcon SECTION_RETRACT_ICON_HOVER;
private static final String RUNELITE_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).value();
private static final String PINNED_PLUGINS_CONFIG_KEY = "pinnedPlugins";
private static final List<String> colorOptions = Arrays.asList("enabledColors", "pvmColor", "pvpColor", "skillingColor", "utilityColor", "minigameColor", "miscellaneousColor", "gamemodeColor");
private static final ImmutableList<PluginType> definedOrder = ImmutableList.of(PluginType.IMPORTANT, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.MINIGAME, PluginType.MISCELLANEOUS, PluginType.GAMEMODE, PluginType.EXTERNAL, PluginType.UNCATEGORIZED);
private static final Comparator<PluginListItem> categoryComparator = Comparator.comparing(plugin -> definedOrder.indexOf(plugin.getPluginType()));
private final ConfigManager configManager;
private final PluginManager pluginManager;
private final ScheduledExecutorService executorService;
private final Provider<ConfigPanel> configPanelProvider;
private final OpenOSRSConfig openOSRSConfig;
private final List<PluginConfigurationDescriptor> fakePlugins = new ArrayList<>();
@Getter
private final MultiplexingPluginPanel muxer;
private final IconTextField searchBar;
private final JScrollPane scrollPane;
private final FixedWidthPanel mainPanel;
private final Set<JPanel> sectionsCopy = new HashSet<>();
public static List<PluginListItem> pluginList;
static
{
final BufferedImage backIcon = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "config_back_icon.png");
final BufferedImage orangeBackIcon = ImageUtil.fillImage(backIcon, ColorScheme.BRAND_BLUE);
final BufferedImage sectionRetractIcon = ImageUtil.rotateImage(orangeBackIcon, Math.PI * 1.5);
SECTION_RETRACT_ICON = new ImageIcon(sectionRetractIcon);
SECTION_RETRACT_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(sectionRetractIcon, -100));
final BufferedImage sectionExpandIcon = ImageUtil.rotateImage(orangeBackIcon, Math.PI);
SECTION_EXPAND_ICON = new ImageIcon(sectionExpandIcon);
SECTION_EXPAND_ICON_HOVER = new ImageIcon(ImageUtil.alphaOffset(sectionExpandIcon, -100));
}
@Inject
public PluginListPanel(
ConfigManager configManager,
PluginManager pluginManager,
ScheduledExecutorService executorService,
Provider<ConfigPanel> configPanelProvider,
OpenOSRSConfig openOSRSConfig,
EventBus eventBus)
{
super(false);
this.configManager = configManager;
this.pluginManager = pluginManager;
this.executorService = executorService;
this.configPanelProvider = configPanelProvider;
this.openOSRSConfig = openOSRSConfig;
eventBus.subscribe(ConfigChanged.class, this, ev -> {
if (!ev.getGroup().equals("openosrs"))
{
return;
}
if (ev.getKey().equals("enableCategories") || ev.getKey().equals("pluginSortMode"))
{
rebuildPluginList();
}
if (ev.getKey().equals("pluginSortMode"))
{
sortPluginList(null);
}
if (colorOptions.stream().anyMatch(option -> option.equals(ev.getKey())))
{
pluginList.forEach(listItem ->
{
if (listItem.getPluginType() == PluginType.IMPORTANT)
{
return;
}
listItem.setColor(getColorByCategory(listItem.getPluginType()));
});
}
});
muxer = new MultiplexingPluginPanel(this);
searchBar = new IconTextField();
searchBar.setIcon(IconTextField.Icon.SEARCH);
searchBar.setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH - 20, 30));
searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR);
searchBar.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR);
searchBar.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void insertUpdate(DocumentEvent e)
{
onSearchBarChanged();
}
@Override
public void removeUpdate(DocumentEvent e)
{
onSearchBarChanged();
}
@Override
public void changedUpdate(DocumentEvent e)
{
onSearchBarChanged();
}
});
setLayout(new BorderLayout());
setBackground(ColorScheme.DARK_GRAY_COLOR);
JPanel topPanel = new JPanel();
topPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
topPanel.setLayout(new BorderLayout(0, BORDER_OFFSET));
topPanel.add(searchBar, BorderLayout.CENTER);
add(topPanel, BorderLayout.NORTH);
mainPanel = new FixedWidthPanel();
mainPanel.setBorder(new EmptyBorder(8, 10, 10, 10));
mainPanel.setLayout(new DynamicGridLayout(0, 1, 0, 5));
mainPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel northPanel = new FixedWidthPanel();
northPanel.setLayout(new BorderLayout());
northPanel.add(mainPanel, BorderLayout.NORTH);
scrollPane = new JScrollPane(northPanel);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
add(scrollPane, BorderLayout.CENTER);
}
void rebuildPluginList()
{
final List<String> pinnedPlugins = getPinnedPluginNames();
// populate pluginList with all non-hidden plugins
pluginList = Stream.concat(
fakePlugins.stream(),
pluginManager.getPlugins().stream()
.filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden())
.map(plugin ->
{
PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class);
Config config = pluginManager.getPluginConfigProxy(plugin);
ConfigDescriptor configDescriptor = config == null ? null : configManager.getConfigDescriptor(config);
return new PluginConfigurationDescriptor(
descriptor.name(),
descriptor.description(),
descriptor.type(),
descriptor.tags(),
plugin,
config,
configDescriptor);
})
).map(desc ->
{
PluginListItem listItem = new PluginListItem(this, desc);
listItem.setPinned(pinnedPlugins.contains(desc.getName()));
listItem.setColor(getColorByCategory(listItem.getPluginType()));
return listItem;
}).collect(Collectors.toList());
sortPluginList(null);
mainPanel.removeAll();
refresh();
}
void addFakePlugin(PluginConfigurationDescriptor... descriptor)
{
Collections.addAll(fakePlugins, descriptor);
}
void refresh()
{
// update enabled / disabled status of all items
pluginList.forEach(listItem ->
{
final Plugin plugin = listItem.getPluginConfig().getPlugin();
if (plugin != null)
{
listItem.setPluginEnabled(pluginManager.isPluginEnabled(plugin));
}
});
int scrollBarPosition = scrollPane.getVerticalScrollBar().getValue();
onSearchBarChanged();
searchBar.requestFocusInWindow();
validate();
scrollPane.getVerticalScrollBar().setValue(scrollBarPosition);
}
private void onSearchBarChanged()
{
final String text = searchBar.getText();
pluginList.forEach(mainPanel::remove);
sectionsCopy.forEach(mainPanel::remove);
sectionsCopy.clear();
showMatchingPlugins(true, text);
showMatchingPlugins(false, text);
revalidate();
}
private void generatePluginList(List<PluginListItem> pluginListItems)
{
final Map<String, JPanel> sections = new HashMap<>();
for (PluginListItem pluginListItem : pluginListItems)
{
if (pluginListItem.isPinned())
{
if (!sections.containsKey("Pinned"))
{
sections.put("Pinned", addSection("Pinned"));
}
sections.get("Pinned").add(pluginListItem);
continue;
}
String sectionName = pluginListItem.getPluginConfig().getPluginType().getName();
if (!sections.containsKey(sectionName))
{
sections.put(sectionName, addSection(sectionName));
}
sections.get(sectionName).add(pluginListItem);
}
}
private void showMatchingPlugins(boolean pinned, String text)
{
final List<PluginListItem> plugins = new ArrayList<>();
if (text.isEmpty())
{
if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.ALPHABETICALLY || !openOSRSConfig.enableCategories())
{
pluginList.stream().filter(item -> pinned == item.isPinned()).forEach(mainPanel::add);
}
else
{
pluginList.stream().filter(item -> pinned == item.isPinned()).forEach(plugins::add);
}
}
else
{
final String[] searchTerms = text.toLowerCase().split(" ");
pluginList.forEach(listItem ->
{
if (pinned == listItem.isPinned() && listItem.matchesSearchTerms(searchTerms))
{
if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.ALPHABETICALLY || !openOSRSConfig.enableCategories())
{
mainPanel.add(listItem);
}
else
{
plugins.add(listItem);
}
}
});
}
if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.CATEGORY && openOSRSConfig.enableCategories())
{
generatePluginList(plugins);
}
}
void openConfigurationPanel(String configGroup)
{
for (PluginListItem pluginListItem : pluginList)
{
if (pluginListItem.getPluginConfig().getName().equals(configGroup))
{
openConfigurationPanel(pluginListItem.getPluginConfig());
break;
}
}
}
void openConfigurationPanel(PluginConfigurationDescriptor plugin)
{
ConfigPanel panel = configPanelProvider.get();
panel.init(plugin);
muxer.pushState(panel);
}
void startPlugin(Plugin plugin)
{
executorService.submit(() ->
{
pluginManager.setPluginEnabled(plugin, true);
try
{
pluginManager.startPlugin(plugin);
}
catch (PluginInstantiationException ex)
{
log.warn("Error when starting plugin {}", plugin.getClass().getSimpleName(), ex);
}
});
}
void stopPlugin(Plugin plugin)
{
executorService.submit(() ->
{
pluginManager.setPluginEnabled(plugin, false);
try
{
pluginManager.stopPlugin(plugin);
}
catch (PluginInstantiationException ex)
{
log.warn("Error when stopping plugin {}", plugin.getClass().getSimpleName(), ex);
}
});
}
private List<String> getPinnedPluginNames()
{
final String config = configManager.getConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY);
if (config == null)
{
return Collections.emptyList();
}
return Text.fromCSV(config);
}
void savePinnedPlugins()
{
final String value = pluginList.stream()
.filter(PluginListItem::isPinned)
.map(p -> p.getPluginConfig().getName())
.collect(Collectors.joining(","));
configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value);
}
@Subscribe
public void onPluginChanged(PluginChanged event)
{
SwingUtilities.invokeLater(this::refresh);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(PANEL_WIDTH + SCROLLBAR_WIDTH, super.getPreferredSize().height);
}
@Override
public void onActivate()
{
super.onActivate();
if (searchBar.getParent() != null)
{
searchBar.requestFocusInWindow();
}
}
private JPanel addSection(String name)
{
final MinimumSizedPanel section = new MinimumSizedPanel();
section.setLayout(new BoxLayout(section, BoxLayout.Y_AXIS));
section.setMinimumSize(new Dimension(PANEL_WIDTH, 0));
JPanel item = new JPanel();
item.setLayout(new BorderLayout());
item.setMinimumSize(new Dimension(PANEL_WIDTH, 0));
JLabel headerLabel = new JLabel(name);
headerLabel.setFont(FontManager.getRunescapeFont());
headerLabel.setForeground(ColorScheme.BRAND_BLUE);
headerLabel.setPreferredSize(new Dimension(PANEL_WIDTH, (int) headerLabel.getPreferredSize().getHeight()));
final boolean state = Boolean.parseBoolean(configManager.getConfiguration("pluginlist", name));
final JToggleButton collapse = new JToggleButton(SECTION_EXPAND_ICON, state);
SwingUtil.removeButtonDecorations(collapse);
collapse.setRolloverIcon(SECTION_EXPAND_ICON_HOVER);
collapse.setSelectedIcon(SECTION_RETRACT_ICON);
collapse.setRolloverSelectedIcon(SECTION_RETRACT_ICON_HOVER);
collapse.setToolTipText(state ? "Retract" : "Expand");
collapse.setPreferredSize(new Dimension(20, 20));
collapse.setFont(collapse.getFont().deriveFont(16.0f));
collapse.setBorder(null);
collapse.setMargin(new Insets(0, 0, 0, 0));
headerLabel.setBorder(new EmptyBorder(0, 10, 0, 0));
item.add(collapse, BorderLayout.WEST);
item.add(headerLabel, BorderLayout.CENTER);
final JPanel sectionContents = new JPanel();
sectionContents.setLayout(new DynamicGridLayout(0, 1, 0, 5));
sectionContents.setMinimumSize(new Dimension(PANEL_WIDTH, 0));
sectionContents.setBorder(new EmptyBorder(OFFSET, 5, 0, 0));
section.add(item, BorderLayout.NORTH);
section.add(sectionContents, BorderLayout.SOUTH);
sectionContents.setVisible(state);
// Add listeners to each part of the header so that it's easier to toggle them
final MouseAdapter adapter = new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
toggleSection("pluginlist", name, collapse, sectionContents);
}
};
collapse.addActionListener(e -> toggleSection("pluginlist", name, collapse, sectionContents));
headerLabel.addMouseListener(adapter);
// Allow for sub-sections
mainPanel.add(section);
sectionsCopy.add(section);
return sectionContents;
}
private void toggleSection(String group, String key, JToggleButton button, JPanel contents)
{
boolean newState = !contents.isVisible();
button.setSelected(newState);
contents.setVisible(newState);
configManager.setConfiguration(group, key, newState);
button.setToolTipText(newState ? "Retract" : "Expand");
SwingUtilities.invokeLater(() ->
{
contents.revalidate();
contents.repaint();
});
}
private Color getColorByCategory(PluginType pluginType)
{
if (!openOSRSConfig.enabledColors())
{
return Color.LIGHT_GRAY;
}
switch (pluginType)
{
case EXTERNAL:
return openOSRSConfig.externalColor();
case PVM:
return openOSRSConfig.pvmColor();
case PVP:
return openOSRSConfig.pvpColor();
case SKILLING:
return openOSRSConfig.skillingColor();
case UTILITY:
return openOSRSConfig.utilityColor();
case MISCELLANEOUS:
return openOSRSConfig.miscellaneousColor();
case MINIGAME:
return openOSRSConfig.minigameColor();
case GAMEMODE:
return openOSRSConfig.gamemodeColor();
case IMPORTANT:
return Color.WHITE;
}
return Color.LIGHT_GRAY;
}
public void sortPluginList(Comparator<PluginListItem> comparator)
{
if (comparator != null)
{
pluginList.sort(comparator.thenComparing(ev -> ev.getPluginConfig().getName()));
return;
}
if (openOSRSConfig.pluginSortMode() == net.runelite.client.config.OpenOSRSConfig.SortStyle.CATEGORY)
{
pluginList.sort(categoryComparator.thenComparing(ev -> ev.getPluginConfig().getName()));
}
else
{
pluginList.sort(Comparator.comparing(ev -> ev.getPluginConfig().getName()));
}
}
}

View File

@@ -0,0 +1,63 @@
/*
* Copyright (c) 2019 Abex
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.config;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JToggleButton;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.SwingUtil;
class PluginToggleButton extends JToggleButton
{
private static final ImageIcon ON_SWITCHER;
private static final ImageIcon OFF_SWITCHER;
static
{
BufferedImage onSwitcher = ImageUtil.getResourceStreamFromClass(ConfigPanel.class, "switcher_on.png");
ON_SWITCHER = new ImageIcon(ImageUtil.recolorImage(onSwitcher, ColorScheme.BRAND_BLUE));
OFF_SWITCHER = new ImageIcon(ImageUtil.flipImage(
ImageUtil.luminanceScale(
ImageUtil.grayscaleImage(onSwitcher),
0.61f
),
true,
false
));
}
public PluginToggleButton()
{
super(OFF_SWITCHER);
setSelectedIcon(ON_SWITCHER);
SwingUtil.removeButtonDecorations(this);
setPreferredSize(new Dimension(25, 0));
SwingUtil.addModalTooltip(this, "Disable plugin", "Enable plugin");
}
}

View File

@@ -51,6 +51,7 @@ import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDependency;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.xptracker.XpTrackerPlugin;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
@@ -59,7 +60,8 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Cooking",
description = "Show cooking statistics",
tags = {"overlay", "skilling", "cook"}
tags = {"overlay", "skilling", "cook"},
type = PluginType.SKILLING
)
@Singleton
@PluginDependency(XpTrackerPlugin.class)

View File

@@ -55,12 +55,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Corporeal Beast",
description = "Show damage statistics and highlight dark energy cores",
tags = {"bosses", "combat", "pve", "overlay"}
tags = {"bosses", "combat", "pve", "overlay"},
type = PluginType.PVM
)
@Slf4j
public class CorpPlugin extends Plugin

View File

@@ -37,6 +37,7 @@ import net.runelite.api.events.GameTick;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.http.api.RuneLiteAPI;
import okhttp3.Call;
import okhttp3.Callback;
@@ -50,7 +51,8 @@ import org.jetbrains.annotations.NotNull;
name = "Crystal Math Labs",
description = "Automatically updates your stats on Crystal Math Labs when you log out",
tags = {"cml", "external", "integration"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -31,7 +31,7 @@ import net.runelite.client.util.ImageUtil;
name = "Custom Client Resizing",
description = "Resize the window to saved profiles",
tags = {"resize", "window", "position", "layout", "manage"},
type = PluginType.UTILITY,
type = PluginType.MISCELLANEOUS,
enabledByDefault = false
)
public class CustomClientResizingPlugin extends Plugin

View File

@@ -40,13 +40,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientUI;
@Slf4j
@PluginDescriptor(
name = "Custom Cursor",
description = "Replaces your mouse cursor image",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class CustomCursorPlugin extends Plugin

View File

@@ -47,10 +47,12 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Daily Task Indicator",
description = "Show chat notifications for daily tasks upon login"
description = "Show chat notifications for daily tasks upon login",
type = PluginType.UTILITY
)
@Singleton
public class DailyTasksPlugin extends Plugin

View File

@@ -61,6 +61,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.ui.overlay.infobox.Timer;
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
@@ -69,7 +70,8 @@ import net.runelite.client.util.ImageUtil;
@PluginDescriptor(
name = "Death Indicator",
description = "Show where you last died, and on what world",
tags = {"arrow", "hints", "world", "map", "overlay"}
tags = {"arrow", "hints", "world", "map", "overlay"},
type = PluginType.UTILITY
)
@Singleton
@Slf4j

View File

@@ -37,6 +37,7 @@ import net.runelite.client.events.SessionOpen;
import net.runelite.client.game.WorldService;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.WorldUtil;
import net.runelite.http.api.worlds.World;
import net.runelite.http.api.worlds.WorldResult;
@@ -44,7 +45,8 @@ import net.runelite.http.api.worlds.WorldResult;
@PluginDescriptor(
name = "Default World",
description = "Enable a default world to be selected when launching the client",
tags = {"home"}
tags = {"home"},
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -61,12 +61,14 @@ import net.runelite.client.callback.ClientThread;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Demonic Gorillas",
description = "Count demonic gorilla attacks and display their next possible attack styles",
tags = {"combat", "overlay", "pve", "pvm"}
tags = {"combat", "overlay", "pve", "pvm"},
type = PluginType.PVM
)
@Singleton
public class DemonicGorillaPlugin extends Plugin

View File

@@ -54,6 +54,7 @@ import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.JagexColors;
import net.runelite.client.ui.NavigationButton;
@@ -66,7 +67,8 @@ import org.slf4j.LoggerFactory;
@PluginDescriptor(
name = "Developer Tools",
tags = {"panel"},
developerPlugin = true
developerPlugin = true,
type = PluginType.MISCELLANEOUS
)
@Getter(AccessLevel.PACKAGE)
public class DevToolsPlugin extends Plugin

View File

@@ -60,6 +60,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.PartyChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
@@ -81,7 +82,8 @@ import org.jetbrains.annotations.NotNull;
@PluginDescriptor(
name = "Discord",
description = "Show your status and activity in the Discord user panel",
tags = {"action", "activity", "external", "integration", "status"}
tags = {"action", "activity", "external", "integration", "status"},
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -53,7 +53,7 @@ import net.runelite.client.ui.overlay.OverlayManager;
name = "Drop Party",
description = "Marks where a user ran, for drop partys",
tags = {"Drop", "Party", "marker", "player"},
type = PluginType.UTILITY,
type = PluginType.MISCELLANEOUS,
enabledByDefault = false
)
@Singleton

View File

@@ -45,12 +45,14 @@ import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.ImageUtil;
@PluginDescriptor(
name = "Emojis",
description = "Replaces common emoticons such as :) with their corresponding emoji in the chat",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -43,12 +43,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Entity Hider",
description = "Hide players, NPCs, and/or projectiles",
tags = {"npcs", "players", "projectiles"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class EntityHiderPlugin extends Plugin

View File

@@ -59,6 +59,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.QuantityFormatter;
import net.runelite.http.api.examine.ExamineClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
@@ -71,7 +72,8 @@ import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
@PluginDescriptor(
name = "Examine",
description = "Send examine information to the API",
tags = {"npcs", "items", "inventory", "objects"}
tags = {"npcs", "items", "inventory", "objects"},
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -58,13 +58,16 @@ import net.runelite.client.game.NPCManager;
import net.runelite.client.game.XpDropEvent;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
@PluginDescriptor(
name = "XP Drop",
description = "Enable customization of the way XP drops are displayed",
tags = {"experience", "levels", "tick"})
tags = {"experience", "levels", "tick"},
type = PluginType.UTILITY
)
@Singleton
public class XpDropPlugin extends Plugin
{

View File

@@ -61,12 +61,14 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.game.chatbox.ChatboxTextInput;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@Slf4j
@PluginDescriptor(
name = "Fairy Rings",
description = "Show the location of the fairy ring teleport",
tags = {"teleportation"}
tags = {"teleportation"},
type = PluginType.UTILITY
)
@Singleton
public class FairyRingPlugin extends Plugin

View File

@@ -40,6 +40,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
@@ -51,7 +52,8 @@ import net.runelite.http.api.feed.FeedResult;
name = "News Feed",
description = "Show the latest RuneLite blog posts, OSRS news, and JMod Twitter posts",
tags = {"external", "integration", "panel", "twitter"},
loadWhenOutdated = true
loadWhenOutdated = true,
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -71,6 +71,7 @@ import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDependency;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.xptracker.XpTrackerPlugin;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
@@ -79,7 +80,8 @@ import net.runelite.client.util.ItemUtil;
@PluginDescriptor(
name = "Fishing",
description = "Show fishing stats and mark fishing spots",
tags = {"overlay", "skilling"}
tags = {"overlay", "skilling"},
type = PluginType.SKILLING
)
@PluginDependency(XpTrackerPlugin.class)
@Singleton

View File

@@ -33,6 +33,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.DrawManager;
import net.runelite.client.ui.overlay.OverlayManager;
@@ -50,7 +51,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
name = "Performance",
description = "Show current FPS or set an FPS limit",
tags = {"frames", "framerate", "limit", "overlay"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class FpsPlugin extends Plugin

View File

@@ -35,10 +35,12 @@ import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Friend List",
description = "Add extra information to the friend and ignore lists"
description = "Add extra information to the friend and ignore lists",
type = PluginType.MISCELLANEOUS
)
@Singleton
public class FriendListPlugin extends Plugin

View File

@@ -50,13 +50,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
@Slf4j
@PluginDescriptor(
name = "Friend Notes",
description = "Store notes about your friends"
description = "Store notes about your friends",
type = PluginType.MISCELLANEOUS
)
@Singleton
public class FriendNotesPlugin extends Plugin

View File

@@ -76,6 +76,7 @@ import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginInstantiationException;
import net.runelite.client.plugins.PluginManager;
import net.runelite.client.plugins.PluginType;
import static net.runelite.client.plugins.gpu.GLUtil.*;
import net.runelite.client.plugins.gpu.config.AnisotropicFilteringMode;
import net.runelite.client.plugins.gpu.config.AntiAliasingMode;
@@ -87,7 +88,8 @@ import net.runelite.client.util.OSType;
name = "GPU",
description = "Utilizes the GPU",
enabledByDefault = false,
tags = {"fog", "draw distance"}
tags = {"fog", "draw distance"},
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -80,6 +80,7 @@ import net.runelite.client.input.KeyManager;
import net.runelite.client.input.MouseManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil;
@@ -93,7 +94,8 @@ import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
@PluginDescriptor(
name = "Grand Exchange",
description = "Provide additional and/or easier access to Grand Exchange information",
tags = {"external", "integration", "notifications", "panel", "prices", "trade"}
tags = {"external", "integration", "notifications", "panel", "prices", "trade"},
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -89,6 +89,7 @@ import net.runelite.client.input.KeyManager;
import net.runelite.client.input.MouseManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.grounditems.config.ItemHighlightMode;
import static net.runelite.client.plugins.grounditems.config.ItemHighlightMode.OVERLAY;
import net.runelite.client.plugins.grounditems.config.MenuHighlightMode;
@@ -105,7 +106,8 @@ import net.runelite.client.util.QuantityFormatter;
@PluginDescriptor(
name = "Ground Items",
description = "Highlight ground items and/or show price information",
tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"}
tags = {"grand", "exchange", "high", "alchemy", "prices", "highlight", "overlay"},
type = PluginType.UTILITY
)
@Singleton
public class GroundItemsPlugin extends Plugin

View File

@@ -63,6 +63,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
@@ -70,7 +71,8 @@ import net.runelite.client.util.ColorUtil;
@PluginDescriptor(
name = "Ground Markers",
description = "Enable marking of tiles using the Shift key",
tags = {"overlay", "tiles"}
tags = {"overlay", "tiles"},
type = PluginType.UTILITY
)
@Singleton
public class GroundMarkerPlugin extends Plugin

View File

@@ -63,12 +63,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Herbiboar",
description = "Highlight starting rocks, trails, and the objects to search at the end of each trail",
tags = {"herblore", "hunter", "skilling", "overlay"}
tags = {"herblore", "hunter", "skilling", "overlay"},
type = PluginType.SKILLING
)
@Singleton
public class HerbiboarPlugin extends Plugin

View File

@@ -54,6 +54,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.menus.MenuManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil;
@@ -63,7 +64,8 @@ import org.apache.commons.lang3.ArrayUtils;
name = "HiScore",
description = "Enable the HiScore panel and an optional Lookup option on players",
tags = {"panel", "players"},
loadWhenOutdated = true
loadWhenOutdated = true,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class HiscorePlugin extends Plugin

View File

@@ -51,13 +51,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@Slf4j
@PluginDescriptor(
name = "Hunter",
description = "Show the state of your traps",
tags = {"overlay", "skilling", "timers"}
tags = {"overlay", "skilling", "timers"},
type = PluginType.SKILLING
)
@Singleton
public class HunterPlugin extends Plugin

View File

@@ -77,13 +77,15 @@ import net.runelite.client.game.Sound;
import net.runelite.client.game.SoundManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.PvPUtil;
import org.apache.commons.lang3.ArrayUtils;
@PluginDescriptor(
name = "Idle Notifier",
description = "Send a notification when going idle, or when HP/Prayer reaches a threshold",
tags = {"health", "hitpoints", "notifications", "prayer", "pvp", "pker"}
tags = {"health", "hitpoints", "notifications", "prayer", "pvp", "pker"},
type = PluginType.MISCELLANEOUS
)
@Singleton
public class IdleNotifierPlugin extends Plugin

View File

@@ -47,12 +47,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Implings",
description = "Highlight nearby implings on the minimap and on-screen",
tags = {"hunter", "minimap", "overlay", "imp"}
tags = {"hunter", "minimap", "overlay", "imp"},
type = PluginType.SKILLING
)
@Singleton
public class ImplingsPlugin extends Plugin

View File

@@ -35,6 +35,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil;
@@ -43,7 +44,8 @@ import net.runelite.client.util.ImageUtil;
name = "Info Panel",
description = "Enable the Info panel",
tags = {"info", "github", "patreon", "dir", "discord"},
loadWhenOutdated = true
loadWhenOutdated = true,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class InfoPlugin extends Plugin

View File

@@ -38,11 +38,13 @@ import net.runelite.client.menus.MenuManager;
import net.runelite.client.menus.WidgetMenuOption;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Instance Map",
description = "Add an instanced map, accessible by right-clicking the map button"
description = "Add an instanced map, accessible by right-clicking the map button",
type = PluginType.UTILITY
)
@Singleton
public class InstanceMapPlugin extends Plugin

View File

@@ -49,6 +49,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.ImageUtil;
@Slf4j
@@ -56,7 +57,8 @@ import net.runelite.client.util.ImageUtil;
name = "Interface Styles",
description = "Change the interface style to the 2005/2010 interface",
tags = {"2005", "2010", "skin", "theme", "ui"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class InterfaceStylesPlugin extends Plugin

View File

@@ -36,13 +36,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Inventory Grid",
description = "Shows a grid over the inventory and a preview of where items will be dragged",
tags = {"items", "overlay"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class InventoryGridPlugin extends Plugin

View File

@@ -45,6 +45,7 @@ import net.runelite.client.menus.MenuManager;
import net.runelite.client.menus.WidgetMenuOption;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
@@ -52,7 +53,8 @@ import net.runelite.client.util.ColorUtil;
name = "Inventory Tags",
description = "Add the ability to tag items in your inventory",
tags = {"highlight", "items", "overlay", "tagging"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class InventoryTagsPlugin extends Plugin

View File

@@ -34,13 +34,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Inventory Viewer",
description = "Add an overlay showing the contents of your inventory",
tags = {"alternate", "items", "overlay", "second"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class InventoryViewerPlugin extends Plugin

View File

@@ -62,13 +62,15 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Item Charges",
description = "Show number of item charges remaining",
tags = {"inventory", "notifications", "overlay"}
tags = {"inventory", "notifications", "overlay"},
type = PluginType.UTILITY
)
@Singleton
public class ItemChargePlugin extends Plugin

View File

@@ -35,12 +35,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Item Identification",
description = "Show identifying text over items with difficult to distinguish sprites",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class ItemIdentificationPlugin extends Plugin

View File

@@ -34,13 +34,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Item Prices",
description = "Show prices on hover for items in your inventory and bank",
tags = {"bank", "inventory", "overlay", "high", "alchemy", "grand", "exchange", "tooltips"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class ItemPricesPlugin extends Plugin

View File

@@ -66,13 +66,15 @@ import net.runelite.client.game.ItemMapping;
import net.runelite.client.game.ItemReclaimCost;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.QuantityFormatter;
@PluginDescriptor(
name = "Items Kept on Death",
description = "Updates the Items Kept on Death interface to be more accurate",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -62,6 +62,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.JagexColors;
import net.runelite.client.ui.overlay.OverlayManager;
@@ -72,7 +73,8 @@ import net.runelite.http.api.item.ItemStats;
@PluginDescriptor(
name = "Item Stats",
description = "Show information about food and potion effects",
tags = {"food", "inventory", "overlay", "potion"}
tags = {"food", "inventory", "overlay", "potion"},
type = PluginType.UTILITY
)
public class ItemStatPlugin extends Plugin
{

View File

@@ -48,6 +48,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.JagexColors;
import net.runelite.client.util.ColorUtil;
@@ -55,7 +56,8 @@ import net.runelite.client.util.ColorUtil;
name = "Key Remapping",
description = "Allows use of WASD keys for camera movement with 'Press Enter to Chat', and remapping number keys to F-keys",
tags = {"enter", "chat", "wasd", "camera"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class KeyRemappingPlugin extends Plugin

View File

@@ -52,13 +52,15 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Kingdom of Miscellania",
description = "Show various informations about your Kingdom of Miscellania",
tags = {"favor", "favour", "managing", "overlay", "indication", "notification"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -65,6 +65,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.overlay.OverlayManager;
@@ -73,7 +74,8 @@ import net.runelite.client.util.ImageUtil;
@PluginDescriptor(
name = "Kourend Library",
description = "Show where the books are found in the Kourend Library",
tags = {"arceuus", "magic", "runecrafting", "overlay", "panel"}
tags = {"arceuus", "magic", "runecrafting", "overlay", "panel"},
type = PluginType.MINIGAME
)
@Slf4j
@Singleton

View File

@@ -48,6 +48,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.WorldService;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.ImageUtil;
import net.runelite.http.api.worlds.World;
import net.runelite.http.api.worlds.WorldResult;
@@ -56,7 +57,8 @@ import net.runelite.http.api.worlds.WorldType;
@PluginDescriptor(
name = "League Chat Icons",
description = "Changes the chat icon for players on league worlds",
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Slf4j
public class LeagueChatIconsPlugin extends Plugin

View File

@@ -45,11 +45,13 @@ import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.util.OSType;
@PluginDescriptor(
name = "Login Screen",
description = "Provides various enhancements for login screen"
description = "Provides various enhancements for login screen",
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -113,6 +113,7 @@ import net.runelite.client.game.ItemStack;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry;
import net.runelite.client.plugins.loottracker.localstorage.LTRecord;
import net.runelite.client.plugins.loottracker.localstorage.LootRecordWriter;
@@ -139,7 +140,8 @@ import org.jooq.impl.SQLDataType;
name = "Loot Tracker",
description = "Tracks loot from monsters and minigames",
tags = {"drops"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -33,12 +33,14 @@ import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Low Detail",
description = "Turn off ground decorations and certain textures, reducing memory usage",
tags = {"memory", "usage", "ground", "decorations"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
public class LowMemoryPlugin extends Plugin
{

View File

@@ -33,6 +33,11 @@ public class PrioParse
{
public static boolean parse(String value)
{
if (value.equals(""))
{
return true;
}
try
{
final StringBuilder sb = new StringBuilder();

View File

@@ -46,12 +46,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Metronome",
description = "Play sounds in a customisable pattern",
tags = {"skilling", "tick", "timers"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.MISCELLANEOUS
)
@Slf4j
@Singleton

View File

@@ -40,11 +40,13 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Minimap",
description = "Customize the color of minimap dots",
tags = {"items", "npcs", "players", "hd"}
tags = {"items", "npcs", "players", "hd"},
type = PluginType.UTILITY
)
public class MinimapPlugin extends Plugin
{

View File

@@ -69,13 +69,15 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Mining",
description = "Show ore respawn timers and coal bag overlay",
tags = {"overlay", "skilling", "timers", "coal", "coalbag", "coal bag"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.SKILLING
)
@Singleton
public class MiningPlugin extends Plugin

View File

@@ -90,6 +90,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
@@ -98,7 +99,8 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry;
name = "Motherlode Mine",
description = "Show helpful information inside the Motherload Mine",
tags = {"pay", "dirt", "mining", "mlm", "skilling", "overlay"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.SKILLING
)
@Singleton
public class MotherlodePlugin extends Plugin

View File

@@ -42,12 +42,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Mouse Tooltips",
description = "Render default actions as a tooltip",
tags = {"actions", "overlay", "tooltip", "hide"}
tags = {"actions", "overlay", "tooltip", "hide"},
type = PluginType.UTILITY
)
@Singleton
public class MouseHighlightPlugin extends Plugin

View File

@@ -33,6 +33,7 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.plugins.mta.alchemy.AlchemyRoom;
import net.runelite.client.plugins.mta.enchantment.EnchantmentRoom;
import net.runelite.client.plugins.mta.graveyard.GraveyardRoom;
@@ -42,7 +43,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Mage Training Arena",
description = "Show helpful information for the Mage Training Arena minigame",
tags = {"mta", "magic", "minigame", "overlay"}
tags = {"mta", "magic", "minigame", "overlay"},
type = PluginType.MINIGAME
)
@Singleton
public class MTAPlugin extends Plugin

View File

@@ -70,11 +70,13 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.game.chatbox.ChatboxTextInput;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
@PluginDescriptor(
name = "Music",
description = "Adds search and filter for the music list, and additional volume control",
tags = {"sound", "volume"}
tags = {"sound", "volume"},
type = PluginType.MISCELLANEOUS
)
public class MusicPlugin extends Plugin
{

View File

@@ -47,12 +47,14 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
@PluginDescriptor(
name = "Nightmare Zone",
description = "Show NMZ points/absorption and/or notify about expiring potions",
tags = {"combat", "nmz", "minigame", "notifications"}
tags = {"combat", "nmz", "minigame", "notifications"},
type = PluginType.MINIGAME
)
@Singleton
public class NightmareZonePlugin extends Plugin

View File

@@ -33,6 +33,7 @@ import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.SessionOpen;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil;
@@ -41,7 +42,8 @@ import net.runelite.client.util.ImageUtil;
name = "Notes",
description = "Enable the Notes panel",
tags = {"panel"},
loadWhenOutdated = true
loadWhenOutdated = true,
type = PluginType.MISCELLANEOUS
)
@Singleton
public class NotesPlugin extends Plugin

View File

@@ -69,6 +69,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.WildcardMatcher;
@@ -76,7 +77,8 @@ import net.runelite.client.util.WildcardMatcher;
@PluginDescriptor(
name = "NPC Indicators",
description = "Highlight NPCs on-screen and/or on the minimap",
tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"}
tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"},
type = PluginType.UTILITY
)
@Slf4j
@Singleton

View File

@@ -62,6 +62,7 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.WildcardMatcher;
@@ -70,7 +71,8 @@ import net.runelite.client.util.WildcardMatcher;
name = "NPC Aggression Timer",
description = "Highlights the unaggressive area of NPCs nearby and timer until it becomes active",
tags = {"highlight", "lines", "unaggro", "aggro", "aggressive", "npcs", "area", "slayer"},
enabledByDefault = false
enabledByDefault = false,
type = PluginType.UTILITY
)
@Singleton
public class NpcAggroAreaPlugin extends Plugin

Some files were not shown because too many files have changed in this diff Show More