diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java
index 013ee79a05..f40bf4207a 100644
--- a/runelite-api/src/main/java/net/runelite/api/Client.java
+++ b/runelite-api/src/main/java/net/runelite/api/Client.java
@@ -2292,4 +2292,22 @@ public interface Client extends GameEngine
*/
@Nullable
ClanSettings getGuestClanSettings();
+
+ /**
+ * Get clan channel by id.
+ * @param clanId the clan id
+ * @return
+ * @see net.runelite.api.clan.ClanID
+ */
+ @Nullable
+ ClanChannel getClanChannel(int clanId);
+
+ /**
+ * Get clan settings by id
+ * @param clanId the clan id
+ * @return
+ * @see net.runelite.api.clan.ClanID
+ */
+ @Nullable
+ ClanSettings getClanSettings(int clanId);
}
diff --git a/runelite-api/src/main/java/net/runelite/api/GraphicID.java b/runelite-api/src/main/java/net/runelite/api/GraphicID.java
index b65e16b8d1..0f4cadc42c 100644
--- a/runelite-api/src/main/java/net/runelite/api/GraphicID.java
+++ b/runelite-api/src/main/java/net/runelite/api/GraphicID.java
@@ -25,7 +25,7 @@
*/
package net.runelite.api;
-public class GraphicID
+public final class GraphicID
{
public static final int WINE_MAKE = 47;
public static final int SPLASH = 85;
diff --git a/runelite-api/src/main/java/net/runelite/api/ParamID.java b/runelite-api/src/main/java/net/runelite/api/ParamID.java
index 9be05d76ef..50d2bdf71f 100644
--- a/runelite-api/src/main/java/net/runelite/api/ParamID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ParamID.java
@@ -27,7 +27,7 @@ package net.runelite.api;
/**
* @see ParamHolder
*/
-public class ParamID
+public final class ParamID
{
/**
* @see SettingID
diff --git a/runelite-api/src/main/java/net/runelite/api/ProjectileID.java b/runelite-api/src/main/java/net/runelite/api/ProjectileID.java
index a507b06925..ef1ddb2843 100644
--- a/runelite-api/src/main/java/net/runelite/api/ProjectileID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ProjectileID.java
@@ -29,7 +29,7 @@ package net.runelite.api;
*
* Note: This class is not complete and may be missing mapped IDs.
*/
-public class ProjectileID
+public final class ProjectileID
{
public static final int CANNONBALL = 53;
public static final int GRANITE_CANNONBALL = 1443;
diff --git a/runelite-api/src/main/java/net/runelite/api/SettingID.java b/runelite-api/src/main/java/net/runelite/api/SettingID.java
index 2d471d16f2..bac3bd9be4 100644
--- a/runelite-api/src/main/java/net/runelite/api/SettingID.java
+++ b/runelite-api/src/main/java/net/runelite/api/SettingID.java
@@ -27,7 +27,7 @@ package net.runelite.api;
/**
* @see ParamID#SETTING_ID
*/
-public class SettingID
+public final class SettingID
{
public static final int CAMERA_ZOOM = 14;
diff --git a/runelite-api/src/main/java/net/runelite/api/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/SpriteID.java
index ae97b2a834..6748c0263d 100644
--- a/runelite-api/src/main/java/net/runelite/api/SpriteID.java
+++ b/runelite-api/src/main/java/net/runelite/api/SpriteID.java
@@ -1209,17 +1209,52 @@ public final class SpriteID
public static final int KOUREND_FAVOUR_LOVAKENGJ_ICON = 1244;
public static final int KOUREND_FAVOUR_PISCARILIUS_ICON = 1245;
public static final int KOUREND_FAVOUR_SHAYZIEN_ICON = 1246;
- /* Unmapped: 1247~1296 */
+ public static final int SPELL_BASIC_REANIMATION = 1247;
+ public static final int SPELL_ADEPT_REANIMATION = 1248;
+ public static final int SPELL_EXPERT_REANIMATION = 1249;
+ public static final int SPELL_MASTER_REANIMATION = 1250;
+ /* Unmapped: 1251 */
+ public static final int SPELL_ARCEUUS_LIBRARY_TELEPORT = 1252;
+ public static final int SPELL_DRAYNOR_MANOR_TELEPORT = 1253;
+ public static final int SPELL_SALVE_GRAVEYARD_TELEPORT = 1254;
+ /* Unmapped: 1255 */
+ public static final int SPELL_MIND_ALTAR_TELEPORT = 1256;
+ public static final int SPELL_RESPAWN_TELEPORT = 1257;
+ /* Unmapped 1258 */
+ public static final int SPELL_FENKENSTRAINS_CASTLE_TELEPORT = 1259;
+ public static final int SPELL_WEST_ARDOUGNE_TELEPORT = 1260;
+ public static final int SPELL_HARMONY_ISLAND_TELEPORT = 1261;
+ public static final int SPELL_BARROWS_TELEPORT = 1262;
+ public static final int SPELL_APE_ATOLL_TELEPORT = 1263;
+ public static final int SPELL_CEMETERY_TELEPORT = 1264;
+ /* Unmapped: 1265 */
+ public static final int SPELL_RESURRECT_CROPS = 1266;
+ public static final int SPELL_GHOSTLY_GRASP = 1267;
+ public static final int SPELL_SKELETAL_GRASP = 1268;
+ public static final int SPELL_UNDEAD_GRASP = 1269;
+ public static final int SPELL_RESURRECT_LESSER_GHOST = 1270;
+ /* Unmapped: 1271~1296 */
public static final int QUESTS_PAGE_ICON_PURPLE_KOUREND = 1297;
public static final int UNUSED_TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1298;
public static final int TAB_QUESTS_GREEN_ACHIEVEMENT_DIARIES = 1299;
- /* Unmapped: 1300~1305 */
+ /* Unmapped: 1300~1301 */
+ public static final int SPELL_INFERIOR_DEMONBANE = 1302;
+ public static final int SPELL_SUPERIOR_DEMONBANE = 1303;
+ public static final int SPELL_DARK_DEMONBANE = 1304;
+ public static final int SPELL_MARK_OF_DARKNESS = 1305;
public static final int SPELL_WARD_OF_ARCEUUS = 1306;
- /* Unmapped: 1307~1309 */
+ public static final int SPELL_LESSER_CORRUPTION = 1307;
+ public static final int SPELL_GREATER_CORRUPTION = 1308;
+ /* Unmapped: 1309 */
public static final int SPELL_DEATH_CHARGE = 1310;
- /* Unmapped: 1311~1314 */
+ public static final int SPELL_DEMONIC_OFFERING = 1311;
+ public static final int SPELL_SINISTER_OFFERING = 1312;
+ /* Unmapped: 1313~1314 */
public static final int SPELL_SHADOW_VEIL = 1315;
- /* Unmapped: 1316~1324 */
+ public static final int SPELL_DARK_LURE = 1316;
+ public static final int SPELL_VILE_VIGOUR = 1317;
+ public static final int SPELL_DEGRIME = 1318;
+ /* Unmapped: 1319~1324 */
public static final int SPELL_WARD_OF_ARCEUUS_DISABLED = 1325;
/* Unmapped: 1326 */
public static final int SPELL_GREATER_CORRUPTION_DISABLED = 1327;
@@ -1620,6 +1655,8 @@ public final class SpriteID
public static final int HEALTHBAR_YELLOW_BACK_70PX = 2978;
/* Unmapped: 2979, 2980 */
public static final int SPELL_RESURRECT_SUPERIOR_SKELETON = 2981;
- /* Unmapped: 2982~2986 */
+ /* Unmapped: 2982~2983 */
+ public static final int SPELL_RESURRECT_GREATER_ZOMBIE = 2984;
+ /* Unmapped: 2985~2986 */
public static final int SPELL_RESURRECT_SUPERIOR_SKELETON_DISABLED = 2987;
}
diff --git a/runelite-api/src/main/java/net/runelite/api/StructID.java b/runelite-api/src/main/java/net/runelite/api/StructID.java
index e1dab81026..54b61c4b02 100644
--- a/runelite-api/src/main/java/net/runelite/api/StructID.java
+++ b/runelite-api/src/main/java/net/runelite/api/StructID.java
@@ -29,7 +29,7 @@ package net.runelite.api;
* @see StructComposition
* @see Client#getStructComposition(int)
*/
-public class StructID
+public final class StructID
{
public static final int SETTINGS_MUSIC_VOLUME = 2753;
public static final int SETTINGS_EFFECT_VOLUME = 2754;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java b/runelite-api/src/main/java/net/runelite/api/clan/ClanID.java
similarity index 83%
rename from runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java
rename to runelite-api/src/main/java/net/runelite/api/clan/ClanID.java
index 4c2d36aa68..5b0c59b37a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java
+++ b/runelite-api/src/main/java/net/runelite/api/clan/ClanID.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Kruithne
+ * Copyright (c) 2021, Adam
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,13 +22,16 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package net.runelite.client.plugins.skillcalculator.beans;
+package net.runelite.api.clan;
-import lombok.Getter;
-
-@Getter
-public class SkillData
+public final class ClanID
{
- private SkillDataEntry[] actions;
- private SkillDataBonus[] bonuses;
-}
\ No newline at end of file
+ /**
+ * The primary clan.
+ */
+ public static final int CLAN = 0;
+ /**
+ * The group ironman clan.
+ */
+ public static final int GROUP_IRONMAN = 1;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java
index a39953492c..ef608a2be5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java
@@ -27,12 +27,29 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
-import net.runelite.api.Favour;
+import net.runelite.api.Varbits;
@RequiredArgsConstructor
@Getter
public class FavourRequirement implements Requirement
{
+ /**
+ * An enumeration of Kourend house favour the player can earn.
+ */
+ @RequiredArgsConstructor
+ @Getter
+ public enum Favour
+ {
+ ARCEUUS("Arceuus", Varbits.KOUREND_FAVOR_ARCEUUS),
+ HOSIDIUS("Hosidius", Varbits.KOUREND_FAVOR_HOSIDIUS),
+ LOVAKENGJ("Lovakengj", Varbits.KOUREND_FAVOR_LOVAKENGJ),
+ PISCARILIUS("Piscarilius", Varbits.KOUREND_FAVOR_PISCARILIUS),
+ SHAYZIEN("Shayzien", Varbits.KOUREND_FAVOR_SHAYZIEN);
+
+ private final String name;
+ private final Varbits varbit;
+ }
+
private final Favour house;
private final int percent;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java
index 2cde458c8e..6a44468381 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/diaries/KourendDiaryRequirement.java
@@ -24,13 +24,12 @@
*/
package net.runelite.client.plugins.achievementdiary.diaries;
-import net.runelite.api.Favour;
import net.runelite.api.Quest;
import net.runelite.api.Skill;
-import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
-import net.runelite.client.plugins.achievementdiary.SkillRequirement;
-import net.runelite.client.plugins.achievementdiary.QuestRequirement;
import net.runelite.client.plugins.achievementdiary.FavourRequirement;
+import net.runelite.client.plugins.achievementdiary.GenericDiaryRequirement;
+import net.runelite.client.plugins.achievementdiary.QuestRequirement;
+import net.runelite.client.plugins.achievementdiary.SkillRequirement;
public class KourendDiaryRequirement extends GenericDiaryRequirement
{
@@ -41,7 +40,7 @@ public class KourendDiaryRequirement extends GenericDiaryRequirement
new SkillRequirement(Skill.MINING, 15));
add("Steal from a Hosidius Food Stall.",
new SkillRequirement(Skill.THIEVING, 25),
- new FavourRequirement(Favour.HOSIDIUS, 15));
+ new FavourRequirement(FavourRequirement.Favour.HOSIDIUS, 15));
add("Browse the Warrens General Store.",
new QuestRequirement(Quest.THE_QUEEN_OF_THIEVES, true));
add("Enter your Player Owned House from Hosidius.",
@@ -65,11 +64,11 @@ public class KourendDiaryRequirement extends GenericDiaryRequirement
add("Enter the Farming Guild.",
new SkillRequirement(Skill.FARMING, 45));
add("Switch to the Necromancy Spellbook at Tyss.",
- new FavourRequirement(Favour.ARCEUUS, 60));
+ new FavourRequirement(FavourRequirement.Favour.ARCEUUS, 60));
add("Repair a Piscarilius crane.",
new SkillRequirement(Skill.CRAFTING, 30));
add("Deliver some intelligence to Captain Ginea.",
- new FavourRequirement(Favour.SHAYZIEN, 40));
+ new FavourRequirement(FavourRequirement.Favour.SHAYZIEN, 40));
add("Catch a Bluegill on Molch Island.",
new SkillRequirement(Skill.FISHING, 43),
new SkillRequirement(Skill.HUNTER, 35));
@@ -86,23 +85,23 @@ public class KourendDiaryRequirement extends GenericDiaryRequirement
//HARD
add("Enter the Woodcutting Guild.",
new SkillRequirement(Skill.WOODCUTTING, 60),
- new FavourRequirement(Favour.HOSIDIUS, 75));
+ new FavourRequirement(FavourRequirement.Favour.HOSIDIUS, 75));
add("Smelt an Adamantite bar in The Forsaken Tower.",
new SkillRequirement(Skill.SMITHING, 70),
new QuestRequirement(Quest.THE_FORSAKEN_TOWER, true));
add("Kill a Lizardman Shaman in Molch.",
- new FavourRequirement(Favour.SHAYZIEN, 100));
+ new FavourRequirement(FavourRequirement.Favour.SHAYZIEN, 100));
add("Mine some Lovakite.",
new SkillRequirement(Skill.MINING, 65),
- new FavourRequirement(Favour.LOVAKENGJ, 30));
+ new FavourRequirement(FavourRequirement.Favour.LOVAKENGJ, 30));
add("Plant some Logavano seeds at the Tithe Farm.",
new SkillRequirement(Skill.FARMING, 74),
- new FavourRequirement(Favour.HOSIDIUS, 100));
+ new FavourRequirement(FavourRequirement.Favour.HOSIDIUS, 100));
add("Teleport to Xeric's Heart using Xeric's Talisman.",
new QuestRequirement(Quest.ARCHITECTURAL_ALLIANCE));
add("Deliver an artefact to Captain Khaled.",
new SkillRequirement(Skill.THIEVING, 49),
- new FavourRequirement(Favour.PISCARILIUS, 75));
+ new FavourRequirement(FavourRequirement.Favour.PISCARILIUS, 75));
add("Kill a Wyrm in the Karuulm Slayer Dungeon.",
new SkillRequirement(Skill.SLAYER, 62));
add("Cast Monster Examine on a Troll south of Mount Quidamortem.",
@@ -114,21 +113,21 @@ public class KourendDiaryRequirement extends GenericDiaryRequirement
new SkillRequirement(Skill.RUNECRAFT, 77),
new SkillRequirement(Skill.MINING, 38),
new SkillRequirement(Skill.CRAFTING, 38),
- new FavourRequirement(Favour.ARCEUUS, 100));
+ new FavourRequirement(FavourRequirement.Favour.ARCEUUS, 100));
add("Chop some Redwood logs.",
new SkillRequirement(Skill.WOODCUTTING, 90),
- new FavourRequirement(Favour.HOSIDIUS, 75));
+ new FavourRequirement(FavourRequirement.Favour.HOSIDIUS, 75));
add("Catch an Anglerfish and cook it whilst in Great Kourend.",
new SkillRequirement(Skill.FISHING, 82),
new SkillRequirement(Skill.COOKING, 84),
- new FavourRequirement(Favour.PISCARILIUS, 100));
+ new FavourRequirement(FavourRequirement.Favour.PISCARILIUS, 100));
add("Kill a Hydra in the Karuulm Slayer Dungeon.",
new SkillRequirement(Skill.SLAYER, 95));
add("Create an Ape Atoll teleport tablet.",
new SkillRequirement(Skill.MAGIC, 90),
new SkillRequirement(Skill.MINING, 38),
new SkillRequirement(Skill.CRAFTING, 38),
- new FavourRequirement(Favour.ARCEUUS, 100));
+ new FavourRequirement(FavourRequirement.Favour.ARCEUUS, 100));
add("Create your own Battlestaff from scratch within the Farming Guild.",
new SkillRequirement(Skill.FARMING, 85),
new SkillRequirement(Skill.FLETCHING, 40));
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
index 9168c8f150..ee1e8e2fa5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
@@ -2008,6 +2008,7 @@ public class ChatCommandsPlugin extends Plugin
case "cgaunt":
case "cgauntlet":
case "the corrupted gauntlet":
+ case "cg":
return "Corrupted Gauntlet";
// The Nightmare
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java
index b8a533e7c9..536527b205 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java
@@ -328,6 +328,24 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
invokeOnMainThread(() ->
{
+ try
+ {
+ // Get and display the device and driver used by the GPU plugin
+ GLDrawable dummyDrawable = GLDrawableFactory.getFactory(GLProfile.getDefault())
+ .createDummyDrawable(GLProfile.getDefaultDevice(), true, new GLCapabilities(GLProfile.getDefault()), null);
+ dummyDrawable.setRealized(true);
+ GLContext versionContext = dummyDrawable.createContext(null);
+ versionContext.makeCurrent();
+ GL versionGL = versionContext.getGL();
+ log.info("Using device: {}", versionGL.glGetString(GL.GL_RENDERER));
+ log.info("Using driver: {}", versionGL.glGetString(GL.GL_VERSION));
+ versionContext.destroy();
+ }
+ catch (Exception ex)
+ {
+ log.warn("error checking device and driver version", ex);
+ }
+
GLProfile glProfile = GLProfile.get(GLProfile.GL4);
GLCapabilities glCaps = new GLCapabilities(glProfile);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
index f1951c162e..04f16275cc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
@@ -591,18 +591,21 @@ public class MenuEntrySwapperPlugin extends Plugin
// widget ticking and prior to our client tick event. This is because drag start
// is what builds the context menu row which is what the eventual click will use
+ final int widgetGroupId = WidgetInfo.TO_GROUP(menuEntryAdded.getActionParam1());
+
+ final boolean isDepositBoxPlayerInventory = widgetGroupId == WidgetID.DEPOSIT_BOX_GROUP_ID;
+ final boolean isChambersOfXericStorageUnitPlayerInventory = widgetGroupId == WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_INVENTORY_GROUP_ID;
// Swap to shift-click deposit behavior
// Deposit- op 1 is the current withdraw amount 1/5/10/x for deposit box interface and chambers of xeric storage unit.
// Deposit- op 2 is the current withdraw amount 1/5/10/x for bank interface
if (shiftModifier() && config.bankDepositShiftClick() != ShiftDepositMode.OFF
&& menuEntryAdded.getType() == MenuAction.CC_OP.getId()
- && (menuEntryAdded.getIdentifier() == 2 || menuEntryAdded.getIdentifier() == 1)
+ && menuEntryAdded.getIdentifier() == (isDepositBoxPlayerInventory || isChambersOfXericStorageUnitPlayerInventory ? 1 : 2)
&& (menuEntryAdded.getOption().startsWith("Deposit-") || menuEntryAdded.getOption().startsWith("Store") || menuEntryAdded.getOption().startsWith("Donate")))
{
ShiftDepositMode shiftDepositMode = config.bankDepositShiftClick();
- final int widgetGroupId = WidgetInfo.TO_GROUP(menuEntryAdded.getParam1());
- final int opId = widgetGroupId == WidgetID.DEPOSIT_BOX_GROUP_ID ? shiftDepositMode.getIdentifierDepositBox()
- : widgetGroupId == WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_INVENTORY_GROUP_ID ? shiftDepositMode.getIdentifierChambersStorageUnit()
+ final int opId = isDepositBoxPlayerInventory ? shiftDepositMode.getIdentifierDepositBox()
+ : isChambersOfXericStorageUnitPlayerInventory ? shiftDepositMode.getIdentifierChambersStorageUnit()
: shiftDepositMode.getIdentifier();
final int actionId = opId >= 6 ? MenuAction.CC_OP_LOW_PRIORITY.getId() : MenuAction.CC_OP.getId();
bankModeSwap(actionId, opId);
@@ -615,7 +618,6 @@ public class MenuEntrySwapperPlugin extends Plugin
&& menuEntryAdded.getOption().startsWith("Withdraw"))
{
ShiftWithdrawMode shiftWithdrawMode = config.bankWithdrawShiftClick();
- final int widgetGroupId = WidgetInfo.TO_GROUP(menuEntryAdded.getParam1());
final int actionId, opId;
if (widgetGroupId == WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_PRIVATE_GROUP_ID || widgetGroupId == WidgetID.CHAMBERS_OF_XERIC_STORAGE_UNIT_SHARED_GROUP_ID)
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java
index add9d4afe8..6c7deb9149 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/ShiftDepositMode.java
@@ -36,7 +36,7 @@ public enum ShiftDepositMode
DEPOSIT_10("Deposit-10", 5, 4, 3),
DEPOSIT_X("Deposit-X", 6, 6, 5),
DEPOSIT_ALL("Deposit-All", 8, 5, 4),
- EXTRA_OP("Eat/Wield/Etc.", 9, 0, 0),
+ EXTRA_OP("Eat/Wield/Etc.", 9, 9, 0),
OFF("Off", 0, 0, 0);
private final String name;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java
index e102988f50..8c27d8a509 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java
@@ -24,32 +24,36 @@
*/
package net.runelite.client.plugins.skillcalculator;
+import javax.annotation.Nullable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.runelite.api.Skill;
+import net.runelite.client.plugins.skillcalculator.skills.*;
@AllArgsConstructor
@Getter
enum CalculatorType
{
- MINING(Skill.MINING, "skill_mining.json"),
- AGILITY(Skill.AGILITY, "skill_agility.json"),
- SMITHING(Skill.SMITHING, "skill_smithing.json"),
- HERBLORE(Skill.HERBLORE, "skill_herblore.json"),
- FISHING(Skill.FISHING, "skill_fishing.json"),
- THIEVING(Skill.THIEVING, "skill_thieving.json"),
- COOKING(Skill.COOKING, "skill_cooking.json"),
- PRAYER(Skill.PRAYER, "skill_prayer.json"),
- CRAFTING(Skill.CRAFTING, "skill_crafting.json"),
- FIREMAKING(Skill.FIREMAKING, "skill_firemaking.json"),
- MAGIC(Skill.MAGIC, "skill_magic.json"),
- FLETCHING(Skill.FLETCHING, "skill_fletching.json"),
- WOODCUTTING(Skill.WOODCUTTING, "skill_woodcutting.json"),
- RUNECRAFT(Skill.RUNECRAFT, "skill_runecraft.json"),
- FARMING(Skill.FARMING, "skill_farming.json"),
- CONSTRUCTION(Skill.CONSTRUCTION, "skill_construction.json"),
- HUNTER(Skill.HUNTER, "skill_hunter.json");
+ MINING(Skill.MINING, MiningBonus.values(), MiningAction.values()),
+ AGILITY(Skill.AGILITY, null, AgilityAction.values()),
+ SMITHING(Skill.SMITHING, null, SmithingAction.values()),
+ HERBLORE(Skill.HERBLORE, null, HerbloreAction.values()),
+ FISHING(Skill.FISHING, FishingBonus.values(), FishingAction.values()),
+ THIEVING(Skill.THIEVING, null, ThievingAction.values()),
+ COOKING(Skill.COOKING, null, CookingAction.values()),
+ PRAYER(Skill.PRAYER, PrayerBonus.values(), PrayerAction.values()),
+ CRAFTING(Skill.CRAFTING, null, CraftingAction.values()),
+ FIREMAKING(Skill.FIREMAKING, FiremakingBonus.values(), FiremakingAction.values()),
+ MAGIC(Skill.MAGIC, null, MagicAction.values()),
+ FLETCHING(Skill.FLETCHING, null, FletchingAction.values()),
+ WOODCUTTING(Skill.WOODCUTTING, WoodcuttingBonus.values(), WoodcuttingAction.values()),
+ RUNECRAFT(Skill.RUNECRAFT, RunecraftBonus.values(), RunecraftAction.values()),
+ FARMING(Skill.FARMING, FarmingBonus.values(), FarmingAction.values()),
+ CONSTRUCTION(Skill.CONSTRUCTION, ConstructionBonus.values(), ConstructionAction.values()),
+ HUNTER(Skill.HUNTER, null, HunterAction.values());
private final Skill skill;
- private final String dataFile;
-}
\ No newline at end of file
+ @Nullable
+ private final SkillBonus[] skillBonuses;
+ private final SkillAction[] skillActions;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
index bd688d3788..8d9581adde 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2018, Kruithne
* Copyright (c) 2018, Psikoi
* All rights reserved.
@@ -48,11 +48,11 @@ import net.runelite.api.Client;
import net.runelite.api.Experience;
import net.runelite.api.Skill;
import net.runelite.api.VarPlayer;
+import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SpriteManager;
-import net.runelite.client.plugins.skillcalculator.beans.SkillData;
-import net.runelite.client.plugins.skillcalculator.beans.SkillDataBonus;
-import net.runelite.client.plugins.skillcalculator.beans.SkillDataEntry;
+import net.runelite.client.plugins.skillcalculator.skills.SkillAction;
+import net.runelite.client.plugins.skillcalculator.skills.SkillBonus;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.DynamicGridLayout;
import net.runelite.client.ui.FontManager;
@@ -66,26 +66,26 @@ class SkillCalculator extends JPanel
private final UICalculatorInputArea uiInput;
private final Client client;
+ private final ClientThread clientThread;
private final SpriteManager spriteManager;
private final ItemManager itemManager;
private final List uiActionSlots = new ArrayList<>();
- private final CacheSkillData cacheSkillData = new CacheSkillData();
private final UICombinedActionSlot combinedActionSlot;
private final ArrayList combinedActionSlots = new ArrayList<>();
private final List bonusCheckBoxes = new ArrayList<>();
private final IconTextField searchBar = new IconTextField();
- private SkillData skillData;
- private Skill currentSkill;
+ private CalculatorType currentCalculator;
private int currentLevel = 1;
private int currentXP = Experience.getXpForLevel(currentLevel);
private int targetLevel = currentLevel + 1;
private int targetXP = Experience.getXpForLevel(targetLevel);
- private float xpFactor = 1.0f;
+ private float xpFactor = 1;
- SkillCalculator(Client client, UICalculatorInputArea uiInput, SpriteManager spriteManager, ItemManager itemManager)
+ SkillCalculator(Client client, ClientThread clientThread, UICalculatorInputArea uiInput, SpriteManager spriteManager, ItemManager itemManager)
{
this.client = client;
+ this.clientThread = clientThread;
this.uiInput = uiInput;
this.spriteManager = spriteManager;
this.itemManager = itemManager;
@@ -137,15 +137,12 @@ class SkillCalculator extends JPanel
currentXP = client.getSkillExperience(calculatorType.getSkill());
currentLevel = Experience.getLevelForXp(currentXP);
- if (currentSkill != calculatorType.getSkill())
+ if (currentCalculator != calculatorType)
{
- currentSkill = calculatorType.getSkill();
-
- // Load the skill data.
- skillData = cacheSkillData.getSkillData(calculatorType.getDataFile());
+ currentCalculator = calculatorType;
// Reset the XP factor, removing bonuses.
- xpFactor = 1.0f;
+ xpFactor = 1;
VarPlayer endGoalVarp = endGoalVarpForSkill(calculatorType.getSkill());
int endGoal = client.getVar(endGoalVarp);
@@ -234,19 +231,22 @@ class SkillCalculator extends JPanel
private void renderBonusOptions()
{
- if (skillData.getBonuses() != null)
+ final SkillBonus[] skillBonuses = currentCalculator.getSkillBonuses();
+ if (skillBonuses == null)
{
- for (SkillDataBonus bonus : skillData.getBonuses())
- {
- JPanel checkboxPanel = buildCheckboxPanel(bonus);
+ return;
+ }
- add(checkboxPanel);
- add(Box.createRigidArea(new Dimension(0, 5)));
- }
+ for (SkillBonus bonus : skillBonuses)
+ {
+ JPanel checkboxPanel = buildCheckboxPanel(bonus);
+
+ add(checkboxPanel);
+ add(Box.createRigidArea(new Dimension(0, 5)));
}
}
- private JPanel buildCheckboxPanel(SkillDataBonus bonus)
+ private JPanel buildCheckboxPanel(SkillBonus bonus)
{
JPanel uiOption = new JPanel(new BorderLayout());
JLabel uiLabel = new JLabel(bonus.getName());
@@ -270,7 +270,7 @@ class SkillCalculator extends JPanel
return uiOption;
}
- private void adjustCheckboxes(JCheckBox target, SkillDataBonus bonus)
+ private void adjustCheckboxes(JCheckBox target, SkillBonus bonus)
{
adjustXPBonus(0);
bonusCheckBoxes.forEach(otherSelectedCheckbox ->
@@ -293,20 +293,20 @@ class SkillCalculator extends JPanel
uiActionSlots.clear();
// Create new components for the action slots.
- for (SkillDataEntry action : skillData.getActions())
+ for (SkillAction action : currentCalculator.getSkillActions())
{
JLabel uiIcon = new JLabel();
- if (action.getIcon() != null)
+ if (action.getIcon() != -1)
{
itemManager.getImage(action.getIcon()).addTo(uiIcon);
}
- else if (action.getSprite() != null)
+ else if (action.getSprite() != -1)
{
spriteManager.addSpriteTo(uiIcon, action.getSprite(), 0);
}
- UIActionSlot slot = new UIActionSlot(action, uiIcon);
+ UIActionSlot slot = new UIActionSlot(action, clientThread, itemManager, uiIcon);
uiActionSlots.add(slot); // Keep our own reference.
add(slot); // Add component to the panel.
@@ -346,7 +346,7 @@ class SkillCalculator extends JPanel
{
int actionCount = 0;
int neededXP = targetXP - currentXP;
- SkillDataEntry action = slot.getAction();
+ SkillAction action = slot.getAction();
double xp = (action.isIgnoreBonus()) ? action.getXp() : action.getXp() * xpFactor;
if (neededXP > 0)
@@ -363,9 +363,9 @@ class SkillCalculator extends JPanel
updateCombinedAction();
}
- private String formatXPActionString(double xp, int actionCount, String expExpression)
+ private static String formatXPActionString(double xp, int actionCount, String expExpression)
{
- return XP_FORMAT.format(xp) + expExpression + NumberFormat.getIntegerInstance().format(actionCount) + (actionCount > 1 ? " actions" : " action");
+ return XP_FORMAT.format(xp) + expExpression + NumberFormat.getIntegerInstance().format(actionCount) + (actionCount == 1 ? " action" : " actions");
}
private void updateInputFields()
@@ -389,7 +389,7 @@ class SkillCalculator extends JPanel
private void adjustXPBonus(float value)
{
- xpFactor = 1f + value;
+ xpFactor = 1 + value;
calculate();
}
@@ -449,12 +449,12 @@ class SkillCalculator extends JPanel
});
}
- private boolean slotContainsText(UIActionSlot slot, String text)
+ private static boolean slotContainsText(UIActionSlot slot, String text)
{
- return slot.getAction().getName().toLowerCase().contains(text.toLowerCase());
+ return slot.getActionName().toLowerCase().contains(text.toLowerCase());
}
- private FocusAdapter buildFocusAdapter(Consumer focusLostConsumer)
+ private static FocusAdapter buildFocusAdapter(Consumer focusLostConsumer)
{
return new FocusAdapter()
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java
index b6abe4577f..82d4f59648 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java
@@ -23,7 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
package net.runelite.client.plugins.skillcalculator;
import java.awt.GridBagConstraints;
@@ -33,6 +32,7 @@ import javax.swing.ImageIcon;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import net.runelite.api.Client;
+import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SkillIconManager;
import net.runelite.client.game.SpriteManager;
@@ -47,7 +47,7 @@ class SkillCalculatorPanel extends PluginPanel
private final SkillIconManager iconManager;
private final MaterialTabGroup tabGroup;
- SkillCalculatorPanel(SkillIconManager iconManager, Client client, SpriteManager spriteManager, ItemManager itemManager)
+ SkillCalculatorPanel(SkillIconManager iconManager, Client client, ClientThread clientThread, SpriteManager spriteManager, ItemManager itemManager)
{
super();
getScrollPane().setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
@@ -71,7 +71,7 @@ class SkillCalculatorPanel extends PluginPanel
final UICalculatorInputArea uiInput = new UICalculatorInputArea();
uiInput.setBorder(new EmptyBorder(15, 0, 15, 0));
uiInput.setBackground(ColorScheme.DARK_GRAY_COLOR);
- uiCalculator = new SkillCalculator(client, uiInput, spriteManager, itemManager);
+ uiCalculator = new SkillCalculator(client, clientThread, uiInput, spriteManager, itemManager);
add(tabGroup, c);
c.gridy++;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java
index 8999d2ad00..1aab06820f 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java
@@ -22,12 +22,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
package net.runelite.client.plugins.skillcalculator;
import java.awt.image.BufferedImage;
import javax.inject.Inject;
import net.runelite.api.Client;
+import net.runelite.client.callback.ClientThread;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.SkillIconManager;
import net.runelite.client.game.SpriteManager;
@@ -47,6 +47,9 @@ public class SkillCalculatorPlugin extends Plugin
@Inject
private Client client;
+ @Inject
+ private ClientThread clientThread;
+
@Inject
private SkillIconManager skillIconManager;
@@ -65,7 +68,7 @@ public class SkillCalculatorPlugin extends Plugin
protected void startUp() throws Exception
{
final BufferedImage icon = ImageUtil.loadImageResource(getClass(), "calc.png");
- final SkillCalculatorPanel uiPanel = new SkillCalculatorPanel(skillIconManager, client, spriteManager, itemManager);
+ final SkillCalculatorPanel uiPanel = new SkillCalculatorPanel(skillIconManager, client, clientThread, spriteManager, itemManager);
uiNavigationButton = NavigationButton.builder()
.tooltip("Skill Calculator")
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java
index 2051a0ddcd..aa2fd23937 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java
@@ -23,7 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
package net.runelite.client.plugins.skillcalculator;
import java.awt.BorderLayout;
@@ -36,13 +35,16 @@ import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
-import net.runelite.client.plugins.skillcalculator.beans.SkillDataEntry;
+import net.runelite.client.callback.ClientThread;
+import net.runelite.client.game.ItemManager;
+import net.runelite.client.plugins.skillcalculator.skills.SkillAction;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.components.shadowlabel.JShadowedLabel;
@@ -64,9 +66,12 @@ class UIActionSlot extends JPanel
private static final Dimension ICON_SIZE = new Dimension(32, 32);
@Getter(AccessLevel.PACKAGE)
- private final SkillDataEntry action;
- private final JShadowedLabel uiLabelActions;
+ private final SkillAction action;
+ @Getter(AccessLevel.PACKAGE)
+ private String actionName;
+
+ private final JShadowedLabel uiLabelActions;
private final JPanel uiInfo;
@Getter(AccessLevel.PACKAGE)
@@ -80,9 +85,9 @@ class UIActionSlot extends JPanel
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
- private double value = 0;
+ private double value;
- UIActionSlot(SkillDataEntry action, JLabel uiIcon)
+ UIActionSlot(SkillAction action, ClientThread clientThread, ItemManager itemManager, JLabel uiIcon)
{
this.action = action;
@@ -121,7 +126,12 @@ class UIActionSlot extends JPanel
uiInfo.setBackground(ColorScheme.DARKER_GRAY_COLOR);
uiInfo.setBorder(new EmptyBorder(0, 5, 0, 0));
- JShadowedLabel uiLabelName = new JShadowedLabel(action.getName());
+ JShadowedLabel uiLabelName = new JShadowedLabel();
+ clientThread.invokeLater(() ->
+ {
+ actionName = action.getName(itemManager);
+ SwingUtilities.invokeLater(() -> uiLabelName.setText(actionName));
+ });
uiLabelName.setForeground(Color.WHITE);
uiLabelActions = new JShadowedLabel("Unknown");
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java
index fa1614c91b..46aea10dff 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java
@@ -23,7 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
package net.runelite.client.plugins.skillcalculator;
import java.awt.BorderLayout;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/AgilityAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/AgilityAction.java
new file mode 100644
index 0000000000..3edef73f70
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/AgilityAction.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum AgilityAction implements NamedSkillAction
+{
+ GNOME_STRONGHOLD_COURSE("Gnome Stronghold", 1, 86.5f, ItemID.SWAMP_TOAD),
+ SHAYZIEN_BASIC_COURSE("Shayzien Basic Course", 5, 133.2f, ItemID.SHAYZIEN_HELM_1),
+ DRAYNOR_VILLAGE_ROOFTOP("Draynor Village Rooftop", 10, 120, ItemID.MARK_OF_GRACE),
+ LEAPING_TROUT("Leaping trout", 15, 5, ItemID.LEAPING_TROUT),
+ AL_KHARID_ROOFTOP("Al Kharid Rooftop", 20, 180, ItemID.MARK_OF_GRACE),
+ VARROCK_ROOFTOP("Varrock Rooftop", 30, 238, ItemID.MARK_OF_GRACE),
+ PENGUIN_AGILITY_COURSE("Penguin Agility Course", 30, 540, ItemID.CLOCKWORK_SUIT),
+ LEAPING_SALMON("Leaping salmon", 30, 6, ItemID.LEAPING_SALMON),
+ BARBARIAN_OUTPOST("Barbarian Outpost", 35, 152.5f, ItemID.STEEL_BATTLEAXE),
+ CANIFIS_ROOFTOP("Canifis Rooftop", 40, 240, ItemID.MARK_OF_GRACE),
+ LEAPING_STURGEON("Leaping sturgeon", 45, 7, ItemID.LEAPING_STURGEON),
+ APE_ATOLL_COURSE("Ape Atoll", 48, 580, ItemID.GORILLA_GREEGREE),
+ SHAYZIEN_ADVANCED_COURSE("Shayzien Advanced Course", 48, 474.3f, ItemID.SHAYZIEN_HELM_5),
+ FALADOR_ROOFTOP("Falador Rooftop", 50, 440, ItemID.MARK_OF_GRACE),
+ WILDERNESS_AGILITY_COURSE("Wilderness Agility Course", 52, 571, ItemID.SKULL),
+ HALLOWED_SEPULCHRE_FLOOR_1("Hallowed Sepulchre Floor 1", 52, 575, ItemID.RING_OF_ENDURANCE),
+ SEERS_VILLAGE_ROOFTOP("Seers' Village Rooftop", 60, 570, ItemID.MARK_OF_GRACE),
+ WEREWOLF_AGILITY_COURSE("Werewolf Agility Course", 60, 730, ItemID.STICK),
+ HALLOWED_SEPULCHRE_FLOOR_2("Hallowed Sepulchre Floor 2", 62, 925, ItemID.RING_OF_ENDURANCE),
+ POLLNIVNEACH_ROOFTOP("Pollnivneach Rooftop", 70, 890, ItemID.MARK_OF_GRACE),
+ HALLOWED_SEPULCHRE_FLOOR_3("Hallowed Sepulchre Floor 3", 72, 1500, ItemID.RING_OF_ENDURANCE),
+ PRIFDDINAS_AGILITY_COURSE("Prifddinas Agility Course", 75, 1337, ItemID.CRYSTAL_SHARD),
+ RELLEKKA_ROOFTOP("Rellekka Rooftop", 80, 780, ItemID.MARK_OF_GRACE),
+ HALLOWED_SEPULCHRE_FLOOR_4("Hallowed Sepulchre Floor 4", 82, 2700, ItemID.RING_OF_ENDURANCE),
+ ARDOUGNE_ROOFTOP("Ardougne Rooftop", 90, 793, ItemID.MARK_OF_GRACE),
+ HALLOWED_SEPULCHRE_FLOOR_5("Hallowed Sepulchre Floor 5", 92, 6000, ItemID.RING_OF_ENDURANCE),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java
new file mode 100644
index 0000000000..ed0e0c65b2
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionAction.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum ConstructionAction implements NamedSkillAction
+{
+ EXIT_PORTAL("Exit Portal", 1, 100, ItemID.EXIT_PORTAL),
+ PLANK("Plank", 1, 29, ItemID.PLANK),
+ OAK_PLANK("Oak Plank", 1, 60, ItemID.OAK_PLANK),
+ TEAK_PLANK("Teak Plank", 1, 90, ItemID.TEAK_PLANK),
+ MAHOGANY_PLANK("Mahogany Plank", 1, 140, ItemID.MAHOGANY_PLANK),
+ PLANT("Plant", 1, 31, ItemID.PLANT),
+ FERN_BIG_PLANT("Fern (big plant)", 1, 31, ItemID.FERN_8186),
+ SHORT_PLANT("Short Plant", 1, 31, ItemID.SHORT_PLANT),
+ DOCK_LEAF("Dock Leaf", 1, 31, ItemID.DOCK_LEAF),
+ CRUDE_WOODEN_CHAIR("Crude Wooden Chair", 1, 58, ItemID.CRUDE_WOODEN_CHAIR),
+ BROWN_RUG("Brown Rug", 2, 30, ItemID.BROWN_RUG),
+ TORN_CURTAINS("Torn Curtains", 2, 132, ItemID.TORN_CURTAINS),
+ CLAY_FIREPLACE("Clay Fireplace", 3, 30, ItemID.CLAY_FIREPLACE),
+ WOODEN_BOOKCASE("Wooden Bookcase", 4, 115, ItemID.WOODEN_BOOKCASE),
+ FIREPIT("Firepit", 5, 40, ItemID.FIREPIT),
+ CAT_BLANKET("Cat Blanket", 5, 15, ItemID.CAT_BLANKET),
+ DECORATIVE_ROCK("Decorative Rock", 5, 100, ItemID.DECORATIVE_ROCK),
+ TREE("Tree", 5, 31, ItemID.TREE),
+ SMALL_FERN("Small Fern", 6, 70, ItemID.SMALL_FERN),
+ THISTLE("Thistle", 6, 70, ItemID.THISTLE),
+ BUSH("Bush", 6, 70, ItemID.BUSH),
+ LARGE_LEAF_BUSH("Large Leaf Bush", 6, 70, ItemID.LARGELEAF_PLANT),
+ WOODEN_SHELVES_1("Wooden Shelves 1", 6, 87, ItemID.WOODEN_SHELVES_1),
+ PUMP_AND_DRAIN("Pump and Drain", 7, 100, ItemID.PUMP_AND_DRAIN),
+ BEER_BARREL("Beer Barrel", 7, 87, ItemID.BEER_BARREL),
+ WOODEN_CHAIR("Wooden Chair", 8, 87, ItemID.WOODEN_CHAIR),
+ WOODEN_LARDER("Wooden Larder", 9, 228, ItemID.WOODEN_LARDER),
+ WOOD_DINING_TABLE("Wood Dining Table", 10, 115, ItemID.WOOD_DINING_TABLE),
+ POND("Pond", 10, 100, ItemID.POND),
+ NICE_TREE("Nice Tree", 10, 44, ItemID.NICE_TREE),
+ WOODEN_BENCH("Wooden Bench", 10, 115, ItemID.WOODEN_BENCH),
+ FIREPIT_WITH_HOOK("Firepit with Hook", 11, 60, ItemID.FIREPIT_WITH_HOOK),
+ REEDS("Reeds", 12, 100, ItemID.REEDS),
+ FERN_SMALL_PLANT("Fern (small plant)", 12, 100, ItemID.FERN),
+ CIDER_BARREL("Cider Barrel", 12, 91, ItemID.CIDER_BARREL),
+ WOODEN_SHELVES_2("Wooden Shelves 2", 12, 147, ItemID.WOODEN_SHELVES_2),
+ WOOD_TABLE("Wood Table", 12, 87, ItemID.WOOD_DINING_TABLE),
+ HUGE_PLANT("Huge Plant", 12, 100, ItemID.HUGE_PLANT),
+ TALL_PLANT("Tall Plant", 12, 100, ItemID.TALL_PLANT),
+ RUG("Rug", 13, 60, ItemID.RUG),
+ ROCKING_CHAIR("Rocking Chair", 14, 87, ItemID.ROCKING_CHAIR),
+ IMP_STATUE("Imp Statue", 15, 150, ItemID.IMP_STATUE),
+ OAK_TREE("Oak Tree", 15, 70, ItemID.OAK_TREE),
+ OAK_DECORATION("Oak Decoration", 16, 120, ItemID.OAK_DECORATION),
+ FIREPIT_WITH_POT("Firepit with Pot", 17, 80, ItemID.FIREPIT_WITH_POT),
+ CURTAINS("Curtains", 18, 225, ItemID.CURTAINS),
+ ASGARNIAN_ALE("Asgarnian Ale", 18, 184, ItemID.ASGARNIAN_ALE),
+ CAT_BASKET("Cat Basket", 19, 58, ItemID.CAT_BASKET),
+ OAK_CHAIR("Oak Chair", 19, 120, ItemID.OAK_CHAIR),
+ WOODEN_BED("Wooden Bed", 20, 117, ItemID.WOODEN_BED),
+ SHOE_BOX("Shoe Box", 20, 58, ItemID.SHOE_BOX),
+ SHAVING_STAND("Shaving Stand", 21, 30, ItemID.SHAVING_STAND),
+ OAK_DINING_TABLE("Oak Dining Table", 22, 240, ItemID.OAK_DINING_TABLE),
+ OAK_BENCH("Oak Bench", 22, 240, ItemID.OAK_BENCH),
+ WOODEN_SHELVES_3("Wooden Shelves 3", 23, 147, ItemID.WOODEN_SHELVES_3),
+ SMALL_OVEN("Small Oven", 24, 80, ItemID.SMALL_OVEN),
+ OAK_CLOCK("Oak Clock", 25, 142, ItemID.OAK_CLOCK),
+ GREENMANS_ALE("Greenman's Ale", 26, 184, ItemID.GREENMANS_ALE),
+ OAK_ARMCHAIR("Oak Armchair", 26, 180, ItemID.OAK_ARMCHAIR),
+ ROPE_BELL_PULL("Rope Bell-Pull", 26, 64, ItemID.ROPE_BELLPULL),
+ PUMP_AND_TUB("Pump and Tub", 27, 200, ItemID.PUMP_AND_TUB),
+ OAK_DRAWERS("Oak Drawers", 27, 120, ItemID.OAK_DRAWERS),
+ OAK_BOOKCASE("Oak Bookcase", 29, 180, ItemID.OAK_BOOKCASE),
+ LARGE_OVEN("Large Oven", 29, 100, ItemID.LARGE_OVEN),
+ OAK_SHAVING_STAND("Oak Shaving Stand", 29, 61, ItemID.OAK_SHAVING_STAND),
+ WILLOW_TREE("Willow Tree", 30, 100, ItemID.WILLOW_TREE),
+ OAK_BED("Oak Bed", 30, 210, ItemID.OAK_BED),
+ LONG_BONE("Long Bone", 30, 4500, ItemID.LONG_BONE),
+ CURVED_BONE("Curved Bone", 30, 6750, ItemID.CURVED_BONE),
+ CARVED_OAK_BENCH("Carved Oak Bench", 31, 240, ItemID.CARVED_OAK_BENCH),
+ CARVED_OAK_TABLE("Carved Oak Table", 31, 360, ItemID.CARVED_OAK_TABLE),
+ OAK_KITCHEN_TABLE("Oak Kitchen Table", 32, 180, ItemID.TEAK_TABLE),
+ BOXING_RING("Boxing Ring", 32, 420, ItemID.BOXING_RING),
+ OAK_LARDER("Oak Larder", 33, 480, ItemID.OAK_LARDER),
+ CUSHIONED_BASKET("Cushioned Basket", 33, 58, ItemID.CUSHIONED_BASKET),
+ STONE_FIREPLACE("Stone Fireplace", 33, 40, ItemID.STONE_FIREPLACE),
+ STEEL_RANGE("Steel Range", 34, 120, ItemID.STEEL_RANGE),
+ OAK_SHELVES_1("Oak Shelves 1", 34, 240, ItemID.OAK_SHELVES_1),
+ GLOVE_RACK("Glove Rack", 34, 120, ItemID.GLOVE_RACK),
+ LARGE_OAK_BED("Large Oak Bed", 34, 330, ItemID.LARGE_OAK_BED),
+ TEAK_ARMCHAIR("Teak Armchair", 35, 180, ItemID.TEAK_ARMCHAIR),
+ DRAGON_BITTER("Dragon Bitter", 36, 224, ItemID.DRAGON_BITTER),
+ TEAK_DECORATION("Teak Decoration", 36, 180, ItemID.TEAK_DECORATION),
+ BELL_PULL("Bell-Pull", 37, 120, ItemID.BELLPULL),
+ OAK_DRESSER("Oak Dresser", 37, 121, ItemID.OAK_DRESSER),
+ TEAK_BENCH("Teak Bench", 38, 360, ItemID.CARVED_TEAK_BENCH),
+ TEAK_TABLE("Teak Table", 38, 360, ItemID.TEAK_TABLE),
+ OAK_WARDROBE("Oak Wardrobe", 39, 180, ItemID.OAK_WARDROBE),
+ TEAK_BED("Teak Bed", 40, 300, ItemID.TEAK_BED),
+ MAHOGANY_BOOKCASE("Mahogany Bookcase", 40, 420, ItemID.MAHOGANY_BOOKCASE),
+ OAK_LECTERN("Oak Lectern", 40, 60, ItemID.OAK_LECTERN),
+ OPULENT_CURTAINS("Opulent Curtains", 40, 315, ItemID.OPULENT_CURTAINS),
+ FENCING_RING("Fencing Ring", 41, 570, ItemID.FENCING_RING),
+ GLOBE("Globe", 41, 180, ItemID.GLOBE),
+ FANCY_RANGE("Fancy Range", 42, 160, ItemID.FANCY_RANGE),
+ CRYSTAL_BALL("Crystal Ball", 42, 280, ItemID.CRYSTAL_BALL),
+ ALCHEMICAL_CHART("Alchemical Chart", 43, 30, ItemID.ALCHEMICAL_CHART),
+ TEAK_LARDER("Teak larder", 43, 750, ItemID.TEAK_LARDER),
+ WOODEN_TELESCOPE("Wooden Telescope", 44, 121, ItemID.OAK_TELESCOPE),
+ WEAPONS_RACK("Weapons Rack", 44, 180, ItemID.WEAPONS_RACK),
+ CARVED_TEAK_BENCH("Carved Teak Bench", 44, 360, ItemID.CARVED_TEAK_BENCH),
+ OAK_SHELVES_2("Oak Shelves 2", 45, 240, ItemID.OAK_SHELVES_2),
+ CARVED_TEAK_TABLE("Carved Teak Table", 45, 600, ItemID.CARVED_TEAK_TABLE),
+ LARGE_TEAK_BED("Large Teak Bed", 45, 480, ItemID.LARGE_TEAK_BED),
+ MAPLE_TREE("Maple Tree", 45, 122, ItemID.MAPLE_TREE),
+ TEAK_DRESSER("Teak Dresser", 46, 181, ItemID.TEAK_DRESSER),
+ SINK("Sink", 47, 300, ItemID.SINK),
+ EAGLE_LECTERN("Eagle Lectern", 47, 120, ItemID.EAGLE_LECTERN),
+ DEMON_LECTERN("Demon Lectern", 47, 120, ItemID.DEMON_LECTERN),
+ MOUNTED_MYTHICAL_CAPE("Mounted Mythical Cape", 47, 370, ItemID.MYTHICAL_CAPE),
+ CHEFS_DELIGHT("Chef's Delight", 48, 224, ItemID.CHEFS_DELIGHT),
+ TEAK_PORTAL("Teak Portal", 50, 270, ItemID.TEAK_PORTAL),
+ MAHOGANY_ARMCHAIR("Mahogany Armchair", 50, 280, ItemID.MAHOGANY_ARMCHAIR),
+ ORNAMENTAL_GLOBE("Ornamental Globe", 50, 270, ItemID.ORNAMENTAL_GLOBE),
+ TELEPORT_FOCUS("Teleport Focus", 50, 40, ItemID.TELEPORT_FOCUS),
+ TEAK_DRAWERS("Teak Drawers", 51, 180, ItemID.TEAK_DRAWERS),
+ COMBAT_RING("Combat Ring", 51, 630, ItemID.COMBAT_RING),
+ TEAK_KITCHEN_TABLE("Teak Kitchen Table", 52, 270, ItemID.TEAK_TABLE),
+ MAHOGANY_BENCH("Mahogany Bench", 52, 560, ItemID.MAHOGANY_BENCH),
+ MAHOGANY_TABLE("Mahogany Table", 52, 840, ItemID.MAHOGANY_TABLE),
+ FOUR_POSTER_BED("4-Poster Bed", 53, 450, ItemID._4POSTER),
+ EXTRA_WEAPONS_RACK("Extra Weapons Rack", 54, 440, ItemID.EXTRA_WEAPONS_RACK),
+ ELEMENTAL_SPHERE("Elemental Sphere", 54, 580, ItemID.ELEMENTAL_SPHERE),
+ TEAK_CLOCK("Teak Clock", 55, 202, ItemID.TEAK_CLOCK),
+ GILDED_DECORATION("Gilded Decoration", 56, 1020, ItemID.GILDED_DECORATION),
+ FANCY_TEAK_DRESSER("Fancy Teak Dresser", 56, 182, ItemID.FANCY_TEAK_DRESSER),
+ TEAK_SHELVES_1("Teak Shelves 1", 56, 330, ItemID.TEAK_SHELVES_1),
+ TEAK_EAGLE_LECTERN("Teak Eagle Lectern", 57, 180, ItemID.TEAK_EAGLE_LECTERN),
+ TEAK_DEMON_LECTERN("Teak Demon Lectern", 57, 180, ItemID.TEAK_DEMON_LECTERN),
+ LIMESTONE_ATTACK_STONE("Limestone attack stone", 59, 200, ItemID.ATTACK_STONE),
+ LUNAR_GLOBE("Lunar Globe", 59, 570, ItemID.LUNAR_GLOBE),
+ GILDED_FOUR_POSTER_BED("Gilded 4-Poster Bed", 60, 1330, ItemID.GILDED_4POSTER),
+ POSH_BELL_PULL("Posh Bell-Pull", 60, 420, ItemID.POSH_BELLPULL),
+ SPICE_RACK("Spice Rack", 60, 374, ItemID.SPICE_RACK),
+ YEW_TREE("Yew Tree", 60, 141, ItemID.YEW_TREE),
+ GILDED_BENCH("Gilded Bench", 61, 1760, ItemID.GILDED_BENCH),
+ TEAK_WARDROBE("Teak Wardrobe", 63, 270, ItemID.TEAK_WARDROBE),
+ MARBLE_FIREPLACE("Marble Fireplace", 63, 500, ItemID.MARBLE_FIREPLACE),
+ ASTRONOMICAL_CHART("Astronomical Chart", 63, 45, ItemID.ASTRONOMICAL_CHART),
+ TEAK_TELESCOPE("Teak Telescope", 64, 181, ItemID.TEAK_TELESCOPE),
+ MAHOGANY_DRESSER("Mahogany Dresser", 64, 281, ItemID.MAHOGANY_DRESSER),
+ MAHOGANY_PORTAL("Mahogany Portal", 65, 420, ItemID.MAHOGANY_PORTAL),
+ GREATER_FOCUS("Greater Focus", 65, 500, ItemID.GREATER_FOCUS),
+ OPULENT_RUG("Opulent Rug", 65, 360, ItemID.OPULENT_RUG),
+ TEAK_GARDEN_BENCH("Teak Garden Bench", 66, 540, ItemID.TEAK_GARDEN_BENCH),
+ CRYSTAL_OF_POWER("Crystal of Power", 66, 890, ItemID.CRYSTAL_OF_POWER),
+ TEAK_SHELVES_2("Teak Shelves 2", 67, 930, ItemID.TEAK_SHELVES_2),
+ MAHOGANY_DEMON_LECTERN("Mahogany Demon Lectern", 67, 580, ItemID.TEAK_DEMON_LECTERN),
+ MAHOGANY_EAGLE_LECTERN("Mahogany Eagle Lectern", 67, 580, ItemID.TEAK_DEMON_LECTERN),
+ CELESTIAL_GLOBE("Celestial Globe", 68, 570, ItemID.CELESTIAL_GLOBE),
+ DUNGEON_ENTRANCE("Dungeon Entrance", 70, 500, ItemID.DUNGEON_ENTRANCE),
+ RANGING_PEDESTALS("Ranging Pedestals", 71, 720, ItemID.RANGING_PEDESTALS),
+ OPULENT_TABLE("Opulent Table", 72, 3100, ItemID.OPULENT_TABLE),
+ OAK_DOOR("Oak Door", 74, 600, ItemID.OAK_DOOR),
+ GILDED_DRESSER("Gilded Dresser", 74, 582, ItemID.GILDED_DRESSER),
+ MAHOGANY_WARDROBE("Mahogany Wardrobe", 75, 420, ItemID.MAHOGANY_WARDROBE),
+ MAGIC_TREE("Magic Tree", 75, 223, ItemID.MAGIC_TREE),
+ ARMILLARY_GLOBE("Armillary Globe", 77, 960, ItemID.GLOBE),
+ GNOME_BENCH("Gnome Bench", 77, 840, ItemID.GNOME_BENCH),
+ MARBLE_PORTAL("Marble Portal", 80, 1500, ItemID.MARBLE_PORTAL),
+ SCRYING_POOL("Scrying Pool", 80, 2000, ItemID.SCRYING_POOL),
+ BALANCE_BEAM("Balance Beam", 81, 1000, ItemID.BALANCE_BEAM),
+ INFERNAL_CHART("Infernal Chart", 83, 60, ItemID.INFERNAL_CHART),
+ MAHOGANY_TELESCOPE("Mahogany Telescope", 84, 281, ItemID.MAHOGANY_TELESCOPE),
+ GILDED_CLOCK("Gilded Clock", 85, 602, ItemID.GILDED_CLOCK),
+ SMALL_ORRERY("Small Orrery", 86, 1320, ItemID.SMALL_ORRERY),
+ GILDED_WARDROBE("Gilded Wardrobe", 87, 720, ItemID.GILDED_WARDROBE),
+ LARGE_ORRERY("Large Orrery", 95, 1420, ItemID.LARGE_ORRERY),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-api/src/main/java/net/runelite/api/Favour.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionBonus.java
similarity index 71%
rename from runelite-api/src/main/java/net/runelite/api/Favour.java
rename to runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionBonus.java
index 38904257b1..d398ea2786 100644
--- a/runelite-api/src/main/java/net/runelite/api/Favour.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ConstructionBonus.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 William
+ * Copyright (c) 2021, Jordan Atwood
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,24 +22,18 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package net.runelite.api;
+package net.runelite.client.plugins.skillcalculator.skills;
+import lombok.AllArgsConstructor;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-/**
- * An enumeration of Kourend house favour the player can earn.
- */
-@RequiredArgsConstructor
-@Getter
-public enum Favour
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum ConstructionBonus implements SkillBonus
{
- ARCEUUS("Arceuus", Varbits.KOUREND_FAVOR_ARCEUUS),
- HOSIDIUS("Hosidius", Varbits.KOUREND_FAVOR_HOSIDIUS),
- LOVAKENGJ("Lovakengj", Varbits.KOUREND_FAVOR_LOVAKENGJ),
- PISCARILIUS("Piscarilius", Varbits.KOUREND_FAVOR_PISCARILIUS),
- SHAYZIEN("Shayzien", Varbits.KOUREND_FAVOR_SHAYZIEN);
+ CARPENTERS_OUTFIT("Carpenter's Outfit (+2.5%)", 0.025f),
+ ;
private final String name;
- private final Varbits varbit;
+ private final float value;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java
new file mode 100644
index 0000000000..7a6c09cc4c
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CookingAction.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum CookingAction implements ItemSkillAction
+{
+ SINEW(ItemID.SINEW, 1, 3),
+ SHRIMPS(ItemID.SHRIMPS, 1, 30),
+ COOKED_CHICKEN(ItemID.COOKED_CHICKEN, 1, 30),
+ COOKED_MEAT(ItemID.COOKED_MEAT, 1, 30),
+ COOKED_RABBIT(ItemID.COOKED_RABBIT, 1, 30),
+ ANCHOVIES(ItemID.ANCHOVIES, 1, 30),
+ SARDINE(ItemID.SARDINE, 1, 40),
+ POISON_KARAMBWAN(ItemID.POISON_KARAMBWAN, 1, 80),
+ UGTHANKI_MEAT(ItemID.UGTHANKI_MEAT, 1, 40),
+ BREAD(ItemID.BREAD, 1, 40),
+ HERRING(ItemID.HERRING, 5, 50),
+ FRUIT_BLAST(ItemID.FRUIT_BLAST, 6, 50),
+ BAKED_POTATO(ItemID.BAKED_POTATO, 7, 15),
+ GUPPY(ItemID.GUPPY, 7, 12),
+ PINEAPPLE_PUNCH(ItemID.PINEAPPLE_PUNCH, 8, 70),
+ SPICY_SAUCE(ItemID.SPICY_SAUCE, 9, 25),
+ MACKEREL(ItemID.MACKEREL, 10, 60),
+ REDBERRY_PIE(ItemID.REDBERRY_PIE, 10, 78),
+ TOAD_CRUNCHIES(ItemID.TOAD_CRUNCHIES, 10, 100),
+ CHILLI_CON_CARNE(ItemID.CHILLI_CON_CARNE, 11, 55),
+ ROAST_BIRD_MEAT(ItemID.ROAST_BIRD_MEAT, 11, 62.5f),
+ THIN_SNAIL_MEAT(ItemID.THIN_SNAIL_MEAT, 12, 70),
+ SPICY_CRUNCHIES(ItemID.SPICY_CRUNCHIES, 12, 100),
+ SCRAMBLED_EGG(ItemID.SCRAMBLED_EGG, 13, 50),
+ CIDER(ItemID.CIDER, 14, 182),
+ WORM_CRUNCHIES(ItemID.WORM_CRUNCHIES, 14, 104),
+ TROUT(ItemID.TROUT, 15, 70),
+ SPIDER_ON_STICK(ItemID.SPIDER_ON_STICK, 16, 80),
+ SPIDER_ON_SHAFT(ItemID.SPIDER_ON_SHAFT, 16, 80),
+ ROAST_RABBIT(ItemID.ROAST_RABBIT, 16, 72.5f),
+ CHOCCHIP_CRUNCHIES(ItemID.CHOCCHIP_CRUNCHIES, 16, 100),
+ LEAN_SNAIL_MEAT(ItemID.LEAN_SNAIL_MEAT, 17, 80),
+ COD(ItemID.COD, 18, 75),
+ WIZARD_BLIZZARD(ItemID.WIZARD_BLIZZARD, 18, 110),
+ DWARVEN_STOUT(ItemID.DWARVEN_STOUT, 19, 215),
+ SHORT_GREEN_GUY(ItemID.SHORT_GREEN_GUY, 20, 120),
+ MEAT_PIE(ItemID.MEAT_PIE, 20, 110),
+ PIKE(ItemID.PIKE, 20, 80),
+ CUP_OF_TEA(ItemID.CUP_OF_TEA, 20, 52),
+ CAVEFISH(ItemID.CAVEFISH, 20, 23),
+ ROAST_BEAST_MEAT(ItemID.ROAST_BEAST_MEAT, 21, 82.5f),
+ COOKED_CRAB_MEAT(ItemID.COOKED_CRAB_MEAT, 21, 100),
+ POT_OF_CREAM(ItemID.POT_OF_CREAM, 21, 18),
+ FAT_SNAIL_MEAT(ItemID.FAT_SNAIL_MEAT, 22, 95),
+ EGG_AND_TOMATO(ItemID.EGG_AND_TOMATO, 23, 50),
+ ASGARNIAN_ALE(ItemID.ASGARNIAN_ALE, 24, 248),
+ SALMON(ItemID.SALMON, 25, 90),
+ STEW(ItemID.STEW, 25, 117),
+ FRUIT_BATTA(ItemID.FRUIT_BATTA, 25, 150),
+ TOAD_BATTA(ItemID.TOAD_BATTA, 26, 152),
+ WORM_BATTA(ItemID.WORM_BATTA, 27, 154),
+ VEGETABLE_BATTA(ItemID.VEGETABLE_BATTA, 28, 156),
+ SWEETCORN(ItemID.COOKED_SWEETCORN, 28, 104),
+ COOKED_SLIMY_EEL(ItemID.COOKED_SLIMY_EEL, 28, 95),
+ MUD_PIE(ItemID.MUD_PIE, 29, 128),
+ GREENMANS_ALE(ItemID.GREENMANS_ALE, 29, 281),
+ CHEESE_AND_TOMATO_BATTA(ItemID.CHEESETOM_BATTA, 29, 158),
+ TUNA(ItemID.TUNA, 30, 100),
+ APPLE_PIE(ItemID.APPLE_PIE, 30, 130),
+ WORM_HOLE(ItemID.WORM_HOLE, 30, 170),
+ COOKED_KARAMBWAN(ItemID.COOKED_KARAMBWAN, 30, 190),
+ ROASTED_CHOMPY(ItemID.COOKED_CHOMPY, 30, 100),
+ FISHCAKE(ItemID.COOKED_FISHCAKE, 31, 100),
+ DRUNK_DRAGON(ItemID.DRUNK_DRAGON, 32, 160),
+ CHOC_SATURDAY(ItemID.CHOC_SATURDAY, 33, 170),
+ TETRA(ItemID.TETRA, 33, 31),
+ GARDEN_PIE(ItemID.GARDEN_PIE, 34, 138),
+ WIZARDS_MIND_BOMB(ItemID.WIZARDS_MIND_BOMB, 34, 314),
+ JUG_OF_WINE(ItemID.JUG_OF_WINE, 35, 200),
+ PLAIN_PIZZA(ItemID.PLAIN_PIZZA, 35, 143),
+ RAINBOW_FISH(ItemID.RAINBOW_FISH, 35, 110),
+ VEG_BALL(ItemID.VEG_BALL, 35, 175),
+ BLURBERRY_SPECIAL(ItemID.BLURBERRY_SPECIAL, 37, 180),
+ CAVE_EEL(ItemID.CAVE_EEL, 38, 115),
+ PAT_OF_BUTTER(ItemID.PAT_OF_BUTTER, 38, 40.5f),
+ DRAGON_BITTER(ItemID.DRAGON_BITTER, 39, 347),
+ POTATO_WITH_BUTTER(ItemID.POTATO_WITH_BUTTER, 39, 40),
+ LOBSTER(ItemID.LOBSTER, 40, 120),
+ CAKE(ItemID.CAKE, 40, 180),
+ TANGLED_TOADS_LEGS(ItemID.TANGLED_TOADS_LEGS, 40, 185),
+ CHILLI_POTATO(ItemID.CHILLI_POTATO, 41, 165.5f),
+ COOKED_JUBBLY(ItemID.COOKED_JUBBLY, 41, 160),
+ CHOCOLATE_BOMB(ItemID.CHOCOLATE_BOMB, 42, 190),
+ FRIED_ONIONS(ItemID.FRIED_ONIONS, 42, 60),
+ BASS(ItemID.BASS, 43, 130),
+ MOONLIGHT_MEAD(ItemID.MOONLIGHT_MEAD, 44, 380),
+ SWORDFISH(ItemID.SWORDFISH, 45, 140),
+ MEAT_PIZZA(ItemID.MEAT_PIZZA, 45, 169),
+ FRIED_MUSHROOMS(ItemID.FRIED_MUSHROOMS, 46, 60),
+ CATFISH(ItemID.CATFISH, 46, 43),
+ FISH_PIE(ItemID.FISH_PIE, 47, 164),
+ POTATO_WITH_CHEESE(ItemID.POTATO_WITH_CHEESE, 47, 40),
+ CHEESE(ItemID.CHEESE, 48, 64),
+ AXEMANS_FOLLY(ItemID.AXEMANS_FOLLY, 49, 413),
+ COOKED_OOMLIE_WRAP(ItemID.COOKED_OOMLIE_WRAP, 50, 30),
+ CHOCOLATE_CAKE(ItemID.CHOCOLATE_CAKE, 50, 210),
+ EGG_POTATO(ItemID.EGG_POTATO, 51, 195.5f),
+ BOTANICAL_PIE(ItemID.BOTANICAL_PIE, 52, 180),
+ LAVA_EEL(ItemID.LAVA_EEL, 53, 30),
+ CHEFS_DELIGHT(ItemID.CHEFS_DELIGHT, 54, 446),
+ ANCHOVY_PIZZA(ItemID.ANCHOVY_PIZZA, 55, 182),
+ MUSHROOM_AND_ONION(ItemID.MUSHROOM__ONION, 57, 120),
+ UGTHANKI_KEBAB_FRESH(ItemID.UGTHANKI_KEBAB, 58, 80),
+ PITTA_BREAD(ItemID.PITTA_BREAD, 58, 40),
+ SLAYERS_RESPITE(ItemID.SLAYERS_RESPITE, 59, 479),
+ CURRY(ItemID.CURRY, 60, 280),
+ MUSHROOM_PIE(ItemID.MUSHROOM_PIE, 60, 200),
+ MONKFISH(ItemID.MONKFISH, 62, 150),
+ MUSHROOM_POTATO(ItemID.MUSHROOM_POTATO, 64, 270.5f),
+ PINEAPPLE_PIZZA(ItemID.PINEAPPLE_PIZZA, 65, 188),
+ WINE_OF_ZAMORAK(ItemID.WINE_OF_ZAMORAK, 65, 200),
+ TUNA_AND_CORN(ItemID.TUNA_AND_CORN, 67, 204),
+ TUNA_POTATO(ItemID.TUNA_POTATO, 68, 309.5f),
+ ADMIRAL_PIE(ItemID.ADMIRAL_PIE, 70, 210),
+ SACRED_EEL(ItemID.SACRED_EEL, 72, 109),
+ DRAGONFRUIT_PIE(ItemID.DRAGONFRUIT_PIE, 73, 220),
+ SHARK(ItemID.SHARK, 80, 210),
+ SEA_TURTLE(ItemID.SEA_TURTLE, 82, 211.3f),
+ ANGLERFISH(ItemID.ANGLERFISH, 84, 230),
+ WILD_PIE(ItemID.WILD_PIE, 85, 240),
+ DARK_CRAB(ItemID.DARK_CRAB, 90, 215),
+ MANTA_RAY(ItemID.MANTA_RAY, 91, 216.3f),
+ SUMMER_PIE(ItemID.SUMMER_PIE, 95, 260),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java
new file mode 100644
index 0000000000..c7c8720508
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/CraftingAction.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum CraftingAction implements ItemSkillAction
+{
+ BALL_OF_WOOL(ItemID.BALL_OF_WOOL, 1, 2.5f),
+ UNFIRED_POT(ItemID.UNFIRED_POT, 1, 6.3f),
+ POT(ItemID.POT, 1, 6.3f),
+ LEATHER_GLOVES(ItemID.LEATHER_GLOVES, 1, 13.8f),
+ OPAL(ItemID.OPAL, 1, 15),
+ OPAL_RING(ItemID.OPAL_RING, 1, 10),
+ MOLTEN_GLASS(ItemID.MOLTEN_GLASS, 1, 20),
+ BEER_GLASS(ItemID.BEER_GLASS, 1, 17.5f),
+ EMPTY_CANDLE_LANTERN(ItemID.EMPTY_CANDLE_LANTERN, 4, 19),
+ GOLD_RING(ItemID.GOLD_RING, 5, 15),
+ BIRD_HOUSE(ItemID.BIRD_HOUSE, 5, 15),
+ GOLD_NECKLACE(ItemID.GOLD_NECKLACE, 6, 20),
+ LEATHER_BOOTS(ItemID.LEATHER_BOOTS, 7, 16.3f),
+ UNFIRED_PIE_DISH(ItemID.UNFIRED_PIE_DISH, 7, 15),
+ PIE_DISH(ItemID.PIE_DISH, 7, 10),
+ GOLD_BRACELET(ItemID.GOLD_BRACELET, 7, 25),
+ UNFIRED_BOWL(ItemID.UNFIRED_BOWL, 8, 18),
+ BOWL(ItemID.BOWL, 8, 15),
+ GOLD_AMULET_U(ItemID.GOLD_AMULET_U, 8, 30),
+ COWL(ItemID.LEATHER_COWL, 9, 18.5f),
+ CROSSBOW_STRING(ItemID.CROSSBOW_STRING, 10, 15),
+ BOW_STRING(ItemID.BOW_STRING, 10, 15),
+ LEATHER_VAMBRACES(ItemID.LEATHER_VAMBRACES, 11, 22),
+ EMPTY_OIL_LAMP(ItemID.EMPTY_OIL_LAMP, 12, 25),
+ JADE(ItemID.JADE, 13, 20),
+ JADE_RING(ItemID.JADE_RING, 13, 32),
+ LEATHER_BODY(ItemID.LEATHER_BODY, 14, 25),
+ OAK_BIRD_HOUSE(ItemID.OAK_BIRD_HOUSE, 15, 20),
+ RED_TOPAZ(ItemID.RED_TOPAZ, 16, 25),
+ TOPAZ_RING(ItemID.TOPAZ_RING, 16, 35),
+ HOLY_SYMBOL(ItemID.HOLY_SYMBOL, 16, 50),
+ OPAL_NECKLACE(ItemID.OPAL_NECKLACE, 16, 35),
+ UNHOLY_SYMBOL(ItemID.UNHOLY_SYMBOL, 17, 50),
+ LEATHER_CHAPS(ItemID.LEATHER_CHAPS, 18, 27),
+ UNFIRED_PLANT_POT(ItemID.UNFIRED_PLANT_POT, 19, 20),
+ EMPTY_PLANT_POT(ItemID.EMPTY_PLANT_POT, 19, 17.5f),
+ MAGIC_STRING(ItemID.MAGIC_STRING, 19, 30),
+ SAPPHIRE(ItemID.SAPPHIRE, 20, 50),
+ SAPPHIRE_RING(ItemID.SAPPHIRE_RING, 20, 40),
+ EMPTY_SACK(ItemID.EMPTY_SACK, 21, 38),
+ SAPPHIRE_NECKLACE(ItemID.SAPPHIRE_NECKLACE, 22, 55),
+ OPAL_BRACELET(ItemID.OPAL_BRACELET, 22, 45),
+ SAPPHIRE_BRACELET(ItemID.SAPPHIRE_BRACELET, 23, 60),
+ TIARA(ItemID.TIARA, 23, 52.5f),
+ SAPPHIRE_AMULET_U(ItemID.SAPPHIRE_AMULET_U, 24, 65),
+ UNFIRED_POT_LID(ItemID.UNFIRED_POT_LID, 25, 20),
+ POT_LID(ItemID.POT_LID, 25, 20),
+ JADE_NECKLACE(ItemID.JADE_NECKLACE, 25, 54),
+ WILLOW_BIRD_HOUSE(ItemID.WILLOW_BIRD_HOUSE, 25, 25),
+ DRIFT_NET(ItemID.SMALL_FISHING_NET_6209, 26, 55),
+ EMERALD(ItemID.EMERALD, 27, 67.5f),
+ EMERALD_RING(ItemID.EMERALD_RING, 27, 55),
+ OPAL_AMULET_U(ItemID.OPAL_AMULET_U, 27, 55),
+ HARDLEATHER_BODY(ItemID.HARDLEATHER_BODY, 28, 35),
+ EMERALD_NECKLACE(ItemID.EMERALD_NECKLACE, 29, 60),
+ JADE_BRACELET(ItemID.JADE_BRACELET, 29, 60),
+ EMERALD_BRACELET(ItemID.EMERALD_BRACELET, 30, 65),
+ ROPE(ItemID.ROPE, 30, 25),
+ EMERALD_AMULET_U(ItemID.EMERALD_AMULET_U, 31, 70),
+ SPIKY_VAMBRACES(ItemID.SPIKY_VAMBRACES, 32, 6),
+ TOPAZ_NECKLACE(ItemID.TOPAZ_NECKLACE, 32, 70),
+ VIAL(ItemID.VIAL, 33, 35),
+ RUBY(ItemID.RUBY, 34, 85),
+ RUBY_RING(ItemID.RUBY_RING, 34, 70),
+ JADE_AMULET_U(ItemID.JADE_AMULET_U, 34, 70),
+ BROODOO_SHIELD(ItemID.BROODOO_SHIELD, 35, 100),
+ TEAK_BIRD_HOUSE(ItemID.TEAK_BIRD_HOUSE, 35, 30),
+ BASKET(ItemID.BASKET, 36, 56),
+ COIF(ItemID.COIF, 38, 37),
+ TOPAZ_BRACELET(ItemID.TOPAZ_BRACELET, 38, 75),
+ RUBY_NECKLACE(ItemID.RUBY_NECKLACE, 40, 75),
+ HARD_LEATHER_SHIELD(ItemID.HARD_LEATHER_SHIELD, 41, 70),
+ RUBY_BRACELET(ItemID.RUBY_BRACELET, 42, 80),
+ FISHBOWL(ItemID.FISHBOWL, 42, 42.5f),
+ DIAMOND(ItemID.DIAMOND, 43, 107.5f),
+ DIAMOND_RING(ItemID.DIAMOND_RING, 43, 85),
+ TOPAZ_AMULET_U(ItemID.TOPAZ_AMULET_U, 45, 80),
+ SNAKESKIN_BOOTS(ItemID.SNAKESKIN_BOOTS, 45, 30),
+ MAPLE_BIRD_HOUSE(ItemID.MAPLE_BIRD_HOUSE, 45, 35),
+ UNPOWERED_ORB(ItemID.UNPOWERED_ORB, 46, 52.5f),
+ SNAKESKIN_VAMBRACES(ItemID.SNAKESKIN_VAMBRACES, 47, 35),
+ SNAKESKIN_BANDANA(ItemID.SNAKESKIN_BANDANA, 48, 45),
+ LANTERN_LENS(ItemID.LANTERN_LENS, 49, 55),
+ RUBY_AMULET_U(ItemID.RUBY_AMULET_U, 50, 85),
+ MAHOGANY_BIRD_HOUSE(ItemID.MAHOGANY_BIRD_HOUSE, 50, 40),
+ SNAKESKIN_CHAPS(ItemID.SNAKESKIN_CHAPS, 51, 50),
+ SNAKESKIN_BODY(ItemID.SNAKESKIN_BODY, 53, 55),
+ WATER_BATTLESTAFF(ItemID.WATER_BATTLESTAFF, 54, 100),
+ DRAGONSTONE(ItemID.DRAGONSTONE, 55, 137.5f),
+ DRAGONSTONE_RING(ItemID.DRAGONSTONE_RING, 55, 100),
+ DIAMOND_NECKLACE(ItemID.DIAMOND_NECKLACE, 56, 90),
+ SNAKESKIN_SHIELD(ItemID.SNAKESKIN_SHIELD, 56, 100),
+ GREEN_DHIDE_VAMB(ItemID.GREEN_DHIDE_VAMBRACES, 57, 62),
+ DIAMOND_BRACELET(ItemID.DIAMOND_BRACELET, 58, 95),
+ EARTH_BATTLESTAFF(ItemID.EARTH_BATTLESTAFF, 58, 112.5f),
+ GREEN_DHIDE_CHAPS(ItemID.GREEN_DHIDE_CHAPS, 60, 124),
+ YEW_BIRD_HOUSE(ItemID.YEW_BIRD_HOUSE, 60, 45),
+ FIRE_BATTLESTAFF(ItemID.FIRE_BATTLESTAFF, 62, 125),
+ GREEN_DHIDE_SHIELD(ItemID.GREEN_DHIDE_SHIELD, 62, 124),
+ GREEN_DHIDE_BODY(ItemID.GREEN_DHIDE_BODY, 63, 186),
+ AIR_BATTLESTAFF(ItemID.AIR_BATTLESTAFF, 66, 137.5f),
+ BLUE_DHIDE_VAMB(ItemID.BLUE_DHIDE_VAMBRACES, 66, 70),
+ ONYX_RING(ItemID.ONYX_RING, 67, 115),
+ ONYX(ItemID.ONYX, 67, 167.5f),
+ BLUE_DHIDE_CHAPS(ItemID.BLUE_DHIDE_CHAPS, 68, 140),
+ BLUE_DHIDE_SHIELD(ItemID.BLUE_DHIDE_SHIELD, 69, 140),
+ DIAMOND_AMULET_U(ItemID.DIAMOND_AMULET_U, 70, 100),
+ BLUE_DHIDE_BODY(ItemID.BLUE_DHIDE_BODY, 71, 210),
+ DRAGONSTONE_NECKLACE(ItemID.DRAGON_NECKLACE, 72, 105),
+ RED_DHIDE_VAMB(ItemID.RED_DHIDE_VAMBRACES, 73, 78),
+ DRAGONSTONE_BRACELET(ItemID.DRAGONSTONE_BRACELET, 74, 110),
+ RED_DHIDE_CHAPS(ItemID.RED_DHIDE_CHAPS, 75, 156),
+ MAGIC_BIRD_HOUSE(ItemID.MAGIC_BIRD_HOUSE, 75, 50),
+ RED_DHIDE_SHIELD(ItemID.RED_DHIDE_SHIELD, 76, 156),
+ RED_DHIDE_BODY(ItemID.RED_DHIDE_BODY, 77, 234),
+ BLACK_DHIDE_VAMB(ItemID.BLACK_DHIDE_VAMBRACES, 79, 86),
+ DRAGONSTONE_AMULET_U(ItemID.DRAGONSTONE_AMULET_U, 80, 150),
+ BLACK_DHIDE_CHAPS(ItemID.BLACK_DHIDE_CHAPS, 82, 172),
+ ONYX_NECKLACE(ItemID.ONYX_NECKLACE, 82, 120),
+ AMETHYST_BOLT_TIPS(ItemID.AMETHYST_BOLT_TIPS, 83, 4),
+ BLACK_DHIDE_SHIELD(ItemID.BLACK_DHIDE_SHIELD, 83, 172),
+ BLACK_DHIDE_BODY(ItemID.BLACK_DHIDE_BODY, 84, 258),
+ ONYX_BRACELET(ItemID.ONYX_BRACELET, 84, 125),
+ AMETHYST_ARROWTIPS(ItemID.AMETHYST_ARROWTIPS, 85, 4),
+ AMETHYST_JAVELIN_HEADS(ItemID.AMETHYST_JAVELIN_HEADS, 87, 12),
+ LIGHT_ORB(ItemID.LIGHT_ORB, 87, 70),
+ AMETHYST_DART_TIP(ItemID.AMETHYST_DART_TIP, 89, 7.5f),
+ ZENYTE(ItemID.ZENYTE, 89, 200),
+ ZENYTE_RING(ItemID.ZENYTE_RING, 89, 150),
+ ONYX_AMULET_U(ItemID.ONYX_AMULET_U, 90, 165),
+ REDWOOD_BIRD_HOUSE(ItemID.REDWOOD_BIRD_HOUSE, 90, 55),
+ ZENYTE_NECKLACE(ItemID.ZENYTE_NECKLACE, 92, 165),
+ ZENYTE_BRACELET(ItemID.ZENYTE_BRACELET, 95, 180),
+ ZENYTE_AMULET_U(ItemID.ZENYTE_AMULET_U, 98, 200),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java
new file mode 100644
index 0000000000..6f17dcceb3
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingAction.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum FarmingAction implements NamedSkillAction
+{
+ PLANT("Plant", 1, 31, ItemID.PLANT),
+ FERN_BIG_PLANT("Fern (big plant)", 1, 31, ItemID.FERN_8186),
+ SHORT_PLANT("Short Plant", 1, 31, ItemID.SHORT_PLANT),
+ DOCK_LEAF("Dock Leaf", 1, 31, ItemID.DOCK_LEAF),
+ SMALL_FERN("Small Fern", 1, 70, ItemID.SMALL_FERN),
+ THISTLE("Thistle", 1, 70, ItemID.THISTLE),
+ BUSH("Bush", 1, 70, ItemID.BUSH),
+ LARGE_LEAF_BUSH("Large Leaf Bush", 1, 70, ItemID.LARGELEAF_PLANT),
+ HUGE_PLANT("Huge Plant", 1, 100, ItemID.HUGE_PLANT),
+ TALL_PLANT("Tall Plant", 1, 100, ItemID.TALL_PLANT),
+ REEDS("Reeds", 1, 100, ItemID.REEDS),
+ FERN_SMALL_PLANT("Fern (small plant)", 1, 100, ItemID.FERN),
+ WINTER_SQIRK("Winter Sq'irk", 1, 30, ItemID.WINTER_SQIRK),
+ SPRING_SQIRK("Spring Sq'irk", 1, 40, ItemID.SPRING_SQIRK),
+ AUTUMN_SQIRK("Autumn Sq'irk", 1, 50, ItemID.AUTUMN_SQIRK),
+ SUMMER_SQIRK("Summer Sq'irk", 1, 60, ItemID.SUMMER_SQIRK),
+ POTATOES("Potatoes", 1, 8, ItemID.POTATO),
+ ONIONS("Onions", 5, 10, ItemID.ONION),
+ CABBAGES("Cabbages", 7, 10, ItemID.CABBAGE),
+ GUAM_LEAF("Guam Leaf", 9, 11, ItemID.GUAM_LEAF),
+ TOMATOES("Tomatoes", 12, 12.5f, ItemID.TOMATO),
+ MARRENTILL("Marrentill", 14, 13.5f, ItemID.MARRENTILL),
+ OAK_TREE("Oak Tree", 15, 481.3f, ItemID.OAK_LOGS),
+ TARROMIN("Tarromin", 19, 16, ItemID.TARROMIN),
+ SWEETCORN("Sweetcorn", 20, 17, ItemID.SWEETCORN),
+ GIANT_SEAWEED("Giant seaweed", 23, 21, ItemID.GIANT_SEAWEED),
+ HARRALANDER("Harralander", 26, 21.5f, ItemID.HARRALANDER),
+ LIMPWURT_PLANT("Limpwurt Plant", 26, 40, ItemID.LIMPWURT_ROOT),
+ APPLE_TREE("Apple Tree", 27, 1221.5f, ItemID.COOKING_APPLE),
+ GOUTWEED("Goutweed", 29, 105, ItemID.GOUTWEED),
+ WILLOW_TREE("Willow Tree", 30, 1481.5f, ItemID.WILLOW_LOGS),
+ STRAWBERRIES("Strawberries", 31, 26, ItemID.STRAWBERRY),
+ RANARR_WEED("Ranarr Weed", 32, 27, ItemID.RANARR_WEED),
+ BANANA_TREE("Banana Tree", 33, 1778.5f, ItemID.BANANA),
+ TEAK_TREE("Teak Tree", 35, 7315, ItemID.TEAK_LOGS),
+ TOADFLAX("Toadflax", 38, 34, ItemID.TOADFLAX),
+ ORANGE_TREE("Orange Tree", 39, 2505.7f, ItemID.ORANGE),
+ CURRY_TREE("Curry Tree", 42, 2946.9f, ItemID.CURRY_LEAF),
+ IRIT_LEAF("Irit Leaf", 44, 43, ItemID.IRIT_LEAF),
+ MAPLE_TREE("Maple Tree", 45, 3448.4f, ItemID.MAPLE_LOGS),
+ WATERMELONS("Watermelons", 47, 49, ItemID.WATERMELON),
+ AVANTOE("Avantoe", 50, 54.5f, ItemID.AVANTOE),
+ PINEAPPLE_PLANT("Pineapple Plant", 51, 4662.7f, ItemID.PINEAPPLE),
+ MAHOGANY_TREE("Mahogany Tree", 55, 15783, ItemID.MAHOGANY_LOGS),
+ KWUARM("Kwuarm", 56, 69, ItemID.KWUARM),
+ PAPAYA_TREE("Papaya Tree", 57, 6218.4f, ItemID.PAPAYA_FRUIT),
+ WHITE_LILY("White lily", 58, 292, ItemID.WHITE_LILY),
+ YEW_TREE("Yew Tree", 60, 7150.9f, ItemID.YEW_LOGS),
+ SNAPE_GRASS("Snape grass", 61, 82, ItemID.SNAPE_GRASS),
+ SNAPDRAGON("Snapdragon", 62, 87.5f, ItemID.SNAPDRAGON),
+ HESPORI("Hespori", 65, 12662, ItemID.CLAN_WARS_CAPE_12662),
+ CADANTINE("Cadantine", 67, 106.5f, ItemID.CADANTINE),
+ PALM_TREE("Palm Tree", 68, 10260.6f, ItemID.COCONUT),
+ CALQUAT_TREE("Calquat Tree", 72, 12225.5f, ItemID.CALQUAT_FRUIT),
+ LANTADYME("Lantadyme", 73, 134.5f, ItemID.LANTADYME),
+ CRYSTAL_TREE("Crystal Tree", 74, 13366, ItemID.CRYSTAL_SHARD),
+ MAGIC_TREE("Magic Tree", 75, 13913.8f, ItemID.MAGIC_LOGS),
+ DWARF_WEED("Dwarf Weed", 79, 170.5f, ItemID.DWARF_WEED),
+ DRAGONFRUIT_TREE("Dragonfruit Tree", 81, 17895, ItemID.DRAGONFRUIT),
+ SPIRIT_TREE("Spirit Tree", 83, 19501.3f, ItemID.SPIRIT_TREE),
+ CELASTRUS_TREE("Celastrus Tree", 85, 14334, ItemID.CELASTRUS_BARK),
+ TORSTOL("Torstol", 85, 199.5f, ItemID.TORSTOL),
+ REDWOOD_TREE("Redwood Tree", 90, 22680, ItemID.REDWOOD_LOGS),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingBonus.java
similarity index 78%
rename from runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java
rename to runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingBonus.java
index 675fcb51db..bef0a0bf2c 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FarmingBonus.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Kruithne
+ * Copyright (c) 2021, Jordan Atwood
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,13 +22,18 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package net.runelite.client.plugins.skillcalculator.beans;
+package net.runelite.client.plugins.skillcalculator.skills;
+import lombok.AllArgsConstructor;
import lombok.Getter;
-@Getter
-public class SkillDataBonus
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum FarmingBonus implements SkillBonus
{
- private String name;
- private float value;
-}
\ No newline at end of file
+ FARMERS_OUTFIT("Farmer's Outfit (+2.5%)", 0.025f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java
new file mode 100644
index 0000000000..424fb851a8
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingAction.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum FiremakingAction implements ItemSkillAction
+{
+ LOGS(ItemID.LOGS, 1, 40),
+ ACHEY_TREE_LOGS(ItemID.ACHEY_TREE_LOGS, 1, 40),
+ OAK_LOGS(ItemID.OAK_LOGS, 15, 60),
+ WILLOW_LOGS(ItemID.WILLOW_LOGS, 30, 90),
+ TEAK_LOGS(ItemID.TEAK_LOGS, 35, 105),
+ ARCTIC_PINE_LOGS(ItemID.ARCTIC_PINE_LOGS, 42, 125),
+ MAPLE_LOGS(ItemID.MAPLE_LOGS, 45, 135),
+ MAHOGANY_LOGS(ItemID.MAHOGANY_LOGS, 50, 157.5f),
+ YEW_LOGS(ItemID.YEW_LOGS, 60, 202.5f),
+ BLISTERWOOD_LOGS(ItemID.BLISTERWOOD_LOGS, 62, 96),
+ MAGIC_LOGS(ItemID.MAGIC_LOGS, 75, 303.8f),
+ REDWOOD_LOGS(ItemID.REDWOOD_LOGS, 90, 350),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingBonus.java
new file mode 100644
index 0000000000..6f4cd5a720
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FiremakingBonus.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum FiremakingBonus implements SkillBonus
+{
+ PYROMANCER_OUTFIT("Pyromancer Outfit (+2.5%)", 0.025f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java
new file mode 100644
index 0000000000..7f42218de2
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingAction.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum FishingAction implements ItemSkillAction
+{
+ RAW_SHRIMPS(ItemID.RAW_SHRIMPS, 1, 10),
+ RAW_SARDINE(ItemID.RAW_SARDINE, 5, 20),
+ RAW_KARAMBWANJI(ItemID.RAW_KARAMBWANJI, 5, 5),
+ RAW_GUPPY(ItemID.RAW_GUPPY, 7, 8),
+ RAW_HERRING(ItemID.RAW_HERRING, 10, 30),
+ RAW_ANCHOVIES(ItemID.RAW_ANCHOVIES, 15, 40),
+ RAW_MACKEREL(ItemID.RAW_MACKEREL, 16, 20),
+ RAW_TROUT(ItemID.RAW_TROUT, 20, 50),
+ RAW_CAVEFISH(ItemID.RAW_CAVEFISH, 20, 16),
+ RAW_COD(ItemID.RAW_COD, 23, 45),
+ RAW_PIKE(ItemID.RAW_PIKE, 25, 60),
+ RAW_SLIMY_EEL(ItemID.RAW_SLIMY_EEL, 28, 65),
+ RAW_SALMON(ItemID.RAW_SALMON, 30, 70),
+ RAW_TETRA(ItemID.RAW_TETRA, 33, 24),
+ RAW_TUNA(ItemID.RAW_TUNA, 35, 80),
+ RAW_RAINBOW_FISH(ItemID.RAW_RAINBOW_FISH, 38, 80),
+ RAW_CAVE_EEL(ItemID.RAW_CAVE_EEL, 38, 80),
+ RAW_LOBSTER(ItemID.RAW_LOBSTER, 40, 90),
+ RAW_BASS(ItemID.RAW_BASS, 46, 100),
+ RAW_CATFISH(ItemID.RAW_CATFISH, 46, 33),
+ LEAPING_TROUT(ItemID.LEAPING_TROUT, 48, 50),
+ RAW_SWORDFISH(ItemID.RAW_SWORDFISH, 50, 100),
+ LEAPING_SALMON(ItemID.LEAPING_SALMON, 58, 70),
+ RAW_MONKFISH(ItemID.RAW_MONKFISH, 62, 120),
+ RAW_KARAMBWAN(ItemID.RAW_KARAMBWAN, 65, 50),
+ LEAPING_STURGEON(ItemID.LEAPING_STURGEON, 70, 80),
+ RAW_SHARK(ItemID.RAW_SHARK, 76, 110),
+ RAW_SEA_TURTLE(ItemID.RAW_SEA_TURTLE, 79, 38),
+ INFERNAL_EEL(ItemID.INFERNAL_EEL, 80, 95),
+ RAW_MANTA_RAY(ItemID.RAW_MANTA_RAY, 81, 46),
+ RAW_ANGLERFISH(ItemID.RAW_ANGLERFISH, 82, 120),
+ MINNOW(ItemID.MINNOW, 82, 26.5f),
+ RAW_DARK_CRAB(ItemID.RAW_DARK_CRAB, 85, 130),
+ SACRED_EEL(ItemID.SACRED_EEL, 87, 105),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingBonus.java
new file mode 100644
index 0000000000..422d22968e
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FishingBonus.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum FishingBonus implements SkillBonus
+{
+ ANGLERS_OUTFIT("Angler's Outfit (+2.5%)", 0.025f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java
new file mode 100644
index 0000000000..c869ed06a2
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/FletchingAction.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum FletchingAction implements ItemSkillAction
+{
+ ARROW_SHAFT(ItemID.ARROW_SHAFT, 1, 0.33f),
+ HEADLESS_ARROW(ItemID.HEADLESS_ARROW, 1, 1),
+ BRONZE_ARROW(ItemID.BRONZE_ARROW, 1, 1.3f),
+ OGRE_ARROW(ItemID.OGRE_ARROW, 5, 1),
+ SHORTBOW_U(ItemID.SHORTBOW_U, 5, 5),
+ SHORTBOW(ItemID.SHORTBOW, 5, 5),
+ BRONZE_BOLTS(ItemID.BRONZE_BOLTS, 9, 0.5f),
+ WOODEN_STOCK(ItemID.WOODEN_STOCK, 9, 6),
+ BRONZE_CROSSBOW_U(ItemID.BRONZE_CROSSBOW_U, 9, 12),
+ BRONZE_CROSSBOW(ItemID.BRONZE_CROSSBOW, 9, 6),
+ BRONZE_DART(ItemID.BRONZE_DART, 10, 1.8f),
+ LONGBOW(ItemID.LONGBOW, 10, 10),
+ LONGBOW_U(ItemID.LONGBOW_U, 10, 10),
+ OPAL_BOLTS(ItemID.OPAL_BOLTS, 11, 1.6f),
+ IRON_ARROW(ItemID.IRON_ARROW, 15, 2.5f),
+ OAK_SHORTBOW_U(ItemID.OAK_SHORTBOW_U, 20, 16.5f),
+ OAK_SHORTBOW(ItemID.OAK_SHORTBOW, 20, 16.5f),
+ IRON_DART(ItemID.IRON_DART, 22, 3.8f),
+ OAK_STOCK(ItemID.OAK_STOCK, 24, 16),
+ BLURITE_CROSSBOW_U(ItemID.BLURITE_CROSSBOW_U, 24, 32),
+ BLURITE_CROSSBOW(ItemID.BLURITE_CROSSBOW, 24, 16),
+ OAK_LONGBOW_U(ItemID.OAK_LONGBOW_U, 25, 25),
+ OAK_LONGBOW(ItemID.OAK_LONGBOW, 25, 25),
+ OAK_SHIELD(ItemID.OAK_SHIELD, 27, 50),
+ STEEL_ARROW(ItemID.STEEL_ARROW, 30, 5),
+ KEBBIT_BOLTS(ItemID.KEBBIT_BOLTS, 32, 1),
+ WILLOW_SHORTBOW_U(ItemID.WILLOW_SHORTBOW_U, 35, 33.3f),
+ WILLOW_SHORTBOW(ItemID.WILLOW_SHORTBOW, 35, 33.3f),
+ STEEL_DART(ItemID.STEEL_DART, 37, 7.5f),
+ IRON_BOLTS(ItemID.IRON_BOLTS, 39, 1.5f),
+ WILLOW_STOCK(ItemID.WILLOW_STOCK, 39, 22),
+ IRON_CROSSBOW_U(ItemID.IRON_CROSSBOW_U, 39, 44),
+ IRON_CROSSBOW(ItemID.IRON_CROSSBOW, 39, 22),
+ WILLOW_LONGBOW_U(ItemID.WILLOW_LONGBOW_U, 40, 41.5f),
+ WILLOW_LONGBOW(ItemID.WILLOW_LONGBOW, 40, 41.5f),
+ BATTLESTAFF(ItemID.BATTLESTAFF, 40, 80),
+ PEARL_BOLTS(ItemID.PEARL_BOLTS, 41, 3.2f),
+ WILLOW_SHIELD(ItemID.WILLOW_SHIELD, 42, 83),
+ LONG_KEBBIT_BOLTS(ItemID.LONG_KEBBIT_BOLTS, 42, 1.3f),
+ SILVER_BOLTS(ItemID.SILVER_BOLTS, 43, 2.5f),
+ MITHRIL_ARROW(ItemID.MITHRIL_ARROW, 45, 7.5f),
+ STEEL_BOLTS(ItemID.STEEL_BOLTS, 46, 3.5f),
+ TEAK_STOCK(ItemID.TEAK_STOCK, 46, 27),
+ STEEL_CROSSBOW_U(ItemID.STEEL_CROSSBOW_U, 46, 54),
+ STEEL_CROSSBOW(ItemID.STEEL_CROSSBOW, 46, 27),
+ MAPLE_SHORTBOW_U(ItemID.MAPLE_SHORTBOW_U, 50, 50),
+ MAPLE_SHORTBOW(ItemID.MAPLE_SHORTBOW, 50, 50),
+ BARBED_BOLTS(ItemID.BARBED_BOLTS, 51, 9.5f),
+ MITHRIL_DART(ItemID.MITHRIL_DART, 52, 11.2f),
+ BROAD_ARROWS(ItemID.BROAD_ARROWS, 52, 10),
+ TOXIC_BLOWPIPE(ItemID.TOXIC_BLOWPIPE, 53, 120),
+ MITH_CROSSBOW(ItemID.MITHRIL_CROSSBOW, 54, 32),
+ MAPLE_STOCK(ItemID.MAPLE_STOCK, 54, 32),
+ MITHRIL_BOLTS(ItemID.MITHRIL_BOLTS, 54, 5),
+ MITHRIL_CROSSBOW_U(ItemID.MITHRIL_CROSSBOW_U, 54, 64),
+ MAPLE_LONGBOW_U(ItemID.MAPLE_LONGBOW_U, 55, 58.3f),
+ BROAD_BOLTS(ItemID.BROAD_BOLTS, 55, 3),
+ MAPLE_LONGBOW(ItemID.MAPLE_LONGBOW, 55, 58),
+ SAPPHIRE_BOLTS(ItemID.SAPPHIRE_BOLTS, 56, 4.7f),
+ MAPLE_SHIELD(ItemID.MAPLE_SHIELD, 57, 116.5f),
+ EMERALD_BOLTS(ItemID.EMERALD_BOLTS, 58, 5.5f),
+ ADAMANT_ARROW(ItemID.ADAMANT_ARROW, 60, 10),
+ ADAMANT_BOLTS(ItemID.ADAMANT_BOLTS, 61, 7),
+ MAHOGANY_STOCK(ItemID.MAHOGANY_STOCK, 61, 41),
+ ADAMANT_CROSSBOW_U(ItemID.ADAMANT_CROSSBOW_U, 61, 82),
+ ADAMANT_CROSSBOW(ItemID.ADAMANT_CROSSBOW, 61, 41),
+ RUBY_BOLTS(ItemID.RUBY_BOLTS, 63, 6.3f),
+ DIAMOND_BOLTS(ItemID.DIAMOND_BOLTS, 65, 7),
+ YEW_SHORTBOW(ItemID.YEW_SHORTBOW, 65, 67.5f),
+ YEW_SHORTBOW_U(ItemID.YEW_SHORTBOW_U, 65, 67.5f),
+ ADAMANT_DART(ItemID.ADAMANT_DART, 67, 15),
+ RUNITE_CROSSBOW_U(ItemID.RUNITE_CROSSBOW_U, 69, 100),
+ RUNE_CROSSBOW(ItemID.RUNE_CROSSBOW, 69, 50),
+ YEW_STOCK(ItemID.YEW_STOCK, 69, 50),
+ RUNITE_BOLTS(ItemID.RUNITE_BOLTS, 69, 10),
+ YEW_LONGBOW(ItemID.YEW_LONGBOW, 70, 75),
+ YEW_LONGBOW_U(ItemID.YEW_LONGBOW_U, 70, 75),
+ DRAGONSTONE_BOLTS(ItemID.DRAGONSTONE_BOLTS, 71, 8.2f),
+ YEW_SHIELD(ItemID.YEW_SHIELD, 72, 150),
+ ONYX_BOLTS(ItemID.ONYX_BOLTS, 73, 9.4f),
+ RUNE_ARROW(ItemID.RUNE_ARROW, 75, 12.5f),
+ AMETHYST_BROAD_BOLTS(ItemID.AMETHYST_BROAD_BOLTS, 76, 10.6f),
+ MAGIC_STOCK(ItemID.MAGIC_STOCK, 78, 70),
+ DRAGON_CROSSBOW_U(ItemID.DRAGON_CROSSBOW_U, 78, 135),
+ DRAGON_CROSSBOW(ItemID.DRAGON_CROSSBOW, 78, 70),
+ MAGIC_SHORTBOW(ItemID.MAGIC_SHORTBOW, 80, 83.3f),
+ MAGIC_SHORTBOW_U(ItemID.MAGIC_SHORTBOW_U, 80, 83.3f),
+ RUNE_DART(ItemID.RUNE_DART, 81, 18.8f),
+ AMETHYST_ARROW(ItemID.AMETHYST_ARROW, 82, 13.5f),
+ DRAGON_BOLTS(ItemID.DRAGON_BOLTS_UNF, 84, 12),
+ AMETHYST_JAVELIN(ItemID.AMETHYST_JAVELIN, 84, 13.5f),
+ MAGIC_LONGBOW(ItemID.MAGIC_LONGBOW, 85, 91.5f),
+ MAGIC_LONGBOW_U(ItemID.MAGIC_LONGBOW_U, 85, 91.5f),
+ MAGIC_SHIELD(ItemID.MAGIC_SHIELD, 87, 183),
+ AMETHYST_DART(ItemID.AMETHYST_DART, 90, 21),
+ DRAGON_ARROW(ItemID.DRAGON_ARROW, 90, 15),
+ REDWOOD_SHIELD(ItemID.REDWOOD_SHIELD, 92, 216),
+ DRAGON_DART(ItemID.DRAGON_DART, 95, 25),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java
new file mode 100644
index 0000000000..805bea57f0
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HerbloreAction.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum HerbloreAction implements ItemSkillAction
+{
+ ATTACK_POTION_3(ItemID.ATTACK_POTION3, 3, 25),
+ GUAM_LEAF(ItemID.GUAM_LEAF, 3, 2.5f),
+ MARRENTILL(ItemID.MARRENTILL, 5, 3.8f),
+ ANTIPOISON_3(ItemID.ANTIPOISON3, 5, 37.5f),
+ RELICYMS_BALM_3(ItemID.RELICYMS_BALM3, 8, 40),
+ TARROMIN(ItemID.TARROMIN, 11, 5),
+ STRENGTH_POTION_3(ItemID.STRENGTH_POTION3, 12, 50),
+ SERUM_207_3(ItemID.SERUM_207_3, 15, 50),
+ GUTHIX_REST_3(ItemID.GUTHIX_REST3, 18, 59),
+ GUAM_TAR(ItemID.GUAM_TAR, 19, 30),
+ HARRALANDER(ItemID.HARRALANDER, 20, 6.3f),
+ COMPOST_POTION_3(ItemID.COMPOST_POTION3, 22, 60),
+ RESTORE_POTION_3(ItemID.RESTORE_POTION3, 22, 62.5f),
+ RANARR_WEED(ItemID.RANARR_WEED, 25, 7.5f),
+ ENERGY_POTION_3(ItemID.ENERGY_POTION3, 26, 67.5f),
+ TOADFLAX(ItemID.TOADFLAX, 30, 8),
+ DEFENCE_POTION_3(ItemID.DEFENCE_POTION3, 30, 75),
+ MARRENTILL_TAR(ItemID.MARRENTILL_TAR, 31, 42.5f),
+ AGILITY_POTION_3(ItemID.AGILITY_POTION3, 34, 80),
+ COMBAT_POTION_3(ItemID.COMBAT_POTION3, 36, 84),
+ PRAYER_POTION_3(ItemID.PRAYER_POTION3, 38, 87.5f),
+ TARROMIN_TAR(ItemID.TARROMIN_TAR, 39, 55),
+ IRIT_LEAF(ItemID.IRIT_LEAF, 40, 8.8f),
+ HARRALANDER_TAR(ItemID.HARRALANDER_TAR, 44, 72.5f),
+ SUPER_ATTACK_3(ItemID.SUPER_ATTACK3, 45, 100),
+ SUPERANTIPOISON_3(ItemID.SUPERANTIPOISON3, 48, 106.3f),
+ AVANTOE(ItemID.AVANTOE, 48, 10),
+ FISHING_POTION_3(ItemID.FISHING_POTION3, 50, 112.5f),
+ SUPER_ENERGY_3(ItemID.SUPER_ENERGY3, 52, 117.5f),
+ HUNTER_POTION_3(ItemID.HUNTER_POTION3, 53, 120),
+ KWUARM(ItemID.KWUARM, 54, 11.3f),
+ SUPER_STRENGTH_3(ItemID.SUPER_STRENGTH3, 55, 125),
+ MAGIC_ESSENCE_POTION_3(ItemID.MAGIC_ESSENCE3, 57, 130),
+ SNAPDRAGON(ItemID.SNAPDRAGON, 59, 11.8f),
+ WEAPON_POISON(ItemID.WEAPON_POISON, 60, 137.5f),
+ SUPER_RESTORE_3(ItemID.SUPER_RESTORE3, 63, 142.5f),
+ CADANTINE(ItemID.CADANTINE, 65, 12.5f),
+ SANFEW_SERUM_3(ItemID.SANFEW_SERUM3, 65, 160),
+ SUPER_DEFENCE_3(ItemID.SUPER_DEFENCE3, 66, 150),
+ LANTADYME(ItemID.LANTADYME, 67, 13.1f),
+ ANTIDOTE_PLUS_3(ItemID.ANTIDOTE3, 68, 155),
+ ANTIFIRE_POTION_3(ItemID.ANTIFIRE_POTION3, 69, 157.5f),
+ DIVINE_SUPER_ATTACK_POTION_4(ItemID.DIVINE_SUPER_ATTACK_POTION4, 70, 2),
+ DIVINE_SUPER_DEFENCE_POTION_4(ItemID.DIVINE_SUPER_DEFENCE_POTION4, 70, 2),
+ DIVINE_SUPER_STRENGTH_POTION_4(ItemID.DIVINE_SUPER_STRENGTH_POTION4, 70, 2),
+ DWARF_WEED(ItemID.DWARF_WEED, 70, 13.8f),
+ RANGING_POTION_3(ItemID.RANGING_POTION3, 72, 162.5f),
+ WEAPON_POISON_PLUS(ItemID.WEAPON_POISON_5937, 73, 165),
+ DIVINE_RANGING_POTION_4(ItemID.DIVINE_RANGING_POTION4, 74, 2),
+ TORSTOL(ItemID.TORSTOL, 75, 15),
+ MAGIC_POTION_3(ItemID.MAGIC_POTION3, 76, 172.5f),
+ STAMINA_POTION_3(ItemID.STAMINA_POTION3, 77, 76.5f),
+ STAMINA_POTION_4(ItemID.STAMINA_POTION4, 77, 102),
+ DIVINE_MAGIC_POTION_4(ItemID.DIVINE_MAGIC_POTION4, 78, 2),
+ ZAMORAK_BREW_3(ItemID.ZAMORAK_BREW3, 78, 175),
+ ANTIDOTE_PLUS_PLUS_3(ItemID.ANTIDOTE3_5954, 79, 177.5f),
+ BASTION_POTION_3(ItemID.BASTION_POTION3, 80, 155),
+ BATTLEMAGE_POTION_3(ItemID.BATTLEMAGE_POTION3, 80, 155),
+ SARADOMIN_BREW_3(ItemID.SARADOMIN_BREW3, 81, 180),
+ WEAPON_POISON_PLUS_PLUS(ItemID.WEAPON_POISON_5940, 82, 190),
+ EXTENDED_ANTIFIRE_3(ItemID.EXTENDED_ANTIFIRE3, 84, 82.5f),
+ EXTENDED_ANTIFIRE_4(ItemID.EXTENDED_ANTIFIRE4, 84, 110),
+ DIVINE_BASTION_POTION_4(ItemID.DIVINE_BASTION_POTION4, 86, 2),
+ DIVINE_BATTLEMAGE_POTION_4(ItemID.DIVINE_BATTLEMAGE_POTION4, 86, 2),
+ ANTIVENOM_3(ItemID.ANTIVENOM3, 87, 90),
+ ANTIVENOM_4(ItemID.ANTIVENOM4, 87, 120),
+ SUPER_COMBAT_POTION_4(ItemID.SUPER_COMBAT_POTION4, 90, 150),
+ SUPER_ANTIFIRE_4(ItemID.SUPER_ANTIFIRE_POTION4, 92, 130),
+ ANTIVENOM_PLUS_4(ItemID.ANTIVENOM4_12913, 94, 125),
+ DIVINE_SUPER_COMBAT_POTION_4(ItemID.DIVINE_SUPER_COMBAT_POTION4, 97, 2),
+ EXTENDED_SUPER_ANTIFIRE_3(ItemID.SUPER_ANTIFIRE_POTION3, 98, 120),
+ EXTENDED_SUPER_ANTIFIRE_4(ItemID.SUPER_ANTIFIRE_POTION4, 98, 160),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java
new file mode 100644
index 0000000000..644bcd2598
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/HunterAction.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum HunterAction implements NamedSkillAction
+{
+ CRIMSON_SWIFT("Crimson Swift", 1, 34, ItemID.CRIMSON_SWIFT),
+ POLAR_KEBBIT("Polar Kebbit", 1, 30, ItemID.KEBBIT),
+ COMMON_KEBBIT("Common Kebbit", 3, 36, ItemID.KEBBIT_9954),
+ GOLDEN_WARBLER("Golden Warbler", 5, 47, ItemID.GOLDEN_WARBLER),
+ REGULAR_BIRD_HOUSE("Regular Bird House", 5, 280, ItemID.BIRD_HOUSE),
+ FELDIP_WEASEL("Feldip Weasel", 7, 48, ItemID.KEBBIT_9955),
+ COPPER_LONGTAIL("Copper Longtail", 9, 61, ItemID.COPPER_LONGTAIL),
+ CERULEAN_TWITCH("Cerulean Twitch", 11, 64.5f, ItemID.CERULEAN_TWITCH),
+ DESERT_DEVIL("Desert Devil", 13, 66, ItemID.KEBBIT_9956),
+ OAK_BIRD_HOUSE("Oak Bird House", 14, 420, ItemID.OAK_BIRD_HOUSE),
+ RUBY_HARVEST("Ruby Harvest", 15, 24, ItemID.BUTTERFLY),
+ BABY_IMPLING("Baby Impling", 17, 18, ItemID.BABY_IMPLING_JAR),
+ TROPICAL_WAGTAIL("Tropical Wagtail", 19, 95, ItemID.TROPICAL_WAGTAIL),
+ YOUNG_IMPLING("Young Impling", 22, 20, ItemID.YOUNG_IMPLING_JAR),
+ WILD_KEBBIT("Wild Kebbit", 23, 128, ItemID.KEBBIT),
+ WILLOW_BIRD_HOUSE("Willow Bird House", 24, 560, ItemID.WILLOW_BIRD_HOUSE),
+ SAPPHIRE_GLACIALIS("Sapphire Glacialis", 25, 34, ItemID.BUTTERFLY_9971),
+ FERRET("Ferret", 27, 115, ItemID.FERRET),
+ WHITE_RABBIT("White Rabbit", 27, 144, ItemID.RABBIT),
+ GOURMET_IMPLING("Gourmet Impling", 28, 22, ItemID.GOURMET_IMPLING_JAR),
+ SWAMP_LIZARD("Swamp Lizard", 29, 152, ItemID.SWAMP_LIZARD),
+ SPINED_LARUPIA("Spined Larupia", 31, 180, ItemID.LARUPIA_HAT),
+ BARB_TAILED_KEBBIT("Barb-tailed Kebbit", 33, 168, ItemID.KEBBIT_9958),
+ TEAK_BIRD_HOUSE("Teak Bird House", 34, 700, ItemID.TEAK_BIRD_HOUSE),
+ SNOWY_KNIGHT("Snowy Knight", 35, 44, ItemID.BUTTERFLY_9972),
+ EARTH_IMPLING("Earth Impling", 36, 25, ItemID.EARTH_IMPLING_JAR),
+ PRICKLY_KEBBIT("Prickly Kebbit", 37, 204, ItemID.KEBBIT_9957),
+ HORNED_GRAAHK("Horned Graahk", 41, 240, ItemID.GRAAHK_HEADDRESS),
+ ESSENCE_IMPLING("Essence Impling", 42, 27, ItemID.ESSENCE_IMPLING_JAR),
+ SPOTTED_KEBBIT("Spotted Kebbit", 43, 104, ItemID.KEBBIT_9960),
+ MAPLE_BIRD_HOUSE("Maple Bird House", 44, 820, ItemID.MAPLE_BIRD_HOUSE),
+ BLACK_WARLOCK("Black Warlock", 45, 54, ItemID.BUTTERFLY_9973),
+ ORANGE_SALAMANDER("Orange Salamander", 47, 224, ItemID.ORANGE_SALAMANDER),
+ RAZOR_BACKED_KEBBIT("Razor-backed Kebbit", 49, 348, ItemID.KEBBIT_9961),
+ MAHOGANY_BIRD_HOUSE("Mahogany Bird House", 49, 960, ItemID.MAHOGANY_BIRD_HOUSE),
+ ECLECTIC_IMPLING("Eclectic Impling", 50, 32, ItemID.ECLECTIC_IMPLING_JAR),
+ SABRE_TOOTHED_KEBBIT("Sabre-toothed Kebbit", 51, 200, ItemID.KEBBIT_9959),
+ CHINCHOMPA("Chinchompa", 53, 198.3f, ItemID.CHINCHOMPA),
+ SABRE_TOOTHED_KYATT("Sabre-toothed Kyatt", 55, 300, ItemID.KYATT_HAT),
+ DARK_KEBBIT("Dark Kebbit", 57, 132, ItemID.KEBBIT_9963),
+ NATURE_IMPLING("Nature Impling", 58, 34, ItemID.NATURE_IMPLING_JAR),
+ RED_SALAMANDER("Red Salamander", 59, 272, ItemID.RED_SALAMANDER),
+ YEW_BIRD_HOUSE("Yew Bird House", 59, 1020, ItemID.YEW_BIRD_HOUSE),
+ MANIACAL_MONKEY("Maniacal Monkey", 60, 1000, ItemID.MONKEY_19556),
+ CARNIVOROUS_CHINCHOMPA("Carnivorous Chinchompa", 63, 265, ItemID.RED_CHINCHOMPA),
+ MAGPIE_IMPLING("Magpie Impling", 65, 44, ItemID.MAGPIE_IMPLING_JAR),
+ MAGPIE_IMPLING_GIELINOR("Magpie Impling (Gielinor)", 65, 216, ItemID.MAGPIE_IMPLING_JAR),
+ BLACK_SALAMANDER("Black Salamander", 67, 319.5f, ItemID.BLACK_SALAMANDER),
+ DASHING_KEBBIT("Dashing Kebbit", 69, 156, ItemID.KEBBIT_9964),
+ BLACK_CHINCHOMPA("Black Chinchompa", 73, 315, ItemID.BLACK_CHINCHOMPA),
+ MAGIC_BIRD_HOUSE("Magic Bird House", 74, 1140, ItemID.MAGIC_BIRD_HOUSE),
+ NINJA_IMPLING("Ninja Impling", 74, 52, ItemID.NINJA_IMPLING_JAR),
+ NINJA_IMPLING_GIELINOR("Ninja Impling (Gielinor)", 74, 240, ItemID.NINJA_IMPLING_JAR),
+ CRYSTAL_IMPLING("Crystal Impling", 80, 280, ItemID.CRYSTAL_IMPLING_JAR),
+ DRAGON_IMPLING("Dragon Impling", 83, 65, ItemID.DRAGON_IMPLING_JAR),
+ DRAGON_IMPLING_GIELINOR("Dragon Impling (Gielinor)", 83, 300, ItemID.DRAGON_IMPLING_JAR),
+ REDWOOD_BIRD_HOUSE("Redwood Bird House", 89, 1200, ItemID.REDWOOD_BIRD_HOUSE),
+ LUCKY_IMPLING("Lucky Impling", 89, 380, ItemID.LUCKY_IMPLING_JAR),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CacheSkillData.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ItemSkillAction.java
similarity index 56%
rename from runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CacheSkillData.java
rename to runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ItemSkillAction.java
index 4959390271..61a148749a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CacheSkillData.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ItemSkillAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Kruithne
+ * Copyright (c) 2021, Jordan Atwood
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,38 +22,46 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package net.runelite.client.plugins.skillcalculator;
+package net.runelite.client.plugins.skillcalculator.skills;
-import com.google.gson.Gson;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import net.runelite.client.plugins.skillcalculator.beans.SkillData;
+import net.runelite.client.game.ItemManager;
-class CacheSkillData
+/**
+ * An object representing a single skill action involving an item which grants some xp.
+ */
+public interface ItemSkillAction extends SkillAction
{
- private final Map cache = new HashMap<>();
+ /**
+ * Gets the item ID used for this action.
+ *
+ * @return The item ID used for this action.
+ * @see net.runelite.api.ItemID
+ */
+ int getItemId();
- SkillData getSkillData(String dataFile)
+ /**
+ * Gets the item icon ID for this skill action.
+ *
+ * @return The item icon ID of this skill action.
+ * @see net.runelite.api.ItemID
+ * @see #getItemId()
+ */
+ @Override
+ default int getIcon()
{
- if (cache.containsKey(dataFile))
- {
- return cache.get(dataFile);
- }
-
- try (InputStream skillDataFile = SkillCalculatorPlugin.class.getResourceAsStream(dataFile))
- {
- SkillData skillData = new Gson().fromJson(new InputStreamReader(skillDataFile, StandardCharsets.UTF_8), SkillData.class);
-
- cache.put(dataFile, skillData);
- return skillData;
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
+ return getItemId();
}
-}
\ No newline at end of file
+
+ /**
+ * Gets the name of this skill action's associated item.
+ *
+ * @param itemManager An {@link ItemManager item manager} instance.
+ * @return The name of this skill action item.
+ * @see #getItemId()
+ */
+ @Override
+ default String getName(final ItemManager itemManager)
+ {
+ return itemManager.getItemComposition(getItemId()).getName();
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MagicAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MagicAction.java
new file mode 100644
index 0000000000..e907ebb48a
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MagicAction.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.SpriteID;
+import net.runelite.client.game.ItemManager;
+
+@AllArgsConstructor
+@Getter
+public enum MagicAction implements SkillAction
+{
+ WIND_STRIKE("Wind Strike", 1, 5.5f, SpriteID.SPELL_WIND_STRIKE),
+ CONFUSE("Confuse", 3, 13, SpriteID.SPELL_CONFUSE),
+ ENCHANT_OPAL_BOLT("Enchant Opal Bolt", 4, 9, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ WATER_STRIKE("Water Strike", 5, 7.5f, SpriteID.SPELL_WATER_STRIKE),
+ ARCEUUS_LIBRARY_TELEPORT("Arceuus Library Teleport", 6, 10, SpriteID.SPELL_ARCEUUS_LIBRARY_TELEPORT),
+ ENCHANT_SAPPHIRE_JEWELLERY("Enchant Sapphire Jewellery", 7, 17.5f, SpriteID.SPELL_LVL_1_ENCHANT),
+ ENCHANT_SAPPHIRE_BOLT("Enchant Sapphire Bolt", 7, 17.5f, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ EARTH_STRIKE("Earth Strike", 9, 9.5f, SpriteID.SPELL_EARTH_STRIKE),
+ WEAKEN("Weaken", 11, 21, SpriteID.SPELL_WEAKEN),
+ FIRE_STRIKE("Fire Strike", 13, 11.5f, SpriteID.SPELL_FIRE_STRIKE),
+ ENCHANT_JADE_BOLT("Enchant Jade Bolt", 14, 19, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ BONES_TO_BANANAS("Bones To Bananas", 15, 25, SpriteID.SPELL_BONES_TO_BANANAS),
+ BASIC_REANIMATION("Basic Reanimation", 16, 32, SpriteID.SPELL_BASIC_REANIMATION),
+ DRAYNOR_MANOR_TELEPORT("Draynor Manor Teleport", 17, 16, SpriteID.SPELL_DRAYNOR_MANOR_TELEPORT),
+ WIND_BOLT("Wind Bolt", 17, 13.5f, SpriteID.SPELL_WIND_BOLT),
+ CURSE("Curse", 19, 29, SpriteID.SPELL_CURSE),
+ BIND("Bind", 20, 30, SpriteID.SPELL_BIND),
+ LOW_LEVEL_ALCHEMY("Low Level Alchemy", 21, 31, SpriteID.SPELL_LOW_LEVEL_ALCHEMY),
+ WATER_BOLT("Water Bolt", 23, 16.5f, SpriteID.SPELL_WATER_BOLT),
+ ENCHANT_PEARL_BOLT("Enchant Pearl Bolt", 24, 29, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ VARROCK_TELEPORT("Varrock Teleport", 25, 35, SpriteID.SPELL_VARROCK_TELEPORT),
+ ENCHANT_EMERALD_JEWELLERY("Enchant Emerald Jewellery", 27, 37, SpriteID.SPELL_LVL_2_ENCHANT),
+ ENCHANT_EMERALD_BOLT("Enchant Emerald Bolt", 27, 37, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ MIND_ALTAR_TELEPORT("Mind Altar Teleport", 28, 22, SpriteID.SPELL_MIND_ALTAR_TELEPORT),
+ ENCHANT_TOPAZ_BOLT("Enchant Topaz Bolt", 29, 33, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ EARTH_BOLT("Earth Bolt", 29, 19.5f, SpriteID.SPELL_EARTH_BOLT),
+ LUMBRIDGE_TELEPORT("Lumbridge Teleport", 31, 41, SpriteID.SPELL_LUMBRIDGE_TELEPORT),
+ TELEKINETIC_GRAB("Telekinetic Grab", 33, 43, SpriteID.SPELL_TELEKINETIC_GRAB),
+ RESPAWN_TELEPORT("Respawn Teleport", 34, 27, SpriteID.SPELL_RESPAWN_TELEPORT),
+ FIRE_BOLT("Fire Bolt", 35, 22.5f, SpriteID.SPELL_FIRE_BOLT),
+ GHOSTLY_GRASP("Ghostly Grasp", 35, 22.5f, SpriteID.SPELL_GHOSTLY_GRASP),
+ FALADOR_TELEPORT("Falador Teleport", 37, 48, SpriteID.SPELL_FALADOR_TELEPORT),
+ RESURRECT_LESSER_THRALL("Resurrect Lesser Thrall", 38, 55, SpriteID.SPELL_RESURRECT_LESSER_GHOST),
+ CRUMBLE_UNDEAD("Crumble Undead", 39, 24.5f, SpriteID.SPELL_CRUMBLE_UNDEAD),
+ SALVE_GRAVEYARD_TELEPORT("Salve Graveyard Teleport", 40, 30, SpriteID.SPELL_SALVE_GRAVEYARD_TELEPORT),
+ TELEPORT_TO_HOUSE("Teleport To House", 40, 30, SpriteID.SPELL_TELEPORT_TO_HOUSE),
+ ADEPT_REANIMATION("Adept Reanimation", 41, 80, SpriteID.SPELL_ADEPT_REANIMATION),
+ WIND_BLAST("Wind Blast", 41, 25.5f, SpriteID.SPELL_WIND_BLAST),
+ SUPERHEAT_ITEM("Superheat Item", 43, 53, SpriteID.SPELL_SUPERHEAT_ITEM),
+ INFERIOR_DEMONBANE("Inferior Demonbane", 44, 27, SpriteID.SPELL_INFERIOR_DEMONBANE),
+ CAMELOT_TELEPORT("Camelot Teleport", 45, 55.5f, SpriteID.SPELL_CAMELOT_TELEPORT),
+ WATER_BLAST("Water Blast", 47, 28.5f, SpriteID.SPELL_WATER_BLAST),
+ SHADOW_VEIL("Shadow Veil", 47, 58, SpriteID.SPELL_SHADOW_VEIL),
+ FENKENSTRAINS_CASTLE_TELEPORT("Fenkenstrain's Castle Teleport", 48, 50, SpriteID.SPELL_FENKENSTRAINS_CASTLE_TELEPORT),
+ ENCHANT_RUBY_JEWELLERY("Enchant Ruby Jewellery", 49, 59, SpriteID.SPELL_LVL_3_ENCHANT),
+ ENCHANT_RUBY_BOLT("Enchant Ruby Bolt", 49, 59, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ IBAN_BLAST("Iban Blast", 50, 30, SpriteID.SPELL_IBAN_BLAST),
+ SMOKE_RUSH("Smoke Rush", 50, 30, SpriteID.SPELL_SMOKE_RUSH),
+ MAGIC_DART("Magic Dart", 50, 30, SpriteID.SPELL_MAGIC_DART),
+ SNARE("Snare", 50, 60, SpriteID.SPELL_SNARE),
+ DARK_LURE("Dark Lure", 50, 60, SpriteID.SPELL_DARK_LURE),
+ ARDOUGNE_TELEPORT("Ardougne Teleport", 51, 61, SpriteID.SPELL_ARDOUGNE_TELEPORT),
+ SHADOW_RUSH("Shadow Rush", 52, 31, SpriteID.SPELL_SHADOW_RUSH),
+ EARTH_BLAST("Earth Blast", 53, 31.5f, SpriteID.SPELL_EARTH_BLAST),
+ PADDEWWA_TELEPORT("Paddewwa Teleport", 54, 64, SpriteID.SPELL_PADDEWWA_TELEPORT),
+ HIGH_LEVEL_ALCHEMY("High Level Alchemy", 55, 65, SpriteID.SPELL_HIGH_LEVEL_ALCHEMY),
+ CHARGE_WATER_ORB("Charge Water Orb", 56, 66, SpriteID.SPELL_CHARGE_WATER_ORB),
+ BLOOD_RUSH("Blood Rush", 56, 33, SpriteID.SPELL_BLOOD_RUSH),
+ SKELETAL_GRASP("Skeletal Grasp", 56, 33, SpriteID.SPELL_SKELETAL_GRASP),
+ ENCHANT_DIAMOND_BOLT("Enchant Diamond Bolt", 57, 67, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ ENCHANT_DIAMOND_JEWELLERY("Enchant Diamond Jewellery", 57, 67, SpriteID.SPELL_LVL_4_ENCHANT),
+ RESURRECT_SUPERIOR_THRALL("Resurrect Superior Thrall", 57, 70, SpriteID.SPELL_RESURRECT_SUPERIOR_SKELETON),
+ WATCHTOWER_TELEPORT("Watchtower Teleport", 58, 68, SpriteID.SPELL_WATCHTOWER_TELEPORT),
+ ICE_RUSH("Ice Rush", 58, 34, SpriteID.SPELL_ICE_RUSH),
+ FIRE_BLAST("Fire Blast", 59, 34.5f, SpriteID.SPELL_FIRE_BLAST),
+ MARK_OF_DARKNESS("Mark of Darkness", 59, 70, SpriteID.SPELL_MARK_OF_DARKNESS),
+ SENNTISTEN_TELEPORT("Senntisten Teleport", 60, 70, SpriteID.SPELL_SENNTISTEN_TELEPORT),
+ CLAWS_OF_GUTHIX("Claws Of Guthix", 60, 35, SpriteID.SPELL_CLAWS_OF_GUTHIC),
+ FLAMES_OF_ZAMORAK("Flames Of Zamorak", 60, 35, SpriteID.SPELL_FLAMES_OF_ZAMORAK),
+ SARADOMIN_STRIKE("Saradomin Strike", 60, 35, SpriteID.SPELL_SARADOMIN_STRIKE),
+ CHARGE_EARTH_ORB("Charge Earth Orb", 60, 70, SpriteID.SPELL_CHARGE_EARTH_ORB),
+ BONES_TO_PEACHES("Bones To Peaches", 60, 35.5f, SpriteID.SPELL_BONES_TO_PEACHES),
+ WEST_ARDOUGNE_TELEPORT("West Ardougne Teleport", 61, 68, SpriteID.SPELL_WEST_ARDOUGNE_TELEPORT),
+ TROLLHEIM_TELEPORT("Trollheim Teleport", 61, 68, SpriteID.SPELL_TROLLHEIM_TELEPORT),
+ SMOKE_BURST("Smoke Burst", 62, 36, SpriteID.SPELL_SMOKE_BURST),
+ WIND_WAVE("Wind Wave", 62, 36, SpriteID.SPELL_WIND_WAVE),
+ SUPERIOR_DEMONBANE("Superior Demonbane", 62, 36, SpriteID.SPELL_SUPERIOR_DEMONBANE),
+ CHARGE_FIRE_ORB("Charge Fire Orb", 63, 73, SpriteID.SPELL_CHARGE_FIRE_ORB),
+ SHADOW_BURST("Shadow Burst", 64, 37, SpriteID.SPELL_SHADOW_BURST),
+ TELEPORT_APE_ATOLL("Teleport Ape Atoll", 64, 74, SpriteID.SPELL_TELEPORT_TO_APE_ATOLL),
+ LESSER_CORRUPTION("Lesser Corruption", 64, 75, SpriteID.SPELL_LESSER_CORRUPTION),
+ BAKE_PIE("Bake Pie", 65, 60, SpriteID.SPELL_BAKE_PIE),
+ HARMONY_ISLAND_TELEPORT("Harmony Island Teleport", 65, 74, SpriteID.SPELL_HARMONY_ISLAND_TELEPORT),
+ GEOMANCY("Geomancy", 65, 60, SpriteID.SPELL_GEOMANCY),
+ WATER_WAVE("Water Wave", 65, 37.5f, SpriteID.SPELL_WATER_WAVE),
+ CHARGE_AIR_ORB("Charge Air Orb", 66, 76, SpriteID.SPELL_CHARGE_AIR_ORB),
+ CURE_PLANT("Cure Plant", 66, 60, SpriteID.SPELL_CURE_PLANT),
+ KHARYRLL_TELEPORT("Kharyrll Teleport", 66, 76, SpriteID.SPELL_KHARYRLL_TELEPORT),
+ VULNERABILITY("Vulnerability", 66, 76, SpriteID.SPELL_VULNERABILITY),
+ MONSTER_EXAMINE("Monster Examine", 66, 61, SpriteID.SPELL_MONSTER_EXAMINE),
+ VILE_VIGOUR("Vile Vigour", 66, 76, SpriteID.SPELL_VILE_VIGOUR),
+ NPC_CONTACT("Npc Contact", 67, 63, SpriteID.SPELL_NPC_CONTACT),
+ BLOOD_BURST("Blood Burst", 68, 39, SpriteID.SPELL_BLOOD_BURST),
+ CURE_OTHER("Cure Other", 68, 65, SpriteID.SPELL_CURE_OTHER),
+ ENCHANT_DRAGONSTONE_JEWELLERY("Enchant Dragonstone Jewellery", 68, 78, SpriteID.SPELL_LVL_5_ENCHANT),
+ ENCHANT_DRAGONSTONE_BOLT("Enchant Dragonstone Bolt", 68, 78, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ HUMIDIFY("Humidify", 68, 65, SpriteID.SPELL_HUMIDIFY),
+ MOONCLAN_TELEPORT("Moonclan Teleport", 69, 66, SpriteID.SPELL_MOONCLAN_TELEPORT),
+ EARTH_WAVE("Earth Wave", 70, 40, SpriteID.SPELL_EARTH_WAVE),
+ ICE_BURST("Ice Burst", 70, 40, SpriteID.SPELL_ICE_BURST),
+ TELE_GROUP_MOONCLAN("Tele Group Moonclan", 70, 67, SpriteID.SPELL_TELE_GROUP_MOONCLAN),
+ DEGRIME("Degrime", 70, 83, SpriteID.SPELL_DEGRIME),
+ OURANIA_TELEPORT("Ourania Teleport", 71, 69, SpriteID.SPELL_OURANIA_TELEPORT),
+ CEMETERY_TELEPORT("Cemetery Teleport", 71, 82, SpriteID.SPELL_CEMETERY_TELEPORT),
+ CURE_ME("Cure Me", 71, 69, SpriteID.SPELL_CURE_ME),
+ HUNTER_KIT("Hunter Kit", 71, 70, SpriteID.SPELL_HUNTER_KIT),
+ EXPERT_REANIMATION("Expert Reanimation", 72, 138, SpriteID.SPELL_EXPERT_REANIMATION),
+ LASSAR_TELEPORT("Lassar Teleport", 72, 82, SpriteID.SPELL_LASSAR_TELEPORT),
+ WATERBIRTH_TELEPORT("Waterbirth Teleport", 72, 71, SpriteID.SPELL_WATERBIRTH_TELEPORT),
+ TELE_GROUP_WATERBIRTH("Tele Group Waterbirth", 73, 72, SpriteID.SPELL_TELE_GROUP_WATERBIRTH),
+ ENFEEBLE("Enfeeble", 73, 83, SpriteID.SPELL_ENFEEBLE),
+ WARD_OF_ARCEUUS("Ward of Arceuus", 73, 83, SpriteID.SPELL_WARD_OF_ARCEUUS),
+ TELEOTHER_LUMBRIDGE("Teleother Lumbridge", 74, 84, SpriteID.SPELL_TELEOTHER_LUMBRIDGE),
+ SMOKE_BLITZ("Smoke Blitz", 74, 42, SpriteID.SPELL_SMOKE_BLITZ),
+ CURE_GROUP("Cure Group", 74, 74, SpriteID.SPELL_CURE_GROUP),
+ STAT_SPY("Stat Spy", 75, 76, SpriteID.SPELL_STAT_SPY),
+ BARBARIAN_TELEPORT("Barbarian Teleport", 75, 76, SpriteID.SPELL_BARBARIAN_TELEPORT),
+ FIRE_WAVE("Fire Wave", 75, 42.5f, SpriteID.SPELL_FIRE_WAVE),
+ TELE_GROUP_BARBARIAN("Tele Group Barbarian", 76, 77, SpriteID.SPELL_TELE_GROUP_ICE_PLATEAU),
+ SHADOW_BLITZ("Shadow Blitz", 76, 43, SpriteID.SPELL_SHADOW_BLITZ),
+ SPIN_FLAX("Spin Flax", 76, 75, SpriteID.SPELL_SPIN_FLAX),
+ RESURRECT_GREATER_THRALL("Resurrect Greater Thrall", 76, 88, SpriteID.SPELL_RESURRECT_GREATER_ZOMBIE),
+ SUPERGLASS_MAKE("Superglass Make", 77, 78, SpriteID.SPELL_SUPERGLASS_MAKE),
+ TAN_LEATHER("Tan Leather", 78, 81, SpriteID.SPELL_TAN_LEATHER),
+ KHAZARD_TELEPORT("Khazard Teleport", 78, 80, SpriteID.SPELL_KHAZARD_TELEPORT),
+ DAREEYAK_TELEPORT("Dareeyak Teleport", 78, 88, SpriteID.SPELL_DAREEYAK_TELEPORT),
+ RESURRECT_CROPS("Resurrect Crops", 78, 90, SpriteID.SPELL_RESURRECT_CROPS),
+ ENTANGLE("Entangle", 79, 89, SpriteID.SPELL_ENTANGLE),
+ TELE_GROUP_KHAZARD("Tele Group Khazard", 79, 81, SpriteID.SPELL_TELE_GROUP_KHAZARD),
+ DREAM("Dream", 79, 82, SpriteID.SPELL_DREAM),
+ UNDEAD_GRASP("Undead Grasp", 79, 46.5f, SpriteID.SPELL_UNDEAD_GRASP),
+ CHARGE("Charge", 80, 180, SpriteID.SPELL_CHARGE),
+ BLOOD_BLITZ("Blood Blitz", 80, 45, SpriteID.SPELL_BLOOD_BLITZ),
+ STUN("Stun", 80, 90, SpriteID.SPELL_STUN),
+ STRING_JEWELLERY("String Jewellery", 80, 83, SpriteID.SPELL_STRING_JEWELLERY),
+ DEATH_CHARGE("Death Charge", 80, 90, SpriteID.SPELL_DEATH_CHARGE),
+ STAT_RESTORE_POT_SHARE("Stat Restore Pot Share", 81, 84, SpriteID.SPELL_STAT_RESTORE_POT_SHARE),
+ WIND_SURGE("Wind Surge", 81, 44, SpriteID.SPELL_WIND_SURGE),
+ TELEOTHER_FALADOR("Teleother Falador", 82, 92, SpriteID.SPELL_TELEOTHER_FALADOR),
+ MAGIC_IMBUE("Magic Imbue", 82, 86, SpriteID.SPELL_MAGIC_IMBUE),
+ ICE_BLITZ("Ice Blitz", 82, 46, SpriteID.SPELL_ICE_BLITZ),
+ DARK_DEMONBANE("Dark Demonbane", 82, 43.5f, SpriteID.SPELL_DARK_DEMONBANE),
+ FERTILE_SOIL("Fertile Soil", 83, 87, SpriteID.SPELL_FERTILE_SOIL),
+ BARROWS_TELEPORT("Barrows Teleport", 83, 90, SpriteID.SPELL_BARROWS_TELEPORT),
+ CARRALLANGAR_TELEPORT("Carrallangar Teleport", 84, 82, SpriteID.SPELL_CARRALLANGAR_TELEPORT),
+ BOOST_POTION_SHARE("Boost Potion Share", 84, 88, SpriteID.SPELL_BOOST_POTION_SHARE),
+ DEMONIC_OFFERING("Demonic Offering", 84, 175, SpriteID.SPELL_DEMONIC_OFFERING),
+ WATER_SURGE("Water Surge", 85, 46, SpriteID.SPELL_WATER_SURGE),
+ FISHING_GUILD_TELEPORT("Fishing Guild Teleport", 85, 89, SpriteID.SPELL_FISHING_GUILD_TELEPORT),
+ TELE_BLOCK("Tele Block", 85, 80, SpriteID.SPELL_TELE_BLOCK),
+ TELEPORT_TO_TARGET("Teleport To Target", 85, 45, SpriteID.SPELL_TELEPORT_TO_BOUNTY_TARGET),
+ GREATER_CORRUPTION("Greater Corruption", 85, 95, SpriteID.SPELL_GREATER_CORRUPTION),
+ SMOKE_BARRAGE("Smoke Barrage", 86, 48, SpriteID.SPELL_SMOKE_BARRAGE),
+ TELE_GROUP_FISHING_GUILD("Tele Group Fishing Guild", 86, 90, SpriteID.SPELL_TELE_GROUP_FISHING_GUILD),
+ PLANK_MAKE("Plank Make", 86, 90, SpriteID.SPELL_PLANK_MAKE),
+ CATHERBY_TELEPORT("Catherby Teleport", 87, 92, SpriteID.SPELL_CATHERBY_TELEPORT),
+ ENCHANT_ONYX_JEWELLERY("Enchant Onyx Jewellery", 87, 97, SpriteID.SPELL_LVL_6_ENCHANT),
+ ENCHANT_ONYX_BOLT("Enchant Onyx Bolt", 87, 97, SpriteID.SPELL_ENCHANT_CROSSBOW_BOLT),
+ SHADOW_BARRAGE("Shadow Barrage", 88, 48, SpriteID.SPELL_SHADOW_BARRAGE),
+ TELE_GROUP_CATHERBY("Tele Group Catherby", 88, 93, SpriteID.SPELL_TELE_GROUP_CATHERBY),
+ ICE_PLATEAU_TELEPORT("Ice Plateau Teleport", 89, 96, SpriteID.SPELL_ICE_PLATEAU_TELEPORT),
+ RECHARGE_DRAGONSTONE("Recharge Dragonstone", 89, 97.5f, SpriteID.SPELL_RECHARGE_DRAGONSTONE),
+ ANNAKARL_TELEPORT("Annakarl Teleport", 90, 100, SpriteID.SPELL_ANNAKARL_TELEPORT),
+ EARTH_SURGE("Earth Surge", 90, 48, SpriteID.SPELL_EARTH_SURGE),
+ MASTER_REANIMATION("Master Reanimation", 90, 170, SpriteID.SPELL_MASTER_REANIMATION),
+ TELE_GROUP_ICE_PLATEAU("Tele Group Ice Plateau", 90, 99, SpriteID.SPELL_TELE_GROUP_ICE_PLATEAU),
+ TELEOTHER_CAMELOT("Teleother Camelot", 90, 100, SpriteID.SPELL_TELEOTHER_CAMELOT),
+ APE_ATOLL_TELEPORT("Ape Atoll Teleport", 90, 100, SpriteID.SPELL_APE_ATOLL_TELEPORT),
+ ENERGY_TRANSFER("Energy Transfer", 91, 100, SpriteID.SPELL_ENERGY_TRANSFER),
+ BLOOD_BARRAGE("Blood Barrage", 92, 51, SpriteID.SPELL_BLOOD_BARRAGE),
+ HEAL_OTHER("Heal Other", 92, 101, SpriteID.SPELL_HEAL_OTHER),
+ SINISTER_OFFERING("Sinister Offering", 92, 180, SpriteID.SPELL_SINISTER_OFFERING),
+ VENGEANCE_OTHER("Vengeance Other", 93, 108, SpriteID.SPELL_VENGEANCE_OTHER),
+ ENCHANT_ZENYTE_JEWELLERY("Enchant Zenyte Jewellery", 93, 110, SpriteID.SPELL_LVL_7_ENCHANT),
+ ICE_BARRAGE("Ice Barrage", 94, 52, SpriteID.SPELL_ICE_BARRAGE),
+ VENGEANCE("Vengeance", 94, 112, SpriteID.SPELL_VENGEANCE),
+ HEAL_GROUP("Heal Group", 95, 124, SpriteID.SPELL_HEAL_GROUP),
+ FIRE_SURGE("Fire Surge", 95, 51, SpriteID.SPELL_FIRE_SURGE),
+ GHORROCK_TELEPORT("Ghorrock Teleport", 96, 106, SpriteID.SPELL_GHORROCK_TELEPORT),
+ SPELLBOOK_SWAP("Spellbook Swap", 96, 130, SpriteID.SPELL_SPELLBOOK_SWAP),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int sprite;
+
+ @Override
+ public String getName(final ItemManager itemManager)
+ {
+ return getName();
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java
new file mode 100644
index 0000000000..e16b0cd6c2
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningAction.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+import net.runelite.api.NullItemID;
+
+@AllArgsConstructor
+@Getter
+public enum MiningAction implements NamedSkillAction
+{
+ CLAY("Clay", 1, 5, ItemID.CLAY),
+ RUNE_ESSENCE("Rune essence", 1, 5, ItemID.RUNE_ESSENCE),
+ COPPER_ORE("Copper ore", 1, 17.5f, ItemID.COPPER_ORE),
+ TIN_ORE("Tin ore", 1, 17.5f, ItemID.TIN_ORE),
+ LIMESTONE("Limestone", 10, 26.5f, ItemID.LIMESTONE),
+ BARRONITE_SHARDS("Barronite shards", 14, 16, NullItemID.NULL_25683),
+ BARRONITE_DEPOSIT("Barronite deposit", 14, 32, ItemID.BARRONITE_DEPOSIT),
+ IRON_ORE("Iron ore", 15, 35, ItemID.IRON_ORE),
+ SILVER_ORE("Silver ore", 20, 40, ItemID.SILVER_ORE),
+ PURE_ESSENCE("Pure essence", 30, 5, ItemID.PURE_ESSENCE),
+ COAL("Coal", 30, 50, ItemID.COAL),
+ SANDSTONE_1KG("Sandstone (1kg)", 35, 30, ItemID.SANDSTONE_1KG),
+ SANDSTONE_2KG("Sandstone (2kg)", 35, 40, ItemID.SANDSTONE_2KG),
+ SANDSTONE_5KG("Sandstone (5kg)", 35, 50, ItemID.SANDSTONE_5KG),
+ SANDSTONE_10KG("Sandstone (10kg)", 35, 60, ItemID.SANDSTONE_10KG),
+ DENSE_ESSENCE_BLOCK("Dense essence block", 38, 12, ItemID.DENSE_ESSENCE_BLOCK),
+ GOLD_ORE("Gold ore", 40, 65, ItemID.GOLD_ORE),
+ GEM_ROCKS("Gem rocks", 40, 65, ItemID.UNCUT_RED_TOPAZ),
+ GRANITE_500G("Granite (500g)", 45, 50, ItemID.GRANITE_500G),
+ GRANITE_2KG("Granite (2kg)", 45, 60, ItemID.GRANITE_2KG),
+ GRANITE_5KG("Granite (5kg)", 45, 75, ItemID.GRANITE_5KG),
+ MITHRIL_ORE("Mithril ore", 55, 80, ItemID.MITHRIL_ORE),
+ SOFT_CLAY("Soft clay", 70, 5, ItemID.SOFT_CLAY),
+ ADAMANTITE_ORE("Adamantite ore", 70, 95, ItemID.ADAMANTITE_ORE),
+ RUNITE_ORE("Runite ore", 85, 125, ItemID.RUNITE_ORE),
+ AMETHYST("Amethyst", 92, 240, ItemID.AMETHYST),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningBonus.java
similarity index 78%
rename from runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java
rename to runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningBonus.java
index b21188d913..aba67a316d 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MiningBonus.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Kruithne
+ * Copyright (c) 2021, Jordan Atwood
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,17 +22,18 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package net.runelite.client.plugins.skillcalculator.beans;
+package net.runelite.client.plugins.skillcalculator.skills;
+import lombok.AllArgsConstructor;
import lombok.Getter;
-@Getter
-public class SkillDataEntry
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum MiningBonus implements SkillBonus
{
- private String name;
- private int level;
- private double xp;
- private Integer icon;
- private Integer sprite;
- private boolean ignoreBonus;
-}
\ No newline at end of file
+ PROSPECTOR_KIT("Prospector Kit (+2.5%)", 0.025f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/NamedSkillAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/NamedSkillAction.java
new file mode 100644
index 0000000000..b551474bc9
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/NamedSkillAction.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import net.runelite.client.game.ItemManager;
+
+/**
+ * An object representing a single skill action which grants some xp, with an explicitly defined name field.
+ */
+public interface NamedSkillAction extends SkillAction
+{
+ /**
+ * Gets the name of this skill action, usually the item or object created, or the spell cast.
+ *
+ * @return The name of this skill action.
+ */
+ String getName();
+
+ @Override
+ default String getName(ItemManager itemManager)
+ {
+ return getName();
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java
new file mode 100644
index 0000000000..ba4c1fa48e
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerAction.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum PrayerAction implements ItemSkillAction
+{
+ ENSOULED_GOBLIN_HEAD(ItemID.ENSOULED_GOBLIN_HEAD, 1, 130, true),
+ ENSOULED_MONKEY_HEAD(ItemID.ENSOULED_MONKEY_HEAD, 1, 182, true),
+ ENSOULED_IMP_HEAD(ItemID.ENSOULED_IMP_HEAD, 1, 286, true),
+ ENSOULED_MINOTAUR_HEAD(ItemID.ENSOULED_MINOTAUR_HEAD, 1, 364, true),
+ ENSOULED_SCORPION_HEAD(ItemID.ENSOULED_SCORPION_HEAD, 1, 454, true),
+ ENSOULED_BEAR_HEAD(ItemID.ENSOULED_BEAR_HEAD, 1, 480, true),
+ ENSOULED_UNICORN_HEAD(ItemID.ENSOULED_UNICORN_HEAD, 1, 494, true),
+ ENSOULED_DOG_HEAD(ItemID.ENSOULED_DOG_HEAD, 1, 520, true),
+ ENSOULED_CHAOS_DRUID_HEAD(ItemID.ENSOULED_CHAOS_DRUID_HEAD, 1, 584, true),
+ ENSOULED_GIANT_HEAD(ItemID.ENSOULED_GIANT_HEAD, 1, 650, true),
+ ENSOULED_OGRE_HEAD(ItemID.ENSOULED_OGRE_HEAD, 1, 716, true),
+ ENSOULED_ELF_HEAD(ItemID.ENSOULED_ELF_HEAD, 1, 754, true),
+ ENSOULED_TROLL_HEAD(ItemID.ENSOULED_TROLL_HEAD, 1, 780, true),
+ ENSOULED_HORROR_HEAD(ItemID.ENSOULED_HORROR_HEAD, 1, 832, true),
+ ENSOULED_KALPHITE_HEAD(ItemID.ENSOULED_KALPHITE_HEAD, 1, 884, true),
+ ENSOULED_DAGANNOTH_HEAD(ItemID.ENSOULED_DAGANNOTH_HEAD, 1, 936, true),
+ ENSOULED_BLOODVELD_HEAD(ItemID.ENSOULED_BLOODVELD_HEAD, 1, 1040, true),
+ ENSOULED_TZHAAR_HEAD(ItemID.ENSOULED_TZHAAR_HEAD, 1, 1104, true),
+ ENSOULED_DEMON_HEAD(ItemID.ENSOULED_DEMON_HEAD, 1, 1170, true),
+ ENSOULED_AVIANSIE_HEAD(ItemID.ENSOULED_AVIANSIE_HEAD, 1, 1234, true),
+ ENSOULED_ABYSSAL_HEAD(ItemID.ENSOULED_ABYSSAL_HEAD, 1, 1300, true),
+ ENSOULED_DRAGON_HEAD(ItemID.ENSOULED_DRAGON_HEAD, 1, 1560, true),
+ FIENDISH_ASHES(ItemID.FIENDISH_ASHES, 1, 10, true),
+ VILE_ASHES(ItemID.VILE_ASHES, 1, 25, true),
+ MALICIOUS_ASHES(ItemID.MALICIOUS_ASHES, 1, 65, true),
+ ABYSSAL_ASHES(ItemID.ABYSSAL_ASHES, 1, 85, true),
+ INFERNAL_ASHES(ItemID.INFERNAL_ASHES, 1, 110, true),
+ BONES(ItemID.BONES, 1, 4.5f, false),
+ WOLF_BONES(ItemID.WOLF_BONES, 1, 4.5f, false),
+ LOAR_REMAINS(ItemID.LOAR_REMAINS, 1, 33, false),
+ BURNT_BONES(ItemID.BURNT_BONES, 1, 4.5f, false),
+ MONKEY_BONES(ItemID.MONKEY_BONES, 1, 5, false),
+ BAT_BONES(ItemID.BAT_BONES, 1, 5.3f, false),
+ JOGRE_BONES(ItemID.JOGRE_BONES, 1, 15, false),
+ BIG_BONES(ItemID.BIG_BONES, 1, 15, false),
+ ZOGRE_BONES(ItemID.ZOGRE_BONES, 1, 22.5f, false),
+ SHAIKAHAN_BONES(ItemID.SHAIKAHAN_BONES, 1, 25, false),
+ BABYDRAGON_BONES(ItemID.BABYDRAGON_BONES, 1, 30, false),
+ PHRIN_REMAINS(ItemID.PHRIN_REMAINS, 1, 46.5f, false),
+ WYRM_BONES(ItemID.WYRM_BONES, 1, 50, false),
+ RIYL_REMAINS(ItemID.RIYL_REMAINS, 1, 59.5f, false),
+ WYVERN_BONES(ItemID.WYVERN_BONES, 1, 72, false),
+ DRAGON_BONES(ItemID.DRAGON_BONES, 1, 72, false),
+ DRAKE_BONES(ItemID.DRAKE_BONES, 1, 80, false),
+ ASYN_REMAINS(ItemID.ASYN_REMAINS, 1, 82.5f, false),
+ FAYRG_BONES(ItemID.FAYRG_BONES, 1, 84, false),
+ FIYR_REMAINS(ItemID.FIYR_REMAINS, 1, 84, false),
+ LAVA_DRAGON_BONES(ItemID.LAVA_DRAGON_BONES, 1, 85, false),
+ RAURG_BONES(ItemID.RAURG_BONES, 1, 96, false),
+ HYDRA_BONES(ItemID.HYDRA_BONES, 1, 110, false),
+ DAGANNOTH_BONES(ItemID.DAGANNOTH_BONES, 1, 125, false),
+ OURG_BONES(ItemID.OURG_BONES, 1, 140, false),
+ URIUM_REMAINS(ItemID.URIUM_REMAINS, 1, 120, false),
+ GUPPY(ItemID.GUPPY, 1, 4, false),
+ CAVEFISH(ItemID.CAVEFISH, 1, 7, false),
+ TETRA(ItemID.TETRA, 1, 10, false),
+ CATFISH(ItemID.CATFISH, 1, 16, false),
+ SUPERIOR_DRAGON_BONES(ItemID.SUPERIOR_DRAGON_BONES, 70, 150, false),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+ private final boolean ignoreBonus;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerBonus.java
new file mode 100644
index 0000000000..bf0f48c537
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/PrayerBonus.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum PrayerBonus implements SkillBonus
+{
+ LIT_GILDED_ALTAR("Lit Gilded Altar (350%)", 2.5f),
+ ECTOFUNTUS("Ectofuntus (400%)", 3),
+ CHAOS_ALTAR("Chaos Altar (700%)", 6),
+ MORYTANIA_DIARY_3_SHADES("Morytania Diary 3 Shades(150%)", 0.5f),
+ BONECRUSHER("Bonecrusher (50%)", -0.5f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftAction.java
new file mode 100644
index 0000000000..b779822207
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftAction.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum RunecraftAction implements ItemSkillAction
+{
+ AIR_TIARA(ItemID.AIR_TIARA, 1, 25, true),
+ MIND_TIARA(ItemID.MIND_TIARA, 1, 27.5f, true),
+ WATER_TIARA(ItemID.WATER_TIARA, 1, 30, true),
+ EARTH_TIARA(ItemID.EARTH_TIARA, 1, 32.5f, true),
+ FIRE_TIARA(ItemID.FIRE_TIARA, 1, 35, true),
+ BODY_TIARA(ItemID.BODY_TIARA, 1, 37.5f, true),
+ COSMIC_TIARA(ItemID.COSMIC_TIARA, 1, 40, true),
+ CHAOS_TIARA(ItemID.CHAOS_TIARA, 1, 42.5f, true),
+ NATURE_TIARA(ItemID.NATURE_TIARA, 1, 45, true),
+ LAW_TIARA(ItemID.LAW_TIARA, 1, 47.5f, true),
+ DEATH_TIARA(ItemID.DEATH_TIARA, 1, 50, true),
+ WRATH_TIARA(ItemID.WRATH_TIARA, 1, 52.5f, true),
+ AIR_RUNE(ItemID.AIR_RUNE, 1, 5, false),
+ MIND_RUNE(ItemID.MIND_RUNE, 2, 5.5f, false),
+ MIND_CORE(ItemID.MIND_CORE, 2, 55, false),
+ WATER_RUNE(ItemID.WATER_RUNE, 5, 6, false),
+ MIST_RUNE(ItemID.MIST_RUNE, 6, 8.5f, false),
+ EARTH_RUNE(ItemID.EARTH_RUNE, 9, 6.5f, false),
+ DUST_RUNE(ItemID.DUST_RUNE, 10, 9, false),
+ MUD_RUNE(ItemID.MUD_RUNE, 13, 9.5f, false),
+ FIRE_RUNE(ItemID.FIRE_RUNE, 14, 7, false),
+ SMOKE_RUNE(ItemID.SMOKE_RUNE, 15, 9.5f, false),
+ STEAM_RUNE(ItemID.STEAM_RUNE, 19, 10, false),
+ BODY_RUNE(ItemID.BODY_RUNE, 20, 7.5f, false),
+ BODY_CORE(ItemID.BODY_CORE, 20, 75, false),
+ LAVA_RUNE(ItemID.LAVA_RUNE, 23, 10.5f, false),
+ COSMIC_RUNE(ItemID.COSMIC_RUNE, 27, 8, false),
+ CHAOS_RUNE(ItemID.CHAOS_RUNE, 35, 8.5f, false),
+ CHAOS_CORE(ItemID.CHAOS_CORE, 35, 85, false),
+ ASTRAL_RUNE(ItemID.ASTRAL_RUNE, 40, 8.7f, false),
+ NATURE_RUNE(ItemID.NATURE_RUNE, 44, 9, false),
+ LAW_RUNE(ItemID.LAW_RUNE, 54, 9.5f, false),
+ DEATH_RUNE(ItemID.DEATH_RUNE, 65, 10, false),
+ BLOOD_RUNE(ItemID.BLOOD_RUNE, 77, 24.425f, true),
+ SOUL_RUNE(ItemID.SOUL_RUNE, 90, 30.325f, true),
+ WRATH_RUNE(ItemID.WRATH_RUNE, 95, 8, false),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+ private final boolean ignoreBonus;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftBonus.java
new file mode 100644
index 0000000000..0fa8a7477b
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/RunecraftBonus.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum RunecraftBonus implements SkillBonus
+{
+ DAEYALT_ESSENCE("Daeyalt essence (+50%)", 0.5f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillAction.java
new file mode 100644
index 0000000000..f7b739457c
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillAction.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import net.runelite.api.ItemComposition;
+import net.runelite.client.game.ItemManager;
+
+/**
+ * An object representing a single skill action which grants some xp.
+ */
+public interface SkillAction
+{
+ /**
+ * Gets the name of this skill action, usually the item or object created, or the spell cast. This name may be
+ * fetched via {@link ItemComposition#getName()} from some defined item ID or explicitly defined.
+ *
+ * @param itemManager An {@link ItemManager item manager} instance.
+ * @return The name of this skill action.
+ */
+ String getName(final ItemManager itemManager);
+
+ /**
+ * Gets the level required to perform this skill action.
+ *
+ * @return The level required to perform this skill action.
+ */
+ int getLevel();
+
+ /**
+ * Gets the amount of xp granted for performing this skill action.
+ *
+ * @return The amount of xp granted for performing this skill action.
+ */
+ float getXp();
+
+ /**
+ * Gets the item icon ID for this skill action, if applicable.
+ *
+ * Note: Either this method or {@link #getSprite()} will always return {@code -1}, and the other will return some
+ * value {@code 0} or greater.
+ *
+ * @return The item icon ID of this skill action, or {@code -1} if its icon should be represented using a sprite.
+ * @see net.runelite.api.ItemID
+ * @see #getSprite()
+ */
+ default int getIcon()
+ {
+ return -1;
+ }
+
+ /**
+ * Gets the sprite ID for this skill action, if applicable.
+ *
+ * Note: Either this method or {@link #getIcon()} will always return {@code -1}, and the other will return some
+ * value {@code 0} or greater.
+ *
+ * @return The sprite ID of this skill action, or {@code -1} if its icon should be represented using an item icon.
+ * @see net.runelite.api.SpriteID
+ * @see #getIcon()
+ */
+ default int getSprite()
+ {
+ return -1;
+ }
+
+ /**
+ * Returns {@code true} if this skill action is not boosted by any {@link SkillBonus skill bonuses}, {@code false}
+ * otherwise.
+ *
+ * @return {@code true} if this skill action is unaffected by skill bonuses, {@code false} otherwise.
+ */
+ default boolean isIgnoreBonus()
+ {
+ return false;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillBonus.java
new file mode 100644
index 0000000000..cf7d1d8dcf
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SkillBonus.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+/**
+ * An object representing a skill bonus, such as from a skilling outfit or activity granting boosted xp.
+ */
+public interface SkillBonus
+{
+ /**
+ * Gets the name of this skill bonus.
+ *
+ * @return The name of this skill bonus.
+ */
+ String getName();
+
+ /**
+ * Gets the multiplier for this skill bonus. When multiplied with the skill action XP value, it yields the amount of
+ * additional xp granted for that action. (eg. {@code {@link SkillAction#getXp()} * (1 + {@link #getValue()}} yields
+ * the full amount of xp gained)
+ *
+ * @return The skill bonus multiplier.
+ */
+ float getValue();
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java
new file mode 100644
index 0000000000..f4211febb9
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/SmithingAction.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum SmithingAction implements ItemSkillAction
+{
+ BRONZE_BAR(ItemID.BRONZE_BAR, 1, 6.3f),
+ BRONZE_AXE(ItemID.BRONZE_AXE, 1, 12.5f),
+ BRONZE_DAGGER(ItemID.BRONZE_DAGGER, 1, 12.5f),
+ BRONZE_MACE(ItemID.BRONZE_MACE, 2, 12.5f),
+ BRONZE_MED_HELM(ItemID.BRONZE_MED_HELM, 3, 12.5f),
+ BRONZE_BOLTS_UNF(ItemID.BRONZE_BOLTS_UNF, 3, 12.5f),
+ BRONZE_NAILS(ItemID.BRONZE_NAILS, 4, 12.5f),
+ BRONZE_SWORD(ItemID.BRONZE_SWORD, 4, 12.5f),
+ BRONZE_WIRE(ItemID.BRONZE_WIRE, 4, 12.5f),
+ BRONZE_DART_TIP(ItemID.BRONZE_DART_TIP, 4, 12.5f),
+ BRONZE_ARROWTIPS(ItemID.BRONZE_ARROWTIPS, 5, 12.5f),
+ BRONZE_SCIMITAR(ItemID.BRONZE_SCIMITAR, 5, 25),
+ BRONZE_HASTA(ItemID.BRONZE_HASTA, 5, 25),
+ BRONZE_SPEAR(ItemID.BRONZE_SPEAR, 5, 25),
+ BRONZE_JAVELIN_HEADS(ItemID.BRONZE_JAVELIN_HEADS, 6, 12.5f),
+ BRONZE_LONGSWORD(ItemID.BRONZE_LONGSWORD, 6, 25),
+ BRONZE_LIMBS(ItemID.BRONZE_LIMBS, 6, 12.5f),
+ BRONZE_KNIFE(ItemID.BRONZE_KNIFE, 7, 12.5f),
+ BRONZE_FULL_HELM(ItemID.BRONZE_FULL_HELM, 7, 25),
+ BRONZE_SQ_SHIELD(ItemID.BRONZE_SQ_SHIELD, 8, 25),
+ BRONZE_WARHAMMER(ItemID.BRONZE_WARHAMMER, 9, 37.5f),
+ BRONZE_BATTLEAXE(ItemID.BRONZE_BATTLEAXE, 10, 37.5f),
+ BRONZE_CHAINBODY(ItemID.BRONZE_CHAINBODY, 11, 37.5f),
+ BRONZE_KITESHIELD(ItemID.BRONZE_KITESHIELD, 12, 37.5f),
+ BRONZE_CLAWS(ItemID.BRONZE_CLAWS, 13, 25),
+ BRONZE_2H_SWORD(ItemID.BRONZE_2H_SWORD, 14, 37.5f),
+ BARRONITE_DEPOSITS(ItemID.BARRONITE_DEPOSIT, 14, 30),
+ IRON_BAR(ItemID.IRON_BAR, 15, 12.5f),
+ IRON_DAGGER(ItemID.IRON_DAGGER, 15, 25),
+ IRON_AXE(ItemID.IRON_AXE, 16, 25),
+ BRONZE_PLATELEGS(ItemID.BRONZE_PLATELEGS, 16, 37.5f),
+ BRONZE_PLATESKIRT(ItemID.BRONZE_PLATESKIRT, 16, 37.5f),
+ IRON_SPIT(ItemID.IRON_SPIT, 17, 25),
+ IRON_MACE(ItemID.IRON_MACE, 17, 25),
+ IRON_BOLTS_UNF(ItemID.IRON_BOLTS_UNF, 18, 25),
+ BRONZE_PLATEBODY(ItemID.BRONZE_PLATEBODY, 18, 62.5f),
+ IRON_MED_HELM(ItemID.IRON_MED_HELM, 18, 25),
+ IRON_NAILS(ItemID.IRON_NAILS, 19, 25),
+ IRON_DART_TIP(ItemID.IRON_DART_TIP, 19, 25),
+ IRON_SWORD(ItemID.IRON_SWORD, 19, 25),
+ SILVER_BAR(ItemID.SILVER_BAR, 20, 13.7f),
+ IRON_ARROWTIPS(ItemID.IRON_ARROWTIPS, 20, 25),
+ IRON_SCIMITAR(ItemID.IRON_SCIMITAR, 20, 50),
+ IRON_HASTA(ItemID.IRON_HASTA, 20, 50),
+ IRON_SPEAR(ItemID.IRON_SPEAR, 20, 50),
+ IRON_LONGSWORD(ItemID.IRON_LONGSWORD, 21, 50),
+ IRON_JAVELIN_HEADS(ItemID.IRON_JAVELIN_HEADS, 21, 25),
+ IRON_FULL_HELM(ItemID.IRON_FULL_HELM, 22, 50),
+ IRON_KNIFE(ItemID.IRON_KNIFE, 22, 25),
+ IRON_LIMBS(ItemID.IRON_LIMBS, 23, 25),
+ IRON_SQ_SHIELD(ItemID.IRON_SQ_SHIELD, 23, 50),
+ IRON_WARHAMMER(ItemID.IRON_WARHAMMER, 24, 75),
+ IRON_BATTLEAXE(ItemID.IRON_BATTLEAXE, 25, 75),
+ OIL_LANTERN_FRAME(ItemID.OIL_LANTERN_FRAME, 26, 25),
+ IRON_CHAINBODY(ItemID.IRON_CHAINBODY, 26, 75),
+ IRON_KITESHIELD(ItemID.IRON_KITESHIELD, 27, 75),
+ IRON_CLAWS(ItemID.IRON_CLAWS, 28, 50),
+ IRON_2H_SWORD(ItemID.IRON_2H_SWORD, 29, 75),
+ STEEL_DAGGER(ItemID.STEEL_DAGGER, 30, 37.5f),
+ STEEL_BAR(ItemID.STEEL_BAR, 30, 17.5f),
+ IRON_PLATESKIRT(ItemID.IRON_PLATESKIRT, 31, 75),
+ IRON_PLATELEGS(ItemID.IRON_PLATELEGS, 31, 75),
+ STEEL_AXE(ItemID.STEEL_AXE, 31, 37.5f),
+ STEEL_MACE(ItemID.STEEL_MACE, 32, 37.5f),
+ IRON_PLATEBODY(ItemID.IRON_PLATEBODY, 33, 125),
+ STEEL_MED_HELM(ItemID.STEEL_MED_HELM, 33, 37.5f),
+ STEEL_BOLTS_UNF(ItemID.STEEL_BOLTS_UNF, 33, 37.5f),
+ STEEL_DART_TIP(ItemID.STEEL_DART_TIP, 34, 37.5f),
+ STEEL_NAILS(ItemID.STEEL_NAILS, 34, 37.5f),
+ STEEL_SWORD(ItemID.STEEL_SWORD, 34, 37.5f),
+ CANNONBALL(ItemID.CANNONBALL, 35, 25.6f),
+ STEEL_SCIMITAR(ItemID.STEEL_SCIMITAR, 35, 75),
+ STEEL_ARROWTIPS(ItemID.STEEL_ARROWTIPS, 35, 37.5f),
+ STEEL_HASTA(ItemID.STEEL_HASTA, 35, 75),
+ STEEL_SPEAR(ItemID.STEEL_SPEAR, 35, 75),
+ STEEL_LIMBS(ItemID.STEEL_LIMBS, 36, 37.5f),
+ STEEL_STUDS(ItemID.STEEL_STUDS, 36, 37.5f),
+ STEEL_LONGSWORD(ItemID.STEEL_LONGSWORD, 36, 75),
+ STEEL_JAVELIN_HEADS(ItemID.STEEL_JAVELIN_HEADS, 36, 37.5f),
+ STEEL_KNIFE(ItemID.STEEL_KNIFE, 37, 37.5f),
+ STEEL_FULL_HELM(ItemID.STEEL_FULL_HELM, 37, 75),
+ STEEL_SQ_SHIELD(ItemID.STEEL_SQ_SHIELD, 38, 75),
+ STEEL_WARHAMMER(ItemID.STEEL_WARHAMMER, 39, 112.5f),
+ STEEL_BATTLEAXE(ItemID.STEEL_BATTLEAXE, 40, 112.5f),
+ GOLD_BAR_GOLDSMITH_GAUNTLETS(ItemID.GOLD_BAR, 40, 56.2f),
+ GOLD_BAR(ItemID.GOLD_BAR, 40, 22.5f),
+ STEEL_CHAINBODY(ItemID.STEEL_CHAINBODY, 41, 112.5f),
+ STEEL_KITESHIELD(ItemID.STEEL_KITESHIELD, 42, 112.5f),
+ STEEL_CLAWS(ItemID.STEEL_CLAWS, 43, 75),
+ STEEL_2H_SWORD(ItemID.STEEL_2H_SWORD, 44, 112.5f),
+ STEEL_PLATELEGS(ItemID.STEEL_PLATELEGS, 46, 112.5f),
+ STEEL_PLATESKIRT(ItemID.STEEL_PLATESKIRT, 46, 112.5f),
+ STEEL_PLATEBODY(ItemID.STEEL_PLATEBODY, 48, 187.5f),
+ BULLSEYE_LANTERN_UNF(ItemID.BULLSEYE_LANTERN_UNF, 49, 37),
+ MITHRIL_DAGGER(ItemID.MITHRIL_DAGGER, 50, 50),
+ MITHRIL_BAR(ItemID.MITHRIL_BAR, 50, 30),
+ MITHRIL_AXE(ItemID.MITHRIL_AXE, 51, 50),
+ MITHRIL_MACE(ItemID.MITHRIL_MACE, 52, 50),
+ MITHRIL_MED_HELM(ItemID.MITHRIL_MED_HELM, 53, 50),
+ MITHRIL_BOLTS_UNF(ItemID.MITHRIL_BOLTS_UNF, 53, 50),
+ MITHRIL_SWORD(ItemID.MITHRIL_SWORD, 54, 50),
+ MITHRIL_DART_TIP(ItemID.MITHRIL_DART_TIP, 54, 50),
+ MITHRIL_NAILS(ItemID.MITHRIL_NAILS, 54, 50),
+ MITHRIL_ARROWTIPS(ItemID.MITHRIL_ARROWTIPS, 55, 50),
+ MITHRIL_SCIMITAR(ItemID.MITHRIL_SCIMITAR, 55, 100),
+ MITHRIL_HASTA(ItemID.MITHRIL_HASTA, 55, 100),
+ MITHRIL_SPEAR(ItemID.MITHRIL_SPEAR, 55, 100),
+ MITHRIL_LONGSWORD(ItemID.MITHRIL_LONGSWORD, 56, 100),
+ MITHRIL_JAVELIN_HEADS(ItemID.MITHRIL_JAVELIN_HEADS, 56, 50),
+ MITHRIL_LIMBS(ItemID.MITHRIL_LIMBS, 56, 50),
+ MITHRIL_FULL_HELM(ItemID.MITHRIL_FULL_HELM, 57, 100),
+ MITHRIL_KNIFE(ItemID.MITHRIL_KNIFE, 57, 50),
+ MITHRIL_SQ_SHIELD(ItemID.MITHRIL_SQ_SHIELD, 58, 100),
+ MITH_GRAPPLE_TIP(ItemID.MITH_GRAPPLE_TIP, 59, 50),
+ MITHRIL_WARHAMMER(ItemID.MITHRIL_WARHAMMER, 59, 150),
+ DRAGON_SQ_SHIELD(ItemID.DRAGON_SQ_SHIELD, 60, 75),
+ MITHRIL_BATTLEAXE(ItemID.MITHRIL_BATTLEAXE, 60, 150),
+ MITHRIL_CHAINBODY(ItemID.MITHRIL_CHAINBODY, 61, 150),
+ MITHRIL_KITESHIELD(ItemID.MITHRIL_KITESHIELD, 62, 150),
+ MITHRIL_CLAWS(ItemID.MITHRIL_CLAWS, 63, 100),
+ MITHRIL_2H_SWORD(ItemID.MITHRIL_2H_SWORD, 64, 150),
+ MITHRIL_PLATESKIRT(ItemID.MITHRIL_PLATESKIRT, 66, 150),
+ MITHRIL_PLATELEGS(ItemID.MITHRIL_PLATELEGS, 66, 150),
+ MITHRIL_PLATEBODY(ItemID.MITHRIL_PLATEBODY, 68, 250),
+ ADAMANT_DAGGER(ItemID.ADAMANT_DAGGER, 70, 62.5f),
+ ADAMANTITE_BAR(ItemID.ADAMANTITE_BAR, 70, 37.5f),
+ ADAMANT_AXE(ItemID.ADAMANT_AXE, 71, 62.5f),
+ ADAMANT_MACE(ItemID.ADAMANT_MACE, 72, 62.5f),
+ ADAMANT_BOLTS_UNF(ItemID.ADAMANT_BOLTSUNF, 73, 62.5f),
+ ADAMANT_MED_HELM(ItemID.ADAMANT_MED_HELM, 73, 62.5f),
+ ADAMANT_DART_TIP(ItemID.ADAMANT_DART_TIP, 74, 62.5f),
+ ADAMANT_SWORD(ItemID.ADAMANT_SWORD, 74, 62.5f),
+ ADAMANTITE_NAILS(ItemID.ADAMANTITE_NAILS, 74, 62.5f),
+ ADAMANT_ARROWTIPS(ItemID.ADAMANT_ARROWTIPS, 75, 62.5f),
+ ADAMANT_SCIMITAR(ItemID.ADAMANT_SCIMITAR, 75, 125),
+ ADAMANT_HASTA(ItemID.ADAMANT_HASTA, 75, 125),
+ ADAMANT_SPEAR(ItemID.ADAMANT_SPEAR, 75, 125),
+ ADAMANTITE_LIMBS(ItemID.ADAMANTITE_LIMBS, 76, 62.5f),
+ ADAMANT_LONGSWORD(ItemID.ADAMANT_LONGSWORD, 76, 125),
+ ADAMANT_JAVELIN_HEADS(ItemID.ADAMANT_JAVELIN_HEADS, 76, 62.5f),
+ ADAMANT_FULL_HELM(ItemID.ADAMANT_FULL_HELM, 77, 125),
+ ADAMANT_KNIFE(ItemID.ADAMANT_KNIFE, 77, 62.5f),
+ ADAMANT_SQ_SHIELD(ItemID.ADAMANT_SQ_SHIELD, 78, 125),
+ ADAMANT_WARHAMMER(ItemID.ADAMANT_WARHAMMER, 79, 187.5f),
+ ADAMANT_BATTLEAXE(ItemID.ADAMANT_BATTLEAXE, 80, 187.5f),
+ ADAMANT_CHAINBODY(ItemID.ADAMANT_CHAINBODY, 81, 187.5f),
+ ADAMANT_KITESHIELD(ItemID.ADAMANT_KITESHIELD, 82, 187.5f),
+ ADAMANT_CLAWS(ItemID.ADAMANT_CLAWS, 83, 125),
+ ADAMANT_2H_SWORD(ItemID.ADAMANT_2H_SWORD, 84, 187.5f),
+ RUNITE_BAR(ItemID.RUNITE_BAR, 85, 50),
+ RUNE_DAGGER(ItemID.RUNE_DAGGER, 85, 75),
+ RUNE_AXE(ItemID.RUNE_AXE, 86, 75),
+ ADAMANT_PLATESKIRT(ItemID.ADAMANT_PLATESKIRT, 86, 187.5f),
+ ADAMANT_PLATELEGS(ItemID.ADAMANT_PLATELEGS, 86, 187.5f),
+ RUNE_MACE(ItemID.RUNE_MACE, 87, 75),
+ RUNITE_BOLTS_UNF(ItemID.RUNITE_BOLTS_UNF, 88, 75),
+ RUNE_MED_HELM(ItemID.RUNE_MED_HELM, 88, 75),
+ ADAMANT_PLATEBODY(ItemID.ADAMANT_PLATEBODY, 88, 312.5f),
+ RUNE_SWORD(ItemID.RUNE_SWORD, 89, 75),
+ RUNE_NAILS(ItemID.RUNE_NAILS, 89, 75),
+ RUNE_DART_TIP(ItemID.RUNE_DART_TIP, 89, 75),
+ RUNE_ARROWTIPS(ItemID.RUNE_ARROWTIPS, 90, 75),
+ RUNE_SCIMITAR(ItemID.RUNE_SCIMITAR, 90, 150),
+ RUNE_HASTA(ItemID.RUNE_HASTA, 90, 150),
+ RUNE_SPEAR(ItemID.RUNE_SPEAR, 90, 150),
+ DRAGONFIRE_SHIELD(ItemID.DRAGONFIRE_SHIELD, 90, 2000),
+ RUNE_LONGSWORD(ItemID.RUNE_LONGSWORD, 91, 150),
+ RUNE_JAVELIN_HEADS(ItemID.RUNE_JAVELIN_HEADS, 91, 75),
+ RUNITE_LIMBS(ItemID.RUNITE_LIMBS, 91, 75),
+ RUNE_KNIFE(ItemID.RUNE_KNIFE, 92, 75),
+ RUNE_FULL_HELM(ItemID.RUNE_FULL_HELM, 92, 150),
+ RUNE_SQ_SHIELD(ItemID.RUNE_SQ_SHIELD, 93, 150),
+ RUNE_WARHAMMER(ItemID.RUNE_WARHAMMER, 94, 225),
+ RUNE_BATTLEAXE(ItemID.RUNE_BATTLEAXE, 95, 225),
+ RUNE_CHAINBODY(ItemID.RUNE_CHAINBODY, 96, 225),
+ RUNE_KITESHIELD(ItemID.RUNE_KITESHIELD, 97, 225),
+ RUNE_CLAWS(ItemID.RUNE_CLAWS, 98, 150),
+ RUNE_PLATEBODY(ItemID.RUNE_PLATEBODY, 99, 375),
+ RUNE_PLATESKIRT(ItemID.RUNE_PLATESKIRT, 99, 225),
+ RUNE_PLATELEGS(ItemID.RUNE_PLATELEGS, 99, 225),
+ RUNE_2H_SWORD(ItemID.RUNE_2H_SWORD, 99, 225),
+ ;
+
+ private final int itemId;
+ private final int level;
+ private final float xp;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java
new file mode 100644
index 0000000000..c43a1414a1
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/ThievingAction.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum ThievingAction implements NamedSkillAction
+{
+ MAN_OR_WOMAN("Man / Woman", 1, 8, ItemID.MAN),
+ WINTER_SQIRKJUICE("Winter Sq'irkjuice", 1, 350, ItemID.WINTER_SQIRKJUICE),
+ VEGETABLE_STALL("Vegetable Stall", 2, 10, ItemID.CABBAGE),
+ CAKE_STALL("Cake Stall", 5, 16, ItemID.CAKE),
+ TEA_STALL("Tea Stall", 5, 16, ItemID.CUP_OF_TEA_4242),
+ CRAFTING_STALL("Crafting Stall", 5, 16, ItemID.CHISEL_5601),
+ MONKEY_FOOD_STALL("Monkey Food Stall", 5, 16, ItemID.BANANA),
+ FARMER("Farmer", 10, 14.5f, ItemID.FARMER),
+ FEMALE_HAM_MEMBER("Female H.A.M. Member", 15, 18.5f, ItemID.FEMALE_HAM),
+ SILK_STALL("Silk Stall", 20, 24, ItemID.SILK),
+ MALE_HAM_MEMBER("Male H.A.M. Member", 20, 22.5f, ItemID.MALE_HAM),
+ WINE_STALL("Wine Stall", 22, 27, ItemID.BOTTLE_OF_WINE),
+ WARRIOR_WOMEN_OR_AL_KHARID_WARRIOR("Warrior Women / Al-Kharid Warrior", 25, 26, ItemID.WARRIOR_WOMAN),
+ FRUIT_STALL("Fruit Stall", 25, 28, ItemID.STRANGE_FRUIT),
+ SPRING_SQIRKJUICE("Spring Sq'irkjuice", 25, 1350, ItemID.SPRING_SQIRKJUICE),
+ SEED_STALL("Seed Stall", 27, 10, ItemID.POTATO_SEED),
+ NATURE_RUNE_CHEST("Nature Rune Chest", 28, 25, ItemID.NATURE_RUNE),
+ ROGUE("Rogue", 32, 35.5f, ItemID.ROGUE),
+ FUR_STALL("Fur Stall", 35, 36, ItemID.GREY_WOLF_FUR),
+ CAVE_GOBLIN("Cave Goblin", 36, 40, ItemID.CAVE_GOBLIN),
+ MASTER_FARMER("Master Farmer", 38, 43, ItemID.MASTER_FARMER),
+ GUARD("Guard", 40, 46.8f, ItemID.GUARD),
+ FISH_STALL("Fish Stall", 42, 42, ItemID.RAW_SALMON),
+ BEARDED_POLLNIVNIAN_BANDIT("Bearded Pollnivnian Bandit", 45, 65, ItemID.BANDIT_6782),
+ FREMENNIK_CITIZEN("Fremennik Citizen", 45, 65, ItemID.FREMENNIK),
+ AUTUMN_SQIRKJUICE("Autumn Sq'irkjuice", 45, 2350, ItemID.AUTUMN_SQIRKJUICE),
+ CROSSBOW_STALL("Crossbow Stall", 49, 52, ItemID.CROSSBOW),
+ SILVER_STALL("Silver Stall", 50, 54, ItemID.SILVER_BAR),
+ WALL_SAFE("Wall Safe", 50, 70, ItemID.STETHOSCOPE),
+ DESERT_BANDIT("Desert Bandit", 53, 79.5f, ItemID.BANDIT),
+ KNIGHT("Knight", 55, 84.3f, ItemID.KNIGHT_OF_ARDOUGNE),
+ POLLNIVNIAN_BANDIT("Pollnivnian Bandit", 55, 84.3f, ItemID.BANDIT_6781),
+ STONE_CHEST("Stone Chest", 64, 280, ItemID.XERICIAN_FABRIC),
+ MAGIC_STALL("Magic Stall", 65, 100, ItemID.AIR_RUNE_6422),
+ SCIMITAR_STALL("Scimitar Stall", 65, 100, ItemID.STEEL_SCIMITAR),
+ MENAPHITE_THUG("Menaphite Thug", 65, 137.5f, ItemID.MENAPHITE_THUG),
+ SPICES_STALL("Spices Stall", 65, 81, ItemID.SPICE),
+ YANILLE_WATCHMAN("Yanille Watchman", 65, 137.5f, ItemID.WATCHMAN),
+ SUMMER_SQIRKJUICE("Summer Sq'irkjuice", 65, 3000, ItemID.SUMMER_SQIRKJUICE),
+ PALADIN("Paladin", 70, 151.8f, ItemID.PALADIN),
+ GNOME("Gnome", 75, 198.5f, ItemID.GNOME),
+ GEMS_STALL("Gems Stall", 75, 160, ItemID.SAPPHIRE),
+ DORGESH_KAAN_RICH_CHEST("Dorgesh-Kaan Rich Chest", 78, 650, ItemID.MINING_HELMET),
+ HERO("Hero", 80, 275, ItemID.HERO),
+ VYRE("Vyre", 82, 306.9f, ItemID.VYRE),
+ ROGUES_CASTLE_CHEST("Wilderness Rogues' Chest", 84, 100, ItemID.DRAGONSTONE),
+ ELF("Elf", 85, 353, ItemID.ELF),
+ TZHAAR_HUR("TzHaar-Hur", 90, 103.4f, ItemID.TZHAARHUR),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java
new file mode 100644
index 0000000000..8aad519aaa
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingAction.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import net.runelite.api.ItemID;
+
+@AllArgsConstructor
+@Getter
+public enum WoodcuttingAction implements NamedSkillAction
+{
+ LOGS("Logs", 1, 25, ItemID.LOGS),
+ ACHEY_TREE_LOGS("Achey tree logs", 1, 25, ItemID.ACHEY_TREE_LOGS),
+ OAK_LOGS("Oak logs", 15, 37.5f, ItemID.OAK_LOGS),
+ WILLOW_LOGS("Willow logs", 30, 67.5f, ItemID.WILLOW_LOGS),
+ TEAK_LOGS("Teak logs", 35, 85, ItemID.TEAK_LOGS),
+ BARK("Bark", 45, 82.5f, ItemID.BARK),
+ MAPLE_LOGS("Maple logs", 45, 100, ItemID.MAPLE_LOGS),
+ MAHOGANY_LOGS("Mahogany logs", 50, 125, ItemID.MAHOGANY_LOGS),
+ ARCTIC_PINE_LOGS("Arctic pine logs", 54, 40, ItemID.ARCTIC_PINE_LOGS),
+ YEW_LOGS("Yew logs", 60, 175, ItemID.YEW_LOGS),
+ BLISTERWOOD_LOGS("Blisterwood logs", 62, 76, ItemID.BLISTERWOOD_LOGS),
+ SULLIUSCEPS("Sulliusceps", 65, 127, ItemID.SULLIUSCEP_CAP),
+ MAGIC_LOGS("Magic logs", 75, 250, ItemID.MAGIC_LOGS),
+ REDWOOD_LOGS("Redwood logs", 90, 380, ItemID.REDWOOD_LOGS),
+ ;
+
+ private final String name;
+ private final int level;
+ private final float xp;
+ private final int icon;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingBonus.java
new file mode 100644
index 0000000000..14ee9a4c21
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/WoodcuttingBonus.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator.skills;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter(onMethod_ = @Override)
+public enum WoodcuttingBonus implements SkillBonus
+{
+ LUMBERJACK_OUTFIT("Lumberjack Outfit (+2.5%)", 0.025f),
+ ;
+
+ private final String name;
+ private final float value;
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java
index e638b1b713..2011a2e0e6 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialWeapon.java
@@ -39,7 +39,8 @@ enum SpecialWeapon
BANDOS_GODSWORD("Bandos Godsword", new int[]{ItemID.BANDOS_GODSWORD, ItemID.BANDOS_GODSWORD_OR}, true, SpecialCounterConfig::bandosGodswordThreshold),
BARRELCHEST_ANCHOR("Barrelchest Anchor", new int[]{ItemID.BARRELCHEST_ANCHOR}, true, (c) -> 0),
BONE_DAGGER("Bone Dagger", new int[]{ItemID.BONE_DAGGER, ItemID.BONE_DAGGER_P, ItemID.BONE_DAGGER_P_8876, ItemID.BONE_DAGGER_P_8878}, true, (c) -> 0),
- DORGESHUUN_CROSSBOW("Dorgeshuun Crossbow", new int[]{ItemID.DORGESHUUN_CROSSBOW}, true, (c) -> 0);
+ DORGESHUUN_CROSSBOW("Dorgeshuun Crossbow", new int[]{ItemID.DORGESHUUN_CROSSBOW}, true, (c) -> 0),
+ BULWARK("Dinh's Bulwark", new int[]{ItemID.DINHS_BULWARK}, false, c -> 0);
private final String name;
private final int[] itemID;
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json
deleted file mode 100644
index e26954adde..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_agility.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 2150,
- "name": "Gnome Stronghold",
- "xp": 86.5
- },
- {
- "level": 5,
- "icon": 13359,
- "name": "Shayzien Basic Course",
- "xp": 133.2
- },
- {
- "level": 10,
- "icon": 11849,
- "name": "Draynor Village Rooftop",
- "xp": 120
- },
- {
- "level":15,
- "icon": 11328,
- "name": "Leaping trout",
- "xp": 5
- },
- {
- "level": 20,
- "icon": 11849,
- "name": "Al Kharid Rooftop",
- "xp": 180
- },
- {
- "level": 30,
- "icon": 11849,
- "name": "Varrock Rooftop",
- "xp": 238
- },
- {
- "level": 30,
- "icon": 10595,
- "name": "Penguin Agility Course",
- "xp": 540
- },
- {
- "level":30,
- "icon": 11330,
- "name": "Leaping salmon",
- "xp": 6
- },
- {
- "level": 35,
- "icon": 1365,
- "name": "Barbarian Outpost",
- "xp": 152.5
- },
- {
- "level": 40,
- "icon": 11849,
- "name": "Canifis Rooftop",
- "xp": 240
- },
- {
- "level":45,
- "icon": 11332,
- "name": "Leaping sturgeon",
- "xp": 7
- },
- {
- "level": 48,
- "icon": 4026,
- "name": "Ape Atoll",
- "xp": 580
- },
- {
- "level": 48,
- "icon": 13379,
- "name": "Shayzien Advanced Course",
- "xp": 474.3
- },
- {
- "level": 50,
- "icon": 11849,
- "name": "Falador Rooftop",
- "xp": 440
- },
- {
- "level": 52,
- "icon": 964,
- "name": "Wilderness Agility Course",
- "xp": 571
- },
- {
- "level": 52,
- "icon": 24736,
- "name": "Hallowed Sepulchre Floor 1",
- "xp": 575
- },
- {
- "level": 60,
- "icon": 11849,
- "name": "Seers' Village Rooftop",
- "xp": 570
- },
- {
- "level": 60,
- "icon": 4179,
- "name": "Werewolf Agility Course",
- "xp": 730
- },
- {
- "level": 62,
- "icon": 24736,
- "name": "Hallowed Sepulchre Floor 2",
- "xp": 925
- },
- {
- "level": 70,
- "icon": 11849,
- "name": "Pollnivneach Rooftop",
- "xp": 890
- },
- {
- "level": 72,
- "icon": 24736,
- "name": "Hallowed Sepulchre Floor 3",
- "xp": 1500
- },
- {
- "level": 75,
- "icon": 23962,
- "name": "Prifddinas Agility Course",
- "xp": 1337
- },
- {
- "level": 80,
- "icon": 11849,
- "name": "Rellekka Rooftop",
- "xp": 780
- },
- {
- "level": 82,
- "icon": 24736,
- "name": "Hallowed Sepulchre Floor 4",
- "xp": 2700
- },
- {
- "level": 90,
- "icon": 11849,
- "name": "Ardougne Rooftop",
- "xp": 793
- },
- {
- "level": 92,
- "icon": 24736,
- "name": "Hallowed Sepulchre Floor 5",
- "xp": 6000
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json
deleted file mode 100644
index 32897151de..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json
+++ /dev/null
@@ -1,1018 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Carpenter's Outfit (+2.5%)",
- "value": 0.025
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 8168,
- "name": "Exit Portal",
- "xp": 100
- },
- {
- "level": 1,
- "icon": 960,
- "name": "Plank",
- "xp": 29
- },
- {
- "level": 1,
- "icon": 8778,
- "name": "Oak Plank",
- "xp": 60
- },
- {
- "level": 1,
- "icon": 8780,
- "name": "Teak Plank",
- "xp": 90
- },
- {
- "level": 1,
- "icon": 8782,
- "name": "Mahogany Plank",
- "xp": 140
- },
- {
- "level": 1,
- "icon": 8180,
- "name": "Plant",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8186,
- "name": "Fern (big plant)",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8189,
- "name": "Short Plant",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8183,
- "name": "Dock Leaf",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8309,
- "name": "Crude Wooden Chair",
- "xp": 58
- },
- {
- "level": 2,
- "icon": 8316,
- "name": "Brown Rug",
- "xp": 30
- },
- {
- "level": 2,
- "icon": 8322,
- "name": "Torn Curtains",
- "xp": 132
- },
- {
- "level": 3,
- "icon": 8325,
- "name": "Clay Fireplace",
- "xp": 30
- },
- {
- "level": 4,
- "icon": 8319,
- "name": "Wooden Bookcase",
- "xp": 115
- },
- {
- "level": 5,
- "icon": 8216,
- "name": "Firepit",
- "xp": 40
- },
- {
- "level": 5,
- "icon": 8236,
- "name": "Cat Blanket",
- "xp": 15
- },
- {
- "level": 5,
- "icon": 8169,
- "name": "Decorative Rock",
- "xp": 100
- },
- {
- "level": 5,
- "icon": 8173,
- "name": "Tree",
- "xp": 31
- },
- {
- "level": 6,
- "icon": 8181,
- "name": "Small Fern",
- "xp": 70
- },
- {
- "level": 6,
- "icon": 8184,
- "name": "Thistle",
- "xp": 70
- },
- {
- "level": 6,
- "icon": 8187,
- "name": "Bush",
- "xp": 70
- },
- {
- "level": 6,
- "icon": 8190,
- "name": "Large Leaf Bush",
- "xp": 70
- },
- {
- "level": 6,
- "icon": 8223,
- "name": "Wooden Shelves 1",
- "xp": 87
- },
- {
- "level": 7,
- "icon": 8230,
- "name": "Pump and Drain",
- "xp": 100
- },
- {
- "level": 7,
- "icon": 8239,
- "name": "Beer Barrel",
- "xp": 87
- },
- {
- "level": 8,
- "icon": 8310,
- "name": "Wooden Chair",
- "xp": 87
- },
- {
- "level": 9,
- "icon": 8233,
- "name": "Wooden Larder",
- "xp": 228
- },
- {
- "level": 10,
- "icon": 8115,
- "name": "Wood Dining Table",
- "xp": 115
- },
- {
- "level": 10,
- "icon": 8170,
- "name": "Pond",
- "xp": 100
- },
- {
- "level": 10,
- "icon": 8174,
- "name": "Nice Tree",
- "xp": 44
- },
- {
- "level": 10,
- "icon": 8108,
- "name": "Wooden Bench",
- "xp": 115
- },
- {
- "level": 11,
- "icon": 8217,
- "name": "Firepit with Hook",
- "xp": 60
- },
- {
- "level": 12,
- "icon": 8185,
- "name": "Reeds",
- "xp": 100
- },
- {
- "level": 12,
- "icon": 8182,
- "name": "Fern (small plant)",
- "xp": 100
- },
- {
- "level": 12,
- "icon": 8240,
- "name": "Cider Barrel",
- "xp": 91
- },
- {
- "level": 12,
- "icon": 8224,
- "name": "Wooden Shelves 2",
- "xp": 147
- },
- {
- "level": 12,
- "icon": 8115,
- "name": "Wood Table",
- "xp": 87
- },
- {
- "level": 12,
- "icon": 8191,
- "name": "Huge Plant",
- "xp": 100
- },
- {
- "level": 12,
- "icon": 8188,
- "name": "Tall Plant",
- "xp": 100
- },
- {
- "level": 13,
- "icon": 8317,
- "name": "Rug",
- "xp": 60
- },
- {
- "level": 14,
- "icon": 8311,
- "name": "Rocking Chair",
- "xp": 87
- },
- {
- "level": 15,
- "icon": 8171,
- "name": "Imp Statue",
- "xp": 150
- },
- {
- "level": 15,
- "icon": 8175,
- "name": "Oak Tree",
- "xp": 70
- },
- {
- "level": 16,
- "icon": 8102,
- "name": "Oak Decoration",
- "xp": 120
- },
- {
- "level": 17,
- "icon": 8218,
- "name": "Firepit with Pot",
- "xp": 80
- },
- {
- "level": 18,
- "icon": 8323,
- "name": "Curtains",
- "xp": 225
- },
- {
- "level": 18,
- "icon": 1905,
- "name": "Asgarnian Ale",
- "xp": 184
- },
- {
- "level": 19,
- "icon": 8237,
- "name": "Cat Basket",
- "xp": 58
- },
- {
- "level": 19,
- "icon": 8312,
- "name": "Oak Chair",
- "xp": 120
- },
- {
- "level": 20,
- "icon": 8031,
- "name": "Wooden Bed",
- "xp": 117
- },
- {
- "level": 20,
- "icon": 8038,
- "name": "Shoe Box",
- "xp": 58
- },
- {
- "level": 21,
- "icon": 8045,
- "name": "Shaving Stand",
- "xp": 30
- },
- {
- "level": 22,
- "icon": 8116,
- "name": "Oak Table",
- "xp": 240
- },
- {
- "level": 22,
- "icon": 8109,
- "name": "Oak Bench",
- "xp": 240
- },
- {
- "level": 23,
- "icon": 8225,
- "name": "Wooden Shelves 3",
- "xp": 147
- },
- {
- "level": 24,
- "icon": 8219,
- "name": "Small Oven",
- "xp": 80
- },
- {
- "level": 25,
- "icon": 8052,
- "name": "Oak Clock",
- "xp": 142
- },
- {
- "level": 26,
- "icon": 1909,
- "name": "Greenman's Ale",
- "xp": 184
- },
- {
- "level": 26,
- "icon": 8313,
- "name": "Oak Armchair",
- "xp": 180
- },
- {
- "level": 26,
- "icon": 8099,
- "name": "Rope Bell-Pull",
- "xp": 64
- },
- {
- "level": 27,
- "icon": 8231,
- "name": "Pump and Tub",
- "xp": 200
- },
- {
- "level": 27,
- "icon": 8039,
- "name": "Oak Drawers",
- "xp": 120
- },
- {
- "level": 29,
- "icon": 8320,
- "name": "Oak Bookcase",
- "xp": 180
- },
- {
- "level": 29,
- "icon": 8220,
- "name": "Large Oven",
- "xp": 100
- },
- {
- "level": 29,
- "icon": 8046,
- "name": "Oak Shaving Stand",
- "xp": 61
- },
- {
- "level": 30,
- "icon": 8176,
- "name": "Willow Tree",
- "xp": 100
- },
- {
- "level": 30,
- "icon": 8032,
- "name": "Oak Bed",
- "xp": 210
- },
- {
- "level": 30,
- "icon": 10976,
- "name": "Long Bone",
- "xp": 4500
- },
- {
- "level": 30,
- "icon": 10977,
- "name": "Curved Bone",
- "xp": 6750
- },
- {
- "level": 31,
- "icon": 8110,
- "name": "Carved Oak Bench",
- "xp": 240
- },
- {
- "level": 31,
- "icon": 8117,
- "name": "Carved Oak Table",
- "xp": 360
- },
- {
- "level": 32,
- "icon": 8118,
- "name": "Oak Table",
- "xp": 180
- },
- {
- "level": 32,
- "icon": 8023,
- "name": "Boxing Ring",
- "xp": 420
- },
- {
- "level": 33,
- "icon": 8234,
- "name": "Oak Larder",
- "xp": 480
- },
- {
- "level": 33,
- "icon": 8238,
- "name": "Cushioned Basket",
- "xp": 58
- },
- {
- "level": 33,
- "icon": 8326,
- "name": "Stone Fireplace",
- "xp": 40
- },
- {
- "level": 34,
- "icon": 8221,
- "name": "Steel Range",
- "xp": 120
- },
- {
- "level": 34,
- "icon": 8226,
- "name": "Oak Shelves 1",
- "xp": 240
- },
- {
- "level": 34,
- "icon": 8028,
- "name": "Glove Rack",
- "xp": 120
- },
- {
- "level": 34,
- "icon": 8033,
- "name": "Large Oak Bed",
- "xp": 330
- },
- {
- "level": 35,
- "icon": 8314,
- "name": "Teak Armchair",
- "xp": 180
- },
- {
- "level": 36,
- "icon": 1911,
- "name": "Dragon Bitter",
- "xp": 224
- },
- {
- "level": 36,
- "icon": 8103,
- "name": "Teak Decoration",
- "xp": 180
- },
- {
- "level": 37,
- "icon": 8100,
- "name": "Bell-Pull",
- "xp": 120
- },
- {
- "level": 37,
- "icon": 8047,
- "name": "Oak Dresser",
- "xp": 121
- },
- {
- "level": 38,
- "icon": 8112,
- "name": "Teak Bench",
- "xp": 360
- },
- {
- "level": 38,
- "icon": 8118,
- "name": "Teak Table",
- "xp": 360
- },
- {
- "level": 39,
- "icon": 8040,
- "name": "Oak Wardrobe",
- "xp": 180
- },
- {
- "level": 40,
- "icon": 8034,
- "name": "Teak Bed",
- "xp": 300
- },
- {
- "level": 40,
- "icon": 8321,
- "name": "Mahogany Bookcase",
- "xp": 420
- },
- {
- "level": 40,
- "icon": 8334,
- "name": "Oak Lectern",
- "xp": 60
- },
- {
- "level": 40,
- "icon": 8324,
- "name": "Opulent Curtains",
- "xp": 315
- },
- {
- "level": 41,
- "icon": 8024,
- "name": "Fencing Ring",
- "xp": 570
- },
- {
- "level": 41,
- "icon": 8341,
- "name": "Globe",
- "xp": 180
- },
- {
- "level": 42,
- "icon": 8222,
- "name": "Fancy Range",
- "xp": 160
- },
- {
- "level": 42,
- "icon": 8351,
- "name": "Crystal Ball",
- "xp": 280
- },
- {
- "level": 43,
- "icon": 8354,
- "name": "Alchemical Chart",
- "xp": 30
- },
- {
- "level": 43,
- "icon": 8235,
- "name": "Teak larder",
- "xp": 750
- },
- {
- "level": 44,
- "icon": 8348,
- "name": "Wooden Telescope",
- "xp": 121
- },
- {
- "level": 44,
- "icon": 8029,
- "name": "Weapons Rack",
- "xp": 180
- },
- {
- "level": 44,
- "icon": 8112,
- "name": "Carved Teak Bench",
- "xp": 360
- },
- {
- "level": 45,
- "icon": 8227,
- "name": "Oak Shelves 2",
- "xp": 240
- },
- {
- "level": 45,
- "icon": 8119,
- "name": "Carved Teak Table",
- "xp": 600
- },
- {
- "level": 45,
- "icon": 8035,
- "name": "Large Teak Bed",
- "xp": 480
- },
- {
- "level": 45,
- "icon": 8177,
- "name": "Maple Tree",
- "xp": 122
- },
- {
- "level": 46,
- "icon": 8048,
- "name": "Teak Dresser",
- "xp": 181
- },
- {
- "level": 47,
- "icon": 8232,
- "name": "Sink",
- "xp": 300
- },
- {
- "level": 47,
- "icon": 8335,
- "name": "Eagle Lectern",
- "xp": 120
- },
- {
- "level": 47,
- "icon": 8336,
- "name": "Demon Lectern",
- "xp": 120
- },
- {
- "level": 47,
- "icon": 21913,
- "name": "Mounted Mythical Cape",
- "xp": 370
- },
- {
- "level": 48,
- "icon": 5755,
- "name": "Chef's Delight",
- "xp": 224
- },
- {
- "level": 50,
- "icon": 8328,
- "name": "Teak Portal",
- "xp": 270
- },
- {
- "level": 50,
- "icon": 8315,
- "name": "Mahogany Armchair",
- "xp": 280
- },
- {
- "level": 50,
- "icon": 8342,
- "name": "Ornamental Globe",
- "xp": 270
- },
- {
- "level": 50,
- "icon": 8331,
- "name": "Teleport Focus",
- "xp": 40
- },
- {
- "level": 51,
- "icon": 8041,
- "name": "Teak Drawers",
- "xp": 180
- },
- {
- "level": 51,
- "icon": 8025,
- "name": "Combat Ring",
- "xp": 630
- },
- {
- "level": 52,
- "icon": 8118,
- "name": "Teak Kitchen Table",
- "xp": 270
- },
- {
- "level": 52,
- "icon": 8113,
- "name": "Mahogany Bench",
- "xp": 560
- },
- {
- "level": 52,
- "icon": 8120,
- "name": "Mahogany Table",
- "xp": 840
- },
- {
- "level": 53,
- "icon": 8036,
- "name": "4-Poster Bed",
- "xp": 450
- },
- {
- "level": 54,
- "icon": 8030,
- "name": "Extra Weapons Rack",
- "xp": 440
- },
- {
- "level": 54,
- "icon": 8352,
- "name": "Elemental Sphere",
- "xp": 580
- },
- {
- "level": 55,
- "icon": 8053,
- "name": "Teak Clock",
- "xp": 202
- },
- {
- "level": 56,
- "icon": 8104,
- "name": "Gilded Decoration",
- "xp": 1020
- },
- {
- "level": 56,
- "icon": 8049,
- "name": "Fancy Teak Dresser",
- "xp": 182
- },
- {
- "level": 56,
- "icon": 8228,
- "name": "Teak Shelves 1",
- "xp": 330
- },
- {
- "level": 57,
- "icon": 8337,
- "name": "Teak Eagle Lectern",
- "xp": 180
- },
- {
- "level": 57,
- "icon": 8338,
- "name": "Teak Demon Lectern",
- "xp": 180
- },
- {
- "level": 59,
- "icon": 8154,
- "name": "Limestone attack stone",
- "xp": 200
- },
- {
- "level": 59,
- "icon": 8343,
- "name": "Lunar Globe",
- "xp": 570
- },
- {
- "level": 60,
- "icon": 8037,
- "name": "Gilded 4-Poster Bed",
- "xp": 1330
- },
- {
- "level": 60,
- "icon": 8101,
- "name": "Posh Bell-Pull",
- "xp": 420
- },
- {
- "level": 60,
- "icon": 24479,
- "name": "Spice Rack",
- "xp": 374
- },
- {
- "level": 60,
- "icon": 8178,
- "name": "Yew Tree",
- "xp": 141
- },
- {
- "level": 61,
- "icon": 8114,
- "name": "Gilded Bench",
- "xp": 1760
- },
- {
- "level": 63,
- "icon": 8042,
- "name": "Teak Wardrobe",
- "xp": 270
- },
- {
- "level": 63,
- "icon": 8327,
- "name": "Marble Fireplace",
- "xp": 500
- },
- {
- "level": 63,
- "icon": 8355,
- "name": "Astronomical Chart",
- "xp": 45
- },
- {
- "level": 64,
- "icon": 8349,
- "name": "Teak Telescope",
- "xp": 181
- },
- {
- "level": 64,
- "icon": 8050,
- "name": "Mahogany Dresser",
- "xp": 281
- },
- {
- "level": 65,
- "icon": 8329,
- "name": "Mahogany Portal",
- "xp": 420
- },
- {
- "level": 65,
- "icon": 8332,
- "name": "Greater Focus",
- "xp": 500
- },
- {
- "level": 65,
- "icon": 8318,
- "name": "Opulent Rug",
- "xp": 360
- },
- {
- "level": 66,
- "icon": 20649,
- "name": "Teak Garden Bench",
- "xp": 540
- },
- {
- "level": 66,
- "icon": 8353,
- "name": "Crystal of Power",
- "xp": 890
- },
- {
- "level": 67,
- "icon": 8229,
- "name": "Teak Shelves 2",
- "xp": 930
- },
- {
- "level": 67,
- "icon": 8338,
- "name": "Mahogany Demon Lectern",
- "xp": 580
- },
- {
- "level": 67,
- "icon": 8338,
- "name": "Mahogany Eagle Lectern",
- "xp": 580
- },
- {
- "level": 68,
- "icon": 8344,
- "name": "Celestial Globe",
- "xp": 570
- },
- {
- "level": 70,
- "icon": 8172,
- "name": "Dungeon Entrance",
- "xp": 500
- },
- {
- "level": 71,
- "icon": 8026,
- "name": "Ranging Pedestals",
- "xp": 720
- },
- {
- "level": 72,
- "icon": 8121,
- "name": "Opulent Table",
- "xp": 3100
- },
- {
- "level": 74,
- "icon": 8122,
- "name": "Oak Door",
- "xp": 600
- },
- {
- "level": 74,
- "icon": 8051,
- "name": "Gilded Dresser",
- "xp": 582
- },
- {
- "level": 75,
- "icon": 8043,
- "name": "Mahogany Wardrobe",
- "xp": 420
- },
- {
- "level": 75,
- "icon": 8179,
- "name": "Magic Tree",
- "xp": 223
- },
- {
- "level": 77,
- "icon": 8341,
- "name": "Armillary Globe",
- "xp": 960
- },
- {
- "level": 77,
- "icon": 20650,
- "name": "Gnome Bench",
- "xp": 840
- },
- {
- "level": 80,
- "icon": 8330,
- "name": "Marble Portal",
- "xp": 1500
- },
- {
- "level": 80,
- "icon": 8333,
- "name": "Scrying Pool",
- "xp": 2000
- },
- {
- "level": 81,
- "icon": 8027,
- "name": "Balance Beam",
- "xp": 1000
- },
- {
- "level": 83,
- "icon": 8356,
- "name": "Infernal Chart",
- "xp": 60
- },
- {
- "level": 84,
- "icon": 8350,
- "name": "Mahogany Telescope",
- "xp": 281
- },
- {
- "level": 85,
- "icon": 8054,
- "name": "Gilded Clock",
- "xp": 602
- },
- {
- "level": 86,
- "icon": 8346,
- "name": "Small Orrery",
- "xp": 1320
- },
- {
- "level": 87,
- "icon": 8044,
- "name": "Gilded Wardrobe",
- "xp": 720
- },
- {
- "level": 95,
- "icon": 8347,
- "name": "Large Orrery",
- "xp": 1420
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json
deleted file mode 100644
index 8e86a25a65..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_cooking.json
+++ /dev/null
@@ -1,742 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 9436,
- "name": "Sinew",
- "xp": 3
- },
- {
- "level": 1,
- "icon": 315,
- "name": "Shrimps",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 2140,
- "name": "Cooked Chicken",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 2142,
- "name": "Cooked Meat",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 3228,
- "name": "Cooked Rabbit",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 319,
- "name": "Anchovies",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 325,
- "name": "Sardine",
- "xp": 40
- },
- {
- "level": 1,
- "icon": 3146,
- "name": "Poison Karambwan",
- "xp": 80
- },
- {
- "level": 1,
- "icon": 1861,
- "name": "Ugthanki Meat",
- "xp": 40
- },
- {
- "level": 1,
- "icon": 2309,
- "name": "Bread",
- "xp": 40
- },
- {
- "level": 5,
- "icon": 347,
- "name": "Herring",
- "xp": 50
- },
- {
- "level": 6,
- "icon": 2084,
- "name": "Fruit Blast",
- "xp": 50
- },
- {
- "level": 7,
- "icon": 6701,
- "name": "Baked Potato",
- "xp": 15
- },
- {
- "level": 7,
- "icon": 25654,
- "name": "Guppy",
- "xp": 12
- },
- {
- "level": 8,
- "icon": 2048,
- "name": "Pineapple Punch",
- "xp": 70
- },
- {
- "level": 9,
- "icon": 7072,
- "name": "Spicy Sauce",
- "xp": 25
- },
- {
- "level": 10,
- "icon": 355,
- "name": "Mackerel",
- "xp": 60
- },
- {
- "level": 10,
- "icon": 2325,
- "name": "Redberry Pie",
- "xp": 78
- },
- {
- "level": 10,
- "icon": 2217,
- "name": "Toad Crunchies",
- "xp": 100
- },
- {
- "level": 11,
- "icon": 7062,
- "name": "Chilli Con Carne",
- "xp": 55
- },
- {
- "level": 11,
- "icon": 9980,
- "name": "Roast Bird Meat",
- "xp": 62.5
- },
- {
- "level": 12,
- "icon": 3369,
- "name": "Thin Snail Meat",
- "xp": 70
- },
- {
- "level": 12,
- "icon": 2213,
- "name": "Spicy Crunchies",
- "xp": 100
- },
- {
- "level": 13,
- "icon": 7078,
- "name": "Scrambled Egg",
- "xp": 50
- },
- {
- "level": 14,
- "icon": 5763,
- "name": "Cider",
- "xp": 182
- },
- {
- "level": 14,
- "icon": 2205,
- "name": "Worm Crunchies",
- "xp": 104
- },
- {
- "level": 15,
- "icon": 333,
- "name": "Trout",
- "xp": 70
- },
- {
- "level": 16,
- "icon": 6293,
- "name": "Spider on stick",
- "xp": 80
- },
- {
- "level": 16,
- "icon": 6295,
- "name": "Spider on shaft",
- "xp": 80
- },
- {
- "level": 16,
- "icon": 7223,
- "name": "Roast Rabbit",
- "xp": 72.5
- },
- {
- "level": 16,
- "icon": 2209,
- "name": "Chocchip crunchies",
- "xp": 100
- },
- {
- "level": 17,
- "icon": 3371,
- "name": "Lean Snail Meat",
- "xp": 80
- },
- {
- "level": 18,
- "icon": 339,
- "name": "Cod",
- "xp": 75
- },
- {
- "level": 18,
- "icon": 2054,
- "name": "Wizard Blizzard",
- "xp": 110
- },
- {
- "level": 19,
- "icon": 1913,
- "name": "Dwarven Stout",
- "xp": 215
- },
- {
- "level": 20,
- "icon": 2080,
- "name": "Short Green Guy",
- "xp": 120
- },
- {
- "level": 20,
- "icon": 2327,
- "name": "Meat Pie",
- "xp": 110
- },
- {
- "level": 20,
- "icon": 351,
- "name": "Pike",
- "xp": 80
- },
- {
- "level": 20,
- "icon": 712,
- "name": "Cup of tea",
- "xp": 52
- },
- {
- "level": 20,
- "icon": 25660,
- "name": "Cavefish",
- "xp": 23
- },
- {
- "level": 21,
- "icon": 9988,
- "name": "Roast Beast Meat",
- "xp": 82.5
- },
- {
- "level": 21,
- "icon": 7521,
- "name": "Cooked Crab Meat",
- "xp": 100
- },
- {
- "level": 21,
- "icon": 2130,
- "name": "Pot of cream",
- "xp": 18
- },
- {
- "level": 22,
- "icon": 3373,
- "name": "Fat Snail Meat",
- "xp": 95
- },
- {
- "level": 23,
- "icon": 7064,
- "name": "Egg And Tomato",
- "xp": 50
- },
- {
- "level": 24,
- "icon": 1905,
- "name": "Asgarnian Ale",
- "xp": 248
- },
- {
- "level": 25,
- "icon": 329,
- "name": "Salmon",
- "xp": 90
- },
- {
- "level": 25,
- "icon": 2003,
- "name": "Stew",
- "xp": 117
- },
- {
- "level": 25,
- "icon": 2277,
- "name": "Fruit Batta",
- "xp": 150
- },
- {
- "level": 26,
- "icon": 2255,
- "name": "Toad Batta",
- "xp": 152
- },
- {
- "level": 27,
- "icon": 2253,
- "name": "Worm Batta",
- "xp": 154
- },
- {
- "level": 28,
- "icon": 2281,
- "name": "Vegetable Batta",
- "xp": 156
- },
- {
- "level": 28,
- "icon": 5988,
- "name": "Sweetcorn",
- "xp": 104
- },
- {
- "level": 28,
- "icon": 3381,
- "name": "Cooked Slimy Eel",
- "xp": 95
- },
- {
- "level": 29,
- "icon": 7170,
- "name": "Mud Pie",
- "xp": 128
- },
- {
- "level": 29,
- "icon": 1909,
- "name": "Greenman's ale",
- "xp": 281
- },
- {
- "level": 29,
- "icon": 2259,
- "name": "Cheese and Tomato Batta",
- "xp": 158
- },
- {
- "level": 30,
- "icon": 361,
- "name": "Tuna",
- "xp": 100
- },
- {
- "level": 30,
- "icon": 2323,
- "name": "Apple Pie",
- "xp": 130
- },
- {
- "level": 30,
- "icon": 2191,
- "name": "Worm Hole",
- "xp": 170
- },
- {
- "level": 30,
- "icon": 3144,
- "name": "Cooked Karambwan",
- "xp": 190
- },
- {
- "level": 30,
- "icon": 2878,
- "name": "Roasted Chompy",
- "xp": 100
- },
- {
- "level": 31,
- "icon": 7530,
- "name": "Fishcake",
- "xp": 100
- },
- {
- "level": 32,
- "icon": 2092,
- "name": "Drunk Dragon",
- "xp": 160
- },
- {
- "level": 33,
- "icon": 2074,
- "name": "Choc Saturday",
- "xp": 170
- },
- {
- "level": 33,
- "icon": 25666,
- "name": "Tetra",
- "xp": 31
- },
- {
- "level": 34,
- "icon": 7178,
- "name": "Garden Pie",
- "xp": 138
- },
- {
- "level": 34,
- "icon": 1907,
- "name": "Wizard's mind bomb",
- "xp": 314
- },
- {
- "level": 35,
- "icon": 1993,
- "name": "Jug Of Wine",
- "xp": 200
- },
- {
- "level": 35,
- "icon": 2289,
- "name": "Plain Pizza",
- "xp": 143
- },
- {
- "level": 35,
- "icon": 10136,
- "name": "Rainbow Fish",
- "xp": 110
- },
- {
- "level": 35,
- "icon": 2195,
- "name": "Veg ball",
- "xp": 175
- },
- {
- "level": 37,
- "icon": 2064,
- "name": "Blurberry Special",
- "xp": 180
- },
- {
- "level": 38,
- "icon": 5003,
- "name": "Cave Eel",
- "xp": 115
- },
- {
- "level": 38,
- "icon": 6697,
- "name": "Pat of butter",
- "xp": 40.5
- },
- {
- "level": 39,
- "icon": 1911,
- "name": "Dragon Bitter",
- "xp": 347
- },
- {
- "level": 39,
- "icon": 6703,
- "name": "Potato with butter",
- "xp": 40
- },
- {
- "level": 40,
- "icon": 379,
- "name": "Lobster",
- "xp": 120
- },
- {
- "level": 40,
- "icon": 1891,
- "name": "Cake",
- "xp": 180
- },
- {
- "level": 40,
- "icon": 2187,
- "name": "Tangled toad's legs",
- "xp": 185
- },
- {
- "level": 41,
- "icon": 7054,
- "name": "Chilli Potato",
- "xp": 165.5
- },
- {
- "level": 41,
- "icon": 7568,
- "name": "Cooked Jubbly",
- "xp": 160
- },
- {
- "level": 42,
- "icon": 2185,
- "name": "Chocolate Bomb",
- "xp": 190
- },
- {
- "level": 42,
- "icon": 7084,
- "name": "Fried Onions",
- "xp": 60
- },
- {
- "level": 43,
- "icon": 365,
- "name": "Bass",
- "xp": 130
- },
- {
- "level": 44,
- "icon": 2955,
- "name": "Moonlight Mead",
- "xp": 380
- },
- {
- "level": 45,
- "icon": 373,
- "name": "Swordfish",
- "xp": 140
- },
- {
- "level": 45,
- "icon": 2293,
- "name": "Meat Pizza",
- "xp": 169
- },
- {
- "level": 46,
- "icon": 7082,
- "name": "Fried Mushrooms",
- "xp": 60
- },
- {
- "level": 46,
- "icon": 25672,
- "name": "Catfish",
- "xp": 43
- },
- {
- "level": 47,
- "icon": 7188,
- "name": "Fish Pie",
- "xp": 164
- },
- {
- "level": 47,
- "icon": 6705,
- "name": "Potato with cheese",
- "xp": 40
- },
- {
- "level": 48,
- "icon": 1985,
- "name": "Cheese",
- "xp": 64
- },
- {
- "level": 49,
- "icon": 5751,
- "name": "Axeman's folly",
- "xp": 413
- },
- {
- "level": 50,
- "icon": 2343,
- "name": "Cooked Oomlie Wrap",
- "xp": 30
- },
- {
- "level": 50,
- "icon": 1897,
- "name": "Chocolate Cake",
- "xp": 210
- },
- {
- "level": 51,
- "icon": 7056,
- "name": "Egg Potato",
- "xp": 195.5
- },
- {
- "level": 52,
- "icon": 19662,
- "name": "Botanical Pie",
- "xp": 180
- },
- {
- "level": 53,
- "icon": 2149,
- "name": "Lava Eel",
- "xp": 30
- },
- {
- "level": 54,
- "icon": 5755,
- "name": "Chef's Delight",
- "xp": 446
- },
- {
- "level": 55,
- "icon": 2297,
- "name": "Anchovy Pizza",
- "xp": 182
- },
- {
- "level": 57,
- "icon": 7066,
- "name": "Mushroom & onion",
- "xp": 120
- },
- {
- "level": 58,
- "icon": 1883,
- "name": "Ugthanki Kebab (Fresh)",
- "xp": 80
- },
- {
- "level": 58,
- "icon": 1865,
- "name": "Pitta Bread",
- "xp": 40
- },
- {
- "level": 59,
- "icon": 5759,
- "name": "Slayer's respite",
- "xp": 479
- },
- {
- "level": 60,
- "icon": 2011,
- "name": "Curry",
- "xp": 280
- },
- {
- "level": 60,
- "icon": 21690,
- "name": "Mushroom Pie",
- "xp": 200
- },
- {
- "level": 62,
- "icon": 7946,
- "name": "Monkfish",
- "xp": 150
- },
- {
- "level": 64,
- "icon": 7058,
- "name": "Mushroom Potato",
- "xp": 270.5
- },
- {
- "level": 65,
- "icon": 2301,
- "name": "Pineapple Pizza",
- "xp": 188
- },
- {
- "level": 65,
- "icon": 245,
- "name": "Wine of Zamorak",
- "xp": 200
- },
- {
- "level": 67,
- "icon": 7068,
- "name": "Tuna And Corn",
- "xp": 204
- },
- {
- "level": 68,
- "icon": 7060,
- "name": "Tuna Potato",
- "xp": 309.5
- },
- {
- "level": 70,
- "icon": 7198,
- "name": "Admiral Pie",
- "xp": 210
- },
- {
- "level": 72,
- "icon": 13339,
- "name": "Sacred Eel",
- "xp": 109
- },
- {
- "level": 73,
- "icon": 22795,
- "name": "Dragonfruit Pie",
- "xp": 220
- },
- {
- "level": 80,
- "icon": 385,
- "name": "Shark",
- "xp": 210
- },
- {
- "level": 82,
- "icon": 397,
- "name": "Sea Turtle",
- "xp": 211.3
- },
- {
- "level": 84,
- "icon": 13441,
- "name": "Anglerfish",
- "xp": 230
- },
- {
- "level": 85,
- "icon": 7208,
- "name": "Wild Pie",
- "xp": 240
- },
- {
- "level": 90,
- "icon": 11936,
- "name": "Dark Crab",
- "xp": 215
- },
- {
- "level": 91,
- "icon": 391,
- "name": "Manta Ray",
- "xp": 216.3
- },
- {
- "level": 95,
- "icon": 7218,
- "name": "Summer Pie",
- "xp": 260
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json
deleted file mode 100644
index d8e6c6e9d2..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json
+++ /dev/null
@@ -1,809 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 1759,
- "name": "Ball Of Wool",
- "xp": 2.5
- },
- {
- "level": 1,
- "icon": 1787,
- "name": "Unfired pot",
- "xp": 6.3
- },
- {
- "level": 1,
- "icon": 1931,
- "name": "Pot",
- "xp": 6.3
- },
- {
- "level": 1,
- "icon": 1059,
- "name": "Leather Gloves",
- "xp": 13.8
- },
- {
- "level": 1,
- "icon": 1609,
- "name": "Opal",
- "xp": 15
- },
- {
- "level": 1,
- "icon": 21081,
- "name": "Opal Ring",
- "xp": 10
- },
- {
- "level": 1,
- "icon": 1775,
- "name": "Molten Glass",
- "xp": 20
- },
- {
- "level": 1,
- "icon": 1919,
- "name": "Beer Glass",
- "xp": 17.5
- },
- {
- "level": 4,
- "icon": 4527,
- "name": "Empty Candle Lantern",
- "xp": 19
- },
- {
- "level": 5,
- "icon": 1635,
- "name": "Gold Ring",
- "xp": 15
- },
- {
- "level": 5,
- "icon": 21512,
- "name": "Bird House",
- "xp": 15
- },
- {
- "level": 6,
- "icon": 1654,
- "name": "Gold Necklace",
- "xp": 20
- },
- {
- "level": 7,
- "icon": 1061,
- "name": "Leather Boots",
- "xp": 16.3
- },
- {
- "level": 7,
- "icon": 1789,
- "name": "Unfired pie dish",
- "xp": 15
- },
- {
- "level": 7,
- "icon": 2313,
- "name": "Pie dish",
- "xp": 10
- },
- {
- "level": 7,
- "icon": 11068,
- "name": "Gold Bracelet",
- "xp": 25
- },
- {
- "level": 8,
- "icon": 1791,
- "name": "Unfired bowl",
- "xp": 18
- },
- {
- "level": 8,
- "icon": 1923,
- "name": "Bowl",
- "xp": 15
- },
- {
- "level": 8,
- "icon": 1673,
- "name": "Gold Amulet (U)",
- "xp": 30
- },
- {
- "level": 9,
- "icon": 1167,
- "name": "Cowl",
- "xp": 18.5
- },
- {
- "level": 10,
- "icon": 9438,
- "name": "Crossbow String",
- "xp": 15
- },
- {
- "level": 10,
- "icon": 1777,
- "name": "Bow String",
- "xp": 15
- },
- {
- "level": 11,
- "icon": 1063,
- "name": "Leather Vambraces",
- "xp": 22
- },
- {
- "level": 12,
- "icon": 4525,
- "name": "Empty Oil Lamp",
- "xp": 25
- },
- {
- "level": 13,
- "icon": 1611,
- "name": "Jade",
- "xp": 20
- },
- {
- "level": 13,
- "icon": 21084,
- "name": "Jade Ring",
- "xp": 32
- },
- {
- "level": 14,
- "icon": 1129,
- "name": "Leather Body",
- "xp": 25
- },
- {
- "level": 15,
- "icon": 21515,
- "name": "Oak Bird House",
- "xp": 20
- },
- {
- "level": 16,
- "icon": 1613,
- "name": "Red Topaz",
- "xp": 25
- },
- {
- "level": 16,
- "icon": 21087,
- "name": "Topaz Ring",
- "xp": 35
- },
- {
- "level": 16,
- "icon": 1718,
- "name": "Holy Symbol",
- "xp": 50
- },
- {
- "level": 16,
- "icon": 21090,
- "name": "Opal Necklace",
- "xp": 35
- },
-
- {
- "level": 17,
- "icon": 1724,
- "name": "Unholy Symbol",
- "xp": 50
- },
- {
- "level": 18,
- "icon": 1095,
- "name": "Leather Chaps",
- "xp": 27
- },
- {
- "level": 19,
- "icon": 5352,
- "name": "Unfired plant pot",
- "xp": 20
- },
- {
- "level": 19,
- "icon": 5350,
- "name": "Empty plant pot",
- "xp": 17.5
- },
- {
- "level": 19,
- "icon": 6038,
- "name": "Magic String",
- "xp": 30
- },
- {
- "level": 20,
- "icon": 1637,
- "name": "Sapphire Ring",
- "xp": 40
- },
- {
- "level": 20,
- "icon": 1607,
- "name": "Sapphire",
- "xp": 50
- },
- {
- "level": 21,
- "icon": 5418,
- "name": "Empty Sack",
- "xp": 38
- },
- {
- "level": 22,
- "icon": 1656,
- "name": "Sapphire Necklace",
- "xp": 55
- },
- {
- "level": 22,
- "icon": 21117,
- "name": "Opal Bracelet",
- "xp": 45
- },
- {
- "level": 23,
- "icon": 11071,
- "name": "Sapphire Bracelet",
- "xp": 60
- },
- {
- "level": 23,
- "icon": 5525,
- "name": "Tiara",
- "xp": 52.5
- },
- {
- "level": 24,
- "icon": 1675,
- "name": "Sapphire Amulet (U)",
- "xp": 65
- },
- {
- "level": 25,
- "icon": 4438,
- "name": "Unfired pot lid",
- "xp": 20
- },
- {
- "level": 25,
- "icon": 4440,
- "name": "Pot lid",
- "xp": 20
- },
- {
- "level": 25,
- "icon": 21093,
- "name": "Jade Necklace",
- "xp": 54
- },
- {
- "level": 25,
- "icon": 21518,
- "name": "Willow Bird House",
- "xp": 25
- },
- {
- "level": 26,
- "icon": 6209,
- "name": "Drift Net",
- "xp": 55
- },
- {
- "level": 27,
- "icon": 1605,
- "name": "Emerald",
- "xp": 67.5
- },
- {
- "level": 27,
- "icon": 1639,
- "name": "Emerald Ring",
- "xp": 55
- },
- {
- "level": 27,
- "icon": 21099,
- "name": "Opal Amulet (U)",
- "xp": 55
- },
- {
- "level": 28,
- "icon": 1131,
- "name": "Hardleather Body",
- "xp": 35
- },
- {
- "level": 29,
- "icon": 1658,
- "name": "Emerald Necklace",
- "xp": 60
- },
- {
- "level": 29,
- "icon": 21120,
- "name": "Jade Bracelet",
- "xp": 60
- },
- {
- "level": 30,
- "icon": 11076,
- "name": "Emerald Bracelet",
- "xp": 65
- },
- {
- "level": 30,
- "icon": 954,
- "name": "Rope",
- "xp": 25
- },
- {
- "level": 31,
- "icon": 1677,
- "name": "Emerald Amulet (U)",
- "xp": 70
- },
- {
- "level": 32,
- "icon": 10077,
- "name": "Spiky Vambraces",
- "xp": 6
- },
- {
- "level": 32,
- "icon": 21096,
- "name": "Topaz Necklace",
- "xp": 70
- },
- {
- "level": 33,
- "icon": 229,
- "name": "Vial",
- "xp": 35
- },
- {
- "level": 34,
- "icon": 1603,
- "name": "Ruby",
- "xp": 85
- },
- {
- "level": 34,
- "icon": 1641,
- "name": "Ruby Ring",
- "xp": 70
- },
- {
- "level": 34,
- "icon": 21102,
- "name": "Jade Amulet (U)",
- "xp": 70
- },
- {
- "level": 35,
- "icon": 6235,
- "name": "Broodoo shield",
- "xp": 100
- },
- {
- "level": 35,
- "icon": 21521,
- "name": "Teak Bird House",
- "xp": 30
- },
- {
- "level": 36,
- "icon": 5376,
- "name": "Basket",
- "xp": 56
- },
- {
- "level": 38,
- "icon": 1169,
- "name": "Coif",
- "xp": 37
- },
- {
- "level": 38,
- "icon": 21123,
- "name": "Topaz Bracelet",
- "xp": 75
- },
- {
- "level": 40,
- "icon": 1660,
- "name": "Ruby Necklace",
- "xp": 75
- },
- {
- "level": 41,
- "icon": 22269,
- "name": "Hard leather shield",
- "xp": 70
- },
- {
- "level": 42,
- "icon": 11085,
- "name": "Ruby Bracelet",
- "xp": 80
- },
- {
- "level": 42,
- "icon": 6668,
- "name": "Fishbowl",
- "xp": 42.5
- },
- {
- "level": 43,
- "icon": 1601,
- "name": "Diamond",
- "xp": 107.5
- },
- {
- "level": 43,
- "icon": 1643,
- "name": "Diamond Ring",
- "xp": 85
- },
- {
- "level": 45,
- "icon": 21105,
- "name": "Topaz Amulet (U)",
- "xp": 80
- },
- {
- "level": 45,
- "icon": 6328,
- "name": "Snakeskin boots",
- "xp": 30
- },
- {
- "level": 45,
- "icon": 22192,
- "name": "Maple Bird House",
- "xp": 35
- },
- {
- "level": 46,
- "icon": 567,
- "name": "Unpowered Orb",
- "xp": 52.5
- },
- {
- "level": 47,
- "icon": 6330,
- "name": "Snakeskin vambraces",
- "xp": 35
- },
- {
- "level": 48,
- "icon": 6326,
- "name": "Snakeskin bandana",
- "xp": 45
- },
- {
- "level": 49,
- "icon": 4542,
- "name": "Lantern Lens",
- "xp": 55
- },
- {
- "level": 50,
- "icon": 1679,
- "name": "Ruby Amulet (U)",
- "xp": 85
- },
- {
- "level": 50,
- "icon": 22195,
- "name": "Mahogany Bird House",
- "xp": 40
- },
- {
- "level": 51,
- "icon": 6324,
- "name": "Snakeskin chaps",
- "xp": 50
- },
- {
- "level": 53,
- "icon": 6322,
- "name": "Snakeskin body",
- "xp": 55
- },
- {
- "level": 54,
- "icon": 1395,
- "name": "Water Battlestaff",
- "xp": 100
- },
- {
- "level": 55,
- "icon": 1645,
- "name": "Dragonstone Ring",
- "xp": 100
- },
- {
- "level": 55,
- "icon": 1615,
- "name": "Dragonstone",
- "xp": 137.5
- },
- {
- "level": 56,
- "icon": 1662,
- "name": "Diamond Necklace",
- "xp": 90
- },
- {
- "level": 56,
- "icon": 22272,
- "name": "Snakeskin shield",
- "xp": 100
- },
- {
- "level": 57,
- "icon": 1065,
- "name": "Green D'hide Vamb",
- "xp": 62
- },
- {
- "level": 58,
- "icon": 11092,
- "name": "Diamond Bracelet",
- "xp": 95
- },
- {
- "level": 58,
- "icon": 1399,
- "name": "Earth Battlestaff",
- "xp": 112.5
- },
- {
- "level": 60,
- "icon": 1099,
- "name": "Green D'hide Chaps",
- "xp": 124
- },
- {
- "level": 60,
- "icon": 22198,
- "name": "Yew Bird House",
- "xp": 45
- },
- {
- "level": 62,
- "icon": 1393,
- "name": "Fire Battlestaff",
- "xp": 125
- },
- {
- "level": 62,
- "icon": 22275,
- "name": "Green D'hide Shield",
- "xp": 124
- },
- {
- "level": 63,
- "icon": 1135,
- "name": "Green D'hide Body",
- "xp": 186
- },
- {
- "level": 66,
- "icon": 1397,
- "name": "Air Battlestaff",
- "xp": 137.5
- },
- {
- "level": 66,
- "icon": 2487,
- "name": "Blue D'hide Vamb",
- "xp": 70
- },
- {
- "level": 67,
- "icon": 6575,
- "name": "Onyx Ring",
- "xp": 115
- },
- {
- "level": 67,
- "icon": 6573,
- "name": "Onyx",
- "xp": 167.5
- },
- {
- "level": 68,
- "icon": 2493,
- "name": "Blue D'hide Chaps",
- "xp": 140
- },
- {
- "level": 69,
- "icon": 22278,
- "name": "Blue D'hide Shield",
- "xp": 140
- },
- {
- "level": 70,
- "icon": 1681,
- "name": "Diamond Amulet (U)",
- "xp": 100
- },
- {
- "level": 71,
- "icon": 2499,
- "name": "Blue D'hide Body",
- "xp": 210
- },
- {
- "level": 72,
- "icon": 1664,
- "name": "Dragonstone Necklace",
- "xp": 105
- },
- {
- "level": 73,
- "icon": 2489,
- "name": "Red D'hide Vamb",
- "xp": 78
- },
- {
- "level": 74,
- "icon": 11115,
- "name": "Dragonstone Bracelet",
- "xp": 110
- },
- {
- "level": 75,
- "icon": 2495,
- "name": "Red D'hide Chaps",
- "xp": 156
- },
- {
- "level": 75,
- "icon": 22201,
- "name": "Magic Bird House",
- "xp": 50
- },
- {
- "level": 76,
- "icon": 22281,
- "name": "Red D'hide Shield",
- "xp": 156
- },
- {
- "level": 77,
- "icon": 2501,
- "name": "Red D'hide Body",
- "xp": 234
- },
- {
- "level": 79,
- "icon": 2491,
- "name": "Black D'hide Vamb",
- "xp": 86
- },
- {
- "level": 80,
- "icon": 1683,
- "name": "Dragonstone Amulet (U)",
- "xp": 150
- },
- {
- "level": 82,
- "icon": 2497,
- "name": "Black D'hide Chaps",
- "xp": 172
- },
- {
- "level": 82,
- "icon": 6577,
- "name": "Onyx Necklace",
- "xp": 120
- },
- {
- "level": 83,
- "icon": 21338,
- "name": "Amethyst Bolt Tips",
- "xp": 4
- },
- {
- "level": 83,
- "icon": 22284,
- "name": "Black D'hide Shield",
- "xp": 172
- },
- {
- "level": 84,
- "icon": 2503,
- "name": "Black D'hide Body",
- "xp": 258
- },
- {
- "level": 84,
- "icon": 11130,
- "name": "Onyx Bracelet",
- "xp": 125
- },
- {
- "level": 85,
- "icon": 21350,
- "name": "Amethyst Arrowtips",
- "xp": 4
- },
- {
- "level": 87,
- "icon": 21352,
- "name": "Amethyst Javelin Heads",
- "xp": 12
- },
- {
- "level": 87,
- "icon": 10973,
- "name": "Light Orb",
- "xp": 70
- },
- {
- "level": 89,
- "icon": 25853,
- "name": "Amethyst Dart Tip",
- "xp": 7.5
- },
- {
- "level": 89,
- "icon": 19538,
- "name": "Zenyte Ring",
- "xp": 150
- },
- {
- "level": 89,
- "icon": 19493,
- "name": "Zenyte",
- "xp": 200
- },
- {
- "level": 90,
- "icon": 6579,
- "name": "Onyx Amulet (U)",
- "xp": 165
- },
- {
- "level": 90,
- "icon": 22204,
- "name": "Redwood Bird House",
- "xp": 55
- },
- {
- "level": 92,
- "icon": 19535,
- "name": "Zenyte Necklace",
- "xp": 165
- },
- {
- "level": 95,
- "icon": 19492,
- "name": "Zenyte Bracelet",
- "xp": 180
- },
- {
- "level": 98,
- "icon": 19501,
- "name": "Zenyte Amulet (U)",
- "xp": 200
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json
deleted file mode 100644
index 70ac3b3444..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json
+++ /dev/null
@@ -1,388 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Farmer's Outfit (+2.5%)",
- "value": 0.025
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 8180,
- "name": "Plant",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8186,
- "name": "Fern (big plant)",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8189,
- "name": "Short Plant",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8183,
- "name": "Dock Leaf",
- "xp": 31
- },
- {
- "level": 1,
- "icon": 8181,
- "name": "Small Fern",
- "xp": 70
- },
- {
- "level": 1,
- "icon": 8184,
- "name": "Thistle",
- "xp": 70
- },
- {
- "level": 1,
- "icon": 8187,
- "name": "Bush",
- "xp": 70
- },
- {
- "level": 1,
- "icon": 8190,
- "name": "Large Leaf Bush",
- "xp": 70
- },
- {
- "level": 1,
- "icon": 8191,
- "name": "Huge Plant",
- "xp": 100
- },
- {
- "level": 1,
- "icon": 8188,
- "name": "Tall Plant",
- "xp": 100
- },
- {
- "level": 1,
- "icon": 8185,
- "name": "Reeds",
- "xp": 100
- },
- {
- "level": 1,
- "icon": 8182,
- "name": "Fern (small plant)",
- "xp": 100
- },
- {
- "level": 1,
- "icon": 10847,
- "name": "Winter Sq'irk",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 10844,
- "name": "Spring Sq'irk",
- "xp": 40
- },
- {
- "level": 1,
- "icon": 10846,
- "name": "Autumn Sq'irk",
- "xp": 50
- },
- {
- "level": 1,
- "icon": 10845,
- "name": "Summer Sq'irk",
- "xp": 60
- },
- {
- "level": 1,
- "icon": 1942,
- "name": "Potatoes",
- "xp": 8
- },
- {
- "level": 5,
- "icon": 1957,
- "name": "Onions",
- "xp": 10
- },
- {
- "level": 7,
- "icon": 1965,
- "name": "Cabbages",
- "xp": 10
- },
- {
- "level": 9,
- "icon": 249,
- "name": "Guam Leaf",
- "xp": 11
- },
- {
- "level": 12,
- "icon": 1982,
- "name": "Tomatoes",
- "xp": 12.5
- },
- {
- "level": 14,
- "icon": 251,
- "name": "Marrentill",
- "xp": 13.5
- },
- {
- "level": 15,
- "icon": 1521,
- "name": "Oak Tree",
- "xp": 481.3
- },
- {
- "level": 19,
- "icon": 253,
- "name": "Tarromin",
- "xp": 16
- },
- {
- "level": 20,
- "icon": 5986,
- "name": "Sweetcorn",
- "xp": 17
- },
- {
- "level": 23,
- "icon": 21504,
- "name": "Giant seaweed",
- "xp": 21
- },
- {
- "level": 26,
- "icon": 255,
- "name": "Harralander",
- "xp": 21.5
- },
- {
- "level": 26,
- "icon": 225,
- "name": "Limpwurt Plant",
- "xp": 40
- },
- {
- "level": 27,
- "icon": 1955,
- "name": "Apple Tree",
- "xp": 1221.5
- },
- {
- "level": 29,
- "icon": 3261,
- "name": "Goutweed",
- "xp": 105
- },
- {
- "level": 30,
- "icon": 1519,
- "name": "Willow Tree",
- "xp": 1481.5
- },
- {
- "level": 31,
- "icon": 5504,
- "name": "Strawberries",
- "xp": 26
- },
- {
- "level": 32,
- "icon": 257,
- "name": "Ranarr Weed",
- "xp": 27
- },
- {
- "level": 33,
- "icon": 1963,
- "name": "Banana Tree",
- "xp": 1778.5
- },
- {
- "level": 35,
- "icon": 6333,
- "name": "Teak Tree",
- "xp": 7315
- },
- {
- "level": 38,
- "icon": 2998,
- "name": "Toadflax",
- "xp": 34
- },
- {
- "level": 39,
- "icon": 2108,
- "name": "Orange Tree",
- "xp": 2505.7
- },
- {
- "level": 42,
- "icon": 5970,
- "name": "Curry Tree",
- "xp": 2946.9
- },
- {
- "level": 44,
- "icon": 259,
- "name": "Irit Leaf",
- "xp": 43
- },
- {
- "level": 45,
- "icon": 1517,
- "name": "Maple Tree",
- "xp": 3448.4
- },
- {
- "level": 47,
- "icon": 5982,
- "name": "Watermelons",
- "xp": 49
- },
- {
- "level": 50,
- "icon": 261,
- "name": "Avantoe",
- "xp": 54.5
- },
- {
- "level": 51,
- "icon": 2114,
- "name": "Pineapple Plant",
- "xp": 4662.7
- },
- {
- "level": 55,
- "icon": 6332,
- "name": "Mahogany Tree",
- "xp": 15783
- },
- {
- "level": 56,
- "icon": 263,
- "name": "Kwuarm",
- "xp": 69
- },
- {
- "level": 57,
- "icon": 5972,
- "name": "Papaya Tree",
- "xp": 6218.4
- },
- {
- "level": 58,
- "icon": 22932,
- "name": "White lily",
- "xp": 292
- },
- {
- "level": 60,
- "icon": 1515,
- "name": "Yew Tree",
- "xp": 7150.9
- },
- {
- "level": 61,
- "icon": 231,
- "name": "Snape grass",
- "xp": 82
- },
- {
- "level": 62,
- "icon": 3000,
- "name": "Snapdragon",
- "xp": 87.5
- },
- {
- "level": 65,
- "icon": 23044,
- "name": "Hespori",
- "xp": 12662
- },
- {
- "level": 67,
- "icon": 265,
- "name": "Cadantine",
- "xp": 106.5
- },
- {
- "level": 68,
- "icon": 5974,
- "name": "Palm Tree",
- "xp": 10260.6
- },
- {
- "level": 72,
- "icon": 5980,
- "name": "Calquat Tree",
- "xp": 12225.5
- },
- {
- "level": 73,
- "icon": 2481,
- "name": "Lantadyme",
- "xp": 134.5
- },
- {
- "level": 74,
- "icon": 23962,
- "name": "Crystal Tree",
- "xp": 13366
- },
- {
- "level": 75,
- "icon": 1513,
- "name": "Magic Tree",
- "xp": 13913.8
- },
- {
- "level": 79,
- "icon": 267,
- "name": "Dwarf Weed",
- "xp": 170.5
- },
- {
- "level": 81,
- "icon": 22929,
- "name": "Dragonfruit Tree",
- "xp": 17895
- },
- {
- "level": 83,
- "icon": 6063,
- "name": "Spirit Tree",
- "xp": 19501.3
- },
- {
- "level": 85,
- "icon": 22935,
- "name": "Celastrus Tree",
- "xp": 14334
- },
- {
- "level": 85,
- "icon": 269,
- "name": "Torstol",
- "xp": 199.5
- },
- {
- "level": 90,
- "icon": 19669,
- "name": "Redwood Tree",
- "xp": 22680
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json
deleted file mode 100644
index 37fe236443..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_firemaking.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Pyromancer Outfit (+2.5%)",
- "value": 0.025
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 1511,
- "name": "Logs",
- "xp": 40
- },
- {
- "level": 1,
- "icon": 2862,
- "name": "Achey Tree Logs",
- "xp": 40
- },
- {
- "level": 15,
- "icon": 1521,
- "name": "Oak Logs",
- "xp": 60
- },
- {
- "level": 30,
- "icon": 1519,
- "name": "Willow Logs",
- "xp": 90
- },
- {
- "level": 35,
- "icon": 6333,
- "name": "Teak Logs",
- "xp": 105
- },
- {
- "level": 42,
- "icon": 10810,
- "name": "Arctic Pine Logs",
- "xp": 125
- },
- {
- "level": 45,
- "icon": 1517,
- "name": "Maple Logs",
- "xp": 135
- },
- {
- "level": 50,
- "icon": 6332,
- "name": "Mahogany Logs",
- "xp": 157.5
- },
- {
- "level": 60,
- "icon": 1515,
- "name": "Yew Logs",
- "xp": 202.5
- },
- {
- "level": 62,
- "icon": 24691,
- "name": "Blisterwood Logs",
- "xp": 96
- },
- {
- "level": 75,
- "icon": 1513,
- "name": "Magic Logs",
- "xp": 303.8
- },
- {
- "level": 90,
- "icon": 19669,
- "name": "Redwood Logs",
- "xp": 350
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json
deleted file mode 100644
index 730be09d00..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fishing.json
+++ /dev/null
@@ -1,214 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Anglers Outfit (+2.5%)",
- "value": 0.025
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 317,
- "name": "Raw Shrimps",
- "xp": 10
- },
- {
- "level": 5,
- "icon": 327,
- "name": "Raw Sardine",
- "xp": 20
- },
- {
- "level": 5,
- "icon": 3150,
- "name": "Raw Karambwanji",
- "xp": 5
- },
- {
- "level": 7,
- "icon": 25652,
- "name": "Raw Guppy",
- "xp": 8
- },
- {
- "level": 10,
- "icon": 345,
- "name": "Raw Herring",
- "xp": 30
- },
- {
- "level": 15,
- "icon": 321,
- "name": "Raw Anchovies",
- "xp": 40
- },
- {
- "level": 16,
- "icon": 353,
- "name": "Raw Mackerel",
- "xp": 20
- },
- {
- "level": 20,
- "icon": 335,
- "name": "Raw Trout",
- "xp": 50
- },
- {
- "level": 20,
- "icon": 25658,
- "name": "Raw Cavefish",
- "xp": 16
- },
- {
- "level": 23,
- "icon": 341,
- "name": "Raw Cod",
- "xp": 45
- },
- {
- "level": 25,
- "icon": 349,
- "name": "Raw Pike",
- "xp": 60
- },
- {
- "level": 28,
- "icon": 3379,
- "name": "Raw Slimy Eel",
- "xp": 65
- },
- {
- "level": 30,
- "icon": 331,
- "name": "Raw Salmon",
- "xp": 70
- },
- {
- "level": 33,
- "icon": 25664,
- "name": "Raw Tetra",
- "xp": 24
- },
- {
- "level": 35,
- "icon": 359,
- "name": "Raw Tuna",
- "xp": 80
- },
- {
- "level": 38,
- "icon": 10138,
- "name": "Raw Rainbow Fish",
- "xp": 80
- },
- {
- "level": 38,
- "icon": 5001,
- "name": "Raw Cave Eel",
- "xp": 80
- },
- {
- "level": 40,
- "icon": 377,
- "name": "Raw Lobster",
- "xp": 90
- },
- {
- "level": 46,
- "icon": 363,
- "name": "Raw Bass",
- "xp": 100
- },
- {
- "level": 46,
- "icon": 25670,
- "name": "Raw Catfish",
- "xp": 33
- },
- {
- "level": 48,
- "icon": 11328,
- "name": "Leaping Trout",
- "xp": 50
- },
- {
- "level": 50,
- "icon": 371,
- "name": "Raw Swordfish",
- "xp": 100
- },
- {
- "level": 58,
- "icon": 11330,
- "name": "Leaping Salmon",
- "xp": 70
- },
- {
- "level": 62,
- "icon": 7944,
- "name": "Raw Monkfish",
- "xp": 120
- },
- {
- "level": 65,
- "icon": 3142,
- "name": "Raw Karambwan",
- "xp": 50
- },
- {
- "level": 70,
- "icon": 11332,
- "name": "Leaping Sturgeon",
- "xp": 80
- },
- {
- "level": 76,
- "icon": 383,
- "name": "Raw Shark",
- "xp": 110
- },
- {
- "level": 79,
- "icon": 395,
- "name": "Raw Sea Turtle",
- "xp": 38
- },
- {
- "level": 80,
- "icon": 21293,
- "name": "Infernal Eel",
- "xp": 95
- },
- {
- "level": 81,
- "icon": 389,
- "name": "Raw Manta Ray",
- "xp": 46
- },
- {
- "level": 82,
- "icon": 13439,
- "name": "Raw Anglerfish",
- "xp": 120
- },
- {
- "level": 82,
- "icon": 21356,
- "name": "Minnow",
- "xp": 26.5
- },
- {
- "level": 85,
- "icon": 11934,
- "name": "Raw Dark Crab",
- "xp": 130
- },
- {
- "level": 87,
- "icon": 13339,
- "name": "Sacred Eel",
- "xp": 105
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
deleted file mode 100644
index 53e3042478..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
+++ /dev/null
@@ -1,592 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 52,
- "name": "Arrow Shaft",
- "xp": 0.33
- },
- {
- "level": 1,
- "icon": 53,
- "name": "Headless Arrow",
- "xp": 1
- },
- {
- "level": 1,
- "icon": 882,
- "name": "Bronze Arrow",
- "xp": 1.3
- },
- {
- "level": 5,
- "icon": 2866,
- "name": "Ogre Arrow",
- "xp": 1
- },
- {
- "level": 5,
- "icon": 50,
- "name": "Shortbow (U)",
- "xp": 5
- },
- {
- "level": 5,
- "icon": 841,
- "name": "Shortbow",
- "xp": 5
- },
- {
- "level": 9,
- "icon": 877,
- "name": "Bronze Bolts",
- "xp": 0.5
- },
- {
- "level": 9,
- "icon": 9440,
- "name": "Wooden Stock",
- "xp": 6
- },
- {
- "level": 9,
- "icon": 9454,
- "name": "Bronze Crossbow (U)",
- "xp": 12
- },
- {
- "level": 9,
- "icon": 9174,
- "name": "Bronze Crossbow",
- "xp": 6
- },
- {
- "level": 10,
- "icon": 806,
- "name": "Bronze Dart",
- "xp": 1.8
- },
- {
- "level": 10,
- "icon": 839,
- "name": "Longbow",
- "xp": 10
- },
- {
- "level": 10,
- "icon": 48,
- "name": "Longbow (U)",
- "xp": 10
- },
- {
- "level": 11,
- "icon": 879,
- "name": "Opal Bolts",
- "xp": 1.6
- },
- {
- "level": 15,
- "icon": 884,
- "name": "Iron Arrow",
- "xp": 2.5
- },
- {
- "level": 20,
- "icon": 54,
- "name": "Oak Shortbow (U)",
- "xp": 16.5
- },
- {
- "level": 20,
- "icon": 843,
- "name": "Oak Shortbow",
- "xp": 16.5
- },
- {
- "level": 22,
- "icon": 807,
- "name": "Iron Dart",
- "xp": 3.8
- },
- {
- "level": 24,
- "icon": 9442,
- "name": "Oak Stock",
- "xp": 16
- },
- {
- "level": 24,
- "icon": 9456,
- "name": "Blurite Crossbow (U)",
- "xp": 32
- },
- {
- "level": 24,
- "icon": 9176,
- "name": "Blurite Crossbow",
- "xp": 16
- },
- {
- "level": 25,
- "icon": 56,
- "name": "Oak Longbow (U)",
- "xp": 25
- },
- {
- "level": 25,
- "icon": 845,
- "name": "Oak Longbow",
- "xp": 25
- },
- {
- "level": 27,
- "icon": 22251,
- "name": "Oak Shield",
- "xp": 50
- },
- {
- "level": 30,
- "icon": 886,
- "name": "Steel Arrow",
- "xp": 5
- },
- {
- "level": 32,
- "icon": 10158,
- "name": "Kebbit Bolts",
- "xp": 1
- },
- {
- "level": 35,
- "icon": 60,
- "name": "Willow Shortbow (U)",
- "xp": 33.3
- },
- {
- "level": 35,
- "icon": 849,
- "name": "Willow Shortbow",
- "xp": 33.3
- },
- {
- "level": 37,
- "icon": 808,
- "name": "Steel Dart",
- "xp": 7.5
- },
- {
- "level": 39,
- "icon": 9140,
- "name": "Iron Bolts",
- "xp": 1.5
- },
- {
- "level": 39,
- "icon": 9444,
- "name": "Willow Stock",
- "xp": 22
- },
- {
- "level": 39,
- "icon": 9457,
- "name": "Iron Crossbow (U)",
- "xp": 44
- },
- {
- "level": 39,
- "icon": 9177,
- "name": "Iron Crossbow",
- "xp": 22
- },
- {
- "level": 40,
- "icon": 58,
- "name": "Willow Longbow (U)",
- "xp": 41.5
- },
- {
- "level": 40,
- "icon": 847,
- "name": "Willow Longbow",
- "xp": 41.5
- },
- {
- "level": 40,
- "icon": 1391,
- "name": "Battlestaff",
- "xp": 80
- },
- {
- "level": 41,
- "icon": 880,
- "name": "Pearl Bolts",
- "xp": 3.2
- },
- {
- "level": 42,
- "icon": 22254,
- "name": "Willow Shield",
- "xp": 83
- },
- {
- "level": 42,
- "icon": 10159,
- "name": "Long Kebbit Bolts",
- "xp": 1.3
- },
- {
- "level": 43,
- "icon": 9145,
- "name": "Silver Bolts",
- "xp": 2.5
- },
- {
- "level": 45,
- "icon": 888,
- "name": "Mithril Arrow",
- "xp": 7.5
- },
- {
- "level": 46,
- "icon": 9141,
- "name": "Steel Bolts",
- "xp": 3.5
- },
- {
- "level": 46,
- "icon": 9446,
- "name": "Teak Stock",
- "xp": 27
- },
- {
- "level": 46,
- "icon": 9459,
- "name": "Steel Crossbow (U)",
- "xp": 54
- },
- {
- "level": 46,
- "icon": 9179,
- "name": "Steel Crossbow",
- "xp": 27
- },
- {
- "level": 50,
- "icon": 64,
- "name": "Maple Shortbow (U)",
- "xp": 50
- },
- {
- "level": 50,
- "icon": 853,
- "name": "Maple Shortbow",
- "xp": 50
- },
- {
- "level": 51,
- "icon": 881,
- "name": "Barbed Bolts",
- "xp": 9.5
- },
- {
- "level": 52,
- "icon": 809,
- "name": "Mithril Dart",
- "xp": 11.2
- },
- {
- "level": 52,
- "icon": 4150,
- "name": "Broad Arrows",
- "xp": 10
- },
- {
- "level": 53,
- "icon": 12926,
- "name": "Toxic Blowpipe",
- "xp": 120
- },
- {
- "level": 54,
- "icon": 9181,
- "name": "Mith Crossbow",
- "xp": 32
- },
- {
- "level": 54,
- "icon": 9448,
- "name": "Maple Stock",
- "xp": 32
- },
- {
- "level": 54,
- "icon": 9142,
- "name": "Mithril Bolts",
- "xp": 5
- },
- {
- "level": 54,
- "icon": 9461,
- "name": "Mithril Crossbow (U)",
- "xp": 64
- },
- {
- "level": 55,
- "icon": 62,
- "name": "Maple Longbow (U)",
- "xp": 58.3
- },
- {
- "level": 55,
- "icon": 11875,
- "name": "Broad Bolts",
- "xp": 3
- },
- {
- "level": 55,
- "icon": 851,
- "name": "Maple Longbow",
- "xp": 58
- },
- {
- "level": 56,
- "icon": 9337,
- "name": "Sapphire Bolts",
- "xp": 4.7
- },
- {
- "level": 57,
- "icon": 22257,
- "name": "Maple Shield",
- "xp": 116.5
- },
- {
- "level": 58,
- "icon": 9338,
- "name": "Emerald Bolts",
- "xp": 5.5
- },
- {
- "level": 60,
- "icon": 890,
- "name": "Adamant Arrow",
- "xp": 10
- },
- {
- "level": 61,
- "icon": 9143,
- "name": "Adamant Bolts",
- "xp": 7
- },
- {
- "level": 61,
- "icon": 9450,
- "name": "Mahogany Stock",
- "xp": 41
- },
- {
- "level": 61,
- "icon": 9463,
- "name": "Adamant Crossbow (U)",
- "xp": 82
- },
- {
- "level": 61,
- "icon": 9183,
- "name": "Adamant Crossbow",
- "xp": 41
- },
- {
- "level": 63,
- "icon": 9339,
- "name": "Ruby Bolts",
- "xp": 6.3
- },
- {
- "level": 65,
- "icon": 9340,
- "name": "Diamond Bolts",
- "xp": 7
- },
- {
- "level": 65,
- "icon": 857,
- "name": "Yew Shortbow",
- "xp": 67.5
- },
- {
- "level": 65,
- "icon": 68,
- "name": "Yew Shortbow (U)",
- "xp": 67.5
- },
- {
- "level": 67,
- "icon": 810,
- "name": "Adamant Dart",
- "xp": 15
- },
- {
- "level": 69,
- "icon": 9465,
- "name": "Runite Crossbow (U)",
- "xp": 100
- },
- {
- "level": 69,
- "icon": 9185,
- "name": "Rune Crossbow",
- "xp": 50
- },
- {
- "level": 69,
- "icon": 9452,
- "name": "Yew Stock",
- "xp": 50
- },
- {
- "level": 69,
- "icon": 9144,
- "name": "Runite Bolts",
- "xp": 10
- },
- {
- "level": 70,
- "icon": 855,
- "name": "Yew Longbow",
- "xp": 75
- },
- {
- "level": 70,
- "icon": 66,
- "name": "Yew Longbow (U)",
- "xp": 75
- },
- {
- "level": 71,
- "icon": 9341,
- "name": "Dragonstone Bolts",
- "xp": 8.2
- },
- {
- "level": 72,
- "icon": 22260,
- "name": "Yew Shield",
- "xp": 150
- },
- {
- "level": 73,
- "icon": 9342,
- "name": "Onyx Bolts",
- "xp": 9.4
- },
- {
- "level": 75,
- "icon": 892,
- "name": "Rune Arrow",
- "xp": 12.5
- },
- {
- "level": 76,
- "icon": 21316,
- "name": "Amethyst Broad Bolts",
- "xp": 10.6
- },
- {
- "level": 78,
- "icon": 21952,
- "name": "Magic Stock",
- "xp": 70
- },
- {
- "level": 78,
- "icon": 21921,
- "name": "Dragon Crossbow (U)",
- "xp": 135
- },
- {
- "level": 78,
- "icon": 21902,
- "name": "Dragon Crossbow",
- "xp": 70
- },
- {
- "level": 80,
- "icon": 861,
- "name": "Magic Shortbow",
- "xp": 83.3
- },
- {
- "level": 80,
- "icon": 72,
- "name": "Magic Shortbow (U)",
- "xp": 83.3
- },
- {
- "level": 81,
- "icon": 811,
- "name": "Rune Dart",
- "xp": 18.8
- },
- {
- "level": 82,
- "icon": 21326,
- "name": "Amethyst Arrow",
- "xp": 13.5
- },
- {
- "level": 84,
- "icon": 21930,
- "name": "Dragon Bolts",
- "xp": 12
- },
- {
- "level": 84,
- "icon": 21318,
- "name": "Amethyst Javelin",
- "xp": 13.5
- },
- {
- "level": 85,
- "icon": 859,
- "name": "Magic Longbow",
- "xp": 91.5
- },
- {
- "level": 85,
- "icon": 70,
- "name": "Magic Longbow (U)",
- "xp": 91.5
- },
- {
- "level": 87,
- "icon": 22263,
- "name": "Magic Shield",
- "xp": 183
- },
- {
- "level": 90,
- "icon": 25849,
- "name": "Amethyst Dart",
- "xp": 21
- },
- {
- "level": 90,
- "icon": 11212,
- "name": "Dragon Arrow",
- "xp": 15
- },
- {
- "level": 92,
- "icon": 22266,
- "name": "Redwood Shield",
- "xp": 216
- },
- {
- "level": 95,
- "icon": 11230,
- "name": "Dragon Dart",
- "xp": 25
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json
deleted file mode 100644
index d91f14eccf..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_herblore.json
+++ /dev/null
@@ -1,436 +0,0 @@
-{
- "actions": [
- {
- "level": 3,
- "icon": 121,
- "name": "Attack Potion (3)",
- "xp": 25
- },
- {
- "level": 3,
- "icon": 249,
- "name": "Guam Leaf",
- "xp": 2.5
- },
- {
- "level": 5,
- "icon": 251,
- "name": "Marrentill",
- "xp": 3.8
- },
- {
- "level": 5,
- "icon": 175,
- "name": "Antipoison (3)",
- "xp": 37.5
- },
- {
- "level": 8,
- "icon": 4844,
- "name": "Relicym's Balm (3)",
- "xp": 40
- },
- {
- "level": 11,
- "icon": 253,
- "name": "Tarromin",
- "xp": 5
- },
- {
- "level": 12,
- "icon": 115,
- "name": "Strength Potion (3)",
- "xp": 50
- },
- {
- "level": 15,
- "icon": 3410,
- "name": "Serum 207 (3)",
- "xp": 50
- },
- {
- "level": 18,
- "icon": 4419,
- "name": "Guthix Rest (3)",
- "xp": 59
- },
- {
- "level": 19,
- "icon": 10142,
- "name": "Guam tar",
- "xp": 30
- },
- {
- "level": 20,
- "icon": 255,
- "name": "Harralander",
- "xp": 6.3
- },
- {
- "level": 22,
- "icon": 6472,
- "name": "Compost Potion (3)",
- "xp": 60
- },
- {
- "level": 22,
- "icon": 127,
- "name": "Restore Potion (3)",
- "xp": 62.5
- },
- {
- "level": 25,
- "icon": 257,
- "name": "Ranarr Weed",
- "xp": 7.5
- },
- {
- "level": 26,
- "icon": 3010,
- "name": "Energy Potion (3)",
- "xp": 67.5
- },
- {
- "level": 30,
- "icon": 2998,
- "name": "Toadflax",
- "xp": 8
- },
- {
- "level": 30,
- "icon": 133,
- "name": "Defence Potion (3)",
- "xp": 75
- },
- {
- "level": 31,
- "icon": 10143,
- "name": "Marrentill tar",
- "xp": 42.5
- },
- {
- "level": 34,
- "icon": 3034,
- "name": "Agility Potion (3)",
- "xp": 80
- },
- {
- "level": 36,
- "icon": 9741,
- "name": "Combat Potion (3)",
- "xp": 84
- },
- {
- "level": 38,
- "icon": 139,
- "name": "Prayer Potion (3)",
- "xp": 87.5
- },
- {
- "level": 39,
- "icon": 10144,
- "name": "Tarromin tar",
- "xp": 55
- },
- {
- "level": 40,
- "icon": 259,
- "name": "Irit Leaf",
- "xp": 8.8
- },
- {
- "level": 44,
- "icon": 10145,
- "name": "Harralander tar",
- "xp": 72.5
- },
- {
- "level": 45,
- "icon": 145,
- "name": "Super Attack (3)",
- "xp": 100
- },
- {
- "level": 48,
- "icon": 181,
- "name": "Superantipoison (3)",
- "xp": 106.3
- },
- {
- "level": 48,
- "icon": 261,
- "name": "Avantoe",
- "xp": 10
- },
- {
- "level": 50,
- "icon": 151,
- "name": "Fishing Potion (3)",
- "xp": 112.5
- },
- {
- "level": 52,
- "icon": 3018,
- "name": "Super Energy (3)",
- "xp": 117.5
- },
- {
- "level": 53,
- "icon": 10000,
- "name": "Hunter Potion (3)",
- "xp": 120
- },
- {
- "level": 54,
- "icon": 263,
- "name": "Kwuarm",
- "xp": 11.3
- },
- {
- "level": 55,
- "icon": 157,
- "name": "Super Strength (3)",
- "xp": 125
- },
- {
- "level": 57,
- "icon": 9022,
- "name": "Magic Essence Potion (3)",
- "xp": 130
- },
- {
- "level": 59,
- "icon": 3000,
- "name": "Snapdragon",
- "xp": 11.8
- },
- {
- "level": 60,
- "icon": 187,
- "name": "Weapon Poison",
- "xp": 137.5
- },
- {
- "level": 63,
- "icon": 3026,
- "name": "Super Restore (3)",
- "xp": 142.5
- },
- {
- "level": 65,
- "icon": 265,
- "name": "Cadantine",
- "xp": 12.5
- },
- {
- "level": 65,
- "icon": 10927,
- "name": "Sanfew Serum (3)",
- "xp": 160
- },
- {
- "level": 66,
- "icon": 163,
- "name": "Super Defence (3)",
- "xp": 150
- },
- {
- "level": 67,
- "icon": 2481,
- "name": "Lantadyme",
- "xp": 13.1
- },
- {
- "level": 68,
- "icon": 5945,
- "name": "Antidote+ (3)",
- "xp": 155
- },
- {
- "level": 69,
- "icon": 2454,
- "name": "Antifire Potion (3)",
- "xp": 157.5
- },
- {
- "level": 70,
- "icon": 23697,
- "name": "Divine super attack potion(4)",
- "xp:": 2
- },
- {
- "level": 70,
- "icon": 23721,
- "name": "Divine super defence potion(4)",
- "xp:": 2
- },
- {
- "level": 70,
- "icon": 23709,
- "name": "Divine super strength potion(4)",
- "xp:": 2
- },
- {
- "level": 70,
- "icon": 267,
- "name": "Dwarf Weed",
- "xp": 13.8
- },
- {
- "level": 72,
- "icon": 169,
- "name": "Ranging Potion (3)",
- "xp": 162.5
- },
- {
- "level": 73,
- "icon": 5937,
- "name": "Weapon Poison (+)",
- "xp": 165
- },
- {
- "level": 74,
- "icon": 23733,
- "name": "Divine ranging potion(4)",
- "xp:": 2
- },
- {
- "level": 75,
- "icon": 269,
- "name": "Torstol",
- "xp": 15
- },
- {
- "level": 76,
- "icon": 3042,
- "name": "Magic Potion (3)",
- "xp": 172.5
- },
- {
- "level": 77,
- "icon": 12627,
- "name": "Stamina Potion (3)",
- "xp": 76.5
- },
- {
- "level": 77,
- "icon": 12625,
- "name": "Stamina Potion (4)",
- "xp": 102
- },
- {
- "level": 78,
- "icon": 23745,
- "name": "Divine magic potion(4)",
- "xp:": 2
- },
- {
- "level": 78,
- "icon": 189,
- "name": "Zamorak Brew (3)",
- "xp": 175
- },
- {
- "level": 79,
- "icon": 5954,
- "name": "Antidote++ (3)",
- "xp": 177.5
- },
- {
- "level": 80,
- "icon": 22464,
- "name": "Bastion Potion (3)",
- "xp": 155
- },
- {
- "level": 80,
- "icon": 22452,
- "name": "Battlemage Potion (3)",
- "xp": 155
- },
- {
- "level": 81,
- "icon": 6687,
- "name": "Saradomin Brew (3)",
- "xp": 180
- },
- {
- "level": 82,
- "icon": 5940,
- "name": "Weapon Poison (++)",
- "xp": 190
- },
- {
- "level": 84,
- "icon": 11953,
- "name": "Extended Antifire (3)",
- "xp": 82.5
- },
- {
- "level": 84,
- "icon": 11951,
- "name": "Extended Antifire (4)",
- "xp": 110
- },
- {
- "level": 86,
- "icon": 24635,
- "name": "Divine bastion potion(4)",
- "xp:": 2
- },
- {
- "level": 86,
- "icon": 24623,
- "name": "Divine battlemage potion(4)",
- "xp:": 2
- },
- {
- "level": 87,
- "icon": 12907,
- "name": "Anti-venom(3)",
- "xp": 90
- },
- {
- "level": 87,
- "icon": 12905,
- "name": "Anti-venom(4)",
- "xp": 120
- },
- {
- "level": 90,
- "icon": 12695,
- "name": "Super Combat Potion(4)",
- "xp": 150
- },
- {
- "level": 92,
- "icon": 21978,
- "name": "Super Antifire (4)",
- "xp": 130
- },
- {
- "level": 94,
- "icon": 12913,
- "name": "Anti-venom+(4)",
- "xp": 125
- },
- {
- "level": 97,
- "icon": 23685,
- "name": "Divine super combat potion(4)",
- "xp:": 2
- },
- {
- "level": 98,
- "icon": 21981,
- "name": "Extended Super Antifire (3)",
- "xp": 120
- },
- {
- "level": 98,
- "icon": 21978,
- "name": "Extended Super Antifire (4)",
- "xp": 160
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json
deleted file mode 100644
index a50c2164d6..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_hunter.json
+++ /dev/null
@@ -1,352 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 9965,
- "name": "Crimson Swift",
- "xp": 34
- },
- {
- "level": 1,
- "icon": 9953,
- "name": "Polar Kebbit",
- "xp": 30
- },
- {
- "level": 3,
- "icon": 9954,
- "name": "Common Kebbit",
- "xp": 36
- },
- {
- "level": 5,
- "icon": 9968,
- "name": "Golden Warbler",
- "xp": 47
- },
- {
- "level": 5,
- "icon": 21512,
- "name": "Regular Bird House",
- "xp": 280
- },
- {
- "level": 7,
- "icon": 9955,
- "name": "Feldip Weasel",
- "xp": 48
- },
- {
- "level": 9,
- "icon": 9966,
- "name": "Copper Longtail",
- "xp": 61
- },
- {
- "level": 11,
- "icon": 9967,
- "name": "Cerulean Twitch",
- "xp": 64.5
- },
- {
- "level": 13,
- "icon": 9956,
- "name": "Desert Devil",
- "xp": 66
- },
- {
- "level": 14,
- "icon": 21515,
- "name": "Oak Bird House",
- "xp": 420
- },
- {
- "level": 15,
- "icon": 9970,
- "name": "Ruby Harvest",
- "xp": 24
- },
- {
- "level": 17,
- "icon": 11238,
- "name": "Baby Impling",
- "xp": 18
- },
- {
- "level": 19,
- "icon": 9969,
- "name": "Tropical Wagtail",
- "xp": 95
- },
- {
- "level": 22,
- "icon": 11240,
- "name": "Young Impling",
- "xp": 20
- },
- {
- "level": 23,
- "icon": 9953,
- "name": "Wild Kebbit",
- "xp": 128
- },
- {
- "level": 24,
- "icon": 21518,
- "name": "Willow Bird House",
- "xp": 560
- },
- {
- "level": 25,
- "icon": 9971,
- "name": "Sapphire Glacialis",
- "xp": 34
- },
- {
- "level": 27,
- "icon": 10092,
- "name": "Ferret",
- "xp": 115
- },
- {
- "level": 27,
- "icon": 9975,
- "name": "White Rabbit",
- "xp": 144
- },
- {
- "level": 28,
- "icon": 11242,
- "name": "Gourmet Impling",
- "xp": 22
- },
- {
- "level": 29,
- "icon": 10149,
- "name": "Swamp Lizard",
- "xp": 152
- },
- {
- "level": 31,
- "icon": 10045,
- "name": "Spined Larupia",
- "xp": 180
- },
- {
- "level": 33,
- "icon": 9958,
- "name": "Barb-tailed Kebbit",
- "xp": 168
- },
- {
- "level": 34,
- "icon": 21521,
- "name": "Teak Bird House",
- "xp": 700
- },
- {
- "level": 35,
- "icon": 9972,
- "name": "Snowy Knight",
- "xp": 44
- },
- {
- "level": 36,
- "icon": 11244,
- "name": "Earth Impling",
- "xp": 25
- },
- {
- "level": 37,
- "icon": 9957,
- "name": "Prickly Kebbit",
- "xp": 204
- },
- {
- "level": 41,
- "icon": 10051,
- "name": "Horned Graahk",
- "xp": 240
- },
- {
- "level": 42,
- "icon": 11246,
- "name": "Essence Impling",
- "xp": 27
- },
- {
- "level": 43,
- "icon": 9960,
- "name": "Spotted Kebbit",
- "xp": 104
- },
- {
- "level": 44,
- "icon": 22192,
- "name": "Maple Bird House",
- "xp": 820
- },
- {
- "level": 45,
- "icon": 9973,
- "name": "Black Warlock",
- "xp": 54
- },
- {
- "level": 47,
- "icon": 10146,
- "name": "Orange Salamander",
- "xp": 224
- },
- {
- "level": 49,
- "icon": 9961,
- "name": "Razor-backed Kebbit",
- "xp": 348
- },
- {
- "level": 49,
- "icon": 22195,
- "name": "Mahogany Bird House",
- "xp": 960
- },
- {
- "level": 50,
- "icon": 11248,
- "name": "Eclectic Impling",
- "xp": 32
- },
- {
- "level": 51,
- "icon": 9959,
- "name": "Sabre-toothed Kebbit",
- "xp": 200
- },
- {
- "level": 53,
- "icon": 9976,
- "name": "Chinchompa",
- "xp": 198.3
- },
- {
- "level": 55,
- "icon": 10039,
- "name": "Sabre-toothed Kyatt",
- "xp": 300
- },
- {
- "level": 57,
- "icon": 9963,
- "name": "Dark Kebbit",
- "xp": 132
- },
- {
- "level": 58,
- "icon": 11250,
- "name": "Nature Impling",
- "xp": 34
- },
- {
- "level": 59,
- "icon": 10147,
- "name": "Red Salamander",
- "xp": 272
- },
- {
- "level": 59,
- "icon": 22198,
- "name": "Yew Bird House",
- "xp": 1020
- },
- {
- "level": 60,
- "icon": 19556,
- "name": "Maniacal Monkey",
- "xp": 1000
- },
- {
- "level": 63,
- "icon": 9977,
- "name": "Carnivorous Chinchompa",
- "xp": 265
- },
- {
- "level": 65,
- "icon": 11252,
- "name": "Magpie Impling",
- "xp": 44
- },
- {
- "level": 65,
- "icon": 11252,
- "name": "Magpie Impling (Gielinor)",
- "xp": 216
- },
- {
- "level": 67,
- "icon": 10148,
- "name": "Black Salamander",
- "xp": 319.5
- },
- {
- "level": 69,
- "icon": 9964,
- "name": "Dashing Kebbit",
- "xp": 156
- },
- {
- "level": 73,
- "icon": 5091,
- "name": "Black Chinchompa",
- "xp": 315
- },
- {
- "level": 74,
- "icon": 22201,
- "name": "Magic Bird House",
- "xp": 1140
- },
- {
- "level": 74,
- "icon": 11254,
- "name": "Ninja Impling",
- "xp": 52
- },
- {
- "level": 74,
- "icon": 11254,
- "name": "Ninja Impling (Gielinor)",
- "xp": 240
- },
- {
- "level": 80,
- "icon": 23768,
- "name": "Crystal Impling",
- "xp": 280
- },
- {
- "level": 83,
- "icon": 11256,
- "name": "Dragon Impling",
- "xp": 65
- },
- {
- "level": 83,
- "icon": 11256,
- "name": "Dragon Impling (Gielinor)",
- "xp": 300
- },
- {
- "level": 89,
- "icon": 22204,
- "name": "Redwood Bird House",
- "xp": 1200
- },
- {
- "level": 89,
- "icon": 19732,
- "name": "Lucky Impling",
- "xp": 380
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json
deleted file mode 100644
index c127933d7c..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json
+++ /dev/null
@@ -1,1084 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "sprite": 15,
- "name": "Wind Strike",
- "xp": 5.5
- },
- {
- "level": 3,
- "sprite": 16,
- "name": "Confuse",
- "xp": 13
- },
- {
- "level": 4,
- "sprite": 358,
- "name": "Enchant Opal Bolt",
- "xp": 9
- },
- {
- "level": 5,
- "sprite": 17,
- "name": "Water Strike",
- "xp": 7.5
- },
- {
- "level": 6,
- "sprite": 1252,
- "name": "Arceuus Library Teleport",
- "xp": 10
- },
- {
- "level": 7,
- "sprite": 18,
- "name": "Enchant Sapphire Jewellery",
- "xp": 17.5
- },
- {
- "level": 7,
- "sprite": 358,
- "name": "Enchant Sapphire Bolt",
- "xp": 17.5
- },
- {
- "level": 9,
- "sprite": 19,
- "name": "Earth Strike",
- "xp": 9.5
- },
- {
- "level": 11,
- "sprite": 20,
- "name": "Weaken",
- "xp": 21
- },
- {
- "level": 13,
- "sprite": 21,
- "name": "Fire Strike",
- "xp": 11.5
- },
- {
- "level": 14,
- "sprite": 358,
- "name": "Enchant Jade Bolt",
- "xp": 19
- },
- {
- "level": 15,
- "sprite": 22,
- "name": "Bones To Bananas",
- "xp": 25
- },
- {
- "level": 16,
- "sprite": 1247,
- "name": "Basic Reanimation",
- "xp": 32
- },
- {
- "level": 17,
- "sprite": 1253,
- "name": "Draynor Manor Teleport",
- "xp": 16
- },
- {
- "level": 17,
- "sprite": 23,
- "name": "Wind Bolt",
- "xp": 13.5
- },
- {
- "level": 19,
- "sprite": 24,
- "name": "Curse",
- "xp": 29
- },
- {
- "level": 20,
- "sprite": 319,
- "name": "Bind",
- "xp": 30
- },
- {
- "level": 21,
- "sprite": 25,
- "name": "Low Level Alchemy",
- "xp": 31
- },
- {
- "level": 23,
- "sprite": 26,
- "name": "Water Bolt",
- "xp": 16.5
- },
- {
- "level": 24,
- "sprite": 358,
- "name": "Enchant Pearl Bolt",
- "xp": 29
- },
- {
- "level": 25,
- "sprite": 27,
- "name": "Varrock Teleport",
- "xp": 35
- },
- {
- "level": 27,
- "sprite": 28,
- "name": "Enchant Emerald Jewellery",
- "xp": 37
- },
- {
- "level": 27,
- "sprite": 358,
- "name": "Enchant Emerald Bolt",
- "xp": 37
- },
- {
- "level": 28,
- "sprite": 1256,
- "name": "Mind Altar Teleport",
- "xp": 22
- },
- {
- "level": 29,
- "sprite": 358,
- "name": "Enchant Topaz Bolt",
- "xp": 33
- },
- {
- "level": 29,
- "sprite": 29,
- "name": "Earth Bolt",
- "xp": 19.5
- },
- {
- "level": 31,
- "sprite": 30,
- "name": "Lumbridge Teleport",
- "xp": 41
- },
- {
- "level": 33,
- "sprite": 31,
- "name": "Telekinetic Grab",
- "xp": 43
- },
- {
- "level": 34,
- "sprite": 1257,
- "name": "Respawn Teleport",
- "xp": 27
- },
- {
- "level": 35,
- "sprite": 32,
- "name": "Fire Bolt",
- "xp": 22.5
- },
- {
- "level": 35,
- "sprite": 1267,
- "name": "Ghostly Grasp",
- "xp": 22.5
- },
- {
- "level": 37,
- "sprite": 33,
- "name": "Falador Teleport",
- "xp": 48
- },
- {
- "level": 38,
- "sprite": 1270,
- "name": "Resurrect Lesser Thrall",
- "xp": 55
- },
- {
- "level": 39,
- "sprite": 34,
- "name": "Crumble Undead",
- "xp": 24.5
- },
- {
- "level": 40,
- "sprite": 1254,
- "name": "Salve Graveyard Teleport",
- "xp": 30
- },
- {
- "level": 40,
- "sprite": 355,
- "name": "Teleport To House",
- "xp": 30
- },
- {
- "level": 41,
- "sprite": 1248,
- "name": "Adept Reanimation",
- "xp": 80
- },
- {
- "level": 41,
- "sprite": 35,
- "name": "Wind Blast",
- "xp": 25.5
- },
- {
- "level": 43,
- "sprite": 36,
- "name": "Superheat Item",
- "xp": 53
- },
- {
- "level": 44,
- "sprite": 1302,
- "name": "Inferior Demonbane",
- "xp": 27
- },
- {
- "level": 45,
- "sprite": 37,
- "name": "Camelot Teleport",
- "xp": 55.5
- },
- {
- "level": 47,
- "sprite": 38,
- "name": "Water Blast",
- "xp": 28.5
- },
- {
- "level": 47,
- "sprite": 1315,
- "name": "Shadow Veil",
- "xp": 58
- },
- {
- "level": 48,
- "sprite": 1259,
- "name": "Fenkenstrain's Castle Teleport",
- "xp": 50
- },
- {
- "level": 49,
- "sprite": 39,
- "name": "Enchant Ruby Jewellery",
- "xp": 59
- },
- {
- "level": 49,
- "sprite": 358,
- "name": "Enchant Ruby Bolt",
- "xp": 59
- },
- {
- "level": 50,
- "sprite": 53,
- "name": "Iban Blast",
- "xp": 30
- },
- {
- "level": 50,
- "sprite": 329,
- "name": "Smoke Rush",
- "xp": 30
- },
- {
- "level": 50,
- "sprite": 324,
- "name": "Magic Dart",
- "xp": 30
- },
- {
- "level": 50,
- "sprite": 320,
- "name": "Snare",
- "xp": 60
- },
- {
- "level": 50,
- "sprite": 1316,
- "name": "Dark Lure",
- "xp": 60
- },
- {
- "level": 51,
- "sprite": 54,
- "name": "Ardougne Teleport",
- "xp": 61
- },
- {
- "level": 52,
- "sprite": 337,
- "name": "Shadow Rush",
- "xp": 31
- },
- {
- "level": 53,
- "sprite": 40,
- "name": "Earth Blast",
- "xp": 31.5
- },
- {
- "level": 54,
- "sprite": 341,
- "name": "Paddewwa Teleport",
- "xp": 64
- },
- {
- "level": 55,
- "sprite": 41,
- "name": "High Level Alchemy",
- "xp": 65
- },
- {
- "level": 56,
- "sprite": 42,
- "name": "Charge Water Orb",
- "xp": 66
- },
- {
- "level": 56,
- "sprite": 333,
- "name": "Blood Rush",
- "xp": 33
- },
- {
- "level": 56,
- "sprite": 1268,
- "name": "Skeletal Grasp",
- "xp": 33
- },
- {
- "level": 57,
- "sprite": 358,
- "name": "Enchant Diamond Bolt",
- "xp": 67
- },
- {
- "level": 57,
- "sprite": 43,
- "name": "Enchant Diamond Jewellery",
- "xp": 67
- },
- {
- "level": 57,
- "sprite": 2981,
- "name": "Resurrect Superior Thrall",
- "xp": 70
- },
- {
- "level": 58,
- "sprite": 55,
- "name": "Watchtower Teleport",
- "xp": 68
- },
- {
- "level": 58,
- "sprite": 325,
- "name": "Ice Rush",
- "xp": 34
- },
- {
- "level": 59,
- "sprite": 44,
- "name": "Fire Blast",
- "xp": 34.5
- },
- {
- "level": 59,
- "sprite": 1305,
- "name": "Mark of Darkness",
- "xp": 70
- },
- {
- "level": 60,
- "sprite": 342,
- "name": "Senntisten Teleport",
- "xp": 70
- },
- {
- "level": 60,
- "sprite": 60,
- "name": "Claws Of Guthix",
- "xp": 35
- },
- {
- "level": 60,
- "sprite": 59,
- "name": "Flames Of Zamorak",
- "xp": 35
- },
- {
- "level": 60,
- "sprite": 61,
- "name": "Saradomin Strike",
- "xp": 35
- },
- {
- "level": 60,
- "sprite": 45,
- "name": "Charge Earth Orb",
- "xp": 70
- },
- {
- "level": 60,
- "sprite": 354,
- "name": "Bones To Peaches",
- "xp": 35.5
- },
- {
- "level": 61,
- "sprite": 1260,
- "name": "West Ardougne Teleport",
- "xp": 68
- },
- {
- "level": 61,
- "sprite": 323,
- "name": "Trollheim Teleport",
- "xp": 68
- },
- {
- "level": 62,
- "sprite": 330,
- "name": "Smoke Burst",
- "xp": 36
- },
- {
- "level": 62,
- "sprite": 46,
- "name": "Wind Wave",
- "xp": 36
- },
- {
- "level": 62,
- "sprite": 1303,
- "name": "Superior Demonbane",
- "xp": 36
- },
- {
- "level": 63,
- "sprite": 47,
- "name": "Charge Fire Orb",
- "xp": 73
- },
- {
- "level": 64,
- "sprite": 338,
- "name": "Shadow Burst",
- "xp": 37
- },
- {
- "level": 64,
- "sprite": 357,
- "name": "Teleport Ape Atoll",
- "xp": 74
- },
- {
- "level": 64,
- "sprite": 1307,
- "name": "Lesser Corruption",
- "xp": 75
- },
- {
- "level": 65,
- "sprite": 543,
- "name": "Bake Pie",
- "xp": 60
- },
- {
- "level": 65,
- "sprite": 1261,
- "name": "Harmony Island Teleport",
- "xp": 74
- },
- {
- "level": 65,
- "sprite": 563,
- "name": "Geomancy",
- "xp": 60
- },
- {
- "level": 65,
- "sprite": 48,
- "name": "Water Wave",
- "xp": 37.5
- },
- {
- "level": 66,
- "sprite": 49,
- "name": "Charge Air Orb",
- "xp": 76
- },
- {
- "level": 66,
- "sprite": 567,
- "name": "Cure Plant",
- "xp": 60
- },
- {
- "level": 66,
- "sprite": 343,
- "name": "Kharyrll Teleport",
- "xp": 76
- },
- {
- "level": 66,
- "sprite": 56,
- "name": "Vulnerability",
- "xp": 76
- },
- {
- "level": 66,
- "sprite": 577,
- "name": "Monster Examine",
- "xp": 61
- },
- {
- "level": 66,
- "sprite": 1317,
- "name": "Vile Vigour",
- "xp": 76
- },
- {
- "level": 67,
- "sprite": 568,
- "name": "Npc Contact",
- "xp": 63
- },
- {
- "level": 68,
- "sprite": 334,
- "name": "Blood Burst",
- "xp": 39
- },
- {
- "level": 68,
- "sprite": 559,
- "name": "Cure Other",
- "xp": 65
- },
- {
- "level": 68,
- "sprite": 50,
- "name": "Enchant Dragonstone Jewellery",
- "xp": 78
- },
- {
- "level": 68,
- "sprite": 358,
- "name": "Enchant Dragonstone Bolt",
- "xp": 78
- },
- {
- "level": 68,
- "sprite": 578,
- "name": "Humidify",
- "xp": 65
- },
- {
- "level": 69,
- "sprite": 544,
- "name": "Moonclan Teleport",
- "xp": 66
- },
- {
- "level": 70,
- "sprite": 51,
- "name": "Earth Wave",
- "xp": 40
- },
- {
- "level": 70,
- "sprite": 326,
- "name": "Ice Burst",
- "xp": 40
- },
- {
- "level": 70,
- "sprite": 569,
- "name": "Tele Group Moonclan",
- "xp": 67
- },
- {
- "level": 70,
- "sprite": 1318,
- "name": "Degrime",
- "xp": 83
- },
- {
- "level": 71,
- "sprite": 586,
- "name": "Ourania Teleport",
- "xp": 69
- },
- {
- "level": 71,
- "sprite": 1264,
- "name": "Cemetery Teleport",
- "xp": 82
- },
- {
- "level": 71,
- "sprite": 562,
- "name": "Cure Me",
- "xp": 69
- },
- {
- "level": 71,
- "sprite": 579,
- "name": "Hunter Kit",
- "xp": 70
- },
- {
- "level": 72,
- "sprite": 1249,
- "name": "Expert Reanimation",
- "xp": 138
- },
- {
- "level": 72,
- "sprite": 344,
- "name": "Lassar Teleport",
- "xp": 82
- },
- {
- "level": 72,
- "sprite": 545,
- "name": "Waterbirth Teleport",
- "xp": 71
- },
- {
- "level": 73,
- "sprite": 570,
- "name": "Tele Group Waterbirth",
- "xp": 72
- },
- {
- "level": 73,
- "sprite": 57,
- "name": "Enfeeble",
- "xp": 83
- },
- {
- "level": 73,
- "sprite": 1306,
- "name": "Ward of Arceuus",
- "xp": 83
- },
- {
- "level": 74,
- "sprite": 349,
- "name": "Teleother Lumbridge",
- "xp": 84
- },
- {
- "level": 74,
- "sprite": 331,
- "name": "Smoke Blitz",
- "xp": 42
- },
- {
- "level": 74,
- "sprite": 565,
- "name": "Cure Group",
- "xp": 74
- },
- {
- "level": 75,
- "sprite": 576,
- "name": "Stat Spy",
- "xp": 76
- },
- {
- "level": 75,
- "sprite": 547,
- "name": "Barbarian Teleport",
- "xp": 76
- },
- {
- "level": 75,
- "sprite": 52,
- "name": "Fire Wave",
- "xp": 42.5
- },
- {
- "level": 76,
- "sprite": 575,
- "name": "Tele Group Barbarian",
- "xp": 77
- },
- {
- "level": 76,
- "sprite": 339,
- "name": "Shadow Blitz",
- "xp": 43
- },
- {
- "level": 76,
- "sprite": 585,
- "name": "Spin Flax",
- "xp": 75
- },
- {
- "level": 76,
- "sprite": 2984,
- "name": "Resurrect Greater Thrall",
- "xp": 88
- },
- {
- "level": 77,
- "sprite": 548,
- "name": "Superglass Make",
- "xp": 78
- },
- {
- "level": 78,
- "sprite": 583,
- "name": "Tan Leather",
- "xp": 81
- },
- {
- "level": 78,
- "sprite": 549,
- "name": "Khazard Teleport",
- "xp": 80
- },
- {
- "level": 78,
- "sprite": 345,
- "name": "Dareeyak Teleport",
- "xp": 88
- },
- {
- "level": 78,
- "sprite": 1266,
- "name": "Resurrect Crops",
- "xp": 90
- },
- {
- "level": 79,
- "sprite": 321,
- "name": "Entangle",
- "xp": 89
- },
- {
- "level": 79,
- "sprite": 572,
- "name": "Tele Group Khazard",
- "xp": 81
- },
- {
- "level": 79,
- "sprite": 580,
- "name": "Dream",
- "xp": 82
- },
- {
- "level": 79,
- "sprite": 1269,
- "name": "Undead Grasp",
- "xp": 46.5
- },
- {
- "level": 80,
- "sprite": 322,
- "name": "Charge",
- "xp": 180
- },
- {
- "level": 80,
- "sprite": 335,
- "name": "Blood Blitz",
- "xp": 45
- },
- {
- "level": 80,
- "sprite": 58,
- "name": "Stun",
- "xp": 90
- },
- {
- "level": 80,
- "sprite": 550,
- "name": "String Jewellery",
- "xp": 83
- },
- {
- "level": 80,
- "sprite": 1310,
- "name": "Death Charge",
- "xp": 90
- },
- {
- "level": 81,
- "sprite": 554,
- "name": "Stat Restore Pot Share",
- "xp": 84
- },
- {
- "level": 81,
- "sprite": 362,
- "name": "Wind Surge",
- "xp": 44
- },
- {
- "level": 82,
- "sprite": 350,
- "name": "Teleother Falador",
- "xp": 92
- },
- {
- "level": 82,
- "sprite": 552,
- "name": "Magic Imbue",
- "xp": 86
- },
- {
- "level": 82,
- "sprite": 327,
- "name": "Ice Blitz",
- "xp": 46
- },
- {
- "level": 82,
- "sprite": 1304,
- "name": "Dark Demonbane",
- "xp": 43.5
- },
- {
- "level": 83,
- "sprite": 553,
- "name": "Fertile Soil",
- "xp": 87
- },
- {
- "level": 83,
- "sprite": 1262,
- "name": "Barrows Teleport",
- "xp": 90
- },
- {
- "level": 84,
- "sprite": 346,
- "name": "Carrallangar Teleport",
- "xp": 82
- },
- {
- "level": 84,
- "sprite": 551,
- "name": "Boost Potion Share",
- "xp": 88
- },
- {
- "level": 84,
- "sprite": 1311,
- "name": "Demonic Offering",
- "xp": 175
- },
- {
- "level": 85,
- "sprite": 363,
- "name": "Water Surge",
- "xp": 46
- },
- {
- "level": 85,
- "sprite": 555,
- "name": "Fishing Guild Teleport",
- "xp": 89
- },
- {
- "level": 85,
- "sprite": 352,
- "name": "Tele Block",
- "xp": 80
- },
- {
- "level": 85,
- "sprite": 359,
- "name": "Teleport To Bounty Target",
- "xp": 45
- },
- {
- "level": 85,
- "sprite": 1308,
- "name": "Greater Corruption",
- "xp": 95
- },
- {
- "level": 86,
- "sprite": 332,
- "name": "Smoke Barrage",
- "xp": 48
- },
- {
- "level": 86,
- "sprite": 573,
- "name": "Tele Group Fishing Guild",
- "xp": 90
- },
- {
- "level": 86,
- "sprite": 581,
- "name": "Plank Make",
- "xp": 90
- },
- {
- "level": 87,
- "sprite": 556,
- "name": "Catherby Teleport",
- "xp": 92
- },
- {
- "level": 87,
- "sprite": 353,
- "name": "Enchant Onyx Jewellery",
- "xp": 97
- },
- {
- "level": 87,
- "sprite": 358,
- "name": "Enchant Onyx Bolt",
- "xp": 97
- },
- {
- "level": 88,
- "sprite": 340,
- "name": "Shadow Barrage",
- "xp": 48
- },
- {
- "level": 88,
- "sprite": 574,
- "name": "Tele Group Catherby",
- "xp": 93
- },
- {
- "level": 89,
- "sprite": 557,
- "name": "Ice Plateau Teleport",
- "xp": 96
- },
- {
- "level": 89,
- "sprite": 584,
- "name": "Recharge Dragonstone",
- "xp": 97.5
- },
- {
- "level": 90,
- "sprite": 347,
- "name": "Annakarl Teleport",
- "xp": 100
- },
- {
- "level": 90,
- "sprite": 364,
- "name": "Earth Surge",
- "xp": 48
- },
- {
- "level": 90,
- "sprite": 1250,
- "name": "Master Reanimation",
- "xp": 170
- },
- {
- "level": 90,
- "sprite": 575,
- "name": "Tele Group Ice Plateau",
- "xp": 99
- },
- {
- "level": 90,
- "sprite": 351,
- "name": "Teleother Camelot",
- "xp": 100
- },
- {
- "level": 90,
- "sprite": 1263,
- "name": "Ape Atoll Teleport",
- "xp": 100
- },
- {
- "level": 91,
- "sprite": 558,
- "name": "Energy Transfer",
- "xp": 100
- },
- {
- "level": 92,
- "sprite": 336,
- "name": "Blood Barrage",
- "xp": 51
- },
- {
- "level": 92,
- "sprite": 560,
- "name": "Heal Other",
- "xp": 101
- },
- {
- "level": 92,
- "sprite": 1312,
- "name": "Sinister Offering",
- "xp": 180
- },
- {
- "level": 93,
- "sprite": 561,
- "name": "Vengeance Other",
- "xp": 108
- },
- {
- "level": 93,
- "sprite": 361,
- "name": "Enchant Zenyte Jewellery",
- "xp": 110
- },
- {
- "level": 94,
- "sprite": 328,
- "name": "Ice Barrage",
- "xp": 52
- },
- {
- "level": 94,
- "sprite": 564,
- "name": "Vengeance",
- "xp": 112
- },
- {
- "level": 95,
- "sprite": 566,
- "name": "Heal Group",
- "xp": 124
- },
- {
- "level": 95,
- "sprite": 365,
- "name": "Fire Surge",
- "xp": 51
- },
- {
- "level": 96,
- "sprite": 348,
- "name": "Ghorrock Teleport",
- "xp": 106
- },
- {
- "level": 96,
- "sprite": 582,
- "name": "Spellbook Swap",
- "xp": 130
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json
deleted file mode 100644
index a944c4782f..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_mining.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Prospector Outfit (+2.5%)",
- "value": 0.025
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 434,
- "name": "Clay",
- "xp": 5
- },
- {
- "level": 1,
- "icon": 1436,
- "name": "Rune Essence",
- "xp": 5
- },
- {
- "level": 1,
- "icon": 436,
- "name": "Copper Ore",
- "xp": 17.5
- },
- {
- "level": 1,
- "icon": 438,
- "name": "Tin Ore",
- "xp": 17.5
- },
- {
- "level": 10,
- "icon": 3211,
- "name": "Limestone",
- "xp": 26.5
- },
- {
- "level": 14,
- "icon": 25683,
- "name": "Barronite shards",
- "xp": 16
- },
- {
- "level": 14,
- "icon": 25684,
- "name": "Barronite deposit",
- "xp": 32
- },
- {
- "level": 15,
- "icon": 440,
- "name": "Iron Ore",
- "xp": 35
- },
- {
- "level": 20,
- "icon": 442,
- "name": "Silver Ore",
- "xp": 40
- },
- {
- "level": 30,
- "icon": 7936,
- "name": "Pure Essence",
- "xp": 5
- },
- {
- "level": 30,
- "icon": 453,
- "name": "Coal",
- "xp": 50
- },
- {
- "level": 35,
- "icon": 6977,
- "name": "Sandstone (10kg)",
- "xp": 60
- },
- {
- "level": 35,
- "icon": 6975,
- "name": "Sandstone (5kg)",
- "xp": 50
- },
- {
- "level": 35,
- "icon": 6973,
- "name": "Sandstone (2kg)",
- "xp": 40
- },
- {
- "level": 35,
- "icon": 6971,
- "name": "Sandstone (1kg)",
- "xp": 30
- },
- {
- "level": 38,
- "icon": 13445,
- "name": "Dense Essence Block",
- "xp": 12
- },
- {
- "level": 40,
- "icon": 444,
- "name": "Gold Ore",
- "xp": 65
- },
- {
- "level": 40,
- "icon": 1629,
- "name": "Gem Rocks",
- "xp": 65
- },
- {
- "level": 45,
- "icon": 6979,
- "name": "Granite (500g)",
- "xp": 50
- },
- {
- "level": 45,
- "icon": 6981,
- "name": "Granite (2kg)",
- "xp": 60
- },
- {
- "level": 45,
- "icon": 6983,
- "name": "Granite (5kg)",
- "xp": 75
- },
- {
- "level": 55,
- "icon": 447,
- "name": "Mithril Ore",
- "xp": 80
- },
- {
- "level": 70,
- "icon": 1761,
- "name": "Soft Clay",
- "xp": 5
- },
- {
- "level": 70,
- "icon": 449,
- "name": "Adamantite Ore",
- "xp": 95
- },
- {
- "level": 85,
- "icon": 451,
- "name": "Runite Ore",
- "xp": 125
- },
- {
- "level": 92,
- "icon": 21347,
- "name": "Amethyst",
- "xp": 240
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json
deleted file mode 100644
index 9ebde37563..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_prayer.json
+++ /dev/null
@@ -1,397 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Lit Gilded Altar (350%)",
- "value": 2.5
- },
- {
- "name": "Ectofuntus (400%)",
- "value": 3
- },
- {
- "name": "Chaos Altar (700%)",
- "value": 6
- },
- {
- "name": "Morytania Diary 3 Shades(150%)",
- "value": 0.5
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 13447,
- "name": "Ensouled Goblin Head",
- "xp": 130,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13450,
- "name": "Ensouled Monkey Head",
- "xp": 182,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13453,
- "name": "Ensouled Imp Head",
- "xp": 286,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13456,
- "name": "Ensouled Minotaur Head",
- "xp": 364,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13459,
- "name": "Ensouled Scorpion Head",
- "xp": 454,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13462,
- "name": "Ensouled Bear Head",
- "xp": 480,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13465,
- "name": "Ensouled Unicorn Head",
- "xp": 494,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13468,
- "name": "Ensouled Dog Head",
- "xp": 520,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13471,
- "name": "Ensouled Chaos Druid Head",
- "xp": 584,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13474,
- "name": "Ensouled Giant Head",
- "xp": 650,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13477,
- "name": "Ensouled Ogre Head",
- "xp": 716,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13480,
- "name": "Ensouled Elf Head",
- "xp": 754,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13483,
- "name": "Ensouled Troll Head",
- "xp": 780,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13486,
- "name": "Ensouled Horror Head",
- "xp": 832,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13489,
- "name": "Ensouled Kalphite Head",
- "xp": 884,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13492,
- "name": "Ensouled Dagannoth Head",
- "xp": 936,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13495,
- "name": "Ensouled Bloodveld Head",
- "xp": 1040,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13498,
- "name": "Ensouled Tzhaar Head",
- "xp": 1104,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13501,
- "name": "Ensouled Demon Head",
- "xp": 1170,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13504,
- "name": "Ensouled Aviansie Head",
- "xp": 1234,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13507,
- "name": "Ensouled Abyssal Head",
- "xp": 1300,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 13510,
- "name": "Ensouled Dragon Head",
- "xp": 1560,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 25766,
- "name": "Fiendish Ashes",
- "xp": 10,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 25769,
- "name": "Vile Ashes",
- "xp": 25,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 25772,
- "name": "Malicious Ashes",
- "xp": 65,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 25775,
- "name": "Abyssal Ashes",
- "xp": 85,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 25778,
- "name": "Infernal Ashes",
- "xp": 110,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 526,
- "name": "Bones",
- "xp": 4.5
- },
- {
- "level": 1,
- "icon": 2859,
- "name": "Wolf Bones",
- "xp": 4.5
- },
- {
- "level": 1,
- "icon": 3396,
- "name": "Loar Remains",
- "xp": 33
- },
- {
- "level": 1,
- "icon": 528,
- "name": "Burnt Bones",
- "xp": 4.5
- },
- {
- "level": 1,
- "icon": 3179,
- "name": "Monkey Bones",
- "xp": 5
- },
- {
- "level": 1,
- "icon": 530,
- "name": "Bat Bones",
- "xp": 5.3
- },
- {
- "level": 1,
- "icon": 3125,
- "name": "Jogre Bones",
- "xp": 15
- },
- {
- "level": 1,
- "icon": 532,
- "name": "Big Bones",
- "xp": 15
- },
- {
- "level": 1,
- "icon": 4812,
- "name": "Zogre Bones",
- "xp": 22.5
- },
- {
- "level": 1,
- "icon": 3123,
- "name": "Shaikahan Bones",
- "xp": 25
- },
- {
- "level": 1,
- "icon": 534,
- "name": "Babydragon Bones",
- "xp": 30
- },
- {
- "level": 1,
- "icon": 3398,
- "name": "Phrin Remains",
- "xp": 46.5
- },
- {
- "level": 1,
- "icon": 22780,
- "name": "Wyrm Bones",
- "xp": 50
- },
- {
- "level": 1,
- "icon": 3400,
- "name": "Riyl Remains",
- "xp": 59.5
- },
- {
- "level": 1,
- "icon": 6812,
- "name": "Wyvern Bones",
- "xp": 72
- },
- {
- "level": 1,
- "icon": 536,
- "name": "Dragon Bones",
- "xp": 72
- },
- {
- "level": 1,
- "icon": 22783,
- "name": "Drake Bones",
- "xp": 80
- },
- {
- "level": 1,
- "icon": 3402,
- "name": "Asyn Remains",
- "xp": 82.5
- },
- {
- "level": 1,
- "icon": 4830,
- "name": "Fayrg Bones",
- "xp": 84
- },
- {
- "level": 1,
- "icon": 3404,
- "name": "Fiyr Remains",
- "xp": 84
- },
- {
- "level": 1,
- "icon": 11943,
- "name": "Lava Dragon Bones",
- "xp": 85
- },
- {
- "level": 1,
- "icon": 4832,
- "name": "Raurg Bones",
- "xp": 96
- },
- {
- "level": 1,
- "icon": 22786,
- "name": "Hydra Bones",
- "xp": 110
- },
- {
- "level": 1,
- "icon": 6729,
- "name": "Dagannoth Bones",
- "xp": 125
- },
- {
- "level": 1,
- "icon": 4834,
- "name": "Ourg Bones",
- "xp": 140
- },
- {
- "level": 70,
- "icon": 22124,
- "name": "Superior Dragon Bones",
- "xp": 150
- },
- {
- "level": 1,
- "icon": 25419,
- "name": "Urium Remains",
- "xp": 120
- },
- {
- "level": 1,
- "icon": 25654,
- "name": "Guppy",
- "xp": 4
- },
- {
- "level": 1,
- "icon": 25660,
- "name": "Cavefish",
- "xp": 7
- },
- {
- "level": 1,
- "icon": 25666,
- "name": "Tetra",
- "xp": 10
- },
- {
- "level": 1,
- "icon": 25672,
- "name": "Cavefish",
- "xp": 16
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json
deleted file mode 100644
index 901196750e..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_runecraft.json
+++ /dev/null
@@ -1,240 +0,0 @@
-{
- "bonuses": [
- {
- "name": "Daeyalt essence (+50%)",
- "value": 0.5
- }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 5527,
- "name": "Air Tiara",
- "xp": 25,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5529,
- "name": "Mind Tiara",
- "xp": 27.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5531,
- "name": "Water Tiara",
- "xp": 30,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5535,
- "name": "Earth Tiara",
- "xp": 32.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5537,
- "name": "Fire Tiara",
- "xp": 35,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5533,
- "name": "Body Tiara",
- "xp": 37.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5539,
- "name": "Cosmic Tiara",
- "xp": 40,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5543,
- "name": "Chaos Tiara",
- "xp": 42.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5541,
- "name": "Nature Tiara",
- "xp": 45,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5545,
- "name": "Law Tiara",
- "xp": 47.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 5547,
- "name": "Death Tiara",
- "xp": 50,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 22121,
- "name": "Wrath Tiara",
- "xp": 52.5,
- "ignoreBonus": true
- },
- {
- "level": 1,
- "icon": 556,
- "name": "Air Rune",
- "xp": 5
- },
- {
- "level": 2,
- "icon": 558,
- "name": "Mind Rune",
- "xp": 5.5
- },
- {
- "level": 2,
- "icon": 25696,
- "name": "Mind core",
- "xp": 55
- },
- {
- "level": 5,
- "icon": 555,
- "name": "Water Rune",
- "xp": 6
- },
- {
- "level": 6,
- "icon": 4695,
- "name": "Mist Rune",
- "xp": 8.5
- },
- {
- "level": 9,
- "icon": 557,
- "name": "Earth Rune",
- "xp": 6.5
- },
- {
- "level": 10,
- "icon": 4696,
- "name": "Dust Rune",
- "xp": 9
- },
- {
- "level": 13,
- "icon": 4698,
- "name": "Mud Rune",
- "xp": 9.5
- },
- {
- "level": 14,
- "icon": 554,
- "name": "Fire Rune",
- "xp": 7
- },
- {
- "level": 15,
- "icon": 4697,
- "name": "Smoke Rune",
- "xp": 9.5
- },
- {
- "level": 19,
- "icon": 4694,
- "name": "Steam Rune",
- "xp": 10
- },
- {
- "level": 20,
- "icon": 559,
- "name": "Body Rune",
- "xp": 7.5
- },
- {
- "level": 20,
- "icon": 25698,
- "name": "Body core",
- "xp": 75
- },
- {
- "level": 23,
- "icon": 4699,
- "name": "Lava Rune",
- "xp": 10.5
- },
- {
- "level": 27,
- "icon": 564,
- "name": "Cosmic Rune",
- "xp": 8
- },
- {
- "level": 35,
- "icon": 562,
- "name": "Chaos Rune",
- "xp": 8.5
- },
- {
- "level": 35,
- "icon": 25700,
- "name": "Chaos core",
- "xp": 85
- },
- {
- "level": 40,
- "icon": 9075,
- "name": "Astral Rune",
- "xp": 8.7
- },
- {
- "level": 44,
- "icon": 561,
- "name": "Nature Rune",
- "xp": 9
- },
- {
- "level": 54,
- "icon": 563,
- "name": "Law Rune",
- "xp": 9.5
- },
- {
- "level": 65,
- "icon": 560,
- "name": "Death Rune",
- "xp": 10
- },
- {
- "level": 77,
- "icon": 565,
- "name": "Blood Rune",
- "xp": 24.425,
- "ignoreBonus": true
- },
- {
- "level": 90,
- "icon": 566,
- "name": "Soul Rune",
- "xp": 30.325,
- "ignoreBonus": true
- },
- {
- "level": 95,
- "icon": 21880,
- "name": "Wrath Rune",
- "xp": 8
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json
deleted file mode 100644
index bf829f53b6..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_smithing.json
+++ /dev/null
@@ -1,1090 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 2349,
- "name": "Bronze Bar",
- "xp": 6.3
- },
- {
- "level": 1,
- "icon": 1351,
- "name": "Bronze Axe",
- "xp": 12.5
- },
- {
- "level": 1,
- "icon": 1205,
- "name": "Bronze Dagger",
- "xp": 12.5
- },
- {
- "level": 2,
- "icon": 1422,
- "name": "Bronze Mace",
- "xp": 12.5
- },
- {
- "level": 3,
- "icon": 1139,
- "name": "Bronze Med Helm",
- "xp": 12.5
- },
- {
- "level": 3,
- "icon": 9375,
- "name": "Bronze Bolts (Unf)",
- "xp": 12.5
- },
- {
- "level": 4,
- "icon": 4819,
- "name": "Bronze Nails",
- "xp": 12.5
- },
- {
- "level": 4,
- "icon": 1277,
- "name": "Bronze Sword",
- "xp": 12.5
- },
- {
- "level": 4,
- "icon": 1794,
- "name": "Bronze Wire",
- "xp": 12.5
- },
- {
- "level": 4,
- "icon": 819,
- "name": "Bronze Dart Tip",
- "xp": 12.5
- },
- {
- "level": 5,
- "icon": 39,
- "name": "Bronze Arrowtips",
- "xp": 12.5
- },
- {
- "level": 5,
- "icon": 1321,
- "name": "Bronze Scimitar",
- "xp": 25
- },
- {
- "level": 5,
- "icon": 11367,
- "name": "Bronze Hasta",
- "xp": 25
- },
- {
- "level": 5,
- "icon": 1237,
- "name": "Bronze Spear",
- "xp": 25
- },
- {
- "level": 6,
- "icon": 19570,
- "name": "Bronze Javelin Heads",
- "xp": 12.5
- },
- {
- "level": 6,
- "icon": 1291,
- "name": "Bronze Longsword",
- "xp": 25
- },
- {
- "level": 6,
- "icon": 9420,
- "name": "Bronze Limbs",
- "xp": 12.5
- },
- {
- "level": 7,
- "icon": 864,
- "name": "Bronze Knife",
- "xp": 12.5
- },
- {
- "level": 7,
- "icon": 1155,
- "name": "Bronze Full Helm",
- "xp": 25
- },
- {
- "level": 8,
- "icon": 1173,
- "name": "Bronze Sq Shield",
- "xp": 25
- },
- {
- "level": 9,
- "icon": 1337,
- "name": "Bronze Warhammer",
- "xp": 37.5
- },
- {
- "level": 10,
- "icon": 1375,
- "name": "Bronze Battleaxe",
- "xp": 37.5
- },
- {
- "level": 11,
- "icon": 1103,
- "name": "Bronze Chainbody",
- "xp": 37.5
- },
- {
- "level": 12,
- "icon": 1189,
- "name": "Bronze Kiteshield",
- "xp": 37.5
- },
- {
- "level": 13,
- "icon": 3095,
- "name": "Bronze Claws",
- "xp": 25
- },
- {
- "level": 14,
- "icon": 1307,
- "name": "Bronze 2h Sword",
- "xp": 37.5
- },
- {
- "level": 14,
- "icon": 25684,
- "name": "Barronite deposits",
- "xp": 30
- },
- {
- "level": 15,
- "icon": 2351,
- "name": "Iron Bar",
- "xp": 12.5
- },
- {
- "level": 15,
- "icon": 1203,
- "name": "Iron Dagger",
- "xp": 25
- },
- {
- "level": 16,
- "icon": 1349,
- "name": "Iron Axe",
- "xp": 25
- },
- {
- "level": 16,
- "icon": 1075,
- "name": "Bronze Platelegs",
- "xp": 37.5
- },
- {
- "level": 16,
- "icon": 1087,
- "name": "Bronze Plateskirt",
- "xp": 37.5
- },
- {
- "level": 17,
- "icon": 7225,
- "name": "Iron Spit",
- "xp": 25
- },
- {
- "level": 17,
- "icon": 1420,
- "name": "Iron Mace",
- "xp": 25
- },
- {
- "level": 18,
- "icon": 9377,
- "name": "Iron Bolts (Unf)",
- "xp": 25
- },
- {
- "level": 18,
- "icon": 1117,
- "name": "Bronze Platebody",
- "xp": 62.5
- },
- {
- "level": 18,
- "icon": 1137,
- "name": "Iron Med Helm",
- "xp": 25
- },
- {
- "level": 19,
- "icon": 4820,
- "name": "Iron Nails",
- "xp": 25
- },
- {
- "level": 19,
- "icon": 820,
- "name": "Iron Dart Tip",
- "xp": 25
- },
- {
- "level": 19,
- "icon": 1279,
- "name": "Iron Sword",
- "xp": 25
- },
- {
- "level": 20,
- "icon": 2355,
- "name": "Silver Bar",
- "xp": 13.7
- },
- {
- "level": 20,
- "icon": 40,
- "name": "Iron Arrowtips",
- "xp": 25
- },
- {
- "level": 20,
- "icon": 1323,
- "name": "Iron Scimitar",
- "xp": 50
- },
- {
- "level": 20,
- "icon": 11369,
- "name": "Iron Hasta",
- "xp": 50
- },
- {
- "level": 20,
- "icon": 1239,
- "name": "Iron Spear",
- "xp": 50
- },
- {
- "level": 21,
- "icon": 1293,
- "name": "Iron Longsword",
- "xp": 50
- },
- {
- "level": 21,
- "icon": 19572,
- "name": "Iron Javelin Heads",
- "xp": 25
- },
- {
- "level": 22,
- "icon": 1153,
- "name": "Iron Full Helm",
- "xp": 50
- },
- {
- "level": 22,
- "icon": 863,
- "name": "Iron Knife",
- "xp": 25
- },
- {
- "level": 23,
- "icon": 9423,
- "name": "Iron Limbs",
- "xp": 25
- },
- {
- "level": 23,
- "icon": 1175,
- "name": "Iron Sq Shield",
- "xp": 50
- },
- {
- "level": 24,
- "icon": 1335,
- "name": "Iron Warhammer",
- "xp": 75
- },
- {
- "level": 25,
- "icon": 1363,
- "name": "Iron Battleaxe",
- "xp": 75
- },
- {
- "level": 26,
- "icon": 4540,
- "name": "Oil Lantern Frame",
- "xp": 25
- },
- {
- "level": 26,
- "icon": 1101,
- "name": "Iron Chainbody",
- "xp": 75
- },
- {
- "level": 27,
- "icon": 1191,
- "name": "Iron Kiteshield",
- "xp": 75
- },
- {
- "level": 28,
- "icon": 3096,
- "name": "Iron Claws",
- "xp": 50
- },
- {
- "level": 29,
- "icon": 1309,
- "name": "Iron 2h Sword",
- "xp": 75
- },
- {
- "level": 30,
- "icon": 1207,
- "name": "Steel Dagger",
- "xp": 37.5
- },
- {
- "level": 30,
- "icon": 2353,
- "name": "Steel Bar",
- "xp": 17.5
- },
- {
- "level": 31,
- "icon": 1081,
- "name": "Iron Plateskirt",
- "xp": 75
- },
- {
- "level": 31,
- "icon": 1067,
- "name": "Iron Platelegs",
- "xp": 75
- },
- {
- "level": 31,
- "icon": 1353,
- "name": "Steel Axe",
- "xp": 37.5
- },
- {
- "level": 32,
- "icon": 1424,
- "name": "Steel Mace",
- "xp": 37.5
- },
- {
- "level": 33,
- "icon": 1115,
- "name": "Iron Platebody",
- "xp": 125
- },
- {
- "level": 33,
- "icon": 1141,
- "name": "Steel Med Helm",
- "xp": 37.5
- },
- {
- "level": 33,
- "icon": 9378,
- "name": "Steel Bolts (Unf)",
- "xp": 37.5
- },
- {
- "level": 34,
- "icon": 821,
- "name": "Steel Dart Tip",
- "xp": 37.5
- },
- {
- "level": 34,
- "icon": 1539,
- "name": "Steel Nails",
- "xp": 37.5
- },
- {
- "level": 34,
- "icon": 1281,
- "name": "Steel Sword",
- "xp": 37.5
- },
- {
- "level": 35,
- "icon": 2,
- "name": "Cannonball",
- "xp": 25.6
- },
- {
- "level": 35,
- "icon": 1325,
- "name": "Steel Scimitar",
- "xp": 75
- },
- {
- "level": 35,
- "icon": 41,
- "name": "Steel Arrowtips",
- "xp": 37.5
- },
- {
- "level": 35,
- "icon": 11371,
- "name": "Steel Hasta",
- "xp": 75
- },
- {
- "level": 35,
- "icon": 1241,
- "name": "Steel Spear",
- "xp": 75
- },
- {
- "level": 36,
- "icon": 9425,
- "name": "Steel Limbs",
- "xp": 37.5
- },
- {
- "level": 36,
- "icon": 2370,
- "name": "Steel Studs",
- "xp": 37.5
- },
- {
- "level": 36,
- "icon": 1295,
- "name": "Steel Longsword",
- "xp": 75
- },
- {
- "level": 36,
- "icon": 19574,
- "name": "Steel Javelin Heads",
- "xp": 37.5
- },
- {
- "level": 37,
- "icon": 865,
- "name": "Steel Knife",
- "xp": 37.5
- },
- {
- "level": 37,
- "icon": 1157,
- "name": "Steel Full Helm",
- "xp": 75
- },
- {
- "level": 38,
- "icon": 1177,
- "name": "Steel Sq Shield",
- "xp": 75
- },
- {
- "level": 39,
- "icon": 1339,
- "name": "Steel Warhammer",
- "xp": 112.5
- },
- {
- "level": 40,
- "icon": 1365,
- "name": "Steel Battleaxe",
- "xp": 112.5
- },
- {
- "level": 40,
- "icon": 2357,
- "name": "Gold Bar (Goldsmith Gauntlets)",
- "xp": 56.2
- },
- {
- "level": 40,
- "icon": 2357,
- "name": "Gold Bar",
- "xp": 22.5
- },
- {
- "level": 41,
- "icon": 1105,
- "name": "Steel Chainbody",
- "xp": 112.5
- },
- {
- "level": 42,
- "icon": 1193,
- "name": "Steel Kiteshield",
- "xp": 112.5
- },
- {
- "level": 43,
- "icon": 3097,
- "name": "Steel Claws",
- "xp": 75
- },
- {
- "level": 44,
- "icon": 1311,
- "name": "Steel 2h Sword",
- "xp": 112.5
- },
- {
- "level": 46,
- "icon": 1069,
- "name": "Steel Platelegs",
- "xp": 112.5
- },
- {
- "level": 46,
- "icon": 1083,
- "name": "Steel Plateskirt",
- "xp": 112.5
- },
- {
- "level": 48,
- "icon": 1119,
- "name": "Steel Platebody",
- "xp": 187.5
- },
- {
- "level": 49,
- "icon": 4544,
- "name": "Bullseye Lantern (Unf)",
- "xp": 37
- },
- {
- "level": 50,
- "icon": 1209,
- "name": "Mithril Dagger",
- "xp": 50
- },
- {
- "level": 50,
- "icon": 2359,
- "name": "Mithril Bar",
- "xp": 30
- },
- {
- "level": 51,
- "icon": 1355,
- "name": "Mithril Axe",
- "xp": 50
- },
- {
- "level": 52,
- "icon": 1428,
- "name": "Mithril Mace",
- "xp": 50
- },
- {
- "level": 53,
- "icon": 1143,
- "name": "Mithril Med Helm",
- "xp": 50
- },
- {
- "level": 53,
- "icon": 9379,
- "name": "Mithril Bolts (Unf)",
- "xp": 50
- },
- {
- "level": 54,
- "icon": 1285,
- "name": "Mithril Sword",
- "xp": 50
- },
- {
- "level": 54,
- "icon": 822,
- "name": "Mithril Dart Tip",
- "xp": 50
- },
- {
- "level": 54,
- "icon": 4822,
- "name": "Mithril Nails",
- "xp": 50
- },
- {
- "level": 55,
- "icon": 42,
- "name": "Mithril Arrowtips",
- "xp": 50
- },
- {
- "level": 55,
- "icon": 1329,
- "name": "Mithril Scimitar",
- "xp": 100
- },
- {
- "level": 55,
- "icon": 11373,
- "name": "Mithril Hasta",
- "xp": 100
- },
- {
- "level": 55,
- "icon": 1243,
- "name": "Mithril Spear",
- "xp": 100
- },
- {
- "level": 56,
- "icon": 1299,
- "name": "Mithril Longsword",
- "xp": 100
- },
- {
- "level": 56,
- "icon": 19576,
- "name": "Mithril Javelin Heads",
- "xp": 50
- },
- {
- "level": 56,
- "icon": 9427,
- "name": "Mithril Limbs",
- "xp": 50
- },
- {
- "level": 57,
- "icon": 1159,
- "name": "Mithril Full Helm",
- "xp": 100
- },
- {
- "level": 57,
- "icon": 866,
- "name": "Mithril Knife",
- "xp": 50
- },
- {
- "level": 58,
- "icon": 1181,
- "name": "Mithril Sq Shield",
- "xp": 100
- },
- {
- "level": 59,
- "icon": 9416,
- "name": "Mith Grapple Tip",
- "xp": 50
- },
- {
- "level": 59,
- "icon": 1343,
- "name": "Mithril Warhammer",
- "xp": 150
- },
- {
- "level": 60,
- "icon": 1187,
- "name": "Dragon Sq Shield",
- "xp": 75
- },
- {
- "level": 60,
- "icon": 1369,
- "name": "Mithril Battleaxe",
- "xp": 150
- },
- {
- "level": 61,
- "icon": 1109,
- "name": "Mithril Chainbody",
- "xp": 150
- },
- {
- "level": 62,
- "icon": 1197,
- "name": "Mithril Kiteshield",
- "xp": 150
- },
- {
- "level": 63,
- "icon": 3099,
- "name": "Mithril Claws",
- "xp": 100
- },
- {
- "level": 64,
- "icon": 1315,
- "name": "Mithril 2h Sword",
- "xp": 150
- },
- {
- "level": 66,
- "icon": 1085,
- "name": "Mithril Plateskirt",
- "xp": 150
- },
- {
- "level": 66,
- "icon": 1071,
- "name": "Mithril Platelegs",
- "xp": 150
- },
- {
- "level": 68,
- "icon": 1121,
- "name": "Mithril Platebody",
- "xp": 250
- },
- {
- "level": 70,
- "icon": 1211,
- "name": "Adamant Dagger",
- "xp": 62.5
- },
- {
- "level": 70,
- "icon": 2361,
- "name": "Adamantite Bar",
- "xp": 37.5
- },
- {
- "level": 71,
- "icon": 1357,
- "name": "Adamant Axe",
- "xp": 62.5
- },
- {
- "level": 72,
- "icon": 1430,
- "name": "Adamant Mace",
- "xp": 62.5
- },
- {
- "level": 73,
- "icon": 9380,
- "name": "Adamant Bolts (Unf)",
- "xp": 62.5
- },
- {
- "level": 73,
- "icon": 1145,
- "name": "Adamant Med Helm",
- "xp": 62.5
- },
- {
- "level": 74,
- "icon": 823,
- "name": "Adamant Dart Tip",
- "xp": 62.5
- },
- {
- "level": 74,
- "icon": 1287,
- "name": "Adamant Sword",
- "xp": 62.5
- },
- {
- "level": 74,
- "icon": 4823,
- "name": "Adamantite Nails",
- "xp": 62.5
- },
- {
- "level": 75,
- "icon": 43,
- "name": "Adamant Arrowtips",
- "xp": 62.5
- },
- {
- "level": 75,
- "icon": 1331,
- "name": "Adamant Scimitar",
- "xp": 125
- },
- {
- "level": 75,
- "icon": 11375,
- "name": "Adamant Hasta",
- "xp": 125
- },
- {
- "level": 75,
- "icon": 1245,
- "name": "Adamant Spear",
- "xp": 125
- },
- {
- "level": 76,
- "icon": 9429,
- "name": "Adamantite Limbs",
- "xp": 62.5
- },
- {
- "level": 76,
- "icon": 1301,
- "name": "Adamant Longsword",
- "xp": 125
- },
- {
- "level": 76,
- "icon": 19578,
- "name": "Adamant Javelin Heads",
- "xp": 62.5
- },
- {
- "level": 77,
- "icon": 1161,
- "name": "Adamant Full Helm",
- "xp": 125
- },
- {
- "level": 77,
- "icon": 867,
- "name": "Adamant Knife",
- "xp": 62.5
- },
- {
- "level": 78,
- "icon": 1183,
- "name": "Adamant Sq Shield",
- "xp": 125
- },
- {
- "level": 79,
- "icon": 1345,
- "name": "Adamant Warhammer",
- "xp": 187.5
- },
- {
- "level": 80,
- "icon": 1371,
- "name": "Adamant Battleaxe",
- "xp": 187.5
- },
- {
- "level": 81,
- "icon": 1111,
- "name": "Adamant Chainbody",
- "xp": 187.5
- },
- {
- "level": 82,
- "icon": 1199,
- "name": "Adamant Kiteshield",
- "xp": 187.5
- },
- {
- "level": 83,
- "icon": 3100,
- "name": "Adamant Claws",
- "xp": 125
- },
- {
- "level": 84,
- "icon": 1317,
- "name": "Adamant 2h Sword",
- "xp": 187.5
- },
- {
- "level": 85,
- "icon": 2363,
- "name": "Runite Bar",
- "xp": 50
- },
- {
- "level": 85,
- "icon": 1213,
- "name": "Rune Dagger",
- "xp": 75
- },
- {
- "level": 86,
- "icon": 1359,
- "name": "Rune Axe",
- "xp": 75
- },
- {
- "level": 86,
- "icon": 1091,
- "name": "Adamant Plateskirt",
- "xp": 187.5
- },
- {
- "level": 86,
- "icon": 1073,
- "name": "Adamant Platelegs",
- "xp": 187.5
- },
- {
- "level": 87,
- "icon": 1432,
- "name": "Rune Mace",
- "xp": 75
- },
- {
- "level": 88,
- "icon": 9381,
- "name": "Runite Bolts (Unf)",
- "xp": 75
- },
- {
- "level": 88,
- "icon": 1147,
- "name": "Rune Med Helm",
- "xp": 75
- },
- {
- "level": 88,
- "icon": 1123,
- "name": "Adamant Platebody",
- "xp": 312.5
- },
- {
- "level": 89,
- "icon": 1289,
- "name": "Rune Sword",
- "xp": 75
- },
- {
- "level": 89,
- "icon": 4824,
- "name": "Rune Nails",
- "xp": 75
- },
- {
- "level": 89,
- "icon": 824,
- "name": "Rune Dart Tip",
- "xp": 75
- },
- {
- "level": 90,
- "icon": 44,
- "name": "Rune Arrowtips",
- "xp": 75
- },
- {
- "level": 90,
- "icon": 1333,
- "name": "Rune Scimitar",
- "xp": 150
- },
- {
- "level": 90,
- "icon": 11377,
- "name": "Rune Hasta",
- "xp": 150
- },
- {
- "level": 90,
- "icon": 1247,
- "name": "Rune Spear",
- "xp": 150
- },
- {
- "level": 90,
- "icon": 11283,
- "name": "Dragonfire Shield",
- "xp": 2000
- },
- {
- "level": 91,
- "icon": 1303,
- "name": "Rune Longsword",
- "xp": 150
- },
- {
- "level": 91,
- "icon": 19580,
- "name": "Rune Javelin Heads",
- "xp": 75
- },
- {
- "level": 91,
- "icon": 9431,
- "name": "Runite Limbs",
- "xp": 75
- },
- {
- "level": 92,
- "icon": 868,
- "name": "Rune Knife",
- "xp": 75
- },
- {
- "level": 92,
- "icon": 1163,
- "name": "Rune Full Helm",
- "xp": 150
- },
- {
- "level": 93,
- "icon": 1185,
- "name": "Rune Sq Shield",
- "xp": 150
- },
- {
- "level": 94,
- "icon": 1347,
- "name": "Rune Warhammer",
- "xp": 225
- },
- {
- "level": 95,
- "icon": 1373,
- "name": "Rune Battleaxe",
- "xp": 225
- },
- {
- "level": 96,
- "icon": 1113,
- "name": "Rune Chainbody",
- "xp": 225
- },
- {
- "level": 97,
- "icon": 1201,
- "name": "Rune Kiteshield",
- "xp": 225
- },
- {
- "level": 98,
- "icon": 3101,
- "name": "Rune Claws",
- "xp": 150
- },
- {
- "level": 99,
- "icon": 1127,
- "name": "Rune Platebody",
- "xp": 375
- },
- {
- "level": 99,
- "icon": 1093,
- "name": "Rune Plateskirt",
- "xp": 225
- },
- {
- "level": 99,
- "icon": 1079,
- "name": "Rune Platelegs",
- "xp": 225
- },
- {
- "level": 99,
- "icon": 1319,
- "name": "Rune 2h Sword",
- "xp": 225
- }
- ]
-}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json
deleted file mode 100644
index f23248c568..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_thieving.json
+++ /dev/null
@@ -1,268 +0,0 @@
-{
- "actions": [
- {
- "level": 1,
- "icon": 3241,
- "name": "Man / Woman",
- "xp": 8
- },
- {
- "level": 1,
- "icon": 10851,
- "name": "Winter Sq'irkjuice",
- "xp": 350
- },
- {
- "level": 2,
- "icon": 1965,
- "name": "Vegetable Stall",
- "xp": 10
- },
- {
- "level": 5,
- "icon": 1891,
- "name": "Cake Stall",
- "xp": 16
- },
- {
- "level": 5,
- "icon": 4242,
- "name": "Tea Stall",
- "xp": 16
- },
- {
- "level": 5,
- "icon": 5601,
- "name": "Crafting Stall",
- "xp": 16
- },
- {
- "level": 5,
- "icon": 1963,
- "name": "Monkey Food Stall",
- "xp": 16
- },
- {
- "level": 10,
- "icon": 3243,
- "name": "Farmer",
- "xp": 14.5
- },
- {
- "level": 15,
- "icon": 4295,
- "name": "Female H.A.M. Member",
- "xp": 18.5
- },
- {
- "level": 20,
- "icon": 950,
- "name": "Silk Stall",
- "xp": 24
- },
- {
- "level": 20,
- "icon": 4297,
- "name": "Male H.A.M. Member",
- "xp": 22.5
- },
- {
- "level": 22,
- "icon": 7919,
- "name": "Wine Stall",
- "xp": 27
- },
- {
- "level": 25,
- "icon": 3245,
- "name": "Warrior Women / Al-Kharid Warrior",
- "xp": 26
- },
- {
- "level": 25,
- "icon": 464,
- "name": "Fruit Stall",
- "xp": 28
- },
- {
- "level": 25,
- "icon": 10848,
- "name": "Spring Sq'irkjuice",
- "xp": 1350
- },
- {
- "level": 27,
- "icon": 5318,
- "name": "Seed Stall",
- "xp": 10
- },
- {
- "level": 32,
- "icon": 3247,
- "name": "Rogue",
- "xp": 35.5
- },
- {
- "level": 35,
- "icon": 958,
- "name": "Fur Stall",
- "xp": 36
- },
- {
- "level": 36,
- "icon": 10998,
- "name": "Cave Goblin",
- "xp": 40
- },
- {
- "level": 38,
- "icon": 5068,
- "name": "Master Farmer",
- "xp": 43
- },
- {
- "level": 40,
- "icon": 3249,
- "name": "Guard",
- "xp": 46.8
- },
- {
- "level": 42,
- "icon": 331,
- "name": "Fish Stall",
- "xp": 42
- },
- {
- "level": 45,
- "icon": 6782,
- "name": "Bearded Pollnivnian Bandit",
- "xp": 65
- },
- {
- "level": 45,
- "icon": 3686,
- "name": "Fremennik Citizen",
- "xp": 65
- },
- {
- "level": 45,
- "icon": 10850,
- "name": "Autumn Sq'irkjuice",
- "xp": 2350
- },
- {
- "level": 49,
- "icon": 837,
- "name": "Crossbow Stall",
- "xp": 52
- },
- {
- "level": 50,
- "icon": 2355,
- "name": "Silver Stall",
- "xp": 54
- },
- {
- "level": 50,
- "icon": 5560,
- "name": "Wall Safe",
- "xp": 70
- },
- {
- "level": 53,
- "icon": 4625,
- "name": "Desert Bandit",
- "xp": 79.5
- },
- {
- "level": 55,
- "icon": 3251,
- "name": "Knight",
- "xp": 84.3
- },
- {
- "level": 55,
- "icon": 6781,
- "name": "Pollnivnian Bandit",
- "xp": 84.3
- },
- {
- "level": 65,
- "icon": 6422,
- "name": "Magic Stall",
- "xp": 100
- },
- {
- "level": 65,
- "icon": 1325,
- "name": "Scimitar Stall",
- "xp": 100
- },
- {
- "level": 65,
- "icon": 6780,
- "name": "Menaphite Thug",
- "xp": 137.5
- },
- {
- "level": 65,
- "icon": 2007,
- "name": "Spices Stall",
- "xp": 81
- },
- {
- "level": 65,
- "icon": 3253,
- "name": "Yanille Watchman",
- "xp": 137.5
- },
- {
- "level": 65,
- "icon": 10849,
- "name": "Summer Sq'irkjuice",
- "xp": 3000
- },
- {
- "level": 70,
- "icon": 3255,
- "name": "Paladin",
- "xp": 151.8
- },
- {
- "level": 75,
- "icon": 3257,
- "name": "Gnome",
- "xp": 198.5
- },
- {
- "level": 75,
- "icon": 1607,
- "name": "Gems Stall",
- "xp": 160
- },
- {
- "level": 80,
- "icon": 3259,
- "name": "Hero",
- "xp": 275
- },
- {
- "level": 82,
- "icon": 24702,
- "name": "Vyre",
- "xp": 306.9
- },
- {
- "level": 85,
- "icon": 6105,
- "name": "Elf",
- "xp": 353
- },
- {
- "level": 90,
- "icon": 21278,
- "name": "TzHaar-Hur",
- "xp": 103.4
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json
deleted file mode 100644
index 8a72413c99..0000000000
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "bonuses": [
- { "name": "Lumberjack Outfit (+2.5%)", "value": 0.025 }
- ],
- "actions": [
- {
- "level": 1,
- "icon": 1511,
- "name": "Logs",
- "xp": 25
- },
- {
- "level": 1,
- "icon": 2862,
- "name": "Achey Tree Logs",
- "xp": 25
- },
- {
- "level": 15,
- "icon": 1521,
- "name": "Oak Logs",
- "xp": 37.5
- },
- {
- "level": 30,
- "icon": 1519,
- "name": "Willow Logs",
- "xp": 67.5
- },
- {
- "level": 35,
- "icon": 6333,
- "name": "Teak Logs",
- "xp": 85
- },
- {
- "level": 45,
- "icon": 3239,
- "name": "Bark",
- "xp": 82.5
- },
- {
- "level": 45,
- "icon": 1517,
- "name": "Maple Logs",
- "xp": 100
- },
- {
- "level": 50,
- "icon": 6332,
- "name": "Mahogany Logs",
- "xp": 125
- },
- {
- "level": 54,
- "icon": 10810,
- "name": "Arctic Pine Logs",
- "xp": 40
- },
- {
- "level": 60,
- "icon": 1515,
- "name": "Yew Logs",
- "xp": 175
- },
- {
- "level": 62,
- "icon": 24691,
- "name": "Blisterwood Logs",
- "xp": 76
- },
- {
- "level": 65,
- "icon": 21626,
- "name": "Sulliusceps",
- "xp": 127
- },
- {
- "level": 75,
- "icon": 1513,
- "name": "Magic Logs",
- "xp": 250
- },
- {
- "level": 90,
- "icon": 19669,
- "name": "Redwood Logs",
- "xp": 380
- }
- ]
-}
\ No newline at end of file
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/skillcalculator/CalculatorTypeTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/skillcalculator/CalculatorTypeTest.java
new file mode 100644
index 0000000000..df5ee04041
--- /dev/null
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/skillcalculator/CalculatorTypeTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2021, Jordan Atwood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.runelite.client.plugins.skillcalculator;
+
+import net.runelite.client.plugins.skillcalculator.skills.SkillAction;
+import static org.junit.Assert.fail;
+import org.junit.Test;
+
+public class CalculatorTypeTest
+{
+ @Test
+ public void skillActionsInLevelOrder()
+ {
+ for (final CalculatorType calculatorType : CalculatorType.values())
+ {
+ int level = 1;
+
+ for (final SkillAction skillAction : calculatorType.getSkillActions())
+ {
+ if (skillAction.getLevel() < level)
+ {
+ fail("Skill action " + skillAction + " is out of order for " + calculatorType.getSkill().getName());
+ }
+
+ level = skillAction.getLevel();
+ }
+ }
+ }
+}