Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2021-10-01 10:42:22 +02:00
68 changed files with 2764 additions and 8303 deletions

View File

@@ -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;

View File

@@ -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));

View File

@@ -2008,6 +2008,7 @@ public class ChatCommandsPlugin extends Plugin
case "cgaunt":
case "cgauntlet":
case "the corrupted gauntlet":
case "cg":
return "Corrupted Gauntlet";
// The Nightmare

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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;
}
@Nullable
private final SkillBonus[] skillBonuses;
private final SkillAction[] skillActions;
}

View File

@@ -1,4 +1,4 @@
/**
/*
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2018, Psikoi <https://github.com/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<UIActionSlot> uiActionSlots = new ArrayList<>();
private final CacheSkillData cacheSkillData = new CacheSkillData();
private final UICombinedActionSlot combinedActionSlot;
private final ArrayList<UIActionSlot> combinedActionSlots = new ArrayList<>();
private final List<JCheckBox> 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<FocusEvent> focusLostConsumer)
private static FocusAdapter buildFocusAdapter(Consumer<FocusEvent> focusLostConsumer)
{
return new FocusAdapter()
{

View File

@@ -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++;

View File

@@ -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")

View File

@@ -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");

View File

@@ -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;

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,209 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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 ConstructionBonus implements SkillBonus
{
CARPENTERS_OUTFIT("Carpenter's Outfit (+2.5%)", 0.025f),
;
private final String name;
private final float value;
}

View File

@@ -0,0 +1,163 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,174 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,104 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}
FARMERS_OUTFIT("Farmer's Outfit (+2.5%)", 0.025f),
;
private final String name;
private final float value;
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,74 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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 FishingBonus implements SkillBonus
{
private String name;
private int level;
private double xp;
private Integer icon;
private Integer sprite;
private boolean ignoreBonus;
}
ANGLERS_OUTFIT("Angler's Outfit (+2.5%)", 0.025f),
;
private final String name;
private final float value;
}

View File

@@ -0,0 +1,138 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,112 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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 involving an item which grants some xp.
*/
public interface ItemSkillAction extends SkillAction
{
/**
* Gets the item ID used for this action.
*
* @return The item ID used for this action.
* @see net.runelite.api.ItemID
*/
int getItemId();
/**
* 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()
{
return getItemId();
}
/**
* 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();
}
}

View File

@@ -0,0 +1,228 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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();
}
}

View File

@@ -0,0 +1,68 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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 SkillData
@AllArgsConstructor
@Getter(onMethod_ = @Override)
public enum MiningBonus implements SkillBonus
{
private SkillDataEntry[] actions;
private SkillDataBonus[] bonuses;
}
PROSPECTOR_KIT("Prospector Kit (+2.5%)", 0.025f),
;
private final String name;
private final float value;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, Kruithne <kruithne@gmail.com>
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -22,38 +22,25 @@
* (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 which grants some xp, with an explicitly defined name field.
*/
public interface NamedSkillAction extends SkillAction
{
private final Map<String, SkillData> cache = new HashMap<>();
/**
* 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();
SkillData getSkillData(String dataFile)
@Override
default String getName(ItemManager itemManager)
{
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 getName();
}
}
}

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,77 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,98 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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.
* <p>
* 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.
* <p>
* 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;
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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();
}

View File

@@ -0,0 +1,221 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,89 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, Jordan Atwood <nightfirecat@protonmail.com>
* 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;
}

View File

@@ -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;