I wasn't happy with existing Inventory Listener snippets here so I converted one over from elsewhere.
import org.osbot.rs07.api.Client;
import org.osbot.rs07.api.model.Item;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.utility.Condition;
import java.util.ArrayList;
import java.util.HashMap;
public class InventoryObserver extends Thread {
private ArrayList<InventoryListener> listeners;
private Condition condition;
private Script theScript;
private Client client;
public InventoryObserver(Condition condition, Script script) {
this.listeners = new ArrayList<>();
this.condition = condition;
this.theScript = script;
this.client = script.client;
}
@[member=Override]
public void run() {
while (!client.isLoggedIn()) {
try {
theScript.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
HashMap<Integer, Integer> map = inventoryHashMap();
while (true) {
try {
theScript.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!client.isLoggedIn())
continue;
if (!condition.evaluate()) {
map = inventoryHashMap();
continue;
}
HashMap<Integer, Integer> updatedMap = inventoryHashMap();
for (Integer i : updatedMap.keySet()) {
int countInitial = map.containsKey(i) ? map.get(i) : 0, countFinal = updatedMap.get(i);
if (countFinal > countInitial) {
addTrigger(i, countFinal - countInitial);
} else if (countFinal < countInitial) {
subtractedTrigger(i, countInitial - countFinal);
}
map.remove(i);
}
for (Integer i : map.keySet())
if (!updatedMap.containsKey(i))
subtractedTrigger(i, map.get(i));
map = updatedMap;
}
}
public HashMap<Integer, Integer> inventoryHashMap() {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Item item : theScript.inventory.getItems()) {
if(item != null) {
map.put(item.getId(), Integer.valueOf((int) theScript.inventory.getAmount(item.getId())));
}
}
return map;
}
public void addListener(InventoryListener inventoryListener) {
listeners.add(inventoryListener);
}
public void addTrigger(int id, int count) {
for (InventoryListener l : listeners)
l.inventoryItemGained(id, count);
}
public void subtractedTrigger(int id, int count) {
for (InventoryListener l : listeners)
l.inventoryItemLost(id, count);
}
}
public interface InventoryListener {
void inventoryItemGained(int id, int count);
void inventoryItemLost(int id, int count);
}
Usage: Implement InventoryListener in your main class, and implement the methods your IDE suggested. In your onStart method, declare a new InventoryObserver object, including the condition under which you want the observer to run (i.e. make it not run while a bank is open). From there, call addListener(this) on your object and then call .start() on it. From there it should be fairly straight-forward to use.