Botre Posted April 21, 2015 Share Posted April 21, 2015 (edited) I seem to be having some trouble with caching the inventory amounts. Halp :x import java.util.Map; import java.util.TreeMap; import org.osbot.rs07.api.model.Item; import dependencies.script.BotreScript; /** * @author Bjorn Krols (Botre) * @version 0.0 * @since April 20, 2015 */ public class InventoryListener extends Thread { private final BotreScript script; private Map<String, Integer> oldCache, newCache; public InventoryListener(final BotreScript script) { this.script = script; oldCache = new TreeMap<String, Integer>(); newCache = new TreeMap<String, Integer>(); } @Override public void run() { while (script.isRunning()) { if (script.isOnline()) { oldCache = newCache; newCache.clear(); for (Item item : script.getInventory().getItems()) if (item != null && !newCache.containsKey(item.getName())) newCache.put(item.getName(), (int) script.getInventory().getAmount(item.getName())); onUpdate(); } try { Thread.sleep(3000); // SLOW FOR READABILITY } catch (InterruptedException e) { e.printStackTrace(); } } } public void onUpdate() { } public int getDifference(String name) { if (oldCache.containsKey(name) && newCache.containsKey(name)) { script.log("old " + oldCache.get(name)); script.log("new" + newCache.get(name)); return newCache.get(name) - oldCache.get(name); } else return 0; } } How it currently logs: [INFO][Bot #1][04/21 02:55:09 AM]: old 7 [INFO][Bot #1][04/21 02:55:09 AM]: new7 [INFO][Bot #1][04/21 02:55:12 AM]: old 9 [INFO][Bot #1][04/21 02:55:12 AM]: new9 [INFO][Bot #1][04/21 02:55:15 AM]: old 10 [INFO][Bot #1][04/21 02:55:15 AM]: new10 [INFO][Bot #1][04/21 02:55:18 AM]: old 12 [INFO][Bot #1][04/21 02:55:18 AM]: new12 How it's supposed to log: [INFO][Bot #1][04/21 02:55:09 AM]: old 5 [INFO][Bot #1][04/21 02:55:09 AM]: new7 [INFO][Bot #1][04/21 02:55:12 AM]: old 7 [INFO][Bot #1][04/21 02:55:12 AM]: new9 [INFO][Bot #1][04/21 02:55:15 AM]: old 9 [INFO][Bot #1][04/21 02:55:15 AM]: new10 [INFO][Bot #1][04/21 02:55:18 AM]: old 10 [INFO][Bot #1][04/21 02:55:18 AM]: new12 Solved: if (script.isOnline()) { oldCache.clear(); oldCache.putAll(newCache); newCache.clear(); for (Item item : script.getInventory().getItems()) if (item != null && !newCache.containsKey(item.getName())) newCache.put(item.getName(), (int) script.getInventory().getAmount(item.getName())); onUpdate(); } Edited April 21, 2015 by Botre Link to comment Share on other sites More sharing options...