Combat Level Display
BeginnerOverlayDisplays 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