Combat Level Display

BeginnerOverlay

Displays your combat level as an overlay on the screen. Shows how to access player data and render text overlays.

10 min read

What It Does

Displays your combat level as an overlay on the screen. Shows how to access player data and render text overlays.

Source Code

java
1package com.example;
2
3import net.runelite.api.Client;
4import net.runelite.api.Player;
5import net.runelite.client.ui.overlay.Overlay;
6import net.runelite.client.ui.overlay.OverlayLayer;
7import net.runelite.client.ui.overlay.OverlayPosition;
8import net.runelite.client.ui.overlay.components.TextComponent;
9import net.runelite.client.plugins.Plugin;
10import net.runelite.client.plugins.PluginDescriptor;
11import java.awt.*;
12
13@PluginDescriptor(
14    name = "Combat Level Display",
15    description = "Shows your combat level on screen"
16)
17public class CombatLevelPlugin extends Plugin {
18    @Inject
19    private Client client;
20
21    @Inject
22    private OverlayManager overlayManager;
23
24    // Named Overlay class (cleaner, injectable, better practice)
25    private class CombatLevelOverlay extends Overlay {
26        private CombatLevelOverlay() {
27            setLayer(OverlayLayer.ABOVE_SCENE);
28            setPosition(OverlayPosition.TOP_LEFT);
29        }
30
31        @Override
32        public Dimension render(Graphics2D graphics) {
33            Player localPlayer = client.getLocalPlayer();
34            if (localPlayer == null) {
35                return null;
36            }
37
38            int combatLevel = localPlayer.getCombatLevel();
39            
40            // Use PanelComponent for cleaner text rendering
41            net.runelite.client.ui.overlay.components.PanelComponent panel = 
42                new net.runelite.client.ui.overlay.components.PanelComponent();
43            panel.setPreferredSize(new Dimension(150, 20));
44            
45            net.runelite.client.ui.overlay.components.LineComponent line = 
46                net.runelite.client.ui.overlay.components.LineComponent.builder()
47                    .left("Combat Level: " + combatLevel)
48                    .leftColor(Color.WHITE)
49                    .build();
50            panel.getChildren().add(line);
51            
52            return panel.render(graphics);
53        }
54    }
55
56    private final CombatLevelOverlay combatOverlay = new CombatLevelOverlay();
57
58    @Override
59    protected void startUp() {
60        overlayManager.add(combatOverlay);
61    }
62
63    @Override
64    protected void shutDown() {
65        overlayManager.remove(combatOverlay);
66    }
67}

Code Annotations

Line 20

startUp() is called when the plugin is enabled

Line 25

shutDown() is called when the plugin is disabled

Line 30

Create an anonymous Overlay class

Line 33

render() is called every frame to draw the overlay

Line 40

Get the player's combat level using the Player API

API Classes Used

Key Concepts

  • startUp() is called when the plugin is enabled
  • shutDown() is called when the plugin is disabled
  • Create an anonymous Overlay class
  • render() is called every frame to draw the overlay
  • Get the player's combat level using the Player API

Next Steps

  • Learn about Overlay rendering
  • Explore Player API methods
  • Try adding more player stats