Shaft Posted July 2, 2018 Share Posted July 2, 2018 (edited) Here are two snippets of code that allow you to get the drop table of any npc on the osrs wiki(as far as i know that's all the npcs) for this to work you need to add jsoup code to your project (you can find it here: https://github.com/jhy/jsoup). The only real use for this is the gui of fighter scripts. The item name and icon will always have the same index in the arrays used. Example usage: package Test; import Utils.WikiParser; import Utils.DropTable; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; public class test { public static void main(String[] args){ DropTable testTable = WikiParser.getMonsterDroptable("Chicken"); //if you look at chicken on wiki you will see the first item is bones System.out.println(testTable.getItemNames()[0]); // therefore bones have the index 0 ImageIO.write(imageToBufferedImage(testTable.getItemImages[0]), "png" , new File("Bones.png")); /will save Bones.png } private static BufferedImage imageToBufferedImage(Image im) { BufferedImage bi = new BufferedImage (im.getWidth(null),im.getHeight(null),BufferedImage.TYPE_INT_ARGB); Graphics bg = bi.getGraphics(); bg.drawImage(im, 0, 0, null); bg.dispose(); return bi; } } Source: WikiParser.java package Utils; import java.awt.Image; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import Utils.JSoup.Jsoup; import Utils.JSoup.nodes.Document; import Utils.JSoup.select.Elements; public class WikiParser { public static DropTable getMonsterDroptable(String monsterName){ try { Document doc = Jsoup.connect("http://oldschoolrunescape.wikia.com/wiki/" + monsterName.replaceAll(" ", "_")).get(); Elements tables = doc.getElementsByClass("wikitable sortable dropstable"); System.out.println("tables: " + tables.size()); Elements rows = tables.select("tr"); System.out.println("rows: " + rows.size()); Image[] images = new Image[rows.size() - tables.size()]; String[] names = new String[rows.size() - tables.size()]; int skipped = 0; for(int i = 1; i < rows.size(); i++){ Elements collumns = rows.get(i).select("td"); if(collumns.size() == 5){ images[i - (1 + skipped)] = getImage(collumns.get(0).getElementsByTag("img").get(0).attr("data-src")); names[i - (1 + skipped)] = collumns.get(1).text(); }else{ skipped++; } } return new DropTable(names, images); } catch (IOException e) { e.printStackTrace(); } return null; } private static Image getImage(String url) { try { return ImageIO.read(new URL(url)); } catch (IOException e) { return null; } } } DropTable.java package Utils; import java.awt.Image; public class DropTable { String[] itemNames; Image[] itemImages; public DropTable(String[] itemNames, Image[] itemImages){ this.itemNames = itemNames; this.itemImages = itemImages; } public Image[] getItemImages(){ return itemImages; } public String[] getitemNames(){ return itemNames; } public void addItem(String itemName, Image itemImage){ String[] tempStrings = new String[itemNames.length + 1]; Image[] tempImages = new Image[itemImages.length + 1]; for(int i = 0; i < itemNames.length; i++){ tempStrings[i] = itemNames[i]; tempImages[i] = itemImages[i]; } tempStrings[itemNames.length] = itemName; tempImages[itemImages.length] = itemImage; itemNames = tempStrings; itemImages = tempImages; } } Edited July 2, 2018 by Shaft Typos in example source 1 Quote Link to comment Share on other sites More sharing options...
meganide97 Posted July 10, 2018 Share Posted July 10, 2018 Thanks! Quote Link to comment Share on other sites More sharing options...