All pastes #758035 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-11-01 21:03 UTC
rendered paste body
import org.jibble.pircbot.*;import java.util.*;import java.net.*;import java.io.*;

public class MyBot extends PircBot {

	int xpToNextInt;
	Map statsMap = new HashMap();
	Map xpLevelMap = new HashMap();
	Map rsname;
	Map combatHash = new HashMap();
	String skillSearch;
	Vector statsVector = new Vector();
	Vector xpVector = new Vector();
	Vector combatVector = new Vector();
	
	
	public MyBot() {
        this.setName("rsbot-Ves");
		this.setLogin("rsbot-Ves");
	    sendMessage("nickserv", "identify California7");

        try {
		FileInputStream rsnamefis = new FileInputStream("rsnamefos.tmp");
		ObjectInputStream rsnameois = new ObjectInputStream(rsnamefis);
        	rsname = (Map) rsnameois.readObject();
        	rsnameois.close();

        }

        catch (FileNotFoundException e) {
		System.err.println("FileNotFoundException");
		rsname = new HashMap();
        }

        catch (IOException e) {
		System.out.println("IOException");
        }

        catch (ClassNotFoundException e) {
		System.err.println("ClassNotFound");
        }
	
}
    	
	public void onInvite(String targetNick, String sourceNick, String sourceLogin, String sourceHostname, String channel) {
		if (sourceHostname.equalsIgnoreCase("Swift-424F93B5.col.wideopenwest.com")) {
			joinChannel(channel);
		}
		if (sourceNick.startsWith("Vesuvius")) {
			joinChannel(channel);
		}
	}

	public void onDisconnect() {
		try {
			reconnect();
			sendMessage("chanserv", "identify California7");
			joinChannel("#brothor");
		}
		catch (IOException e) {
		}
		catch (IrcException e) {
		}
	}

	public void onJoin(String channel, String sender, String login, String hostname) {
		if (sender.equalsIgnoreCase(getNick())) {
			sendMessage(channel, "Sup Guys");
			setMode(getNick(), "+T");
			setMode(getNick(), "+p");
			setMode(getNick(), "+B");
		}
		else if (sender.startsWith("Vesuvius")) {
			sendAction(channel, "praises his creator");
		}
		else if (sender.startsWith("Rio")) {
			sendMessage(channel, "Welcome Rio BA(Hons) to " + channel.substring(1) + " IRC");
		}
		else if (sender.equals("ddaazz")) {
		}
		else if (sender.startsWith("Mess")) {
			sendAction(channel, "<3s Messiah");
		}
		else if (sender.startsWith("Rio")) {
			sendMessage(channel, "Welcome Rio BA(Hons) to " + channel.substring(1) + " IRC");
		}
		else{
			sendMessage(channel, "Welcome " + sender + " to " + channel.substring(1) + " IRC");
		}
	}

	private void writeStats(String realname2) {
		try {
			String level;
			String totalXP;
			String rank;
			URL statsurl = new URL("http://hiscore.runescape.com/hiscorepersonal.ws?user1=" + realname2);
			URLConnection statsconnect = statsurl.openConnection();
			InputStream statsin = statsconnect.getInputStream();
			BufferedReader urlbr = new BufferedReader(new InputStreamReader(statsin));
			String inputLine;
		        String stats = "";
			while ((inputLine = urlbr.readLine()) != null) {
				stats = stats + inputLine;			
			}
			if (stats.indexOf("does not feature in the hiscores.") != -1) {}
			else {
				stats = stats.substring(stats.indexOf("Overall"), stats.indexOf("</table>"));
				stats = stats.replaceAll("</a></td>", "");
				stats = stats.replaceAll("</td>", "");
				stats = stats.toLowerCase();
				while (stats.indexOf("<td align") != -1) {
					String skill = stats.substring(0, stats.indexOf("<"));
					int index = 0;
					int begin = stats.indexOf('>', index) + 1;
					int end = stats.indexOf('<', begin);
					rank = stats.substring(begin, end).replaceAll(",", "");
					index = end;
					begin = stats.indexOf('>', index) + 1;
					end = stats.indexOf('<', begin);
					level = stats.substring(begin, end);
					index = end;
					begin = stats.indexOf('>', index) + 1;
					end = stats.indexOf('<', begin);
					totalXP = stats.substring(begin, end);
					String skillFormal = skill.substring(0,1).toUpperCase() + skill.substring(1);
					statsVector.add(skillFormal + " - Level: " + level + "   XP: " + totalXP);
					if (skill.equalsIgnoreCase("overall") || level.equals("99")) {
						statsMap.put(skill, "Level: " + level + "    Rank: " + rank + "    XP: " + totalXP);
					}
					else {
						totalXP = totalXP.replaceAll(",", "");
						level = level.replace(",", "");
						int totalXpInt = Integer.parseInt(totalXP);
						int levelInt = Integer.parseInt(level) + 1;
						xpToNextInt = xpTable.xp[levelInt] - totalXpInt;
						String xpToNext = Integer.toString(xpToNextInt);
						xpLevelMap.put(skill, totalXP + " " + level);
						statsMap.put(skill, "Level: " + level + "    Rank: " + rank + "    XP: " + totalXP + "    XP to next: " + xpToNext);
					}
					if (stats.indexOf(".ws?table") != -1) {
						stats = stats.substring(stats.indexOf(">", stats.indexOf(".ws?table")) + 1);
					}
					else {
						stats = "";
						
					}
				}
			}
		}
		
		catch (FileNotFoundException e) {
			System.err.println("FileNotFoundException");
		}
		
		catch (IOException e) {			
		}
	}
	
