Code:
package com.vermillion.content.skills;
import com.vermillion.Constants;
import com.vermillion.event.CycleEvent;
import com.vermillion.event.CycleEventContainer;
import com.vermillion.event.CycleEventHandler;
import com.vermillion.model.players.Client;
import com.vermillion.util.Misc;
/**
* Mining.java
*
* Handles all data associated with Mining.
*
* @author Justin Wilson
*/
public class NewMining {
/**
* Handles Ore data
* @param rockId, oreId, levelReq, oreExp, oreName
*/
private enum OreData {
ADAMANTITE(2104, 449, 70, 95, "adamantite"),
BLURITE(2110, 668, 10, 17.5, "blurite"),
COAL(2096, 453, 30, 50, "coal"),
COPPER(2090, 436, 1, 17.5, "copper"),
GOLD(2098, 444, 40, 65, "gold"),
IRON(2092, 440, 15, 35, "iron"),
MITHRIL(2103, 447, 55, 80, "mithril"),
RUNITE(2106, 451, 85, 125, "runite"),
SILVER(2100, 442, 20, 40, "silver"),
TIN(2094, 438, 1, 17.5, "tin");
private int rockId, oreId, levelReq;
private double oreExp;
private String oreName;
private OreData(final int rockId, final int oreId, final int levelReq, final double oreExp, final String oreName) {
this.rockId = rockId;
this.oreId = oreId;
this.levelReq = levelReq;
this.oreExp = oreExp;
this.oreName = oreName;
}
private int getRockId() {
return rockId;
}
private int getOreId() {
return oreId;
}
private int getLevelReq() {
return levelReq;
}
private double getOreExp() {
return oreExp;
}
private String getOreName() {
return oreName;
}
}
/**
* Handles Pickaxe data
* @param pickaxeId, levelReq, pickaxeTimer, emoteId
*/
private enum PickaxeData {
ADAMANT(1273, 31, 0, 628),
BRONZE(1265, 1, 0, 625),
IRON(1267, 1, 0, 626),
MITHRIL(1271, 21, 0, 629),
RUNE(1275, 41, 0, 624),
STEEL(1269, 6, 0, 627);
private int pickaxeId, levelReq, pickaxeTimer, emoteId;
private PickaxeData(final int pickaxeId, final int levelReq, final int pickaxeTimer, final int emoteId) {
this.pickaxeId = pickaxeId;
this.levelReq = levelReq;
this.pickaxeTimer = pickaxeTimer;
this.emoteId = emoteId;
}
private int getPickaxeId() {
return pickaxeId;
}
private int getLevelReq() {
return levelReq;
}
private int getPickaxeTimer() {
return pickaxeTimer;
}
private int getEmoteId() {
return emoteId;
}
}
public void mineRock(final Client player, final int objectType) {
if (player.trainingMining || player.getItems().freeSlots() > 0)
return;
for (final PickaxeData pickaxeData : PickaxeData.values()) {
for (final OreData oreData : OreData.values()) {
if (player.getItems().playerHasItem(pickaxeData.getPickaxeId()) || player.playerEquipment[player.playerWeapon] == pickaxeData.getPickaxeId() && player.playerLevel[player.playerMining] >= oreData.getLevelReq()) {
player.trainingMining = true;
player.startAnimation(pickaxeData.getEmoteId());
player.getItems().addItem(oreData.getOreId(), 1);
player.getPA().addSkillXP(oreData.getOreExp() * Constants.MINING_EXPERIENCE, player.playerMining);
}
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (!player.getItems().playerHasItem(pickaxeData.getPickaxeId()) || player.trainingMining == false)
container.stop();
player.startAnimation(pickaxeData.getEmoteId());
player.getItems().addItem(oreData.getOreId(), 1);
player.getPA().addSkillXP(oreData.getOreExp() * Constants.MINING_EXPERIENCE, player.playerMining);
}
@Override
public void stop() {
player.startAnimation(-1);
player.trainingMining = false;
}
}, 3 + Misc.random(pickaxeData.getPickaxeTimer()));
}
}
}
}
Some code is probably redundant. I would like to know how to have the object clicked affect which ore you mine/exp etc. I'm not sure if I did this right. I'm probably overthinking this, rep+thanks to whoever helps lol