Loot Tracker
AdvancedDataTracks items picked up from the ground. Demonstrates ground item event handling and data tracking.
18 min read
What It Does
Tracks items picked up from the ground. Demonstrates ground item event handling and data tracking.
Source Code
java
1package com.example;
2
3import net.runelite.api.Client;
4import net.runelite.api.ItemContainer;
5import net.runelite.api.Item;
6import net.runelite.api.events.ItemContainerChanged;
7import net.runelite.client.eventbus.Subscribe;
8import net.runelite.client.plugins.Plugin;
9import net.runelite.client.plugins.PluginDescriptor;
10import javax.inject.Inject;
11import java.util.HashMap;
12import java.util.Map;
13
14@PluginDescriptor(
15 name = "Loot Tracker",
16 description = "Tracks picked up items"
17)
18public class LootTrackerPlugin extends Plugin {
19 @Inject
20 private Client client;
21
22 private Map<Integer, Integer> lootedItems = new HashMap<>();
23 private ItemContainer previousInventory = null;
24
25 @Subscribe
26 public void onItemContainerChanged(ItemContainerChanged event) {
27 if (event.getContainerId() == net.runelite.api.InventoryID.INVENTORY.getId()) {
28 ItemContainer currentInventory = event.getItemContainer();
29
30 if (previousInventory != null) {
31 // Compare before/after to detect exact pickups
32 Map<Integer, Integer> beforeCounts = countItems(previousInventory);
33 Map<Integer, Integer> afterCounts = countItems(currentInventory);
34
35 // Find items that increased (were picked up)
36 for (Map.Entry<Integer, Integer> entry : afterCounts.entrySet()) {
37 int itemId = entry.getKey();
38 int afterCount = entry.getValue();
39 int beforeCount = beforeCounts.getOrDefault(itemId, 0);
40
41 if (afterCount > beforeCount) {
42 int gained = afterCount - beforeCount;
43 lootedItems.put(itemId, lootedItems.getOrDefault(itemId, 0) + gained);
44 System.out.println("Looted " + gained + "x item " + itemId);
45 }
46 }
47 }
48
49 previousInventory = currentInventory;
50 }
51 }
52
53 private Map<Integer, Integer> countItems(ItemContainer container) {
54 Map<Integer, Integer> counts = new HashMap<>();
55 if (container != null) {
56 for (Item item : container.getItems()) {
57 if (item.getId() != -1) {
58 counts.put(item.getId(), counts.getOrDefault(item.getId(), 0) + item.getQuantity());
59 }
60 }
61 }
62 return counts;
63 }
64}Code Annotations
Line 20
Map to store looted item counts
Line 23
Listen for items appearing
Line 28
Listen for items being picked up
Line 30
Track item in map
API Classes Used
Key Concepts
- •Map to store looted item counts
- •Listen for items appearing
- •Listen for items being picked up
- •Track item in map
Next Steps
- Learn about ItemSpawned/Despawned events
- Add overlay to display loot
- Filter by item value