Skip to main content

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:

  • N3Theme defines the amber suite accent #F59E0B, shared foreground colors, borders, and dark card backgrounds.
  • Section renders rounded dark cards and supports an optional description line under the amber section title.
  • N3PluginPanel.addAction(...) creates styled N3Button pill buttons. The first panel action is primary and uses amber text.
  • HeaderPill draws 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:

  • PacketUtilsPlugin owns N3PluginListBranding as shared runtime setup.
  • The decorator runs on the Swing EDT with a timer, scans visible windows for net.runelite.client.plugins.config.PluginListItem labels, 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.