Overlays And Config
Config keys:
tracePackets: enables bounded in-memory packet tracing.runHealthCheckOnStartup: logs a report-only revision health check during PacketUtils startup.
Overlay utility:
OverlayUtils.drawTile(...) centralizes scene tile drawing. PathingTestingOverlay now uses this helper and no longer keeps a local copy.
Example:
OverlayUtils.drawTile(client, graphics, point, Color.MAGENTA, 25, "1", new BasicStroke(1));
Guidelines:
- Keep overlay utilities rendering-only.
- Keep plugin state in the plugin or action layer.
- Add new overlay helpers only when a concrete overlay needs them.
Shared panel UI:
Use com.n3plugins.ui for shared n3 plugin panel styling:
N3Themedefines the amber suite accent#F59E0B, shared foreground colors, borders, and dark card backgrounds.Sectionrenders rounded dark cards and supports an optional description line under the amber section title.N3PluginPanel.addAction(...)creates styledN3Buttonpill buttons. The first panel action is primary and uses amber text.HeaderPilldraws the bundled n3 brand icon before the plugin name, while preserving the amber pill, status dot, and status string behavior.
Brand image resource:
src/main/resources/com/n3plugins/ui/brand/n3.png is the packaged n3 brand
asset. Runtime code must load it from the jar through
com.n3plugins.ui.brand.N3Branding. Do not depend on any machine-local image
after build.
Plugin-list branding:
The pinned RuneLite 1.12.32 API does not expose an icon field on
@PluginDescriptor. The
plugin list uses a small Swing decorator:
PacketUtilsPluginownsN3PluginListBrandingas shared runtime setup.- The decorator runs on the Swing EDT with a timer, scans visible windows for
net.runelite.client.plugins.config.PluginListItemlabels, detects the[n3]marker, applies the scaled bundled icon, strips the visible marker, and marks decorated labels with client properties. - Shutdown stops the timer and restores any still-visible decorated labels to their original text/icon state.
Validation notes:
- Automated tests cover image loading/scaling and Swing component-tree decoration, double-decoration avoidance, and restore behavior.
- Manual RuneLite validation is still required for plugin-list refresh/search, tooltips, pinned plugin behavior, and in-panel visual quality.