Example Plugins
Explore curated plugin examples organized by complexity. Learn from real code and see how different API classes are used together.
Hello World Plugin
BeginnerA simple plugin that displays 'Hello World' in the chat when you log in. Perfect for learning the basics of plugin development.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.events.GameStateChanged;
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 javax.inject.Inject;
@PluginDescriptor(
name = "Hello World",
description = "Displays Hello World message"
)
public class HelloWorldPlugin extends Plugin {
@Inject
private Client client;
@Inject
private ClientThread clientThread;Combat Level Display
BeginnerDisplays your combat level as an overlay on the screen. Shows how to access player data and render text overlays.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import java.awt.*;
@PluginDescriptor(
name = "Combat Level Display",
description = "Shows your combat level on screen"
)
public class CombatLevelPlugin extends Plugin {Inventory Tracker
IntermediateTracks and displays inventory item counts. Demonstrates how to access inventory data and respond to changes.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.ItemContainer;
import net.runelite.api.events.ItemContainerChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "Inventory Tracker",
description = "Tracks inventory item counts"
)
public class InventoryTrackerPlugin extends Plugin {XP Tracker
IntermediateTracks and displays experience points gained. Shows how to monitor stat changes and calculate XP gains over time.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.api.events.StatChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "XP Tracker",
description = "Tracks experience points gained"
)
public class XPTrackerPlugin extends Plugin {NPC Highlighter
AdvancedHighlights specific NPCs on the screen. Demonstrates NPC iteration, filtering, and overlay rendering with shapes.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.NPC;
import net.runelite.api.events.GameTick;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "NPC Highlighter",
description = "Highlights NPCs on screen"
)
public class NPCHighlighterPlugin extends Plugin {Keyboard Shortcuts
IntermediateAdds custom keyboard shortcuts to your plugin. Shows how to handle keyboard input and create hotkeys.
package com.example;
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 javax.inject.Inject;
import java.awt.event.KeyEvent;
@PluginDescriptor(
name = "Keyboard Shortcuts",
description = "Custom keyboard shortcuts"
)
public class KeyboardShortcutsPlugin extends Plugin {Stat Display
BeginnerDisplays your current skill levels and experience in an overlay. Shows how to access skill data and format it for display.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Stat Display",
description = "Shows your skill levels"
)
public class StatDisplayPlugin extends Plugin {Menu Entry Manipulator
AdvancedModifies right-click menu entries. Demonstrates how to add, remove, or reorder menu options using MenuEntryAdded events.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.MenuEntry;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Menu Entry Manipulator",
description = "Modifies right-click menus"
)
public class MenuEntryManipulatorPlugin extends Plugin {Configurable Overlay
IntermediateAn overlay plugin with user-configurable settings. Demonstrates how to create config interfaces, add settings, and use them in your plugin.
package com.example;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Configurable Overlay",
description = "Overlay with configurable settings"
)
public class ConfigurableOverlayPlugin extends Plugin {
@Inject
private ConfigurableOverlayConfig config;Player Location Tracker
BeginnerDisplays your current world coordinates and region. Shows how to access and display location data.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Location Tracker",
description = "Shows your current location"
)
public class LocationTrackerPlugin extends Plugin {Health Bar Overlay
IntermediateDraws a health bar above the player showing current and maximum hitpoints. Demonstrates advanced overlay rendering with shapes.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Health Bar",
description = "Shows health bar above player"
)
public class HealthBarPlugin extends Plugin {Item Highlighter
AdvancedHighlights specific items on the ground. Shows how to iterate through tiles and draw highlights.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Scene;
import net.runelite.api.Tile;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Item Highlighter",
description = "Highlights items on ground"
)
public class ItemHighlighterPlugin extends Plugin {Skill Level Alert
BeginnerSends a chat message when you level up a skill. Demonstrates StatChanged event handling.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.api.events.StatChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Level Alert",
description = "Alerts on level up"
)
public class LevelAlertPlugin extends Plugin {Equipment Tracker
IntermediateTracks what items you're wearing and displays them. Shows how to access equipment data.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.ItemContainer;
import net.runelite.api.Item;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Equipment Tracker",
description = "Tracks equipped items"
)
public class EquipmentTrackerPlugin extends Plugin {Chat Filter
IntermediateFilters chat messages based on keywords. Demonstrates chat event handling and message filtering.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.ChatMessage;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Chat Filter",
description = "Filters chat messages"
)
public class ChatFilterPlugin extends Plugin {Auto Responder
AdvancedAutomatically responds to private messages with a custom message. Shows private message event handling.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.PrivateMessageReceived;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Auto Responder",
description = "Auto responds to PMs"
)
public class AutoResponderPlugin extends Plugin {Bank Value Calculator
IntermediateCalculates the total value of items in your bank. Demonstrates item iteration and value calculation.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.ItemContainer;
import net.runelite.api.Item;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Bank Value Calculator",
description = "Calculates bank value"
)
public class BankValuePlugin extends Plugin {Prayer Points Display
BeginnerDisplays current prayer points as an overlay. Shows how to access skill data and render it.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Prayer Points",
description = "Shows prayer points"
)
public class PrayerPointsPlugin extends Plugin {Run Energy Tracker
BeginnerTracks and displays run energy percentage. Shows how to access energy data and create informative overlays.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Run Energy Tracker",
description = "Shows run energy"
)
public class RunEnergyPlugin extends Plugin {Combat Stat Display
IntermediateDisplays all combat stats (Attack, Strength, Defence, etc.) in a compact overlay. Shows skill iteration and formatting.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Combat Stats",
description = "Shows combat skills"
)
public class CombatStatsPlugin extends Plugin {Item Count Notifier
IntermediateNotifies you when you have a certain number of items. Useful for tracking supplies or resources.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.ItemContainer;
import net.runelite.api.events.GameTick;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Item Count Notifier",
description = "Alerts on item count"
)
public class ItemCountNotifierPlugin extends Plugin {Animation Tracker
BeginnerTracks and displays the current animation ID. Useful for detecting specific actions like attacking or skilling.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Animation Tracker",
description = "Shows current animation"
)
public class AnimationTrackerPlugin extends Plugin {World Hopper Helper
BeginnerDisplays current world number and provides quick world information. Shows how to access world data.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "World Hopper Helper",
description = "Shows current world"
)
public class WorldHopperPlugin extends Plugin {FPS Display
IntermediateDisplays the current frames per second. Useful for performance monitoring and optimization.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "FPS Display",
description = "Shows FPS"
)
public class FPSDisplayPlugin extends Plugin {Death Counter
IntermediateCounts and displays how many times you've died. Tracks death events and maintains a counter.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.PlayerDeath;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Death Counter",
description = "Counts deaths"
)
public class DeathCounterPlugin extends Plugin {Loot Tracker
AdvancedTracks items picked up from the ground. Demonstrates ground item event handling and data tracking.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.ItemSpawned;
import net.runelite.api.events.ItemDespawned;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "Loot Tracker",
description = "Tracks picked up items"
)
public class LootTrackerPlugin extends Plugin {Boost Indicator
IntermediateShows which skills are currently boosted above their base level. Displays boost amounts and remaining time.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Boost Indicator",
description = "Shows skill boosts"
)
public class BoostIndicatorPlugin extends Plugin {Minimap Overlay
AdvancedDraws custom markers on the minimap. Demonstrates minimap coordinate conversion and drawing.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.coords.LocalPoint;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Minimap Overlay",
description = "Draws on minimap"
)
public class MinimapOverlayPlugin extends Plugin {Potion Timer
AdvancedTracks potion effects and displays remaining time. Shows how to monitor stat changes and calculate durations.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.api.events.StatChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import javax.inject.Inject;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "Potion Timer",
description = "Tracks potion effects"
)
public class PotionTimerPlugin extends Plugin {Click Counter
IntermediateCounts and displays mouse clicks. Useful for tracking activity and testing. Demonstrates mouse event handling.
package com.example;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@PluginDescriptor(
name = "Click Counter",
description = "Counts mouse clicks"
)
public class ClickCounterPlugin extends Plugin {Time Display
BeginnerDisplays the current in-game time. Shows how to access game time and format it for display.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Time Display",
description = "Shows game time"
)
public class TimeDisplayPlugin extends Plugin {Special Attack Tracker
IntermediateTracks special attack energy and displays it. Shows how to monitor special attack percentage.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Special Attack Tracker",
description = "Shows special attack energy"
)
public class SpecialAttackPlugin extends Plugin {Quest Helper Basic
AdvancedA basic quest helper that highlights NPCs and objects needed for quests. Demonstrates quest state tracking.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.NPC;
import net.runelite.api.TileObject;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Quest Helper Basic",
description = "Highlights quest NPCs/objects"
)
public class QuestHelperPlugin extends Plugin {Damage Dealt Tracker
AdvancedTracks damage dealt to NPCs. Shows how to monitor combat and calculate damage.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.NPC;
import net.runelite.api.events.HitsplatApplied;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "Damage Tracker",
description = "Tracks damage dealt"
)
public class DamageTrackerPlugin extends Plugin {Bank PIN Helper
IntermediateA simple helper for remembering bank PIN patterns. Displays a visual aid for PIN entry.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Bank PIN Helper",
description = "Helps with bank PIN"
)
public class BankPinHelperPlugin extends Plugin {AFK Detector
IntermediateDetects when you're AFK (away from keyboard) by monitoring lack of activity. Useful for safety.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.api.events.GameTick;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "AFK Detector",
description = "Detects AFK status"
)
public class AFKDetectorPlugin extends Plugin {Resource Tracker
AdvancedTracks resources gathered (logs, ores, fish, etc.) and displays statistics. Shows event-based tracking.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.ItemContainerChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
@PluginDescriptor(
name = "Resource Tracker",
description = "Tracks gathered resources"
)
public class ResourceTrackerPlugin extends Plugin {Prayer Flick Helper
AdvancedHelps with prayer flicking by showing optimal timing. Demonstrates prayer point monitoring and timing calculations.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.Skill;
import net.runelite.api.events.GameTick;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Prayer Flick Helper",
description = "Helps with prayer flicking"
)
public class PrayerFlickPlugin extends Plugin {Multi-Login Detector
IntermediateDetects if you have multiple accounts logged in. Useful for account management.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Multi-Login Detector",
description = "Detects multiple logins"
)
public class MultiLoginPlugin extends Plugin {Combat Style Indicator
IntermediateDisplays your current combat style (Aggressive, Defensive, etc.). Shows how to access combat configuration.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
import java.awt.*;
@PluginDescriptor(
name = "Combat Style Indicator",
description = "Shows combat style"
)
public class CombatStylePlugin extends Plugin {Item Price Checker
AdvancedDisplays item prices when hovering. Shows how to get item information and display tooltips.
package com.example;
import net.runelite.api.Client;
import net.runelite.client.game.ItemManager;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import javax.inject.Inject;
@PluginDescriptor(
name = "Item Price Checker",
description = "Shows item prices"
)
public class ItemPricePlugin extends Plugin {Notification Manager
IntermediateSends customizable notifications for various game events. Demonstrates notification system usage.
package com.example;
import net.runelite.api.Client;
import net.runelite.api.events.StatChanged;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import javax.inject.Inject;
@PluginDescriptor(
name = "Notification Manager",
description = "Sends notifications"
)
public class NotificationPlugin extends Plugin {