@@ -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()
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -59,5 +59,5 @@ public @interface PluginDescriptor
|
||||
|
||||
boolean loadWhenOutdated() default false;
|
||||
|
||||
PluginType type() default PluginType.GENERAL_USE;
|
||||
PluginType type() default PluginType.UNCATEGORIZED;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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());
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -33,6 +33,11 @@ public class PrioParse
|
||||
{
|
||||
public static boolean parse(String value)
|
||||
{
|
||||
if (value.equals(""))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user