import java.util.*; class Mining extends SkillHandler implements Runnable { Thread t; int playerID; int ID; int absX; int absY; int miningEmoteTimer = 0; boolean mining = false; int hits = 0; int[] pickAxes = {1265, 1267, 1269, 1273, 1271, 1275}; int[] speeds = {1, 2, 3, 4, 5, 6}; boolean rockOverheated = false; public Mining(int playerID, int ID, int absX, int absY, boolean rockOverheated) { hits = 0; this.playerID = playerID; this.ID = ID; this.absX = absX; this.absY = absY; this.rockOverheated = rockOverheated; t = new Thread(this, "Mining"); t.start(); } public void run() { client player = (client) server.playerHandler.players[playerID]; boolean hasPick = hasPick(); if (hasPick) try { process(); } catch (NullPointerException e) {} else { player.sendMessage("You can't mine this rock without a pickaxe!"); ID = 0; mining = false; player.isMining = false; } } void process() { client player = (client) server.playerHandler.players[playerID]; player.RemoveAllWindows(); if (!meetsRequirements()) { player.sendMessage("You must be at least level " + levelRequirement() + " Mining to mine this rock!"); ID = 0; mining = false; player.isMining = false; } if (!meetsPickRequirements()) { player.sendMessage("You must be at least level " + pickRequirement() + " Mining to use this pickaxe."); ID = 0; mining = false; player.isMining = false; } if (player.freeSlots() <= 0) { player.sendMessage("You do not have any inventory space to mine!"); ID = 0; mining = false; player.isMining = false; } else if (player.freeSlots() > 0 && meetsRequirements() && meetsPickRequirements()) { if (player.playerEquipment[player.playerShield] > 0) { player.miningShield = player.playerEquipment[player.playerShield]; player.playerEquipment[player.playerShield] = 0; player.updateRequired = true; player.appearanceUpdateRequired = true; } if(miningEmoteTimer >= 0) { player.setEmote(624); miningEmoteTimer = 50; } miningEmoteTimer = miningEmoteTimer-1; player.sendMessage("You swing your pick at the rocky outgrowth."); try { Thread.sleep(500); } catch (InterruptedException e) {} int chance = 0; mining = true; if (!rockOverheated) bubbleRock(); while (mining) { if (!hasPick()) { player.sendMessage("You have unequipped your pick! Re-equip it to begin mining again."); ID = 0; mining = false; player.isMining = false; player.setAnimation(player.playerEmote); player.playerEquipment[player.playerShield] = player.miningShield; break; } player.setEmote(624); chance = misc.random(getRockSpeed()); hits++; if (hits == 4 && (ID == 2100 || ID == 2101)) { chance = getRockSpeed(); hits = 0; } if (hits == 8 && (ID == 2090 || ID == 2091 || ID == 2094 || ID == 2095)) { chance = getRockSpeed(); hits = 0; } if (hits == 6 && (ID == 2098 || ID == 2097)) { chance = getRockSpeed(); hits = 0; } if (hits == 5 && (ID == 2092 || ID == 2093)) { chance = getRockSpeed(); hits = 0; } if (hits == 6 && (ID == 2096 || ID == 2097)) { chance = getRockSpeed(); hits = 0; } if (hits == 10 && (ID == 2102 || ID == 2103)) { chance = getRockSpeed(); hits = 0; } if (hits == 15 && (ID == 2104 || ID == 2105)) { chance = getRockSpeed(); hits = 0; } if (hits == 30 && (ID == 2106 || ID == 2107)) { chance = getRockSpeed(); hits = 0; } if (chance != getRockSpeed()){ try { if (ID > 2096 && ID < 2108) Thread.sleep(2000); else Thread.sleep(500); } catch (InterruptedException e) {} continue; } else if (chance == getRockSpeed()) { if (ID > 2118 && ID < 2137) { destroyBubbly(); mining = false; } if (mining) { int randomGFX = misc.random(1); if (randomGFX == 0) player.sendGFX(263, absX, absY); if (randomGFX == 1) player.sendGFX(264, absX, absY); player.replaceObject(absX, absY, getMinedRock(), 0, 10); player.sendMessage("You manage to mine " + getRockName() + " ore!"); player.setAnimation(player.playerEmote); player.playerEquipment[player.playerShield] = player.miningShield; player.addItem(getRockType(), 1); randomGem(); player.addSkillXP(getMiningXP(), super.mining); player.updateRequired = true; player.appearanceUpdateRequired = true; new RockRegenerate(playerID, ID, absX, absY); try { Thread.sleep(100); } catch (InterruptedException e) {} ID = 0; mining = false; player.isMining = false; } } } } } String getRockName() { switch (ID) { case 2090: return "a Copper"; case 2091: return "a Copper"; case 2092: return "an Iron"; case 2093: return "an Iron"; case 2094: return "a Tin"; case 2095: return "a Tin"; case 2096: return "a Coal"; case 2097: return "a Coal"; case 2098: return "a Gold"; case 2099: return "a Gold"; case 2100: return "a Silver"; case 2101: return "a Silver"; case 2102: return "a Mithril"; case 2103: return "a Mithril"; case 2104: return "an Adamantium"; case 2105: return "an Adamantium"; case 2106: return "a Runite"; case 2107: return "a Runite"; } return "a null"; } int getRockSpeed() { client player = (client) server.playerHandler.players[playerID]; int pickAxe = player.playerEquipment[player.playerWeapon]; switch (ID) { case 2090: switch (pickAxe) { case 1265 : return 7; case 1267 : return 6; case 1269 : return 5; case 1273 : return 4; case 1275 : return 3; case 1271 : return 1; case 1377 : return 1; } return 999; case 2091: switch (pickAxe) { case 1265 : return 7; case 1267 : return 6; case 1269 : return 5; case 1273 : return 4; case 1275 : return 3; case 1271 : return 1; case 1377 : return 1; } return 999; case 2092: switch (pickAxe) { case 1265 : return 8; case 1267 : return 7; case 1269 : return 6; case 1273 : return 5; case 1275 : return 4; case 1271 : return 2; case 1377 : return 2; } return 999; case 2093: switch (pickAxe) { case 1265 : return 8; case 1267 : return 7; case 1269 : return 6; case 1273 : return 5; case 1275 : return 4; case 1271 : return 2; case 1377 : return 2; } return 999; case 2094: switch (pickAxe) { case 1265 : return 7; case 1267 : return 6; case 1269 : return 5; case 1273 : return 4; case 1275 : return 3; case 1271 : return 1; case 1377 : return 1; } return 999; case 2095: switch (pickAxe) { case 1265 : return 7; case 1267 : return 6; case 1269 : return 5; case 1273 : return 4; case 1275 : return 3; case 1271 : return 1; case 1377 : return 1; } return 999; case 2096: switch (pickAxe) { case 1265 : return 15; case 1267 : return 14; case 1269 : return 13; case 1273 : return 12; case 1275 : return 11; case 1271 : return 9; case 1377 : return 9; } return 999; case 2097: switch (pickAxe) { case 1265 : return 15; case 1267 : return 14; case 1269 : return 13; case 1273 : return 12; case 1275 : return 11; case 1271 : return 9; case 1377 : return 9; } return 999; case 2098: switch (pickAxe) { case 1265 : return 16; case 1267 : return 15; case 1269 : return 14; case 1273 : return 13; case 1275 : return 12; case 1271 : return 10; case 1377 : return 10; } return 999; case 2099: switch (pickAxe) { case 1265 : return 16; case 1267 : return 15; case 1269 : return 14; case 1273 : return 13; case 1275 : return 12; case 1271 : return 10; case 1377 : return 10; } return 999; case 2100: switch (pickAxe) { case 1265 : return 15; case 1267 : return 14; case 1269 : return 13; case 1273 : return 12; case 1275 : return 11; case 1271 : return 9; case 1377 : return 9; } return 999; case 2101: switch (pickAxe) { case 1265 : return 15; case 1267 : return 14; case 1269 : return 13; case 1273 : return 12; case 1275 : return 11; case 1271 : return 9; case 1377 : return 9; } return 999; case 2102: switch (pickAxe) { case 1265 : return 17; case 1267 : return 16; case 1269 : return 15; case 1273 : return 14; case 1275 : return 13; case 1271 : return 11; case 1377 : return 11; } return 999; case 2103: switch (pickAxe) { case 1265 : return 17; case 1267 : return 16; case 1269 : return 15; case 1273 : return 14; case 1275 : return 13; case 1271 : return 11; case 1377 : return 11; } return 999; case 2104: switch (pickAxe) { case 1265 : return 20; case 1267 : return 19; case 1269 : return 18; case 1273 : return 17; case 1275 : return 16; case 1271 : return 14; case 1377 : return 14; } return 999; case 2105: switch (pickAxe) { case 1265 : return 20; case 1267 : return 19; case 1269 : return 18; case 1273 : return 17; case 1275 : return 16; case 1271 : return 14; case 1377 : return 14; } return 999; case 2106: switch (pickAxe) { case 1265 : return 24; case 1267 : return 23; case 1269 : return 22; case 1273 : return 21; case 1275 : return 20; case 1271 : return 18; case 1377 : return 18; } return 999; case 2107: switch (pickAxe) { case 1265 : return 24; case 1267 : return 23; case 1269 : return 22; case 1273 : return 21; case 1275 : return 20; case 1271 : return 18; case 1377 : return 18; } return 999; } return 0; } int getMinedRock() { switch (ID) { case 2090: return 450; case 2091: return 451; case 2092: return 450; case 2093: return 451; case 2094: return 450; case 2095: return 451; case 2096: return 450; case 2097: return 451; case 2098: return 450; case 2099: return 451; case 2100: return 450; case 2101: return 451; case 2102: return 450; case 2103: return 451; case 2104: return 450; case 2105: return 451; case 2106: return 450; case 2107: return 451; } return 0; } int getBubbleRock() { switch (ID) { case 2090: return 2119; case 2091: return 2120; case 2092: return 2121; case 2093: return 2122; case 2094: return 2123; case 2095: return 2124; case 2096: return 2125; case 2097: return 2126; case 2098: return 2127; case 2099: return 2128; case 2100: return 2129; case 2101: return 2130; case 2102: return 2131; case 2103: return 2132; case 2104: return 2133; case 2105: return 2134; case 2106: return 2135; case 2107: return 2136; } return 0; } int getPickSpeed(int pick) { switch (pick) { case 1265: return 5; } return 0; } int getMiningXP() { switch (ID) { case 2090: return 22; case 2091: return 22; case 2092: return 40; case 2093: return 40; case 2094: return 22; case 2095: return 22; case 2096: return 55; case 2097: return 55; case 2098: return 71; case 2099: return 71; case 2100: return 46; case 2101: return 46; case 2102: return 85; case 2103: return 85; case 2104: return 100; case 2105: return 100; case 2106: return 130; case 2107: return 130; } return 0; } int getRockType() { switch (ID) { case 2090: return 436; case 2091: return 436; case 2092: return 440; case 2093: return 440; case 2094: return 438; case 2095: return 438; case 2096: return 453; case 2097: return 453; case 2098: return 444; case 2099: return 444; case 2100: return 442; case 2101: return 442; case 2102: return 447; case 2103: return 447; case 2104: return 449; case 2105: return 449; case 2106: return 451; case 2107: return 451; } return 0; } int levelRequirement() { switch (ID) { case 2090: return 1; case 2091: return 1; case 2092: return 15; case 2093: return 15; case 2094: return 1; case 2095: return 1; case 2096: return 30; case 2097: return 30; case 2098: return 40; case 2099: return 40; case 2100: return 20; case 2101: return 20; case 2102: return 55; case 2103: return 55; case 2104: return 70; case 2105: return 70; case 2106: return 85; case 2107: return 85; case 2119: return 1; case 2120: return 1; case 2121: return 15; case 2122: return 15; case 2123: return 1; case 2124: return 1; case 2125: return 30; case 2126: return 30; case 2127: return 40; case 2128: return 40; case 2129: return 20; case 2130: return 20; case 2131: return 55; case 2132: return 55; case 2133: return 70; case 2134: return 70; case 2135: return 85; case 2136: return 85; } return 99; } int pickRequirement() { client player = (client) server.playerHandler.players[playerID]; switch (player.playerEquipment[player.playerWeapon]) { case 1265: return 1; case 1267: return 5; case 1269: return 11; case 1273: return 21; case 1271: return 31; case 1275: return 41; case 1377: return 90; } return 99; } int getBrokenPick() { client player = (client) server.playerHandler.players[playerID]; int pickID = player.playerEquipment[player.playerWeapon]; switch (pickID) { case 1265: return 468; case 1267: return 470; case 1269: return 472; case 1273: return 474; case 1271: return 476; case 1275: return 478; } return -1; } void randomGem() { client player = (client) server.playerHandler.players[playerID]; int gemRandom = 0; gemRandom = misc.random(2000); if (gemRandom <= 30) { if (player.freeSlots() > 0) { player.addItem(1623, 1); player.sendMessage("While mining you unearth a Sapphire!"); } else if (player.freeSlots() <= 0) { player.createItem(1623); player.sendMessage("While mining you unearth a Sapphire!"); } } if (gemRandom > 35 && gemRandom < 53) { if (player.freeSlots() > 0) { player.addItem(1621, 1); player.sendMessage("While mining you unearth an Emerald!"); } else if (player.freeSlots() <= 0) { player.createItem(1621); player.sendMessage("While mining you unearth an Emerald!"); } } if (gemRandom > 1000 && gemRandom < 1010) { if (player.freeSlots() > 0) { player.addItem(1619, 1); player.sendMessage("While mining you unearth a Ruby!"); } else if (player.freeSlots() <= 0) { player.createItem(1619); player.sendMessage("While mining you unearth an Ruby!"); } } if (gemRandom > 1950 && gemRandom < 1955) { if (player.freeSlots() > 0) { player.addItem(1617, 1); player.sendMessage("While mining you unearth a Diamond! =0"); } else if (player.freeSlots() <= 0) { player.createItem(1617); player.sendMessage("While mining you unearth a Diamond! =0"); } } gemRandom = 0; } void destroyBubbly() { client player = (client) server.playerHandler.players[playerID]; if (hasPick()) { player.setAnimation(player.playerEmote); player.sendGFX(157, absX, absY); //player.replaceObject(absX, absY, getOriginalRock(), 0, 10); if (player.playerEquipment[player.playerWeapon] == 1377) player.sendMessage("Your Dragon Pickaxe is impervious to breaking!"); if (player.playerEquipment[player.playerWeapon] != 1377) { player.sendMessage("The overheated rock explodes, destroying your pickaxe!"); player.setEquipment(getBrokenPick(), 1, player.playerWeapon); } player.updateRequired = true; player.appearanceUpdateRequired = true; try { Thread.sleep(100); } catch (InterruptedException e) {} ID = 0; mining = false; player.isMining = false; } else {} } void bubbleRock() { client player = (client) server.playerHandler.players[playerID]; int bubbleRandom = 0; bubbleRandom = misc.random(35); if (bubbleRandom == 35) { player.sendMessage("The rock gets overheated and starts to bubble!"); player.replaceObject(absX, absY, getBubbleRock(), 0, 10); new RockRegenerate(playerID, ID, absX, absY); ID = 0; mining = false; player.isMining = false; player.setAnimation(player.playerEmote); } bubbleRandom = 0; } boolean hasPick() { client player = (client) server.playerHandler.players[playerID]; if (player.playerEquipment[player.playerWeapon] != -1) { for (int i = 0; i < pickAxes.length; i++){ if (player.playerEquipment[player.playerWeapon] == pickAxes[i]) { return true; } } } return false; } boolean meetsRequirements() { client player = (client) server.playerHandler.players[playerID]; if (player.playerLevel[super.mining] >= levelRequirement()) return true; return false; } boolean meetsPickRequirements() { client player = (client) server.playerHandler.players[playerID]; if (player.playerLevel[super.mining] >= pickRequirement()) return true; return false; } public void display(String str){ System.out.println(str); } }