Code:
package server.model.players.skills;
import server.model.players.*;
import server.util.Misc;
import server.event.*;
import server.Config;
/**
* @Author Sanity
*/
public class Mining {
Client c;
private final int VALID_PICK[] = {1265,1267,1269,1273,1271,1275};
private final int[] PICK_REQS = {1,1,6,6,21,31,41,61};
private final int[] RANDOM_GEMS = {1623,1621,1619,1617,1631};
private int oreType;
private int exp;
private int levelReq;
private int pickType;
private int EMOTE() {
switch (c.playerEquipment[c.playerWeapon]) {
case 1275://Rune Pickaxe
return 624;
case 1271://Adamant Pickaxe
return 628;
case 1273://Mithril Pickaxe
return 629;
case 1269://Steel Pickaxe
return 627;
case 1267://Iron Pickaxe
return 626;
case 1265://Bronze Pickaxe
return 625;
}
return 625;
}
public Mining(Client c) {
this.c = c;
}
public void startMining(int oreType, int levelReq, int exp) {
c.turnPlayerTo(c.objectX, c.objectY);
if (goodPick() > 0) {
if (c.playerLevel[c.playerMining] >= levelReq) {
this.oreType = oreType;
this.exp = exp;
this.levelReq = levelReq;
this.pickType = goodPick();
c.sendMessage("You swing your pick at the rock.");
c.miningTimer = getMiningTimer();
if (!miningEvent) {
miningEvent(c);
}
c.startAnimation(EMOTE());
} else {
resetMining();
c.sendMessage("You need a mining level of " + levelReq + " to mine this rock.");
c.startAnimation(65535);
}
} else {
resetMining();
c.sendMessage("You need a pickaxe to mine this rock.");
c.startAnimation(65535);
c.getPA().resetVariables();
}
}
public void mineOre() {
final int randomNumber = 17;
if (c.getItems().addItem(oreType,1) && Misc.random(60) != randomNumber) {
c.miningTimer = getMiningTimer();
c.startAnimation(EMOTE());
c.sendMessage("You manage to mine some ore.");
c.getPA().addSkillXP(exp * Config.MINING_EXPERIENCE, c.playerMining);
c.getPA().refreshSkill(c.playerMining);
} else if (Misc.random(60) == randomNumber) {
c.getItems().addItem(RANDOM_GEMS[(int)(RANDOM_GEMS.length * Math.random())], 1);
c.getPA().addSkillXP(100 * Config.MINING_EXPERIENCE, c.playerMining);
c.sendMessage("You find a gem!");
resetMining();
} else {
resetMining();
c.getPA().resetVariables();
c.startAnimation(65535);
}
}
public void resetMining() {
this.oreType = -1;
this.exp = -1;
this.levelReq = -1;
this.pickType = -1;
c.miningTimer = -1;
}
public int goodPick() {
for (int j = VALID_PICK.length - 1; j >= 0; j--) {
if (c.playerEquipment[c.playerWeapon] == VALID_PICK[j]) {
if (c.playerLevel[c.playerMining] >= PICK_REQS[j])
return VALID_PICK[j];
}
}
for (int i = 0; i < c.playerItems.length; i++) {
for (int j = VALID_PICK.length - 1; j >= 0; j--) {
if (c.playerItems[i] == VALID_PICK[j] + 1) {
if (c.playerLevel[c.playerMining] >= PICK_REQS[j])
return VALID_PICK[j];
}
}
}
return - 1;
}
private int oreModifier() {
switch (c.mining[0]) {
case 451://Runite Ore
return 15;
case 449://Adamantite Ore
return 8;
case 447://Mithril
return 6;
case 444://Gold
return 6;
case 453://Coal
return 5;
case 442://Silver
return 4;
case 440://Iron
return 3;
case 436://Copper
case 428://Tin
case 434://Clay
return 1;
}
return 1;
}
public int getMiningTimer() {
int time = Misc.random(5);
return time + Misc.random(oreModifier());
}
public boolean miningEvent = false;
public void miningEvent(final Client c) {
if (miningEvent)
return;
miningEvent = true;
CycleEventHandler.getSingleton().addEvent(c, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (miningEvent && c.miningTimer == 4 || c.miningTimer == 8 || c.miningTimer == 12 || c.miningTimer == 16 || c.miningTimer == 20) {
c.startAnimation(EMOTE());
}
if(c.miningTimer > 0) {
c.miningTimer--;
}
if (c.getItems().freeSlots() < 1 || c.mining[0] == 0 || c.mining[1] == 0 || c.mining[2] == 0) {
container.stop();
}
if (c.miningTimer == 0 && c.mining[0] > 0) {
c.miningTimer = getMiningTimer();
mineOre();
}
}
@Override
public void stop() {
miningEvent = false;
resetMining();
c.startAnimation(65535);
}
}, 1);
}
}