private void handleScreenSettings(Player player, Packet packet) {
		    int windowType = packet.readByte() & 0xff;
		    int windowWidth = packet.readUShort();
		    int windowHeight = packet.readUShort();
		    int junk = packet.readByte() & 0xff;
		    player.getPackets().configureGameScreen(windowType);
	    }
Esempio n. 2
0
        public void handlePacket(Player player, Packet packet) {
		    int size = packet.getLength();
		    if(packet.getPacketId() == PacketHandlers.PacketId.WALK_2) {
			    size -= 14;
		    }
            player.getWalkingQueue().resetWalkingQueue();
		    int steps = (size - 5) / 2;

            if (steps > WalkingQueue.MAX_WALKING_WAYPOINTS)
            {
                misc.WriteError("Warning: Walk command contains too many steps (" + steps + ") currently set to 50 [maybe need increase?]");
                return;
            }

            player.getWalkingQueue().setIsRunning(packet.readByteA() == 1);
		    bool following = false;
            if (!canWalk(player, packet, following))
            {
                player.getPackets().clearMapFlag();
                player.getWalkingQueue().resetWalkingQueue();
                return;
            }

            int firstX = packet.readUShort() - (player.getLocation().getRegionX() - 6) * 8;
            int firstY = packet.readShortA() - (player.getLocation().getRegionY() - 6) * 8;
		    player.getWalkingQueue().addToWalkingQueue(firstX, firstY);

            for (int i = 0; i < steps; i++) //all the waypoints.
                player.getWalkingQueue().addToWalkingQueue((packet.readByteA() + firstX), (packet.readByteS() + firstY));

            if (player.getTeleportTo() != null) //is teleporting?
                player.getWalkingQueue().resetWalkingQueue();


		    if (player.getTemporaryAttribute("homeTeleporting") != null) {
			    player.removeTemporaryAttribute("homeTeleporting");
		    }
		    SkillHandler.resetAllSkills(player);
		    if (player.getTrade() != null)
			    player.getTrade().decline();
            if (player.getDuel() != null) {
                if (player.getDuel().getStatus() < 4)
                    player.getDuel().declineDuel();
                else if (player.getDuel().getStatus() == 8)
                    player.getDuel().recieveWinnings(player);
            }
			if (player.getTarget() != null) {
				if (!following && player.getTarget().getAttacker() != null && player.getTarget().getAttacker().Equals(player))
					player.getTarget().setAttacker(null);
			}		    
            
            if (!following) {
			    player.getFollow().setFollowing(null);
				player.setTarget(null);
				player.removeTemporaryAttribute("autoCasting");
			    if (player.getEntityFocus() != 65535)
				    player.setEntityFocus(65535);
		    }
		    player.getPackets().closeInterfaces();
	    }
        private void handleExamineNPC(Player player, Packet packet)
        {
            int npcId = packet.readUShort();
            if (npcId < 0 || npcId > NpcData.getTotalNpcDefinitions() || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
                return;

            player.getPackets().sendMessage(NpcData.forId(npcId).getExamine());
        }
	    private void handleGeSearch(Player player, Packet packet) {
		    int item = packet.readUShort();
		    if (item < 0 || item > 16000) {
			    return;
		    }
		    if (player.getGESession() == null) {
                player.getPackets().sendInterface(0, 752, 6, 137); // Removes the item search
			    return;
		    }
		    player.getGESession().updateSearchItem(item);
	    }
	    private void handleClickTen(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 10: interfaceId: " + interfaceId);
	    }
	    private void handleActionButton3(Player player, Packet packet) {
		    int id = packet.readUShort();
		    int interfaceId = packet.readUShort();
		    int junk = packet.readLEShort();
		
		    int logType = (int) (player.getTemporaryAttribute("fletchType") == null ? -1 : (int) player.getTemporaryAttribute("fletchType")); // Bows (Fletching).
		    int ammoType = (int) (player.getTemporaryAttribute("ammoType") == null ? -1 : (int) player.getTemporaryAttribute("ammoType")); // Arrows (Fletching).
		    int boltType = (int) (player.getTemporaryAttribute("ammoType2") == null ? -1 : (int) player.getTemporaryAttribute("ammoType2")); // Bolts (Fletching).
		    int xbowType = (int) (player.getTemporaryAttribute("bowType2") == null ? -1 : (int) player.getTemporaryAttribute("bowType2")); // Xbows (Fletching).
		    int bowType = (int)  (player.getTemporaryAttribute("bowType") == null ? -1 : (int) player.getTemporaryAttribute("bowType")); // Longbow/Shortbow stringing (Fletching).
		    int grindItem = (int) (player.getTemporaryAttribute("herbloreGrindItem") == null ? -1 : (int) player.getTemporaryAttribute("herbloreGrindItem")); // item to be grinded (Herblore)
		    bool stringingBow = (bool) (player.getTemporaryAttribute("stringingBow") == null ? false : (bool) player.getTemporaryAttribute("stringingBow")); // Stringing bow/xbow (Fletching)
		    int unfinishedPotion = (int) (player.getTemporaryAttribute("unfinishedPotion") == null ? -1 : (int) player.getTemporaryAttribute("unfinishedPotion")); // unfinished potion to make (Herblore)
		    int completePotion = (int) (player.getTemporaryAttribute("completePotion") == null ? -1 : (int) player.getTemporaryAttribute("completePotion")); // unfinished potion to make (Herblore)
		    int cookItem = (int) (player.getTemporaryAttribute("meatItem") == null ? -1 : (int) player.getTemporaryAttribute("meatItem")); // item to cook (Cooking)
		    int dialogueStatus = (int) (player.getTemporaryAttribute("dialogue") == null ? -1 : (int) player.getTemporaryAttribute("dialogue")); // Dialogue status
		    int craftType = (int) (player.getTemporaryAttribute("craftType") == null ? -1 : (int) player.getTemporaryAttribute("craftType")); // 'Category' of item to craft
		    int leatherCraft = (int) (player.getTemporaryAttribute("leatherCraft") == null ? -1 : (int) player.getTemporaryAttribute("leatherCraft")); // Type of leather item to craft (high lvl hides)
		    int boltTips = (int) (player.getTemporaryAttribute("boltTips") == null ? -1 : (int) player.getTemporaryAttribute("boltTips")); // Type of bolt tips to cut
            JewelleryTeleport.JewellerySlot js = (JewelleryTeleport.JewellerySlot)player.getTemporaryAttribute("jewelleryTeleport") == null ? null : (JewelleryTeleport.JewellerySlot)player.getTemporaryAttribute("jewelleryTeleport");
		    Console.WriteLine("ACTIONBUTTON-3 "+ id);
		    if (JewelleryTeleport.teleport(player, id, js)) {
			    return;
		    }
		    switch(id) {
			    case 2:
				    if (player.getDuel() != null) {
					    if (player.getDuel().getStatus() == 6) {
						    player.getDuel().finishDuel(true, true);
						    player.getPackets().sendMessage("You climb through the trapdoor and forfeit the duel.");
						    break;
					    }
					    break;
				    } else
				    if (player.getTemporaryAttribute("barrowTunnel") != null) {
					    Barrows.verifyEnterTunnel(player);
					    return;
				    } else if (dialogueStatus == 1005) {
					    Slayer.doDialogue(player, 1006);
					    break;
				    } else if (dialogueStatus == 1009) {
					    Slayer.doDialogue(player, 1010);
					    break;
				    } else if (dialogueStatus == 1002) {
					    Slayer.doDialogue(player, 1013);
					    break;
				    } else if (dialogueStatus == 1017) {
					    Slayer.doDialogue(player, 1019);
					    break;
				    } else if (dialogueStatus == 1029) {
					    Slayer.doDialogue(player, 1029);
					    break;
				    } else if (dialogueStatus == 1053) {
					    Slayer.doDialogue(player, 1055);
					    break;
				    } else if (dialogueStatus > 1000) {
					    Slayer.doDialogue(player, 1006);
					    break;
				    } else if (dialogueStatus == 7) {
					    AgilityArena.doDialogue(player, 7);
					    break;
				    }  else if (dialogueStatus == 29) {
					    AgilityArena.doDialogue(player, 29);
					    break;
				    }  else if (dialogueStatus == 37) {
					    AgilityArena.doDialogue(player, 37);
					    break;
				    }  else if (dialogueStatus == 46) {
					    AgilityArena.doDialogue(player, 46);
					    break;
				    } else if (dialogueStatus == 79) {
					    WarriorGuild.talkToKamfreena(player, 79);
					    break;
				    } else if (dialogueStatus == 103) {
					    BrokenBarrows.showBobDialogue(player, 103);
					    break;
				    } else if (dialogueStatus == 109) {
					    BrokenBarrows.showBobDialogue(player, 109);
					    break;
				    } else if(dialogueStatus == 159) {
					    HomeArea.showAliDialogue(player, 159);
					    break;
				    } else if(dialogueStatus == 207) {
					    AlKharid.showAliDialogue(player, 207);
					    break;
				    } else if(dialogueStatus == 242) {
					    BoatOptions.showBentleyDialogue(player, 242);
					    break;
				    } else if (dialogueStatus == 450) {
					    FarmingAmulet.displayAllotmentOptions(player);
					    break;
				    } else if (dialogueStatus == 451) {
					    FarmingAmulet.teleportToPatch(player, 0);
					    break;
				    } else if (dialogueStatus == 452) {
					    FarmingAmulet.teleportToPatch(player, 4);
					    break;
				    } else if (dialogueStatus == 453) {
					    FarmingAmulet.teleportToPatch(player, 8);
					    break;
				    }
				    break;
		
			    case 13:
				    if (logType != -1) {
					    MakeBows.cutLog(player, 1, logType, 0, stringingBow, true);
					    break;
				    } else  if (craftType == 1 || craftType == 2) { // Clay pie dish
					    Clay.craftClay(player, 5, craftType, 1, true);
					    break;
				    } else if (leatherCraft != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 8));
					    break;
				    } else if (craftType == 6) {// Crossbow string
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 2));
					    break;
				    }
				    break;
				
			    case 12:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 5, logType, 0, stringingBow, true);
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 1, logType, 1, stringingBow, true);
					    break;
				    } else  if (craftType == 1 || craftType == 2) { // Clay pie dish
					    Clay.craftClay(player, 10, craftType, 1, true);
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 1, 4, leatherCraft, true); // Vambraces
					    break;
				    } else if (craftType == 6) {// Bowstring
					    Spinning.craftSpinning(player, 1, 1, true);
					    break;
				    }
				    break;
				
			    case 11:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 10, logType, 0, stringingBow, true);
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 1, logType, 1, stringingBow, true);
					    break;
				    }  else  if (craftType == 1 || craftType == 2) { // Clay pie dish
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(306, 1));
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 5, 4, leatherCraft, true); // Vambraces
					    break;
				    } else if (craftType == 6) {// Bowstring
					    Spinning.craftSpinning(player, 5, 1, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Tiara
					    Silver.newSilverItem(player, 1, 121, true);
					    break;
				    }
				    break;
				
			    case 10:
				    if (logType == 0) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 0));
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 5, logType, 1, stringingBow, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay pot
					    Clay.craftClay(player, 1, craftType, 0, true);
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 10, 4, leatherCraft, true); // Vambraces
					    break;
				    } else if (craftType == 6) {// Bowstring
					    Spinning.craftSpinning(player, 10, 1, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Tiara
					    Silver.newSilverItem(player, 5, 121, true);
					    break;
				    }
				    break;
				
			    case 17:
				    if (logType != -1) {
					    MakeBows.cutLog(player, 1, logType, 1, stringingBow, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay Bowl
					    Clay.craftClay(player, 5, craftType, 2, true);
				    }
				    break;
				
			    case 16:
				    if (logType != -1) {
					    MakeBows.cutLog(player, 5, logType, 1, stringingBow, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay Bowl
					    Clay.craftClay(player, 10, craftType, 2, true);
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 1, 8, leatherCraft, true); // Chaps
					    break;
				    } else if (craftType == 6) {// Crossbow string
					    Spinning.craftSpinning(player, 1, 2, true);
					    break;
				    }
				    break;
				
			    case 15:
				    if (logType != -1) {
					    MakeBows.cutLog(player, 10, logType, 1, stringingBow, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay Bowl
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(306, 2));
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 5, 8, leatherCraft, true); // Chaps
					    break;
				    } else if (craftType == 6) {// Crossbow string
					    Spinning.craftSpinning(player, 5, 2, true);
					    break;
				    }
				    break;
				
			    case 14:
				        if (craftType == 1 || craftType == 2) { // Clay pie dish
					    Clay.craftClay(player, 1, craftType, 1, true);
					    break;
				        } else if (logType == 0 && !stringingBow) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 1));
					    break;
				    } else if (logType > 0){
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 1));
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 10, 8, leatherCraft, true); // Chaps
					    break;
				    } else if (craftType == 6) {// Crossbow string
					    Spinning.craftSpinning(player, 10, 2, true);
					    break;
				    }
				    break;
				
			    case 9:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 1, logType, 2, false, true);
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 10, logType, 1, stringingBow, true);
					    break;
				    }  else if (craftType == 1 || craftType == 2) { // Clay pot
					    Clay.craftClay(player, 5, craftType, 0, true);
					    break;
				    }  else if (leatherCraft != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 4));
					    break;
				    } else if (craftType == 6) {// Bowstring
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 1));
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Tiara
					    Silver.newSilverItem(player, 10, 121, true);
					    break;
				    }
				    break;
				
			    case 8:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 5, logType, 2, false, true);
					    break;
				    } else if (logType > 0){
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 1));
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay pot
					    Clay.craftClay(player, 10, craftType, 0, true);
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 1, 0, leatherCraft, true); // Body
					    break;
				    } else if (craftType == 6) {// Ball of wool
					    Spinning.craftSpinning(player, 1, 0, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Tiara
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(303, 121));
					    break;
				    } else if (dialogueStatus < 1000) {
					    Dialogue.doDialogue(player, dialogueStatus);
					    break;
				    }
				    break;
				
			    case 7:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 10, logType, 2, false, true);
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 1, logType, 0, stringingBow, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay pot
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(306, 0));
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 5, 0, leatherCraft, true); // Body
					    break;
				    } else if (craftType == 6) {// Ball of wool
					    Spinning.craftSpinning(player, 5, 0, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Unholy symbol
					    Silver.newSilverItem(player, 1, 120, true);
					    break;
				    } else if (dialogueStatus > 1000) {
					    Slayer.doDialogue(player, dialogueStatus);
					    break;
				    } else if (dialogueStatus < 1000) {
					    Dialogue.doDialogue(player, dialogueStatus);
					    break;
				    }
				    break;
				
			    case 6:
				    if (logType == 0 && !stringingBow) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 2));
					    break;
				    } else if (stringingBow && bowType != -1) {
					    MakeBows.cutLog(player, 1, logType, bowType, true, true);
					    break;
				    } else if (boltTips > -1) {
					    MakeAmmo.makeBoltTip(player, boltTips, 1, true);
					    break;
				    } else if (xbowType != -1) {
					    MakeXbow.createXbow(player, 1, xbowType, stringingBow, true);
					    break;
				    } else if (grindItem != -1) {
					    Herblore.grindIngredient(player, 1, true);
					    break;
				    } else if (unfinishedPotion != -1) {
					    Herblore.makeUnfinishedPotion(player, 1, true);
					    break;
				    } else if (completePotion != -1) {
					    Herblore.completePotion(player, 1, true);
					    break;
				    } else if (cookItem != -1) {
					    Cooking.cookItem(player, 1, true, player.getTemporaryAttribute("cookingFireLocation") != null);
					    break;
				    } else if (logType > 0){
					    MakeBows.cutLog(player, 5, logType, 0, false, true);
					    break;
				    } else if (leatherCraft != -1) {
					    Leather.craftDragonHide(player, 10, 0, leatherCraft, true); // Body
					    break;
				    } else if (craftType == 6) {// Ball of wool
					    Spinning.craftSpinning(player, 10, 0, true);
					    break;
				    } else if (craftType >= 50 && craftType <= 60) { // Cut gem
					    Jewellery.cutGem(player, craftType, 1, true);
					    break;
				    } else if (craftType >= 100 && craftType <= 110) { // String amulet
					    Jewellery.stringAmulet(player, craftType, 1, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Unholy symbol
					    Silver.newSilverItem(player, 5, 120, true);
					    break;
				    } else if (dialogueStatus > 1000) {
					    Slayer.doDialogue(player, dialogueStatus);
					    break;
				    } else if (dialogueStatus == 7) {
					    AgilityArena.doDialogue(player, 41);
					    break;
				    } else if(dialogueStatus == 242) {
					    BoatOptions.showBentleyDialogue(player, 246);
					    break;
				    } else if (dialogueStatus == 451 || dialogueStatus == 452 || dialogueStatus == 453) {
					    FarmingAmulet.showOptions(player, 12622);
					    break;
				    } else if (dialogueStatus < 1000) {
					    Dialogue.doDialogue(player, dialogueStatus);
					    break;
				    }
				    break;
				
			    case 5:
				    if (ammoType != -1) {
					    MakeAmmo.createAmmo(player, 1, ammoType, false, true);
					    break;
				    } else if (stringingBow && bowType != -1) {
					    MakeBows.cutLog(player, 5, logType, bowType, true, true);
					    break;
				    } else if (boltType != -1) {
					    MakeAmmo.createAmmo(player, 1, boltType, true, true);
					    break;
				    } else if (xbowType != -1) {
					    MakeXbow.createXbow(player, 5, xbowType, stringingBow, true);
					    break;
				    } else if (grindItem != -1) {
					    Herblore.grindIngredient(player, 5, true);
					    break;
				    } else if (unfinishedPotion != -1) {
					    Herblore.makeUnfinishedPotion(player, 5, true);
					    break;
				    } else if (completePotion != -1) {
					    Herblore.completePotion(player, 5, true);
					    break;
				    } else if (cookItem != -1) {
					    Cooking.cookItem(player, 5, true, player.getTemporaryAttribute("cookingFireLocation") != null);
					    break;
				    } else if (logType != -1) {
					    MakeBows.cutLog(player, 10, logType, 0, false, true);
					    break;
				    } else if (dialogueStatus == 1002) {
					    Slayer.doDialogue(player, 1024);
					    break;
				    } else if (dialogueStatus == 1053) {
					    Slayer.doDialogue(player, 1061);
					    break;
				    } else if (dialogueStatus > 1000) {
					    Slayer.doDialogue(player, dialogueStatus);
					    break;
				    } else if (dialogueStatus == 7) {
					    AgilityArena.doDialogue(player, 34);
					    break;
				    } else if (leatherCraft != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 0));
					    break;
				    } else if (craftType == 6) {// Ball of wool
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(304, 0));
					    break;
				    } else if (craftType >= 50 && craftType <= 60) { // Cut gem
					    Jewellery.cutGem(player, craftType, 5, true);
					    break;
				    } else if (craftType >= 100 && craftType <= 110) { // String amulet
					    Jewellery.stringAmulet(player, craftType, 5, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Unholy symbol
					    Silver.newSilverItem(player, 10, 120, true);
					    break;
				    }  else if (dialogueStatus == 46) {
					    AgilityArena.doDialogue(player, 54);
					    break;
				    } else if(dialogueStatus == 242) {
					    BoatOptions.showBentleyDialogue(player, 245);
					    break;
				    } else if (dialogueStatus == 451) {
					    FarmingAmulet.teleportToPatch(player, 3);
					    break;
				    } else if (dialogueStatus == 452) {
					    FarmingAmulet.teleportToPatch(player, 7);
					    break;
				    } else if (dialogueStatus == 453) {
					    FarmingAmulet.teleportToPatch(player, 11);
					    break;
				    } else if (dialogueStatus == 450) {
					    player.getPackets().closeInterfaces();
					    break;
				    } else if (dialogueStatus != -1 && dialogueStatus < 1000){
					    Dialogue.doDialogue(player, dialogueStatus);
					    break;
				    } else if (boltTips > -1) {
					    MakeAmmo.makeBoltTip(player, boltTips, 5, true);
					    break;
				    }
				    break;
				
			    case 4:
				    if (ammoType != -1) {
					    MakeAmmo.createAmmo(player, 5, ammoType, false, true);
					    break;
				    } else if (boltType != -1) {
					    MakeAmmo.createAmmo(player, 5, boltType, true, true);
					    break;
				    } else if (xbowType != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 0));
					    break;
				    } else if (stringingBow && bowType != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 1));
					    break;
				    } else if (grindItem != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 2));
					    break;
				    } else if (unfinishedPotion != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 3));
					    break;
				    } else if (completePotion != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 4));
					    break;
				    } else if (cookItem != -1) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 5));
					    break;
				    } else if (logType != -1){
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 0));
					    break;
				    } else if (craftType >= 50 && craftType <= 60) { // Cut gem
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, craftType));
					    break;
				    } else if (craftType >= 100 && craftType <= 110) { // String amulet
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, craftType));
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Unholy symbol
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(303, 120));
					    break;
				    } else if (dialogueStatus == 1053) {
					    Slayer.doDialogue(player, 1059);
					    break;
				    } else if (dialogueStatus == 1002) {
					    Slayer.doDialogue(player, 1025);
					    break;
				    } else if (dialogueStatus == 7) {
					    AgilityArena.doDialogue(player, 24);
					    break;
				    }  else if (dialogueStatus == 46) {
					    AgilityArena.doDialogue(player, 51);
					    break;
				    } else if (dialogueStatus == 109) {
					    BrokenBarrows.showBobDialogue(player, 114);
					    break;
				    } else if (dialogueStatus == 140 || dialogueStatus == 141) {
					    player.getPackets().closeInterfaces();
					    break;
				    } else if(dialogueStatus == 159) {
					    HomeArea.showAliDialogue(player, 177);
					    break;
				    } else if(dialogueStatus == 242) {
					    BoatOptions.showBentleyDialogue(player, 244);
					    break;
				    } else if (boltTips > -1) { // Cut bolt tips
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(309, 6));
					    break;
				    } else if (dialogueStatus == 451) {
					    FarmingAmulet.teleportToPatch(player, 2);
					    break;
				    } else if (dialogueStatus == 452) {
					    FarmingAmulet.teleportToPatch(player, 6);
					    break;
				    } else if (dialogueStatus == 450) {
					    FarmingAmulet.displayFruitTreeOptions(player);
					    break;
				    } else if (dialogueStatus == 453) {
					    FarmingAmulet.teleportToPatch(player, 10);
					    break;
				    }
				    break;
				
			    case 3:
				    if (player.getDuel() != null) {
					    player.getPackets().closeChatboxInterface();
					    break;
				    } else if (ammoType != -1) {
					    MakeAmmo.createAmmo(player, 10, ammoType, false, true);
					    break;
				    } else if (boltType != -1) {
					    MakeAmmo.createAmmo(player, 10, boltType, true, true);
					    break;
				    } else if (stringingBow && bowType != -1) {
					    MakeBows.cutLog(player, player.getInventory().getItemAmount(1777), logType, bowType, true, true);
					    break;
				    } else if (xbowType != -1) {
					    MakeXbow.createXbow(player, player.getInventory().getItemAmount(9438), xbowType, stringingBow, true);
					    break;
				    } else if (grindItem != -1) {
					    Herblore.grindIngredient(player, 28, true);
					    break;
				    } else if (unfinishedPotion != -1) {
					    Herblore.makeUnfinishedPotion(player, 28, true);
					    break;
				    } else if (completePotion != -1) {
					    Herblore.completePotion(player, 28, true);
					    break;
				    } else if (cookItem != -1) {
					    Cooking.cookItem(player, 28, true, player.getTemporaryAttribute("cookingFireLocation") != null);
					    break;
				    } else if (bowType != -1 && logType != -1) {
					    MakeBows.cutLog(player, 10, logType, bowType, false, true);
					    break;
				    } else if (craftType >= 50 && craftType <= 60) { // Cut gem
					    Jewellery.cutGem(player, craftType, 27, true);
					    break;
				    } else if (craftType >= 100 && craftType <= 110) { // String amulet
					    Jewellery.stringAmulet(player, craftType, 27, true);
					    break;
				    } else if (craftType >= 120 && craftType <= 130) { // Unholy symbol
					    Silver.newSilverItem(player, 27, 120, true);
					    break;
				    } else if (dialogueStatus == 1017) {
					    Slayer.doDialogue(player,  1017);
					    break;
				    } else if (dialogueStatus == 1053) {
					    Slayer.doDialogue(player, 1057);
					    break;
				    } else if (dialogueStatus == 1002) {
					    Slayer.doDialogue(player, 1021);
					    break;
				    } else if (dialogueStatus > 1000) {
					    Slayer.doDialogue(player, dialogueStatus);
					    break;
				    } else if (dialogueStatus == 7) {
					    AgilityArena.doDialogue(player, 17);
					    break;
				    }  else if (dialogueStatus == 29) {
					    AgilityArena.doDialogue(player, 33);
					    break;
				    }  else if (dialogueStatus == 37) {
					    AgilityArena.doDialogue(player, 39);
					    break;
				    }  else if (dialogueStatus == 46) {
					    AgilityArena.doDialogue(player, 48);
					    break;
				    } else if (dialogueStatus == 79) {
					    WarriorGuild.talkToKamfreena(player, 80);
					    break;
				    } else if (dialogueStatus == 103) {
					    BrokenBarrows.showBobDialogue(player, 105);
					    break;
				    } else if (dialogueStatus == 109) {
					    BrokenBarrows.showBobDialogue(player, 111);
					    break;
				    } else if(dialogueStatus == 159) {
					    HomeArea.showAliDialogue(player, 162);
					    break;
				    } else if(dialogueStatus == 207) {
					    AlKharid.showAliDialogue(player, 210);
					    break;
				    } else if(dialogueStatus == 242) {
					    BoatOptions.showBentleyDialogue(player, 243);
					    break;
				    } else if (boltTips > -1) {
					    MakeAmmo.makeBoltTip(player, boltTips, player.getInventory().getItemAmount((int)FletchingData.GEMS[boltTips][0]), true);
					    break;
				    } else if (dialogueStatus == 451) {
					    FarmingAmulet.teleportToPatch(player, 1);
					    break;
				    } else if (dialogueStatus == 450) {
					    FarmingAmulet.displayTreeOptions(player);
					    break;
				    } else if (dialogueStatus == 452) {
					    FarmingAmulet.teleportToPatch(player, 5);
					    break;
				    } else if (dialogueStatus == 453) {
					    FarmingAmulet.teleportToPatch(player, 9);
					    break;
				    }
				    break;
				
			    case 21:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 1, logType, 3, false, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay plant pot
					    Clay.craftClay(player, 5, craftType, 3, true);
					    break;
				    }
				    break;
				
			    case 20:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 5, logType, 3, false, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay plant pot
					    Clay.craftClay(player, 10, craftType, 3, true);
					    break;
				    }
				    break;

			    case 19:
				    if (logType == 0) {
					    MakeBows.cutLog(player, 10, logType, 3, false, true);
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay plant pot
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(306, 3));
					    break;
				    }
				    break;
	
			    case 18:
				    if (logType == 0) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(305, 3));
					    break;
				    } else if (craftType == 1 || craftType == 2) { // Clay Bowl
					    Clay.craftClay(player, 1, craftType, 2, true);
					    break;
				    }
				    break;
				
			    case 22:
				        if (craftType == 1 || craftType == 2) { // Clay plant pot
					    Clay.craftClay(player, 1, craftType, 3, true);
					    break;
				    }
				    break;
				
			    case 26:
				        if (craftType == 1 || craftType == 2) { // Clay lid
					    Clay.craftClay(player, 1, craftType, 4, true);
					    break;
				    }
				    break;
				
			    case 25:
				        if (craftType == 1 || craftType == 2) { // Clay lid
					    Clay.craftClay(player, 5, craftType, 4, true);
					    break;
				    }
				    break;
				
			    case 24:
				        if (craftType == 1 || craftType == 2) { // Clay lid
					    Clay.craftClay(player, 10, craftType, 4, true);
					    break;
				    }
				    break;
				
			    case 23:
				    if (craftType == 1 || craftType == 2) { // Clay lid
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(306, 4));
					    break;
				    }
				    break;
				
			    case 1:
				    switch(id) {
					    case 1:
						    if (dialogueStatus == 1002) {
							    Slayer.doDialogue(player, dialogueStatus);
							    break;
						    } else if (dialogueStatus == 1053) {
							    Slayer.doDialogue(player, dialogueStatus);
							    break;
						    }
						    break;
				    }
				    break;
				
			    default:
				    Console.WriteLine("ACTIONBUTTON3 = " + id);
				    break;
		    }
		    if (dialogueStatus == -1) {
			    player.getPackets().closeInterfaces();
		    }
	    }
	    private void handleClickFive(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 5: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 763: // Bank inventory - X.
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
				    break;
				
			    case 762: // Bank - X.
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
				    break;
				
			    case 336: // Trade inventory - trade X.
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
				    break;
				
			    case 335: // Trade interface - remove X.
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
				    break;
				
 			    case 631: // Duel interface - remove All
 				    if (player.getDuel() != null) {
 					    player.getPackets().displayEnterAmount();
 					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
					    break;
 				    }
 				    break;
			
			    case 620: // Shop - buy X/buy 50.
				    if (player.getShopSession().isInMainStock()) {
					    player.getPackets().displayEnterAmount();
					    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(interfaceId, slot));
				    } else {
					    player.getShopSession().buyItem(slot, 50);
				    }
				    break;
				
 			    case 621: // Shop - Sell 50.
 				    player.getShopSession().sellItem(slot, 50);
 				    break;
 				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - sergeant.
                            clan.setEnterRights(Clan.ClanRank.SERGEANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - sergeant.
                            clan.setTalkRights(Clan.ClanRank.SERGEANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 25: // // "Who can kick in chat" - sergeant.
                            clan.setKickRights(Clan.ClanRank.SERGEANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getKickRights()), 590, 25);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - sergeant.
                            clan.setLootRights(Clan.ClanRank.SERGEANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }	
	    }
	    private void handleClickSeven(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 7: interfaceId: " + interfaceId);
		    switch(interfaceId) {		
			    case 762: // Bank - All but one.
				    player.getBank().withdraw(slot, player.getBank().getAmountInSlot(slot) - 1);
				    player.getBank().refreshBank();
				    break;
				
			    case 336: // Trade inventory - trade all.
				    //player.getTrade().lendItem(slot);
				    break;
				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - captain.
                            clan.setEnterRights(Clan.ClanRank.CAPTAIN);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - captain.
                            clan.setTalkRights(Clan.ClanRank.CAPTAIN);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 25: // // "Who can kick in chat" - captain.
                            clan.setKickRights(Clan.ClanRank.CAPTAIN);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getKickRights()), 590, 25);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - captain.
                            clan.setLootRights(Clan.ClanRank.CAPTAIN);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }
	    }
	    private void handlePickupItem(Player player, Packet packet) {
		    int x = packet.readLEShort();
		    int id  = packet.readUShort();
		    int y  = packet.readLEShortA();
		    Location l = new Location(x, y, player.getLocation().getZ());
		    SkillHandler.resetAllSkills(player);
		    if (x < 1000 || y < 1000 | id < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    player.getPackets().closeInterfaces();
		    if(player.getLocation().Equals(l)) {
			    Server.getGroundItems().pickupItem(player, id, player.getLocation());
			    return;
		    }
            CoordinateEvent pickupItemCoordinateEvent = new CoordinateEvent(player, l);
		    pickupItemCoordinateEvent.setAction(() => {
				Server.getGroundItems().pickupItem(player, id, player.getLocation());
		    });
            Server.registerCoordinateEvent(pickupItemCoordinateEvent);
	    }
	    private void handleClickThree(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 3: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 154: // Craft normal leather.
				    Leather.craftNormalLeather(player, child, player.getInventory().getItemAmount(1741), true);
				    break;
			
			    case 542: // Glassblowing.
				    int totalGlass = player.getInventory().getItemAmount(1775);
				    switch(child) {
					    case 40: // Make all beer glass.
						    Glass.craftGlass(player, totalGlass, 0, true);
						    break;
						
					    case 41: // Make all candle lantern.
						    Glass.craftGlass(player, totalGlass, 1, true);
						    break;
						
					    case 42: // Make all oil lamp.
						    Glass.craftGlass(player, totalGlass, 2, true);
						    break;
						
					    case 38: // Make all vial.
						    Glass.craftGlass(player, totalGlass, 3, true);
						    break;
						
					    case 44: // Make all Fishbowl
						    Glass.craftGlass(player, totalGlass, 4, true);
						    break;
						
					    case 39: // Make all orb.
						    Glass.craftGlass(player, totalGlass, 5, true);
						    break;
						
					    case 43: // Make all lantern lens
						    Glass.craftGlass(player, totalGlass, 6, true);
						    break;
						
					    case 45: // Make all dorgeshuun light orb.
						    Glass.craftGlass(player, totalGlass, 7, true);
						    break;
				    }
				    break;
				
			    case 763: // Bank inventory - 10.
				    player.getBank().deposit(slot, 10);
				    player.getBank().refreshBank();
				    break;
				
			    case 762: // Bank - 10.
				    player.getBank().withdraw(slot, 10);
				    player.getBank().refreshBank();
				    break;
				
 			    case 336: // Trade/stake inventory - trade 10.
 				    if (player.getTrade() != null) {
 					    player.getTrade().tradeItem(slot, 10);
 					    break;
 				    }
 				    if (player.getDuel() != null) {
 					    player.getDuel().stakeItem(slot, 10);
 					    break;
 				    }
 				    break;
 				
 			    case 335: // Trade interface - remove 10.
 				    player.getTrade().removeItem(slot, 10);
 				    break;
 				
 			    case 631: // Duel interface - remove 10.
 				    if (player.getDuel() != null) {
					    player.getDuel().removeItem(slot, 5);
					    break;
 				    }
 				    break;
 				
 			    case 620: // Shop - buy 5.
 				    player.getShopSession().buyItem(slot, 5);
 				    break;
 				
 			    case 621: // Shop - sell 5.
 				    player.getShopSession().sellItem(slot, 5);
 				    break;
 				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - recruit.
                            clan.setEnterRights(Clan.ClanRank.RECRUIT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - recruit.
                            clan.setTalkRights(Clan.ClanRank.RECRUIT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - recruit.
                            clan.setLootRights(Clan.ClanRank.RECRUIT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }
	    }
        private void handleItemOnGroundItem(Player player, Packet packet)
        {
            int objectX = packet.readLEShortA();
            int itemSlot = packet.readLEShort();
            int itemIdInInventory = packet.readLEShort();
            int itemIdOnGround = packet.readLEShort();
            int objectY = packet.readLEShortA();
            int interfaceId = packet.readLEShort();
            int child = packet.readUShort();

		    if (itemSlot > 28 || itemSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
			    return;

            if (Firemaking.isFiremaking(player, itemIdInInventory, itemIdOnGround, itemSlot, -1))
                return;
            else
				player.getPackets().sendMessage("Nothing interesting happens.");
        }
	    private void handleDropItem(Player player, Packet packet) {
            int item = packet.readShortA();
		    int slot = packet.readShortA();
		    int interfaceId = packet.readLEShort();
		    int childId = packet.readUShort();
		    if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    SkillHandler.resetAllSkills(player);
		    if (player.getInventory().getItemInSlot(slot) == item) {
			    player.getPackets().closeInterfaces();
			    if (ItemData.isPlayerBound(player.getInventory().getItemInSlot(slot))) {
	                Item[] items = {new Item(player.getInventory().getItemInSlot(slot), 1)};
                    //player.getPackets().sendItems(94, 0, 93, items);
	                player.getPackets().modifyText("Are you sure you want to destroy this item?", 94, 3); // Title
	                //player.getPackets().modifyText("Yes", 94, 4); // Yes
	                //player.getPackets().modifyText("No", 94, 5); // No
	                player.getPackets().modifyText("", 94, 10); // Line 1
	                player.getPackets().modifyText("If you wish to get another Fire cape, you must", 94, 11); // Line 2
	                player.getPackets().modifyText("complete the Fight cave minigame again.", 94, 12); // Line 3
	                player.getPackets().modifyText("Fire Cape", 94, 13); // Item name
	                player.getPackets().sendChatboxInterface(94);
				    return;
			    }
			    int id = player.getInventory().getItemInSlot(slot);
			    int amt = player.getInventory().getAmountInSlot(slot);
			    GroundItem i = new GroundItem(id, amt, new Location(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ()), player);
			    if (player.getInventory().deleteItem(id, slot, amt)) {
				    if (!Server.getGroundItems().addToStack(id, amt, player.getLocation(), player)) {
					    Server.getGroundItems().newEntityDrop(i);
				    }
			    }
		    }
	    }
	    private void handleItemOnObject(Player player, Packet packet) {
		    int objectX = packet.readShortA();
		    int item = packet.readUShort();
		    int objectY = packet.readLEShort();
		    int slot = packet.readUShort();
		    int interfaceId = packet.readLEShort();
		    int child = packet.readUShort();
		    int objectId = packet.readShortA();
		    if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    Console.WriteLine("Item on object = " + objectId + " " + objectX + " " + objectY);
		    SkillHandler.resetAllSkills(player);
		    player.getPackets().closeInterfaces();
		    player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
		    if (player.getInventory().getItemInSlot(slot) == item) {
			    if (Crafting.wantsToCraftOnObject(player, player.getInventory().getItemInSlot(slot), objectId)) {
				    return;
			    } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, player.getInventory().getItemInSlot(slot))) {
				    return;
			    } else if (WarriorGuild.useAnimator(player, player.getInventory().getItemInSlot(slot), objectId, objectX, objectY)) {
				    return;
			    }
			    if (player.getInventory().getItemInSlot(slot) == 7936) {
				    if (RuneCraft.wantToRunecraft(player, objectId, objectX, objectY)) {
					    return;
				    }
				    if (RuneCraft.useTalisman(player, objectId, objectX, objectY)) {
					    return;
				    }
			    }
			    switch(objectId) {
				    case 6: // Cannon:
					    DwarfCannon cannon = player.getCannon();
					    Location l = new Location(objectX, objectY, player.getLocation().getZ());
					    if (cannon == null || (cannon != null & !l.withinDistance(cannon.getLocation(), 2))) {
						    player.getPackets().sendMessage("This isn't your cannon!");
						    break;
					    }
					    cannon.loadCannon();
					    break;
					
				    case 36781: // Lumbridge fountain.
				    case 24214:	// Fountain in east Varrock.
				    case 24265:	// Varrock main fountain.
				    case 11661:	// Falador waterpump.
				    case 11759:	// Falador south fountain.
				    case 879:	// Camelot fountains.
				    case 29529:	// Sink.
				    case 874:	// Sink.
					    if (FillVial.fillingVial(player, new Location(objectX, objectY, player.getLocation().getZ())) && player.getInventory().getItemInSlot(slot) == 229) {
						    break;
					    }
					    break;
					
				    case 2728: // Range in Catherby
					    if (Cooking.isCooking(player, player.getInventory().getItemInSlot(slot), false, -1, -1)) {
						    break;	
					    }
					    break;
					
				    case 2732: // Fire
					    if (Cooking.isCooking(player, player.getInventory().getItemInSlot(slot), true, objectX, objectY)) {
						    break;	
					    }
					    break;
					
				    case 36956: // Lumbridge furnace
				    case 11666: // Falador furnace
					    if (Smelting.wantToSmelt(player, player.getInventory().getItemInSlot(slot))) {
						    break;
					    } else if (Crafting.wantsToCraftOnObject(player, player.getInventory().getItemInSlot(slot), objectId)) {
						    break;
					    }
					    break;
					
				    case 2783: // Anvil
					    if (Smithing.wantToSmithOnAnvil(player, player.getInventory().getItemInSlot(slot), new Location(objectX, objectY, player.getLocation().getZ()))) {
						    break;
					    }
					    break;
					
				    default:
					    player.getPackets().sendMessage("Nothing interesting happens.");
					    break;
			    }
		    }
	    }
	    private void handleItemOnItem(Player player, Packet packet) {
		    int itemSlot = packet.readUShort();
		    int unused = packet.readInt();
		    int withSlot = packet.readLEShort();
		    int unused2 = packet.readInt();
		    int itemUsed = packet.readLEShortA();
		    int usedWith = packet.readLEShortA();
		    if (itemSlot > 28 || itemSlot < 0 || withSlot > 28 || withSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    SkillHandler.resetAllSkills(player);
		    player.getPackets().closeInterfaces();
		    if (player.getInventory().getSlot(itemSlot).getItemId() == itemUsed && player.getInventory().getSlot(withSlot).getItemId() == usedWith) {
			    if (Fletching.isFletching(player, itemUsed, usedWith)) {
				    return;
			    } else if (Herblore.doingHerblore(player, itemUsed, usedWith)) {
				    return;
			    } else if (Herblore.mixDoses(player, itemUsed, usedWith, itemSlot, withSlot)) {
				    return;
			    } else if (Crafting.wantsToCraft(player, itemUsed, usedWith)) {
				    return;
			    } else if (Firemaking.isFiremaking(player, itemUsed, usedWith, itemSlot, withSlot)) {
				    return;
			    } else if (Farming.plantSapling(player, itemUsed, usedWith)) {
				    return;
			    } else {
				    player.getPackets().sendMessage("Nothing interesting happens.");
			    }
		    }
		
	    }
	    private void handleActionButton(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
            ushort buttonId = packet.readUShort();
            ushort buttonId2 = 0;
		    if(packet.getLength() >= 6) {
                buttonId2 = packet.readUShort();
		    }
		    if(buttonId2 == 65535) {
			    buttonId2 = 0;
		    }
		    Console.WriteLine("button = " + interfaceId + " " +buttonId + " " +buttonId2);
		    switch(interfaceId) {
			    case 751: 
                    switch(buttonId) {
                        case 27: // Report Abuse button click
                            //This is just a test. (you need to code a Static Handler for ReportAbuse.
                            player.getPackets().displayInterface(553); //Opens Report Abuse box
				            break;
                    }
                    break;
			    case 374: // Tzhaar fight pits viewing orb
				    Server.getMinigames().getFightPits().useOrb(player, buttonId);
				    break;

                case 389: // GE Item Search "X" for closing it.
                    player.getPackets().sendInterface(0, 752, 6, 137); // Removes the item search
                    break;

			    case 107: // GE Sell inventory.
				    if (player.getGESession() == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 18: // Offer
						    player.getGESession().offerSellItem(buttonId2);
						    break;
				    }
				    break;
			
			    case 105: // GE interface
				    if (player.getGESession() == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 209: // Collect-notes
						    player.getGESession().collectSlot1(true);
						    break;
				
					    case 203: // Abort offer
						    player.getGESession().abortOffer();
						    break;
						
					    case 31: // Sell, box 1
						    player.getGESession().newSellOffer(0);
						    break;
				
					    case 30: // Buy, box 1
						    player.getGESession().newBuyOffer(0);
						    break;
						
					    case 18: // Check status, box 1
						    player.getGESession().checkOffer(0);
						    break;
						
					    case 46: // Buy, box 2
						    player.getGESession().newBuyOffer(1);
						    break;
						
					    case 47: // Sell, box 2
						    player.getGESession().newSellOffer(1);
						    break;
						
					    case 34: // Check status, box 2
						    player.getGESession().checkOffer(1);
						    break;
						
					    case 62: // Buy, box 3
						    player.getGESession().newBuyOffer(2);
						    break;
						
					    case 63: // Sell, box 3
						    player.getGESession().newSellOffer(2);
						    break;
						
					    case 50: // Check status, box 3
						    player.getGESession().checkOffer(2);
						    break;
						
					    case 81: // Buy, box 4
						    player.getGESession().newBuyOffer(3);
						    break;
						
					    case 82: // Sell, box 4
						    player.getGESession().newSellOffer(3);
						    break;
						
					    case 69: // Check status, box 4
						    player.getGESession().checkOffer(3);
						    break;
						
					    case 100: // Buy, box 5
						    player.getGESession().newBuyOffer(4);
						    break;
						
					    case 101: // Sell, box 5
						    player.getGESession().newSellOffer(4);
						    break;
						
					    case 88: // Check status, box 5
						    player.getGESession().checkOffer(4);
						    break;
						
					    case 119: // Buy, box 6
						    player.getGESession().newBuyOffer(5);
						    break;
						
					    case 120: // Sell, box 6
						    player.getGESession().newSellOffer(5);
						    break;
						
					    case 107: // Check status, box 6
						    player.getGESession().checkOffer(5);
						    break;
						
					    case 127: // The "back" button
                            player.getGESession().goBackToGrandExchange();
						    break;
						
					    case 194: // Search for item
						    player.getGESession().openItemSearch();
						    break;
						
					    case 159: // Increment amount by 1
						    player.getGESession().incrementAmount(1, false);
						    break;
						
					    case 157: // Decrease amount by 1
						    player.getGESession().decreaseAmount(1);
						    break;
						
					    case 162: // Increase amount by +1
                            player.getGESession().incrementAmount(1, true);
						    break;
						
					    case 164: // Increase amount by +10
                            player.getGESession().incrementAmount(10, true);
						    break;
						
					    case 166: // Increase amount by +100
                            player.getGESession().incrementAmount(100, true);
						    break;
						
					    case 168: // Increase amount by +1k (or All if selling)
						    player.getGESession().incrementAmount(1000, true);
						    break;
						case 170: //custom enter quantity
                            player.getPackets().displayEnterAmount();
                            player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 0));
                            break;
                        case 185: //custom enter per price
                            player.getPackets().displayEnterAmount();
                            player.setTemporaryAttribute("interfaceVariable", new EnterVariable(105, 1));
                            break;

					    case 177: // Set price to minimum
						    player.getGESession().setPrice(0);
						    break;
						
					    case 180: // Set price to medium
						    player.getGESession().setPrice(1);
						    break;
						
					    case 183: // Set price to maximum
						    player.getGESession().setPrice(2);
						    break;
						
					    case 171: // Set price -1
						    player.getGESession().setPrice(3);
						    break;
						
					    case 173: // Set price +1
						    player.getGESession().setPrice(4);
						    break;
						
					    case 190: // Confirm offer
						    player.getGESession().confirmOffer();
						    break;
				    }
				    break;
			
			    case 161: // Slayer points interfaces
			    case 163:
			    case 164:
				    Slayer.handlePointsInterface(player, interfaceId, buttonId);
				    break;
			
		
			    case 675: // Craft jewellery:
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(675, buttonId));
				    break;
		
			    case 154: // Craft normal leather.
				    Leather.craftNormalLeather(player, buttonId, 1, true);
				    break;
				
			    case 542: // Craft glass.
				    switch (buttonId) {
					    case 40: // Make 1 beer glass.
						    Glass.craftGlass(player, 1, 0, true);
						    break;
						
					    case 41: // Make 1 candle lantern.
						    Glass.craftGlass(player, 1, 1, true);
						    break;
						
					    case 42: // Make 1 oil lamp.
						    Glass.craftGlass(player, 1, 2, true);
						    break;
						
					    case 38: // Make 1 vial.
						    Glass.craftGlass(player, 1, 3, true);
						    break;
						
					    case 44: // Make 1 Fishbowl
						    Glass.craftGlass(player, 1, 4, true);
						    break;
						
					    case 39: // Make 1 orb.
						    Glass.craftGlass(player, 1, 5, true);
						    break;
						
					    case 43: // Make 1 lantern lens
						    Glass.craftGlass(player, 1, 6, true);
						    break;
						
					    case 45: // Make 1 dorgeshuun light orb.
						    Glass.craftGlass(player, 1, 7, true);
						    break;
				    }
				    break;
			
			    case 271 : // Prayer tab.
				    if (!Prayer.canUsePrayer(player, buttonId)) {
					    Prayer.deactivateAllPrayers(player);
					    break;
				    }
				    switch(buttonId) {
					    case 5: // Thick skin.
						    Prayer.togglePrayer(player, PrayerData.Prayer.THICK_SKIN);
						    break;
						
					    case 15: // Rock skin.
                            Prayer.togglePrayer(player, PrayerData.Prayer.ROCK_SKIN);
						    break;
						
					    case 31: // Steel skin.
                            Prayer.togglePrayer(player, PrayerData.Prayer.STEEL_SKIN);
						    break;
						
					    case 7: // Burst of strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.BURST_OF_STRENGTH);
						    break;
						
					    case 17: // Superhuman strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SUPERHUMAN_STRENGTH);
						    break;
						
					    case 33: // Ultimate strength.
                            Prayer.togglePrayer(player, PrayerData.Prayer.ULTIMATE_STRENGTH);
						    break;
						
					    case 9: // Clarity of thought.
                            Prayer.togglePrayer(player, PrayerData.Prayer.CLARITY_OF_THOUGHT);
						    break;
						
					    case 19: // Improved reflexes.
                            Prayer.togglePrayer(player, PrayerData.Prayer.IMPROVED_REFLEXES);
						    break;
						
					    case 35: // Incredible reflexes.
						    Prayer.togglePrayer(player, PrayerData.Prayer.INCREDIBLE_REFLEXES);
						    break;
						
					    case 37: // Magic protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_MAGIC);
						    break;
						
					    case 39: // Ranged protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_RANGED);
						    break;
						
					    case 41: // Melee protect.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_FROM_MELEE);
						    break;
						
					    case 47: // Retribution.
                            Prayer.togglePrayer(player, PrayerData.Prayer.RETRIBUTION);
						    break;
						
					    case 49: // Redemption.
                            Prayer.togglePrayer(player, PrayerData.Prayer.REDEMPTION);
						    break;
						
					    case 51: // Smite.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SMITE);
						    break;
						
					    case 55: // Chivalry.
                            Prayer.togglePrayer(player, PrayerData.Prayer.CHIVALRY);
						    break;
						
					    case 57: // Piety.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PIETY);
						    break;
						
					    case 25: // Protect item.
                            Prayer.togglePrayer(player, PrayerData.Prayer.PROTECT_ITEM);
						    break;
						
					    case 21: // Rapid restore
                            Prayer.togglePrayer(player, PrayerData.Prayer.RAPID_RESTORE);
						    break;
						
					    case 23: // Rapid heal.
                            Prayer.togglePrayer(player, PrayerData.Prayer.RAPID_HEAL);
						    break;
						
					    case 11: // Sharp eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.SHARP_EYE);
						    break;
						
					    case 27: // Hawk Eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.HAWK_EYE);
						    break;
						
					    case 43: // Eagle Eye.
                            Prayer.togglePrayer(player, PrayerData.Prayer.EAGLE_EYE);
						    break;
						
					    case 13: // Mystic will.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_WILL);
						    break;
						
					    case 29: // Mystic Lore.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_LORE);
						    break;
						
					    case 45: // Mystic Might.
                            Prayer.togglePrayer(player, PrayerData.Prayer.MYSTIC_MIGHT);
						    break;
				    }
				    break;
				
			    case 90: // Staff attack interface.
				    switch(buttonId) {
					    case 5: // Select spell (Magic XP)
						    MagicData.configureSelectSpellInterface(player);
						    break;
						
					    case 9: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default:
 						    MagicData.cancelAutoCast(player, true);
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
				    }
				    break;
				
			    case 388: // Ancient magic autocast select spell.
				    switch(buttonId) {
					    case 0: // Smoke rush.
						    MagicData.setAutoCastSpell(player, 16, 8, true);
						    break;
						
					    case 1: // Shadow rush.
						    MagicData.setAutoCastSpell(player, 17, 12, true);
						    break;
						
					    case 2: // Blood rush.
						    MagicData.setAutoCastSpell(player, 18, 4, true);
						    break;
						
					    case 3: // Ice rush.
						    MagicData.setAutoCastSpell(player, 19, 0, true);
						    break;
											
					    case 4: // Smoke burst.
						    MagicData.setAutoCastSpell(player, 20, 10, true);
						    break;
						
					    case 5: // Shadow burst.
						    MagicData.setAutoCastSpell(player, 21, 14, true);
						    break;
						
					    case 6: // Blood burst.
						    MagicData.setAutoCastSpell(player, 22, 6, true);
						    break;
						
					    case 7: // Ice burst.
						    MagicData.setAutoCastSpell(player, 23, 2, true);
						    break;
						
					    case 8: // Smoke blitz.
						    MagicData.setAutoCastSpell(player, 24, 9, true);
						    break;
						
					    case 9: // Shadow blitz.
						    MagicData.setAutoCastSpell(player, 25, 13, true);
						    break;
						
					    case 10: // Blood blitz.
						    MagicData.setAutoCastSpell(player, 26, 5, true);
						    break;
						
					    case 11: // Ice blitz.
						    MagicData.setAutoCastSpell(player, 27, 1, true);
						    break;

					    case 12: // Smoke barrage.
						    MagicData.setAutoCastSpell(player, 28, 11, true);
						    break;
						
					    case 13: // Shadow barrage.
						    MagicData.setAutoCastSpell(player, 29, 15, true);
						    break;
						
					    case 14: // Blood barrage.
						    MagicData.setAutoCastSpell(player, 30, 7, true);
						    break;
						
					    case 15: // Ice barrage.
						    MagicData.setAutoCastSpell(player, 31, 3, true);
						    break;

					    case 16: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
				
			    case 406: // Void knight mace autocast select spell.
				    switch(buttonId) {
					    case 0: // Crumble undead.
						    MagicData.setAutoCastSpell(player, 32, 22, false);
						    break;
						
					    case 1: // Guthix claws.
						    MagicData.setAutoCastSpell(player, 34, 42, false);
						    break;
						
					    case 2: // Wind wave.
						    MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 3: // Water wave.
						    MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 4: // Earth wave.
						    MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 5: // Fire wave.
						    MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
					
					    case 6: // Cancel.
						    MagicData.cancelAutoCast(player, false);
						    break;
			    }
			    break;
				
			    case 310: // Slayer staff autocast select spell.
				    switch(buttonId) {
					    case 0: // Crumble undead.
						    MagicData.setAutoCastSpell(player, 32, 22, false);
						    break;
						
					    case 1: // Slayer dart.
						    MagicData.setAutoCastSpell(player, 33, 31, false);
						    break;
						
					    case 2: // Wind wave.
                            MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 3: // Water wave.
                            MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 4: // Earth wave.
                            MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 5: // Fire wave.
                            MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
					
					    case 6: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
				
			    case 319: // Normal magic autocast select spell.
				    switch(buttonId) {
					    case 0: // Wind strike.
                            MagicData.setAutoCastSpell(player, 0, 1, false);
						    break;
						
					    case 1: // Water strike.
                            MagicData.setAutoCastSpell(player, 1, 4, false);
						    break;
						
					    case 2: // Earth strike.
                            MagicData.setAutoCastSpell(player, 2, 6, false);
						    break;
						
					    case 3: // Fire strike.
                            MagicData.setAutoCastSpell(player, 3, 8, false);
						    break;
						
					    case 4: // Wind bolt.
                            MagicData.setAutoCastSpell(player, 4, 10, false);
						    break;
						
					    case 5: // Water bolt.
                            MagicData.setAutoCastSpell(player, 5, 14, false);
						    break;
						
					    case 6: // Earth bolt.
                            MagicData.setAutoCastSpell(player, 6, 17, false);
						    break;
						
					    case 7: // Fire bolt.
                            MagicData.setAutoCastSpell(player, 7, 20, false);
						    break;
						
					    case 8: // Wind blast.
                            MagicData.setAutoCastSpell(player, 8, 24, false);
						    break;
						
					    case 9: // Water blast.
                            MagicData.setAutoCastSpell(player, 9, 27, false);
						    break;
						
					    case 10: // Earth blast.
                            MagicData.setAutoCastSpell(player, 10, 33, false);
						    break;
						
					    case 11: // Fire blast.
                            MagicData.setAutoCastSpell(player, 11, 38, false);
						    break;

					    case 12: // Wind wave.
                            MagicData.setAutoCastSpell(player, 12, 45, false);
						    break;
						
					    case 13: // Water wave.
                            MagicData.setAutoCastSpell(player, 13, 48, false);
						    break;
						
					    case 14: // Earth wave.
                            MagicData.setAutoCastSpell(player, 14, 52, false);
						    break;
						
					    case 15: // Fire wave.
                            MagicData.setAutoCastSpell(player, 15, 55, false);
						    break;
						
					    case 16: // Cancel.
                            MagicData.cancelAutoCast(player, false);
						    break;
				    }
				    break;
		
			    case 182: // Logout tab.
				    player.getPackets().logout();
				    break;
			
			    case 261: // Settings tab.
				    switch(buttonId) {
					    case 16: // Display settings.
						    player.getPackets().displayInterface(742);
						    break;
						
					    case 18: // Audio settings.
						    player.getPackets().displayInterface(743);
						    break;
		
					    case 3: // Run toggle.
						    if(!player.getWalkingQueue().isRunToggled()) {
							    player.getWalkingQueue().setRunToggled(true);
							    player.getPackets().sendConfig(173, 1);
						    } else {
							    player.getWalkingQueue().setRunToggled(false);
							    player.getPackets().sendConfig(173, 0);
						    }
						    break;
						
					    case 4: // Chat effect toggle.
						    if(!player.isChatEffectsEnabled()) {
							    player.setChatEffectsEnabled(true);
							    player.getPackets().sendConfig(171, 0);
						    } else {
							    player.setChatEffectsEnabled(false);
							    player.getPackets().sendConfig(171, 1);
						    }
						    break;
						
					    case 5: // Split private chat toggle.
						    if(!player.isPrivateChatSplit()) {
							    player.setPrivateChatSplit(true);
							    player.getPackets().sendConfig(287, 1);
						    } else {
							    player.setPrivateChatSplit(false);
							    player.getPackets().sendConfig(287, 0);
						    }
						    break;
						
					    case 7: // Accept aid toggle.
						    if(!player.isAcceptAidEnabled()) {
							    player.setAcceptAidEnabled(true);
							    player.getPackets().sendConfig(427, 1);
						    } else {
							    player.setAcceptAidEnabled(false);
							    player.getPackets().sendConfig(427, 0);
						    }
						    break;
						
					    case 6: // Mouse buttons toggle.
						    if(!player.isMouseTwoButtons()) {
							    player.setMouseTwoButtons(true);
							    player.getPackets().sendConfig(170, 0);
						    } else {
							    player.setMouseTwoButtons(false);
							    player.getPackets().sendConfig(170, 1);
						    }
						    break;
				    }
				    break;
				
			    case 589: // Clan chat 
				    if (buttonId == 9) {
					    foreach(long friend in player.getFriends().getFriendsList()) {
						    player.getPackets().sendFriend(friend, player.getFriends().getWorld(friend));
					    }
					    Server.getClanManager().openClanSetup(player);
					    break;
				    }
				    break;
				
			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    break;
				    }
				    switch(buttonId) {
					    case 22: // Clan name
						    player.getPackets().displayEnterText("Enter clan name :");
						    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(590, 0));
						    break;
						
	 				    case 23: // "Who can enter chat" - anyone.
                            clan.setEnterRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - anyone.
                            clan.setTalkRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - anyone.
                            clan.setLootRights(Clan.ClanRank.NO_RANK);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
				    }
				    break;
				
			    case 763: // Bank inventory
				    switch(buttonId) {
					    case 0: // Deposit 1.
						    player.getBank().deposit(buttonId2, 1);
						    player.getBank().refreshBank();
						    break;
				    }
				    break;
				
			    case 762: // Bank
				    switch(buttonId) {		
					    case 73: // withdraw 1.
						    player.getBank().withdraw(buttonId2, 1);
						    player.getBank().refreshBank();
						    break;
						
					    case 16: // Note item.
						    player.getBank().asNote();
						    break;
						
					    case 41: // first (main) bank tab
						    player.getBank().setCurrentTab(10);
						    break;
						
					    case 39: // first bank tab
						    player.getBank().setCurrentTab(2);
						    break;
						
					    case 37: // second bank tab
						    player.getBank().setCurrentTab(3);
						    break;
						
					    case 35: // third bank tab
						    player.getBank().setCurrentTab(4);
						    break;
						
					    case 33: // fourth bank tab
						    player.getBank().setCurrentTab(5);
						    break;
						
					    case 31: // fifth bank tab
						    player.getBank().setCurrentTab(6);
						    break;
						
					    case 29: // sixth bank tab
						    player.getBank().setCurrentTab(7);
						    break;
						
					    case 27: // seventh bank tab
						    player.getBank().setCurrentTab(8);
						    break;
						
					    case 25: // eighth bank tab
						    player.getBank().setCurrentTab(9);
						    break;
				    }
				    break;
				
			    case 626: // Stake duel confirmation interface.
				    if (buttonId == 53) {
					    if (player.getDuel() != null) {
						    player.getDuel().acceptDuel();
						    break;
					    }
				    }
				    break;
				
			    case 631: // Stake duel first interface.
				    if (player.getDuel() != null) {
					    if (buttonId == 103) {
						    player.getDuel().removeItem(buttonId2, 1);
						    break;
					    } else {
						    player.getDuel().toggleDuelRules(buttonId);
						    break;
					    }
				    }
				    break;
				
			    case 387: // Equipment tab. 
				    switch(buttonId) {
					    case 55: // Character display.
						    player.getEquipment().displayEquipmentScreen();
						    break;
						
					    case 52: // Items kept on death.
						    ProtectedItems.displayItemsInterface(player);
						    break;
				    }
				    break;
				
			    case 274: // Quest tab.
				    switch(buttonId) {
					    case 3: // Achievment diary toggle.
						    player.getPackets().sendTab(85, 259);
						    player.setAchievementDiaryTab(true);
						    break;
				    }
				    break;
				
			    case 259: // Achievment diary tab.
				    switch(buttonId) {
					    case 8: // Quest tab toggle.
						    player.getPackets().sendTab(85, 274);
						    player.setAchievementDiaryTab(false);
						    break;
				    }
				    break;
				
			    case 620: // Shop interface.
				    if (player.getShopSession() == null) {
					    return;
				    }
				    switch(buttonId) {
					    case 26: // Player stock tab.
						    player.getShopSession().openPlayerShop();
						    break;
						
					    case 25: // Main stock tab.
						    player.getShopSession().openMainShop();
						    break;
						
					    case 23: // Value (main stock)	
					    case 24: // Value (player stock)
						    player.getShopSession().valueItem(buttonId2, false);
						    break;
				    }
				    break;
				
			    case 621: // Shop inventory.
				    if (player.getShopSession() == null) {
					    return;
				    }
				    switch(buttonId) {
					    case 0: // Value (player stock)
						    player.getShopSession().valueItem(buttonId2, true);
						    break;
				    }
				    break;
				
			    case 192: // Normal Magic tab.
				    switch(buttonId) {
					    case 0: // Home Teleport.
						    Teleport.homeTeleport(player);
						    break;
						
					    case 15: // Varrock teleport.
						    Teleport.teleport(player, 0);
						    break;
						
					    case 18: // Lumbridge teleport.
						    Teleport.teleport(player, 1);
						    break;
						
					    case 21: // Falador teleport.
						    Teleport.teleport(player, 2);
						    break;
						
					    case 23: // POH teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    break;
						
					    case 26: // Camelot teleport.
						    Teleport.teleport(player, 3);
						    break;
						
					    case 32: // Ardougne teleport.
						    Teleport.teleport(player, 4);
						    break;
						
					    case 37: // Watchtower teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    //Teleport.teleport(player, 5);
						    break;
						
					    case 44: // Trollheim teleport.
						    Teleport.teleport(player, 6);
						    break;
						
					    case 47: // Ape Atoll teleport.
						    player.getPackets().sendMessage("This teleport is unavailable.");
						    break;
						
					    case 58: // Charge.
						    MagicCombat.castCharge(player);
						    break;
				    }
				    break;
				
			    case 193: // Ancient magic tab.
				    switch(buttonId) {
					    case 20: // Paddewwa teleport.
						    Teleport.teleport(player, 7);
						    break;
						
					    case 21: // Senntisten teleport.
						    Teleport.teleport(player, 8);
						    break;
						
					    case 22: // Kharyrll teleport.
						    Teleport.teleport(player, 9);
						    break;
						
					    case 23: // Lassar teleport.
						    Teleport.teleport(player, 10);
						    break;
						
					    case 24: // Dareeyak teleport.
						    Teleport.teleport(player, 11);
						    break;
						
					    case 25: // Carrallanger teleport.
						    Teleport.teleport(player, 12);
						    break;
						
					    case 27: // Ghorrock teleport.
						    Teleport.teleport(player, 14);
						    break;
						
					    case 26: // Annakarl teleport.
						    Teleport.teleport(player, 13);
						    break;
						
					    case 28: // Ancients Home teleport.
						    Teleport.homeTeleport(player);
						    break;
				    }
				    break;
				
			    case 13: // Bank pin buttons.
				    if (buttonId == 29) {
					    player.getBank().forgotPin();
					    break;
				    }
				    player.getBank().handleEnterPin(buttonId);
				    break;
				
			    case 14: // Bank pin settings.
				    switch(buttonId) {
					    case 60: // Set new bank pin.
						    player.getBank().displayFirstConfirmation();
						    break;
					
					    case 61: // Change recovery delay.
						    player.getBank().changePinDelay();
						    break;
						
					    case 91: // "No, I might forget it!".
						    if (player.getBank().isPinPending()) {
							    player.getBank().cancelPendingPin();
							    break;
						    }
						    player.getBank().openPinSettings(2);
						    break;
						
					    case 89: // Yes i want to set a pin.
						    if (player.getBank().isPinPending()) {
							    player.getBank().verifyPin(true);
							    break;
						    }
						    player.getBank().openEnterPin();
						    break;
						
					    case 65: // Cancel pin that's pending.
						    player.getBank().openPinSettings(4);
						    break;
						
					    case 62: // Change pin.
						    player.getBank().changePin();
						    break;
						
					    case 63: // Delete pin.
						    player.getBank().deletePin();
						    break;
				    }
				    break;
				
			    case 464: // Emote tab.
				    Emotes.emote(player, buttonId);
				    break;
				
 			    case 320: // Skills Tab.
				    SkillMenu.display(player, buttonId);
				    break;
				
 			    case 499: // Skill menu side menu.
 				    SkillMenu.subMenu(player, buttonId);
 				    break;

 			    case 336: // Trade/duel inventory - trade 1.
 				    if (player.getTrade() != null) {
 					    player.getTrade().tradeItem(buttonId2, 1);
 					    break;
 				    }
 				    if (player.getDuel() != null) {
 					    player.getDuel().stakeItem(buttonId2, 1);
 					    break;
 				    }
 				    break;
 				
 			    case 335: // Trade interface.
 				    if (player.getTrade() == null) {
 					    break;
 				    }
				    switch(buttonId) {
					    case 16: // Accept trade.
						    player.getTrade().accept();
						    break;
						
					    case 18: // Decline trade.
						    player.getTrade().decline();
						    break;
						
					    case 30: // Offer 1
						    player.getTrade().removeItem(buttonId2, 1);
						    break;
				    }
 				    break;
 				
 			    case 334: // Trade confirmation.
 				    if (player.getTrade() == null) {
 					    break;
 				    }
 				    switch(buttonId) {
	 				    case 21: // Decline trade.
	 					    player.getTrade().decline();
						    break;
						
	 				    case 20: // Accept trade.
	 					    player.getTrade().accept();
	 					    break;
	 			    }
 				    break;
 				
 			    case 750: // Run button
				    if(!player.getWalkingQueue().isRunToggled()) {
					    player.getWalkingQueue().setRunToggled(true);
					    player.getPackets().sendConfig(173, 1);
				    } else {
					    player.getWalkingQueue().setRunToggled(false);
					    player.getPackets().sendConfig(173, 0);
				    }
				    break;
				
 			    case 667: // Equipment/bonuses interface.
 				    if (buttonId == 14) {
                        player.getEquipment().unequipItem((ItemData.EQUIP)buttonId2);
 					    break;
 				    }
 				    break;
				
 			    case 771: // Character design interface.
 				    ConfigureAppearance.sortButton(player, buttonId);
 				    break;
 				
 			    case 311: // Smelt interface.
 				    Smelting.smeltOre(player, buttonId, true, -1);
 				    break;
 				
 			    case 300: // Bar smithing interface.
 				    Smithing.smithItem(player, buttonId, 1, true);
 				    break;
 				
 			    case 92: // Unarmed attack interface.
 				    switch(buttonId) {			
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 85: // Spear attack interface.
 				    switch(buttonId) {
					    case 8: // Special attack.
						    player.getSpecialAttack().toggleSpecBar();
						    break;
						
					    case 24: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 93: // Whip attack interface.
 				    switch(buttonId) {
 					    case 8: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 89: // Dagger attack interface.
 				    switch(buttonId) {					
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 82: // Longsword/scimitar attack interface.
 				    switch(buttonId) {					
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 78: // Claw attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 81: // Godsword attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 88: // Mace attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 76: // Granite maul attack interface.
 				    switch(buttonId) {
 					    case 8: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 24: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 77: // Bow attack interface.
 				    switch(buttonId) {					
 					    case 11: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    break;
 						
 					    case 27: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 75: // Battleaxe attack interface.
 				    switch(buttonId) {
 					    case 10: // Special attack.
 						    player.getSpecialAttack().toggleSpecBar();
 						    player.getSpecialAttack().dragonBattleaxe();
 						    break;
 						
 					    case 26: // Auto retaliate.
 						    player.toggleAutoRetaliate();
 						    break;
 						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
 				    }
 				    break;
 				
 			    case 91: // Thrown weapon
 				    switch(buttonId) {
					    case 24: // Auto retaliate.
						    player.toggleAutoRetaliate();
						    break;
						
 					    default: 
 						    AttackInterface.configureButton(player, interfaceId, buttonId);
 						    break;
				    }
 				    break;
 				
 			    case 430: // Lunar interface
 				    switch(buttonId) {	
	 				    case 14: // Vengeance
	 					    Lunar.castLunarSpell(player, buttonId);
	 					    break;
 				    }
 				    break;
 				
 			    case 102: // Items on death interface
 				    if (buttonId == 18)
 					    player.getPackets().sendMessage("You will keep this item if you should you die.");
 				    else
 					    player.getPackets().sendMessage("You will lose this item if you should you die.");
 				    break;
 				
			    default:
				    if (interfaceId != 548 && interfaceId != 751) {
					    Console.WriteLine("Unhandled ActionButton : " + interfaceId + " " + buttonId + " " + buttonId2);
				    }
				    break;
		    }
	    }
	    private void handleClickOne(Player player, Packet packet) {
		    int slot = packet.readShortA();
		    int item = packet.readUShort();
		    int childId = packet.readUShort();
		    int interfaceId = packet.readUShort();
		    if (slot < 0 || slot > 28 || player.isDead()) {
			    return;
		    }
            Console.WriteLine("Click One Slot = " + slot);
		    player.getPackets().closeInterfaces();
		    Console.WriteLine("InterfaceOption 1: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 387: // Unequip item
				    if (slot < 14 && player.getEquipment().getItemInSlot((ItemData.EQUIP)slot) == item) {
                        player.getEquipment().unequipItem((ItemData.EQUIP)slot);
				    }
				    break;
		    }
	    }
	    private void handleSwapSlot(Player player, Packet packet) {
		    int oldSlot = packet.readUShort();
		    int childId = packet.readLEShort();
		    int interfaceId = packet.readLEShort();
		    int newSlot = packet.readShortA();
		    int swapType = packet.readByteS();
		    int oldItem = player.getInventory().getItemInSlot(oldSlot);
		    int oldAmount = player.getInventory().getAmountInSlot(oldSlot);
		    int newItem = player.getInventory().getItemInSlot(newSlot);
		    int newAmount = player.getInventory().getAmountInSlot(newSlot);
		    if (oldSlot > 28 || oldSlot < 0 || newSlot > 28 || oldSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    switch (interfaceId) {
			    case 149:
				    if (swapType == 0 && childId == 0) {
					    player.getInventory().getSlot(oldSlot).setItemId(newItem);
					    player.getInventory().getSlot(oldSlot).setItemAmount(newAmount);
					    player.getInventory().getSlot(newSlot).setItemId(oldItem);
					    player.getInventory().getSlot(newSlot).setItemAmount(oldAmount);
				    }
				    break;
			
			    default:
                    misc.WriteError("UNHANDLED ITEM SWAP 1 : interface = " + interfaceId);
				    break;
		    }
		    //No need to update the screen since the client does it for us!
	    }
	    private void handleClickTwo(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
            Console.WriteLine("InterfaceOption 2: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 105: // GE Interface
				    switch(child) {
					    case 209: // "Collect" and "Collect-items" option
						    player.getGESession().collectSlot1(false);
						    break;
						
					    case 211: // Left box "Collect" option (coins)
						    player.getGESession().collectSlot2();
						    break;
				    }
				    break;
		
			    case 154: // Craft normal leather.
				    Leather.craftNormalLeather(player, child, 5, true);
				    break;
			
			    case 542: // Glassblowing.
				    switch(child) {
					    case 40: // Make 5 beer glass.
						    Glass.craftGlass(player, 5, 0, true);
						    break;
						
					    case 41: // Make 5 candle lantern.
						    Glass.craftGlass(player, 5, 1, true);
						    break;
						
					    case 42: // Make 5 oil lamp.
						    Glass.craftGlass(player, 5, 2, true);
						    break;
						
					    case 38: // Make 5 vial.
						    Glass.craftGlass(player, 5, 3, true);
						    break;
						
					    case 44: // Make 5 Fishbowl
						    Glass.craftGlass(player, 5, 4, true);
						    break;
						
					    case 39: // Make 5 orb.
						    Glass.craftGlass(player, 5, 5, true);
						    break;
						
					    case 43: // Make 5 lantern lens
						    Glass.craftGlass(player, 5, 6, true);
						    break;
						
					    case 45: // Make 5 dorgeshuun light orb.
						    Glass.craftGlass(player, 5, 7, true);
						    break;
				    }
				    break;
			
			    case 763: // Bank inventory - 5.
				    player.getBank().deposit(slot, 5);
				    player.getBank().refreshBank();
				    break;
				
			    case 762: // Bank - 5.
				    player.getBank().withdraw(slot, 5);
				    player.getBank().refreshBank();
				    break;
				
 			    case 336: // Trade/stake inventory - trade 5.
 				    if (player.getTrade() != null) {
 					    player.getTrade().tradeItem(slot, 5);
 					    break;
 				    }
 				    if (player.getDuel() != null) {
 					    player.getDuel().stakeItem(slot, 5);
 					    break;
 				    }
 				    break;
 				
 			    case 631: // Duel interface - remove 5
 				    if (player.getDuel() != null) {
					    player.getDuel().removeItem(slot, 5);
					    break;
 				    }
 				    break;
 				
 			    case 335: // Trade interface - remove 5.
 				    player.getTrade().removeItem(slot, 5);
 				    break;
 				
 			    case 620: // Shop - buy 1.
 				    player.getShopSession().buyItem(slot, 1);
 				    break;
 				
 			    case 621: // Shop - sell 1.
 				    player.getShopSession().sellItem(slot, 1);
 				    break;
 				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - any friends.
	 					    clan.setEnterRights(Clan.ClanRank.FRIEND);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - any friends.
                            clan.setTalkRights(Clan.ClanRank.FRIEND);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - any friends.
	 					    clan.setLootRights(Clan.ClanRank.FRIEND);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }
	    }
	    private void handleSwapSlot2(Player player, Packet packet) {
		    int interfaceId = packet.readLEShort();
		    int child = packet.readUShort();
		    int newSlot = packet.readLEShort();
		    int interface2 = packet.readUShort();
		    int child2 = packet.readUShort();
		    int oldSlot = packet.readLEShort();
		    int oldItem = player.getInventory().getItemInSlot(oldSlot);
		    int oldAmount = player.getInventory().getAmountInSlot(oldSlot);
		    int newItem = player.getInventory().getItemInSlot(newSlot);
		    int newAmount = player.getInventory().getAmountInSlot(newSlot);
		    if (oldSlot > 28 || oldSlot < 0 || newSlot > 28 || oldSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    switch (interfaceId) {
			    case 621: // Shop.
			    case 763: // Bank.
			    case 336: // Duel
				    player.getInventory().getSlot(oldSlot).setItemId(newItem);
				    player.getInventory().getSlot(oldSlot).setItemAmount(newAmount);
				    player.getInventory().getSlot(newSlot).setItemId(oldItem);
				    player.getInventory().getSlot(newSlot).setItemAmount(oldAmount);
				    break;
			
			    default:
                    misc.WriteError("UNHANDLED ITEM SWAP 2 : interface = " + interfaceId);
				    break;
		    }
		    //No need to update the screen since the client does it for us!
		    player.getPackets().refreshInventory();
	    }
	    private void handleClickFour(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 4: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 763: // Bank inventory - Custom amount.
				    player.getBank().deposit(slot, player.getBank().getLastXAmount());
				    player.getBank().refreshBank();
				    break;
				
			    case 762: // Bank - Custom amount.
				    player.getBank().withdraw(slot, player.getBank().getLastXAmount());
				    player.getBank().refreshBank();
				    break;
			
			    case 154: // Craft normal leather.
				    player.getPackets().displayEnterAmount();
				    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(154, child));
				    break;
				
			    case 542: // Glassblowing.
				    switch(child) {
					    case 40: // Make X beer glass.
					    case 41: // Make X candle lantern.
					    case 42: // Make X oil lamp.
					    case 38: // Make X vial.
					    case 44: // Make X Fishbowl
					    case 39: // Make X orb.
					    case 43: // Make X lantern lens
					    case 45: // Make X dorgeshuun light orb.
						    player.getPackets().displayEnterAmount();
						    player.setTemporaryAttribute("interfaceVariable", new EnterVariable(542, child));
						    break;
				    }
				    break;
			    case 336: // Trade/stake inventory - trade all.
				    if (player.getTrade() != null) {
					    player.getTrade().tradeItem(slot, player.getInventory().getItemAmount(player.getInventory().getItemInSlot(slot)));
					    break;
				    }
				    if (player.getDuel() != null) {
					    player.getDuel().stakeItem(slot, player.getInventory().getItemAmount(player.getInventory().getItemInSlot(slot)));
					    break;
				    }
				    break;
				
			    case 335: // Trade interface - remove all.
				    player.getTrade().removeItem(slot, player.getTrade().getItemAmount(player.getTrade().getItemInSlot(slot)));
				    break;
				
 			    case 631: // Duel interface - remove All
 				    if (player.getDuel() != null) {
					    player.getDuel().removeItem(slot, player.getDuel().getItemAmount(player.getDuel().getItemInSlot(slot)));
					    break;
 				    }
 				    break;
				
 			    case 620: // Shop - buy 10.
 				    player.getShopSession().buyItem(slot, 10);
 				    break;
 				
 			    case 621: // Shop - sell 10.
 				    player.getShopSession().sellItem(slot, 10);
 				    break;
 				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - corporal.
                            clan.setEnterRights(Clan.ClanRank.CORPORAL);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - corporal.
                            clan.setTalkRights(Clan.ClanRank.CORPORAL);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 25: // // "Who can kick in chat" - corporal.
                            clan.setKickRights(Clan.ClanRank.CORPORAL);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getKickRights()), 590, 25);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - corporal.
                            clan.setLootRights(Clan.ClanRank.CORPORAL);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }
	    }
        private void handleExamineItemGE(Player player, Packet packet)
        {
            //6 in size.
            int someInt = packet.readInt();
            ushort inventorySlot = packet.readUShort();

		    if (inventorySlot < 0 || inventorySlot > 28 || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }

            int itemId = player.getInventory().getItemInSlot(inventorySlot);

            if (itemId < 0 || itemId > Constants.MAX_ITEMS)
            {
                return;
            }

            string examine = ItemData.forId(itemId).getExamine();
            player.getPackets().sendMessage("[GE someInt]: " + someInt + " if it's not 7012370, then tell me what you did");
            player.getPackets().sendMessage("[GE Sell]: " + examine);
        }
	    private void handleClickSix(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 6: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 763: // Bank inventory - All.
				    player.getBank().deposit(slot, player.getInventory().getItemAmount(player.getInventory().getItemInSlot(slot)));
				    player.getBank().refreshBank();
				    break;
				
			    case 762: // Bank - All.
				    player.getBank().withdraw(slot, player.getBank().getAmountInSlot(slot));
				    player.getBank().refreshBank();
				    break;
				
 			    case 590: // Clan chat setup
 				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
 				    switch(child) {
	 				    case 23: // "Who can enter chat" - lieutenant.
                            clan.setEnterRights(Clan.ClanRank.LIEUTENANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - lieutenant.
                            clan.setTalkRights(Clan.ClanRank.LIEUTENANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 25: // // "Who can kick in chat" - lieutenant.
                            clan.setKickRights(Clan.ClanRank.LIEUTENANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getKickRights()), 590, 25);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - lieutenant.
                            clan.setLootRights(Clan.ClanRank.LIEUTENANT);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
 				    }
 				    break;
		    }
	    }
	    private void handleFirstClickObject(Player player, Packet packet) {
		    int objectX = packet.readLEShort();
            ushort objectId = (ushort)packet.readShortA();
		    int objectY = packet.readUShort();
		    if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    SkillHandler.resetAllSkills(player);
		    player.getPackets().closeInterfaces();
		    Console.WriteLine("First object click = " + objectId + " " + objectX + " " + objectY);
		    if (RuneCraft.wantToRunecraft(player, objectId, objectX, objectY)) {
			    return;
		    } else if (RuneCraft.enterRift(player, objectId, objectX, objectY)) {
			    return;
		    } else if (RuneCraft.enterViaTiara(player, objectId, objectX, objectY)) {
			    player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
			    return;
		    } else if (RuneCraft.leaveAltar(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Barrows.leaveCrypt(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Barrows.tryOpenCoffin(player, objectId)) {
			    return;
		    } else if (Barrows.openTunnelDoor(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Thieving.wantToThieveChest(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Agility.doAgility(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1)) {
			    return;
		    } else if (Server.getGlobalObjects().getDoors().useDoor(player, objectId, objectX, objectY, player.getLocation().getZ())) {
			    return;
		    } else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1)) {
			    return;
		    } else if (WildernessObelisks.useWildernessObelisk(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()))) {
			    return;
		    }
		    if (player.getTemporaryAttribute("unmovable") != null) {
			    return;
		    }
		    player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
		    switch(objectId) {
			    case 2492: // essence mine portals
				    RuneCraft.leaveEssMine(player, new Location(objectX, objectY, player.getLocation().getZ()));
				    break;
		
			    case 5959:
			    case 5960:
				    Wilderness.handleLever(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()));
				    break;
			
			    case 733: // Wilderness web
				    Wilderness.slashWeb(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()));
				    break;
			
			    case 28089: // GE desk
				    Server.getGrandExchange().clickDesk(player, objectX, objectY, 1);
				    break;
		
			    case 9359: // Tzhaar main exit
				    TzHaar.exitTzhaar(player);
				    break;
				
			    case 31284: // Tzhaar entrance
				    TzHaar.enterTzhaar(player);
				    break;
		
			    case 9357: // Fight cave exit
				    FightCave.exitCave(player, objectX, objectY);
				    break;
				
			    case 9356: // Fight cave entrance
				    FightCave.enterCave(player);
				    break;
		
			    case 9391: // Tzhaar fight pits viewing orb
				    Server.getMinigames().getFightPits().useOrb(player, -1);
				    break;
		
			    case 9369: // Tzhaar pits main entrance
			    case 9368: // Tzhaar pits game door
				    Server.getMinigames().getFightPits().useDoor(player, objectId);
				    break;
			
			    case 3617: // Agility arena ladder
				    AgilityArena.enterArena(player, objectX, objectY);
				    break;
				
			    case 3618:
				    if (Location.atAgilityArena(player.getLocation())) {
					    AgilityArena.exitArena(player, objectX, objectY);
				    }
				    break;

                case 6: // Dwarf multicannon
				    DwarfCannon cannon = player.getCannon();
				    Location l = new Location(objectX, objectY, player.getLocation().getZ());
                    if (cannon == null || (cannon != null & !l.withinDistance(cannon.getLocation(), 2))) {
					    player.getPackets().sendMessage("This isn't your cannon!");
					    break;
				    }
				    cannon.fireCannon();
				    break;
		        case 7: //Cannon base only
                case 8: //Cannon stand
                case 9: //Cannon barrels
                    DwarfCannon cannonPickup = player.getCannon();
				    Location cannonLocation = new Location(objectX, objectY, player.getLocation().getZ());
                    if (cannonPickup == null || (cannonPickup != null & !cannonLocation.withinDistance(cannonPickup.getLocation(), 2)))
                    {
					    player.getPackets().sendMessage("This isn't your cannon!");
					    break;
				    }
                    cannonPickup.pickupCannon();
                    break;

			    case 11601: // Clay oven
				    player.getPackets().modifyText("Please use the item on the oven.", 210, 1);
				    player.getPackets().sendChatboxInterface(210);
				    break;
		
			    case 10284: // Barrows chest
				    Barrows.openChest(player);
				    break;
				
			    case 4483: // Castle wars bank chest.
			    case 21301: // Neitiznot bank chest
				    player.getBank().openBank(false, objectX, objectY);
				    break;
				
			    case 1276: // Normal tree
			    case 1278: // Normal tree
			    case 2409: // Normal tree
			    case 1277: // Normal tree with but different coloured stump
			    case 3034: // Normal tree with dark stump
			    case 3033: // Normal tree with dark stump
			    case 10041: // Normal tree
			    case 1282: // Dead tree
			    case 1283: // Dead tree
			    case 1284: // Dead tree
			    case 1285: // Dead tree
			    case 1286: // Dead tree 
			    case 1289: // Dead tree
			    case 1290: // Dead tree
			    case 1365: // Dead tree
			    case 1383: // Dead tree
			    case 1384: // Dead tree
			    case 1291: // Dead tree
			    case 3035: // Dead tree
			    case 3036: // Dead tree
			    case 1315: // Evergreen
			    case 1316: // Evergreen
			    case 1318: // Snowy Evergreen
			    case 1319: // Snowy Evergreen
			    case 1330: // Snow covered tree
			    case 1331: // Snow covered tree
			    case 1332: // Snow covered tree
			    case 3879: // Evergreen from elf land
			    case 3881: // Evergreen from elf land (slightly bigger than one above)
			    case 3882: // Evergreen from elf land (slightly bigger than one above)
			    case 3883: // Small Evergreen from elf land
			    case 1280: // Normal tree orange stump
			    case 14309: // PC game island tree 
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true);
				    break;
				
			    case 1281: // Normal Oak tree
			    case 3037: // Oak tree dark stump
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true);
				    break;
				
			    case 1308: // Normal Willow tree
			    case 5551: // Normal Willow tree
			    case 5552: // Normal Willow tree
			    case 5553: // Normal Willow tree
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true);
				    break;
				
			    case 2023: // Achey tree
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true);
				    break;
				
			    case 9036: // Normal Teak tree
			    case 15062: // Normal Teak tree (same as above?)
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 4, true);
				    break;
				
			    case 1307: // Normal Maple tree
			    case 4674:// Exactly same as above
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 5, true);
				    break;
				
			    case 2289: // Normal Hollow tree
			    case 4060: // Normal Hollow tree (bigger than above)
				    Woodcutting.tryCutTree(player, objectId,  new Location(objectX, objectY, player.getLocation().getZ()), 6, true);
				    break;
				
			    case 9034: // Normal Mahogany tree
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 7, true);
				    break;
				
			    case 21273: // Normal Arctic pine
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true);
				    break;
				
			    case 28951: // Normal Eucalyptus tree
			    case 28952: // Normal Eucalyptus tree (smaller)
			    case 28953: // Normal Eucalyptus tree (smallest)
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true);
				    break;
				
			    case 1309: // Yew tree
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true);
				    break;
				
			    case 1306: // Normal Magic tree
				    Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true);
				    break;
			
			    case 3203: // Duel arena trapdoors.
				    if (player.getDuel() != null) {
					    player.getDuel().forfeitDuel(objectX, objectY);
					    break;
				    }
				    break;
				
			    case 7152: // Abyss tendrils.
			    case 7144:
				    AbyssObstacles.chopTendrils(player, objectX, objectY);
				    break;
		
			    case 7147: // Abyss tunnel.
				    AbyssObstacles.useAgilityTunnel(player, objectX, objectY);
				    break;
				
			    case 7146: // Abyss eyes.
			    case 7150:
				    AbyssObstacles.passEyes(player, objectX, objectY);
				    break;
				
			    case 7151: // Abyss boil.
			    case 7145:
				    AbyssObstacles.burnBoil(player, objectX, objectY);
				    break;
			
			    case 7153: // Abyss mining rock.
			    case 7143:
				    AbyssObstacles.mineRock(player, objectX, objectY);
				    break;
				
			    case 2213: // Catherby bank booth.
			    case 11402: // Varrock bank booth.
			    case 11758: // Falador bank booth.
			    case 36786: // Lumbridge bank booth.
			    case 35647: // Al-Kharid bank booth.
			    case 25808: // Seers bank booth.
			    case 34752: // Ardougne bank booth.
			    case 26972: // Edgeville bank booth.
			    case 29085: // Ooglog bank booth.
				    player.getBank().openBank(true, objectX, objectY);
				    break;
				
			    case 2491: // Essence rock
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true);
				    break;
				
			    case 11954: // Iron rocks
			    case 11955:
			    case 11956:
			    case 14856:
			    case 14857:
			    case 14858:
			    case 31071:
			    case 31072:
			    case 31073:
			    case 32441:
			    case 32442:
			    case 32443:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 6, true);
				    break;
				
			    case 11948: // Silver rocks
			    case 11949:
			    case 11950:
			    case 11165:
			    case 11186:
			    case 11187:
			    case 11188:
			    case 31074:
			    case 31075:
			    case 31076:
			    case 32444:
			    case 32445:
			    case 32446:
			    case 15579:
			    case 15580:
			    case 15581:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true);
				    break;
				
			    case 15504: // Clay rocks
			    case 15503:
			    case 15505:
			    case 11189:
			    case 11190:
			    case 11191:
			    case 31062:
			    case 31063:
			    case 31064:
			    case 32429:
			    case 32430:
			    case 32431:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true);
				    break;
				
			    case 11960: // Copper rocks
			    case 11961:
			    case 11962:
			    case 11936:
			    case 11937:
			    case 11938:
			    case 31080:
			    case 31081:
			    case 31082:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true);
				    break;
				
			    case 11959: // Tin rocks
			    case 11958:
			    case 11957:
			    case 11933:
			    case 11934:
			    case 11935:
			    case 31077:
			    case 31078:
			    case 31079:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true);
				    break;
				
			    case 11930: // Coal rocks
			    case 11931:
			    case 11932:
			    case 14850:
			    case 14851:
			    case 14852:
			    case 31068:
			    case 31069:
			    case 31070:
			    case 32426:
			    case 32427:
			    case 32428:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true);
				    break;
				
			    case 11951: // Gold rocks
			    case 11952:
			    case 11953:
			    case 11183:
			    case 11184:
			    case 11185:
			    case 31065:
			    case 31066:
			    case 31067:
			    case 32432:
			    case 32433:
			    case 32434:
			    case 15576:
			    case 15577:
			    case 15578:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true);
				    break;
				
			    case 11945: // Mithril rocks
			    case 11946:
			    case 11947:
			    case 11942:
			    case 11943:
			    case 11944:
			    case 14853:
			    case 14854:
			    case 14855:
			    case 31086:
			    case 31087:
			    case 31088:
			    case 32438:
			    case 32439:
			    case 32440:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true);
				    break;
				
			    case 11963: // Adamant rocks
			    case 11964:
			    case 11965:
			    case 11939:
			    case 11940:
			    case 11941:
			    case 14862:
			    case 14863:
			    case 14864:
			    case 31083:
			    case 31084:
			    case 31085:
			    case 32435:
			    case 32436:
			    case 32437:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 12, true);
				    break;
				
			    case 14859: // Rune rocks
			    case 14860:
			    case 14861:
				    Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 13, true);
				    break;
				
			    case 11552: // Empty rocks
			    case 11553:
			    case 11554:	
			    case 11555:
			    case 11556:
			    case 31059:
			    case 31060:
			    case 31061:
			    case 14832:
			    case 14833:
			    case 14834:
			    case 33400:
			    case 33401:
			    case 33402:
			    case 15582:
			    case 15583:
			    case 15584:
				    Mining.displayEmptyRockMessage(player, new Location(objectX, objectY, player.getLocation().getZ()));
				    break;
				
			    case 23271: // Wilderness ditch
				    Wilderness.crossDitch(player, objectX, objectY);
				    break;
		    }
	    }
	    private void handleClickNine(Player player, Packet packet) {
		    int interfaceId = packet.readUShort();
		    int child = packet.readUShort();
		    int slot = packet.readUShort();
		    Console.WriteLine("InterfaceOption 9: interfaceId: " + interfaceId);
		    switch(interfaceId) {
			    case 590: // Clan chat setup
				    Clan clan = Server.getClanManager().getClanByOwner(player.getLoginDetails().getUsername());
				    if (clan == null) {
					    player.getPackets().sendMessage("Please create your clan chat before changing settings.");
					    break;
				    }
				    switch(child) {
	 				    case 23: // "Who can enter chat" - only me/owner.
                            clan.setEnterRights(Clan.ClanRank.OWNER);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getEnterRights()), 590, 23);
	 					    break;
	 					
	 				    case 24: // "Who can talk in chat" - only me/owner.
                            clan.setTalkRights(Clan.ClanRank.OWNER);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getTalkRights()), 590, 24);
	 					    break;
	 					
	 				    case 25: // // "Who can kick in chat" - only me/owner.
                            clan.setKickRights(Clan.ClanRank.OWNER);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getKickRights()), 590, 25);
	 					    break;
	 					
	 				    case 26: // "Who can share loot" - only me/owner.
                            clan.setLootRights(Clan.ClanRank.OWNER);
	 					    player.getPackets().modifyText(clan.getRankString(clan.getLootRights()), 590, 26);
	 					    break;
				    }
				    break;
		    }
	    }
	    private void handleFourthClickNPC(Player player, Packet packet) {
		    int npcIndex = packet.readUShort();
		    if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    Npc npc = Server.getNpcList()[npcIndex];
		    if (npc == null || npc.isDestroyed()) {
			    return;
		    }
		    Console.WriteLine("Fourth click NPC " + npc.getId());
		    SkillHandler.resetAllSkills(player);
		    if (Slayer.openSlayerShop(player, npc)) {
			    return;
		    }
		    switch(npc.getId()) {
			    case 553: // Aubury
				    HomeArea.interactWithAubury(player, npc, 3);
				    break;
		    }
	    }
	    private void handleSecondClickObject(Player player, Packet packet) {
		    int objectY = packet.readLEShortA();
		    int objectX = packet.readLEShort();
		    ushort objectId = packet.readUShort();
		    Console.WriteLine("Second object click = " + objectId + " " + objectX + " " + objectY);
		    if (player.getTemporaryAttribute("unmovable") != null) {
			    return;
		    }
		    if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    SkillHandler.resetAllSkills(player);
		    player.getPackets().closeInterfaces();
		    player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
		    if (Thieving.wantToThieveStall(player, objectId, objectX, objectY)) {
			    return;
		    } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1)) {
			    return;
		    } else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2)) {
			    return;
		    }
		    switch(objectId) {
			    case 28089: // GE desk
				    Server.getGrandExchange().clickDesk(player, objectX, objectY, 2);
				    break;
			
			    case 25824: // Spinning wheel (Seers)
			    case 36970: // Spinning wheel (Lumbridge
				    Spinning.displaySpinningInterface(player);
				    break;

                case 6: // Dwarf multicannon
				    DwarfCannon cannon = player.getCannon();
				    Location l = new Location(objectX, objectY, player.getLocation().getZ());
				    if (cannon == null || (cannon != null & !l.Equals(cannon.getLocation()))) {
					    player.getPackets().sendMessage("This isn't your cannon!");
					    break;
				    }
				    cannon.pickupCannon();
				    break;
			
			    case 11666: // Falador furnace
			    case 36956: // Lumbridge furnace
				    Smelting.displaySmeltOptions(player);
				    break;
			
			    case 11959: // Tin rocks
			    case 11958:
			    case 11957:
			    case 11933:
			    case 11934:
			    case 11935:
			    case 31077:
			    case 31078:
			    case 31079:
				    Mining.prospectRock(player, objectX, objectY, "tin");
				    break;
				
			    case 11960: // Copper rocks
			    case 11961:
			    case 11962:
			    case 11936:
			    case 11937:
			    case 11938:
			    case 31080:
			    case 31081:
			    case 31082:
				    Mining.prospectRock(player, objectX, objectY, "copper");
				    break;
				
			    case 15504: // Clay rocks
			    case 15503:
			    case 15505:
			    case 11189:
			    case 11190:
			    case 11191:
			    case 31062:
			    case 31063:
			    case 31064:
			    case 32429:
			    case 32430:
			    case 32431:
				    Mining.prospectRock(player, objectX, objectY, "clay");
				    break;
				
			    case 11948: // Silver rocks
			    case 11949:
			    case 11950:
			    case 11165:
			    case 11186:
			    case 11187:
			    case 11188:
			    case 31074:
			    case 31075:
			    case 31076:
			    case 32444:
			    case 32445:
			    case 32446:
			    case 15579:
			    case 15580:
			    case 15581:
				    Mining.prospectRock(player, objectX, objectY, "silver");
				    break;
				
			    case 11930: // Coal rocks
			    case 11931:
			    case 11932:
			    case 14850:
			    case 14851:
			    case 14852:
			    case 31068:
			    case 31069:
			    case 31070:
			    case 32426:
			    case 32427:
			    case 32428:
				    Mining.prospectRock(player, objectX, objectY, "coal");
				    break;
				
			    case 11945: // Mithril rocks
			    case 11946:
			    case 11947:
			    case 11942:
			    case 11943:
			    case 11944:
			    case 14853:
			    case 14854:
			    case 14855:
			    case 31086:
			    case 31087:
			    case 31088:
			    case 32438:
			    case 32439:
			    case 32440:
				    Mining.prospectRock(player, objectX, objectY, "mithril");
				    break;
				
			    case 11954: // Iron rocks
			    case 11955:
			    case 11956:
			    case 14856:
			    case 14857:
			    case 14858:
			    case 31071:
			    case 31072:
			    case 31073:
			    case 32441:
			    case 32442:
			    case 32443:
				    Mining.prospectRock(player, objectX, objectY, "iron");
				    break;
				
			    case 14859: // Rune rocks
			    case 14860:
			    case 14861:
				    Mining.prospectRock(player, objectX, objectY, "runite");
				    break;
				
			    case 11951: // Gold rocks
			    case 11952:
			    case 11953:
			    case 11183:
			    case 11184:
			    case 11185:
			    case 31065:
			    case 31066:
			    case 31067:
			    case 32432:
			    case 32433:
			    case 32434:
			    case 15576:
			    case 15577:
			    case 15578:
				    Mining.prospectRock(player, objectX, objectY, "gold");
				    break;
				
			    case 11963: // Adamant rocks
			    case 11964:
			    case 11965:
			    case 11939:
			    case 11940:
			    case 11941:
			    case 14862:
			    case 14863:
			    case 14864:
			    case 31083:
			    case 31084:
			    case 31085:
			    case 32435:
			    case 32436:
			    case 32437:
				    Mining.prospectRock(player, objectX, objectY, "adamantite");
				    break;
				
			    case 11552: // Empty rocks
			    case 11553:
			    case 11554:	
			    case 11555:
			    case 11556:
			    case 31059:
			    case 31060:
			    case 31061:
			    case 14832:
			    case 14833:
			    case 14834:
			    case 33400:
			    case 33401:
			    case 33402:
			    case 15582:
			    case 15583:
			    case 15584:
				    Mining.displayEmptyRockMessage(player, new Location(objectX, objectY, player.getLocation().getZ()));
				    break;
				
			    case 2491: // Rune essence
				    Mining.prospectRock(player, objectX, objectY, "Rune essence");
				    break;
				
			    case 27663: // Duel arena bank chest.
			    case 2213:  // Catherby bank booth.
			    case 11402: // Varrock bank booth.
			    case 11758: // Falador bank booth.
			    case 36786: // Lumbridge bank booth.
			    case 35647: // Al-Kharid bank booth.
			    case 25808: // Seers bank booth.
			    case 34752: // Ardougne bank booth.
			    case 26972: // Edgeville bank booth.
			    case 29085: // Ooglog bank booth.
				    player.getBank().openBank(false, objectX, objectY);
				    break;
		    }
	    }
	    private void handleFourthClickObject(Player player, Packet packet) {
		    int y = packet.readLEShort();
		    int x = packet.readLEShortA();
		    ushort id = packet.readUShort();
		    if (player.getTemporaryAttribute("unmovable") != null) {
			    return;
		    }
		    if (x < 1000 || id < 0 || y < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
            SkillHandler.resetAllSkills(player);
		    player.getPackets().closeInterfaces();
            player.setFaceLocation(new Location(x, y, player.getLocation().getZ()));
		    Console.WriteLine("Fourth object click = " + id + " " + x + " " + y);
		    switch(id) {
		        case 28089: // GE desk
                    Server.getGrandExchange().clickDesk(player, x, y, 4);
			        break;
	        }
	    }