	private void removeAbbreviations() {
    	if (skillSearch.startsWith("att")) {
    			skillSearch = "attack";
		}
    	if (skillSearch.startsWith("str")) {
    		skillSearch = "strength";
    	}
    	if (skillSearch.startsWith("def")) {
        	skillSearch = "defence";
    	}
    	if (skillSearch.startsWith("hit") || skillSearch.equals("hp")) {
    		skillSearch = "hitpoints";
    	}
    	if (skillSearch.startsWith("range")) {
    		skillSearch = "ranged";
    	}
    	if (skillSearch.startsWith("pray")) {
    		skillSearch = "prayer";
    	}
    	if (skillSearch.startsWith("mag")) {
    		skillSearch = "magic";
    	}
    	if (skillSearch.startsWith("cook")) {
    		skillSearch = "cooking";
    	}
    	if (skillSearch.startsWith("wood") || skillSearch.startsWith("wc")) {
    		skillSearch = "woodcutting";
    	}
    	if (skillSearch.startsWith("fletch")) {
    		skillSearch = "fletching";
    	}
    	if (skillSearch.startsWith("fish")) {
    		skillSearch = "fishing";
    	}
    	if (skillSearch.startsWith("agil")) {
    		skillSearch = "agility";
    	}
    	if (skillSearch.startsWith("fire") || skillSearch.startsWith("fm")) {
    		skillSearch = "firemaking";
    	}
    	if (skillSearch.startsWith("craft")) {
    		skillSearch = "crafting";
    	}
    	if (skillSearch.startsWith("smith")) {
    		skillSearch = "smithing";
    	}
    	if (skillSearch.startsWith("herb")) {
    		skillSearch = "herblore";
    	}
    	if (skillSearch.startsWith("slay")) {
    		skillSearch = "slayer";
    	}
    	if (skillSearch.startsWith("farm")) {
    		skillSearch = "farming";
    	}
    	if (skillSearch.startsWith("rune") || skillSearch.startsWith("rc")) {
    		skillSearch = "runecraft";
    	}
    	if (skillSearch.startsWith("hunt")) {
    		skillSearch = "hunter";
    	}
    	if (skillSearch.startsWith("cons")) {
    		skillSearch = "construction";
    	}
	}
	
