Here's what I did:
First create a class called PricedLoot. Has 3 important variables: String name, int price, int amount. In the constructor grab the price from zybez.
package def.api;
import org.osbot.script.rs2.Client;
public class PricedItem {
private String name;
private int lastCount = 0;
private int amount = 0;
private int price = 0;
private int id = 0;
public PricedItem(String name, Client c){
this.name = name;
if(c.getInventory().contains(name))
lastCount = (int) c.getInventory().getAmount(name);
price = PriceGrab.getInstance().getPrice(name, 2);
}
public void update(Client c){
int increase = (int) (c.getInventory().getAmount(name)- lastCount);
if(increase < 0)
increase = 0;
amount = amount + increase;
lastCount = (int) c.getInventory().getAmount(name);
}
public String getName(){
return name;
}
public int getAmount(){
return amount;
}
public int getPrice(){
return price;
}
public int getValue(){
return amount * price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
You'll also need this custom Zybez price grabbing class I found on here:
package def.api;
import java.io.*;
import java.net.*;
public class PriceGrab {
private static PriceGrab oneInstance;
private URL zybez;
private URLConnection urlConnection;
private BufferedReader inputScan;
private final String zybezUrl = "http://forums.zybez.net/runescape-2007-prices/api/item/";
public static PriceGrab getInstance(){
if(oneInstance == null){
oneInstance = new PriceGrab();
}
return oneInstance;
}
public int getPrice(String itemName, int command){
final String AVERAGE = "average",LOW= "recent_high", HIGH="recent_low";
String item = format(itemName),extracted;
int price = 0;
openStream(item);
extracted = retrieveData(item);
switch (command){
case 1:
return parseInfo(extracted,LOW);
case 2:
return parseInfo(extracted,AVERAGE);
case 3:
return parseInfo(extracted,HIGH);
}
return price;
}
private String format(final String string){
if(string.contains(" "))
return string.replaceAll(" ", "+");
else
return string;
}
private void openStream(final String param){
String appended = zybezUrl.concat(param);
try {
zybez = new URL(appended);
urlConnection = zybez.openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
}
catch (MalformedURLException e) {
System.out.println("Web address formatted incorrectly, printing stack trace");
e.printStackTrace();
}
catch(IOException exception) {
System.out.println("Url connection has thrown an IOException, printing stack trace");
exception.printStackTrace();
}
}
private String retrieveData(final String param){
String output = null;
try {
openStream(param);
inputScan = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
output = inputScan.readLine();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {inputScan.close();} catch (IOException e){e.printStackTrace();}
}
return output;
}
private int parseInfo(String extracted,String value){
int start, end, price = 0;
if(extracted.contains(value)){
start = extracted.indexOf(value);
end = extracted.indexOf(",",start);
price = Integer.parseInt(extracted.substring(start, end).replaceFirst(".*?(\\d+).*", "$1"));
}
else
System.out.println("Could not retrieve price");
return price;
}
}
Then, create an array of PricedItems for everything you want to loot and update the PricedItems somewhere in your onLoop.
for(PricedItem i : lootList){
i.update(client);
}