Since the API doesn't have inventory listening as of July 14th, 2014, I created my own.
package com.tyluur.utility.listener;
import org.osbot.rs07.api.model.Item;
/**
* @author Tyluur <itstyluur@gmail.com>
* @since Jul 9, 2014
*/
public interface InventoryItemListener {
public void handle(Item item);
}
package com.tyluur.utility.listener;
import java.util.ArrayList;
import java.util.List;
import org.osbot.rs07.api.model.Item;
import org.osbot.rs07.script.Script;
/**
* @author Tyluur <itstyluur@gmail.com>
* @since Jul 9, 2014
*/
@SuppressWarnings("deprecation")
public class InventoryListener {
public InventoryListener(Script script) {
this.script = script;
updateItems();
}
/**
* The main tick event
*/
public void process(InventoryItemListener event) {
List<Item> ourItems = currentInventory;
List<Item> newItems = getNewInventory();
for (int i = 0; i < ourItems.size(); i++) {
Item ourItem = ourItems.get(i);
Item newItem = newItems.get(i);
if (ourItem.getId() != newItem.getId() || ourItem.getAmount() != newItem.getAmount()) {
event.handle(newItem);
}
}
updateItems();
}
private List<Item> getNewInventory() {
List<Item> newList = new ArrayList<>(28);
for (int i = 0; i < script.inventory.getItems().length; i++) {
Item item = script.inventory.getItems()[i];
if (item == null)
item = new Item(-1, -1);
newList.add(item);
}
return newList;
}
/**
* Updates our inventory item list with all the items in our inventory, and
* clearing the list first of all contents
*/
private void updateItems() {
currentInventory.clear();
if (script.inventory != null && script.inventory.getItems() != null)
for (int i = 0; i < script.inventory.getItems().length; i++) {
Item item = script.inventory.getItems()[i];
if (item == null)
item = new Item(-1, -1);
currentInventory.add(item);
}
}
/**
* The script this being ran on
*/
private final Script script;
/**
* The list of the items in our inventory, updated every time the
* {@link #process()} method is called
*/
private final List<Item> currentInventory = new ArrayList<>(28);
}