	private void writeXP(String realname2, String skillSearch, String goalLevel) {
		removeAbbreviations();
		writeStats(realname2);
		statsVector.clear();	
		int goalLevelInt = 0;
		if (skillSearch.equals("attack") || skillSearch.equals("defence") || skillSearch.equals("strength") || skillSearch.equals("ranged") || skillSearch.equals("hitpoints") || skillSearch.equals("slayer")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
			}
		}
		if (skillSearch.equals("cooking")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int lobster = xpToNextLevel/120 + 1;
				int monkfish = xpToNextLevel/150 + 1;
				int pineapple = xpToNextLevel/195 + 1;
				int shark = xpToNextLevel/210 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(lobster) + ".0      Lobsters cooked");
				xpVector.add("    " + Integer.toString(monkfish) + ".0      Monkfish cooked");
				xpVector.add("    " + Integer.toString(pineapple) + ".0      Pineapple pizzas cooked");
				xpVector.add("    " + Integer.toString(shark) + ".0      Sharks cooked");
			}
		}
		if (skillSearch.equals("woodcutting")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int willow = (int)Math.round(xpToNextLevel/67.5d + 1);
				int maple = xpToNextLevel/100 + 1;
				int yew = xpToNextLevel/175 + 1;
				int magic = xpToNextLevel/250 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(willow) + ".0      Willow trees cut");
				xpVector.add("    " + Integer.toString(maple) + ".0      Maple trees cut");
				xpVector.add("    " + Integer.toString(yew) + ".0      Yew trees cut");
				xpVector.add("    " + Integer.toString(magic) + ".0      Magic trees cut");
			}
		}
		if (skillSearch.equals("fletching")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int unstrungWillow = (int)Math.round(xpToNextLevel/41.5 + 1);
				int unstrungMaple = (int)Math.round(xpToNextLevel/58.25 + 1);
				int yewShort = xpToNextLevel/135 + 1;
				int yewLong = xpToNextLevel/150 + 1;
				int mageLong = xpToNextLevel/183 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(unstrungWillow) + ".0      Willow longs cut");
				xpVector.add("    " + Integer.toString(unstrungMaple) + ".0      Maple longs cut");
				xpVector.add("    " + Integer.toString(yewShort) + ".0      Yew shorts cut and strung");
				xpVector.add("    " + Integer.toString(yewLong) + ".0      Yew longs cut and strung");
				xpVector.add("    " + Integer.toString(mageLong) + ".0      Mage longs cut and strung");
			}
		}
		if (skillSearch.equals("fishing")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int trout = xpToNextLevel/50 + 1;
				int salmon = xpToNextLevel/70 + 1;
				int lobster = xpToNextLevel/90 + 1;
				int swordfish = xpToNextLevel/100 + 1;
				int monkfish = xpToNextLevel/120 + 1;
				int shark = xpToNextLevel/110 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(trout) + ".0      Trout caught");
				xpVector.add("    " + Integer.toString(salmon) + ".0      Salmon caught");
				xpVector.add("    " + Integer.toString(lobster) + ".0      Lobsters caught");
				xpVector.add("    " + Integer.toString(swordfish) + ".0      Swordfish caught");
				xpVector.add("    " + Integer.toString(monkfish) + ".0      Monkfish caught");
				xpVector.add("    " + Integer.toString(shark) + ".0      Sharks caught");
			}
		}
		if (skillSearch.equals("firemaking")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int willow = xpToNextLevel/90 + 1;
				int maple = xpToNextLevel/135 + 1;
				int yew = (int)Math.round(xpToNextLevel/202.5 + 1);
				int mage = (int)Math.round(xpToNextLevel/303.75 + 1);
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(willow) + ".0      Willow logs burnt");
				xpVector.add("    " + Integer.toString(maple) + ".0      Maple logs burnt");
				xpVector.add("    " + Integer.toString(yew) + ".0      Yew logs burnt");
				xpVector.add("    " + Integer.toString(mage) + ".0      Mage logs burnt");
			}
		}
		if (skillSearch.equals("crafting")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int flax = xpToNextLevel/15 + 1;
				int goldAmulet = xpToNextLevel/35 + 1;
				int tiara = (int)Math.round(xpToNextLevel/52.5);
				int glassAndOrb = (int)Math.round(xpToNextLevel/72.5);
				int airBattlestaff = xpToNextLevel/210 + 1;
				int greenHide = xpToNextLevel/62 + 1;
				int blueHide = xpToNextLevel/70 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(goldAmulet) + ".0      Gold amulets crafted");
				xpVector.add("    " + Integer.toString(flax) + ".0      Flax spun");
				xpVector.add("    " + Integer.toString(tiara) + ".0      Tiaras crafted");
				xpVector.add("    " + Integer.toString(glassAndOrb) + ".0      Molten glass made and orb crafted");
				xpVector.add("    " + Integer.toString(greenHide) + ".0      Green hides crafted");
				xpVector.add("    " + Integer.toString(airBattlestaff) + ".0      Orbs made (from seaweed and sand) and air battlestaves crafted");
				xpVector.add("    " + Integer.toString(blueHide) + ".0      Blue hides crafted");
			}
		}

		if (skillSearch.equals("smithing")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int goldOre = (int)Math.round(xpToNextLevel/56.2 + 1);
				int ironSmeltSmith = (int)Math.round(xpToNextLevel/37.5 + 1);
				int steelSmeltSmith = xpToNextLevel/55 + 1;
				int steelSmeltCball = (int)Math.round(xpToNextLevel/43.1);
				int mithSmeltSmith = xpToNextLevel/80 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(goldOre) + ".0      Gold ore smelted (with gauntlets)");
				xpVector.add("    " + Integer.toString(ironSmeltSmith) + ".0      Iron bars smelted and smithed");
				xpVector.add("    " + Integer.toString(steelSmeltSmith) + ".0      Steel bars smelted and smithed");
				xpVector.add("    " + Integer.toString(steelSmeltCball) + ".0      Steel bars smelted and formed into cannonballs");
				xpVector.add("    " + Integer.toString(mithSmeltSmith) + ".0      Mith bars smelted and smithed");
			}
		}
		if (skillSearch.equals("mining")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int iron = xpToNextLevel/35 + 1;
				int coal = xpToNextLevel/50 + 1;
				int gold = xpToNextLevel/65 + 1;
				int mith = xpToNextLevel/80 + 1;
				int addy = xpToNextLevel/95 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(iron) + ".0      Iron ore mined");
				xpVector.add("    " + Integer.toString(coal) + ".0      Coal ore mined");
				xpVector.add("    " + Integer.toString(gold) + ".0      Gold ore mined");
				xpVector.add("    " + Integer.toString(mith) + ".0      Mith ore mined");
				xpVector.add("    " + Integer.toString(addy) + ".0      Addy ore mined");
			}
		}
		if (skillSearch.equals("herblore")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int attack = xpToNextLevel/25 + 1;
				int antipoison = (int)Math.round(xpToNextLevel/37.5 + 1);
				int strength = xpToNextLevel/50 + 1;
				int restore = (int)Math.round(xpToNextLevel/62.5 + 1);
				int energy = (int)Math.round(xpToNextLevel/67.5 + 1);
				int prayer = (int)Math.round(xpToNextLevel/87.5 + 1);
				int superAttack = xpToNextLevel/100 + 1;
				int superRestore = xpToNextLevel/143 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(attack) + ".0      Attack potions mixed");
				xpVector.add("    " + Integer.toString(antipoison) + ".0      Antipoison potions mixed");
				xpVector.add("    " + Integer.toString(strength) + ".0      Strength (or Serum 207) potions mixed");
				xpVector.add("    " + Integer.toString(restore) + ".0      Stat restore potions mixed");
				xpVector.add("    " + Integer.toString(energy) + ".0      Energy potions mixed");
				xpVector.add("    " + Integer.toString(prayer) + ".0      Prayer potions mixed");
				xpVector.add("    " + Integer.toString(superAttack) + ".0      Super Attack potions mixed");
				xpVector.add("    " + Integer.toString(superRestore) + ".0      Super Restore potions mixed");
			}
		}
		if (skillSearch.equals("agility")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int barby = (int)Math.round(xpToNextLevel/153.2 + 1);
				int werewolves = xpToNextLevel/540 + 1;
				int wildy = (int)Math.round(xpToNextLevel/571.5 + 1);
				int apeAtoll = xpToNextLevel/580 + 1;
				int oneHundoTickets = xpToNextLevel/28000 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(barby) + ".0      Barbarian Course laps");
				xpVector.add("    " + Integer.toString(apeAtoll) + ".0      Ape Atoll laps");
				xpVector.add("    " + Integer.toString(wildy) + ".0      Wilderness course laps");
				xpVector.add("    " + Integer.toString(werewolves) + ".0      Werewolves course laps");
				xpVector.add("    " + Integer.toString(oneHundoTickets) + ".0      100 Arena Tickets");
			}
		}
		if (skillSearch.equals("thieving")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int masterFarmer = xpToNextLevel/2350 + 1;
				int autumnSquirk = xpToNextLevel/3000 + 1;
				int summerSquirk = (int)Math.round(xpToNextLevel/571.5 + 1);
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(masterFarmer) + ".0      Master farmers pickpocketed");
				xpVector.add("    " + Integer.toString(autumnSquirk) + ".0      Autumn sq'irk juice");
				xpVector.add("    " + Integer.toString(summerSquirk) + ".0      Summer sq'irk juice");
			}
		}
		if (skillSearch.equals("farming")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int willow = (int)Math.round(xpToNextLevel/1481.5 + 1);
				int maple = xpToNextLevel/3448 + 1;
				int yew = (int)Math.round(xpToNextLevel/7150.5 + 1);
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(willow) + ".0      Willow trees planted and health checked");
				xpVector.add("    " + Integer.toString(maple) + ".0      Maple trees planted and health checked");
				xpVector.add("    " + Integer.toString(yew) + ".0      Yew trees planted and health checked");
			}
		}
		if (skillSearch.equals("runecraft")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int air = xpToNextLevel/5 + 1;
				int fire = xpToNextLevel/7 + 1;
				int cosmic = xpToNextLevel/8 + 1;
				int nature = xpToNextLevel/9 + 1;
				int law = (int)Math.round(xpToNextLevel/9.5 + 1);
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(air) + ".0      Rune essence crafted into air runes");
				xpVector.add("    " + Integer.toString(fire) + ".0      Rune essence crafted into fire runes");
				xpVector.add("    " + Integer.toString(cosmic) + ".0      Rune essence crafted into cosmic runes");
				xpVector.add("    " + Integer.toString(nature) + ".0      Rune essence crafted into nature runes");
				xpVector.add("    " + Integer.toString(law) + ".0      Rune essence crafted into law runes");
			}
		}
		if (skillSearch.equals("hunter")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int tropicalWagtail = (int)Math.round(xpToNextLevel/95.2 + 1);
				int swampLizard = xpToNextLevel/152 + 1;
				int chinchompa = (int)Math.round(xpToNextLevel/198.5 + 1);
				int redSalamander = xpToNextLevel/272 + 1;
				int redChinchompa = xpToNextLevel/265 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(tropicalWagtail) + ".0      Tropical Wagtails Captured");
				xpVector.add("    " + Integer.toString(swampLizard) + ".0      Swamp Lizards Captured");
				xpVector.add("    " + Integer.toString(chinchompa) + ".0      Chinchompas Captured");
				xpVector.add("    " + Integer.toString(redSalamander) + ".0      Red Salamanders Captured");
				xpVector.add("    " + Integer.toString(redChinchompa) + ".0      Red Chinchompas Captured");
			}
		}
		if (skillSearch.equals("construction")) {
			String rawGet = (String) xpLevelMap.get(skillSearch);
			if (rawGet == null) {
				xpVector.add("You are not ranked in skill '" + skillSearch + "'");
			}
			else {
				String[] rawGetSplit = rawGet.split(" ");
				int XP = Integer.parseInt(rawGetSplit[0]);
				int level = Integer.parseInt(rawGetSplit[1]);
				if (goalLevel == null) {
					goalLevelInt =level + 1;
				}
				else {
					goalLevelInt = Integer.parseInt(goalLevel);
				}
				int xpToNextLevel = xpTable.xp[goalLevelInt] - XP;
				int oak = xpToNextLevel/60 + 1;
				int teak = xpToNextLevel/90 + 1;
				int mahogany = xpToNextLevel/140 + 1;
				int clay = xpToNextLevel/10 + 1;
				xpVector.add(Integer.toString(xpToNextLevel) + " xp needed to reach level " + Integer.toString(goalLevelInt) + " from currect level " + Integer.toString(level));
				xpVector.add("    " + Integer.toString(clay) + ".0      Soft clay used");
				xpVector.add("    " + Integer.toString(oak) + ".0      Oak planks used");
				xpVector.add("    " + Integer.toString(teak) + ".0      Teak planks used");
				xpVector.add("    " + Integer.toString(mahogany) + ".0      Mahogany planks used");
			}
		}
	}
	
	private void writePrice(String channel, String sender, String priceSearch) {
		try{
			String sendLocation = channel;
				if (channel == null) {
					sendLocation = sender;
				}
			Vector priceVector = new Vector();
			URL priceurl = new URL("http://www.zybez.net/priceguide.php?search_terms=" + priceSearch + "&search_area=1&price_low=&price_high=&member=1");
			URLConnection priceconnect = priceurl.openConnection();
			InputStream pricein = priceconnect.getInputStream();
			BufferedReader urlbr = new BufferedReader(new InputStreamReader(pricein));
			String inputLine;
			String pricePage = "";
			while ((inputLine = urlbr.readLine()) != null) {
				pricePage = pricePage + inputLine;			
			}
			if (pricePage.indexOf("Your search did not return") != -1) {
				sendMessage(channel, "No items found");
			}
			else if (pricePage.indexOf("<!-- Error title -->") != -1) {
				sendMessage(channel, "Unable to connect to Zybez");
			}
			else {
				pricePage = pricePage.substring(pricePage.indexOf("<!-- Search Results: Start -->"), pricePage.indexOf("<!-- Search Results: End -->"));
				int count = 1;

				
					while (pricePage.indexOf("<!--name-->") != -1 && count <= 20) {
						count = count + 1;
						String name = pricePage.substring(pricePage.indexOf("<!--name-->") + 35, pricePage.indexOf("<", pricePage.indexOf("<!--name-->") + 35));
						String price = pricePage.substring(pricePage.indexOf("<!--price-->") + 36, pricePage.indexOf("<", pricePage.indexOf("<!--price-->") + 35));
						priceVector.add(name + " - " + price);
						pricePage = pricePage.substring(pricePage.indexOf("</td>", pricePage.indexOf("<!--price-->")));
					}
				
				if (priceVector.size() <= 5) {
					sendMessage(channel, "Results provided by http://www.zybez.net (first 20)");
					while (priceVector.size() != 0) {
						sendMessage(sendLocation, priceVector.firstElement().toString());
						priceVector.remove(0);
					}
				}
				else {
					sendMessage(channel, "More than 5 items found.  Sending via PM");
					sendMessage(sender, "Results provided by http://www.zybez.net (first 20)");
					while (priceVector.size() != 0) {
						sendMessage(sender, priceVector.firstElement().toString());
						priceVector.remove(0);
					}
				}
				
			}
			urlbr.close();
			priceVector.clear();
		}
		catch (IOException e) {
			System.out.println("IOException");
		}
		catch (StringIndexOutOfBoundsException e) {
			System.out.println("StringIndexOutOfBounds");
		}
	}

	protected void onMode(String channel, String sourceNick, String sourceLogin, String sourceHostname, String mode) {
                if (sourceNick.equals("Lyucit")) {
			setMode(channel, "-" + mode.substring(1));
			}
		if (sourceNick.equals("Toilet")) {
			setMode(channel, "-" + mode.substring(1));
		}
	}
	
	private void writeNames() {
		try {
			FileOutputStream rsnamefos = new FileOutputStream("rsnamefos.tmp");
			ObjectOutputStream rsnameoos = new ObjectOutputStream(rsnamefos);
			rsnameoos.writeObject(rsname);
			rsnameoos.close();
		}
		catch (FileNotFoundException e) {
			System.err.println("FileNotFoundException");
		}
		catch (IOException e) {
			System.err.println("IOException");
		}
	}
	
	public String handleMessage(String sender, String message) {
		if (message.equals("!help")) {
			return "Channel: " + "Sending you help via msg </n> Sender: "
			+ "!linkme <RSN - Optional>  Stats Graph </n> " 
			+ "!remembername <RSN> Stores the RSN for an IRC nick </n> Sender: " 
			+ "!hiscore <rsn - optional> <skill>  Hiscores</n>Sender: " 
			+ "!price <item> Price Lookup</n>Sender: " 
			+ "!w <word>  dictionary reference to the word</n>Sender: " 
			+ "!urban <word>  Urban dictionary reference to the word. </n>Sender: "
			+ "!xp <user - optional> <skill> <goal level - optional> Calculates ways to get to the goal level (or next level) in the skill.";
		}
		if (message.startsWith("!rsname")) {
			String[] rsnameSplit = message.split(" ");
			return "Channel: " + rsnameSplit[1] + " - " + (String) rsname.get(rsnameSplit[1]);
		}
		if (message.startsWith("!remember")) {
			String[] remember = message.split(" ");
			rsname.put(sender, remember[1]);
			writeNames();
			return "Channel: " + "Associating RSN " + remember[1] + " with nick " + sender;
					}
		if (message.startsWith("!link")) {
			String[] split = message.split(" ");
			if (split.length == 1 ) {
				String realname = (String) rsname.get(sender);
					if (realname == null) {
						realname = sender;
					}
					return "Channel: " + "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + realname;
			}
			else {return "Channel: " + "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + split[1];
			}
		}
		if (message.startsWith("!price")) {
			String priceSearch;
			String[] priceSplit = message.split(" ", 2);
			priceSearch = priceSplit[1].replaceAll(" ", "+");
			writePrice(sender, sender, priceSearch);
			return "";
		}
		if (message.startsWith("!cmb")) {
			String[] combatSplit = message.split(" ");
			String realname2 = combatSplit[1];
			writeCombat(realname2);
			return "";
		}
		if (message.startsWith("!urban")) {
			String[] urbanLookup = message.split(" ", 2);
			urbanLookup[1] = urbanLookup[1].replaceAll(" ", "+");
			return "Channel: " + "http://www.urbandictionary.com/define.php?term=" + urbanLookup[1];
		}
		if (message.startsWith("!w")) {
			String[] word = message.split(" ");
			return "Channel: " + "http://dictionary.reference.com/search?q=" + word[1];
		}
		if (message.startsWith("!pot")) {
			String[] potSplit = message.split(" ");
			String pot = potSplit[1];
			potHash.removePotAbbrevs(pot);
			return "Channel: " + (String) potHash.potHash.get("range");
		}
	
	}
	
	public void onPrivateMessage(String sender, String login, String hostname, String message) {
		if (message.startsWith("!send")) {
			if (sender.startsWith("Vesuvius")) {
				if (message.startsWith("!sendword")) {
					String[] messageSend = message.split(" ", 3);
					sendMessage(messageSend[1], messageSend[2]);			
				}
				if (message.startsWith("!sendaction")) {
					String[] actionSend = message.split(" ", 3);
					sendAction(actionSend[1], actionSend[2]);
				}
			}
		}
		if (message.equals("!help")) {
			sendMessage(sender, "!linkme <RSN - Optional>  Stats Graph");
			sendMessage(sender, "!remembername <RSN> Stores the RSN for an IRC nick");
			sendMessage(sender, "!hiscore <rsn - optional> <skill>  Hiscores");
			sendMessage(sender, "!price <item> Price Lookup");
			sendMessage(sender, "!w <word>  dictionary reference to the word");
		}
		if (message.startsWith("!remember")) {
			String[] remember = message.split(" ");
			rsname.put(sender, remember[1]);
			sendMessage(sender, "Associating RSN " + remember[1] + " with nick " + sender);
			writeNames();
		}
		if (message.startsWith("!link")) {
			String[] split = message.split(" ");
			if (split.length == 1 ) {
				String realname = (String) rsname.get(sender);
					if (realname == null) {
						realname = sender;
					}
					sendMessage(sender, "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + realname);
			}
			else {sendMessage(sender, "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + split[1]);
			}
		}
		if (message.startsWith("!c")) {
			String[] calcSplit = message.split(" ", 2);
			double calcWork = Double.parseDouble(calcSplit[1]);
			String calcAnswer = Double.toString(calcWork);
			sendMessage(sender, calcAnswer);
		}
		if (message.startsWith("!w")) {
			String[] word = message.split(" ");
			sendMessage(sender, "http://dictionary.reference.com/search?q=" + word[1]);
		}
		if (message.startsWith("!hiscore")) {
			String realname2 = null;
			skillSearch = null;
			message = message.toLowerCase();
			String[] hiscoreSplit = message.split(" ");
        	if (hiscoreSplit.length == 2) {
        		realname2 = (String) rsname.get(sender);
        		if (realname2 == null) {
        			realname2 = sender;
        		}
        		skillSearch = hiscoreSplit[1];
        	}
        	if (hiscoreSplit.length == 3) {
        		realname2 = (String) rsname.get(hiscoreSplit[1]);
        		if (realname2 == null) {
        			realname2 = hiscoreSplit[1];
        		}
        		skillSearch = hiscoreSplit[2];
        	}
        	removeAbbreviations();
   			writeStats(realname2);
    		if (skillSearch.equals("all")) {
				while (statsVector.size() != 0) {
					sendMessage(sender, statsVector.firstElement().toString());
					statsVector.remove(0);
				}
    			statsVector.clear();
    		}
    		else {
    			String statMessage = (String) statsMap.get(skillSearch);
    			if (statsMap.isEmpty()) {
    				sendMessage(sender, "User " + realname2 + " does not feature in the highscores");
    			}
    			else if (statMessage == null) {
    				sendMessage(sender, "User " + realname2 + " is unranked for skill " + skillSearch);
        		}
    			else {
    				sendMessage(sender, statMessage);
    			}
    		}
    		statsMap.clear();    
			statsVector.clear();
		}	
	}
	
	public void writeCombat(String realname2) {
		
	}
	
	public void onMessage(String channel, String sender, String login, String hostname, String message) {
		if (message.equals("!help")) {
			sendMessage(channel, "Sending you help via msg");
			sendMessage(sender, "!linkme <RSN - Optional>  Stats Graph");
			sendMessage(sender, "!remembername <RSN> Stores the RSN for an IRC nick");
			sendMessage(sender, "!hiscore <rsn - optional> <skill>  Hiscores");
			sendMessage(sender, "!price <item> Price Lookup");
			sendMessage(sender, "!w <word>  dictionary reference to the word");
			sendMessage(sender, "!urban <word>  Urban dictionary reference to the word.");
			sendMessage(sender, "!xp <user - optional> <skill> <goal level - optional> Calculates ways to get to the goal level (or next level) in the skill.");
		}
		if (message.startsWith("!rsname")) {
			String[] rsnameSplit = message.split(" ");
			sendMessage(channel, rsnameSplit[1] + " - " + (String) rsname.get(rsnameSplit[1]));
		}
		if (message.startsWith("!remember")) {
			String[] remember = message.split(" ");
			rsname.put(sender, remember[1]);
			sendMessage(channel, "Associating RSN " + remember[1] + " with nick " + sender);
			writeNames();
		}
		if (message.startsWith("!link")) {
			String[] split = message.split(" ");
			if (split.length == 1 ) {
				String realname = (String) rsname.get(sender);
					if (realname == null) {
						realname = sender;
					}
					sendMessage(channel, "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + realname);
			}
			else {sendMessage(channel, "http://guilds.sinthos-soft.com/rs/stats/rs_levels.php?user=" + split[1]);
			}
		}
		if (message.startsWith("!price")) {
			String priceSearch;
			String[] priceSplit = message.split(" ", 2);
			priceSearch = priceSplit[1].replaceAll(" ", "+");
			writePrice(channel, sender, priceSearch);
		}
		if (message.startsWith("!cmb")) {
			String[] combatSplit = message.split(" ");
			String realname2 = combatSplit[1];
			writeCombat(realname2);
		}
		if (message.startsWith("!urban")) {
			String[] urbanLookup = message.split(" ", 2);
			urbanLookup[1] = urbanLookup[1].replaceAll(" ", "+");
			sendMessage(channel, "http://www.urbandictionary.com/define.php?term=" + urbanLookup[1]);
		}
		if (message.startsWith("!w")) {
			String[] word = message.split(" ");
			sendMessage(channel, "http://dictionary.reference.com/search?q=" + word[1]);
		}
		if (message.startsWith("!pot")) {
			String[] potSplit = message.split(" ");
			String pot = potSplit[1];
			potHash.removePotAbbrevs(pot);
			sendMessage(channel, (String) potHash.potHash.get("range"));
		}
		if (message.startsWith("!xp")) {
			String realname2 = null;
			skillSearch = null;
			String goalLevel = null;
			message = message.toLowerCase();
			String[] hiscoreSplit = message.split(" ");
        	if (hiscoreSplit.length == 2) {
        		realname2 = (String) rsname.get(sender);
        		if (realname2 == null) {
        			realname2 = sender;
        		}
        		skillSearch = hiscoreSplit[1];
        		removeAbbreviations();
         	}
        	if (hiscoreSplit.length == 3) {
        		try {
        			Integer.parseInt(hiscoreSplit[2]);
        			goalLevel = hiscoreSplit[2];
        			skillSearch = hiscoreSplit[1];
        			realname2 = (String) rsname.get(sender);
        			if (realname2 == null) {
        				realname2 = sender;
        			}
        			removeAbbreviations();
          		}
        		catch (NumberFormatException e) {
            			realname2 = (String) rsname.get(hiscoreSplit[1]);
            			if (realname2 == null) {
            				realname2 = hiscoreSplit[1];
            			}
            			skillSearch = hiscoreSplit[2];
            			goalLevel = null;
            			removeAbbreviations();
        		}
        	}
        	if (hiscoreSplit.length == 4) {
        		realname2 = (String) rsname.get(hiscoreSplit[1]);
        		if (realname2 == null) {
        			realname2 = hiscoreSplit[1];
        		}
        		skillSearch = hiscoreSplit[2];
        		goalLevel = hiscoreSplit[3];
        		removeAbbreviations();
        	}
			writeXP(realname2, skillSearch, goalLevel);
			if (xpVector.size() <= 6) {
				while (xpVector.size() != 0) {
					sendMessage(channel, xpVector.firstElement().toString());
					xpVector.remove(0);
				}
				xpVector.clear();
			}
			else {
				sendMessage(channel, "Stats over six lines.  Sending via PM");
    			while (xpVector.size() != 0) {
					sendMessage(sender, xpVector.firstElement().toString());
					xpVector.remove(0);
				}
    			xpVector.clear();
			}
		}		
		if (message.startsWith("!hiscore")) {
			String realname2 = null;
			skillSearch = null;
			message = message.toLowerCase();
			String[] hiscoreSplit = message.split(" ");
        	if (hiscoreSplit.length == 2) {
        		realname2 = (String) rsname.get(sender);
        		if (realname2 == null) {
        			realname2 = sender;
        		}
        		skillSearch = hiscoreSplit[1];
        	}
        	if (hiscoreSplit.length == 3) {
        		realname2 = (String) rsname.get(hiscoreSplit[1]);
        		if (realname2 == null) {
        			realname2 = hiscoreSplit[1];
        		}
        		skillSearch = hiscoreSplit[2];
        	}
        	int i = 0;
        	removeAbbreviations();
   			writeStats(realname2);
    		if (skillSearch.equals("all")) {
    			if (statsVector.size() <= 5) {
    				while (statsVector.size() > i) {
    					sendMessage(channel, statsVector.get(i).toString());
    					i++;
    				}
    				statsVector.clear();
    			}
    				else {
    					sendMessage(channel, "Stats over six lines.  Sending via PM");
        				while (statsVector.size() > i) {
    						sendMessage(sender, statsVector.get(i).toString());
    						i++;
    					}
        				statsVector.clear();
    				}
    			}
    			else {
    				String statMessage = (String) statsMap.get(skillSearch);
    				if (statsMap.isEmpty()) {
    					sendMessage(channel, "User " + realname2 + " does not feature in the highscores");
    				}
    				else if (statMessage == null) {
    					sendMessage(channel, "User " + realname2 + " is unranked for skill " + skillSearch);
        			}
    				else {
    					sendMessage(channel, statMessage);
    				}
    			}
    			statsMap.clear();    
				statsVector.clear();
		}	
	}
}