Tyluur Posted July 14, 2014 Share Posted July 14, 2014 (edited) 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); } Edited July 14, 2014 by Tyluur Link to comment Share on other sites More sharing options...
TheScrub Posted July 14, 2014 Share Posted July 14, 2014 make it run on another thread bitch! Link to comment Share on other sites More sharing options...
Tyluur Posted July 14, 2014 Author Share Posted July 14, 2014 make it run on another thread bitch! This is just a snippet, do whatever you want with it bitch! Link to comment Share on other sites More sharing options...
TheScrub Posted July 14, 2014 Share Posted July 14, 2014 This is just a snippet, do whatever you want with it bitch! bitch i was trying to help i guess you don't love pelicans no more.. Link to comment Share on other sites More sharing options...
Ziy Posted July 15, 2014 Share Posted July 15, 2014 If you do put it on a separate thread make sure you keep in mind the potential for race conditions Link to comment Share on other sites More sharing options...
ProtectedForum Posted July 24, 2014 Share Posted July 24, 2014 If you do put it on a separate thread make sure you keep in mind the potential for race conditions this. Link to comment Share on other sites More sharing options...