Jump to content

[OSBOT 2] Inventory Listening


Tyluur

Recommended Posts

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 by Tyluur
Link to comment
Share on other sites

  • 2 weeks later...
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...