Add getter for skill experience (#76)

This commit is contained in:
Nicholas Bailey
2017-06-10 14:12:49 -04:00
committed by Adam
parent ba2062816a
commit f0b707a1b8
3 changed files with 63 additions and 8 deletions

View File

@@ -354,4 +354,39 @@ public class Client
{ {
return client.getClanChatCount(); return client.getClanChatCount();
} }
/**
* Returns the local player's current experience in the specified {@link Skill}.
*
* @param skill the {@link Skill} to retrieve the experience for
* @return the local player's current experience in the specified {@link Skill}, or -1 if the {@link Skill} isn't
* valid
*/
public int getSkillExperience(Skill skill)
{
int[] experiences = client.getSkillExperiences();
if (skill == Skill.OVERALL)
{
int totalExperience = 0;
for (int experience : experiences)
{
totalExperience += experience;
}
return totalExperience;
}
int idx = skill.ordinal();
// I'm not certain exactly how needed this is, but if the Skill enum is updated in the future
// to hold something else that's not reported it'll save us from an ArrayIndexOutOfBoundsException.
if (idx >= experiences.length)
{
return -1;
}
return experiences[idx];
}
} }

View File

@@ -25,18 +25,30 @@
package net.runelite.client.events; package net.runelite.client.events;
import net.runelite.api.Skill;
public class ExperienceChanged public class ExperienceChanged
{ {
/** the index in the array which changed */ /**
private int index; * The {@link Skill} that had its experience changed.
*/
private Skill skill;
public int getIndex() /**
* Returns the {@link Skill} that had its experience changed
* @return the {@link Skill} that had its experience changed
*/
public Skill getSkill()
{ {
return index; return skill;
} }
public void setIndex(int index) /**
* Sets the changed {@link Skill} to the specified {@link Skill}.
* @param skill the {@link Skill} that had its experience changed
*/
public void setSkill(Skill skill)
{ {
this.index = index; this.skill = skill;
} }
} }

View File

@@ -24,6 +24,7 @@
*/ */
package net.runelite.inject.callbacks; package net.runelite.inject.callbacks;
import net.runelite.api.Skill;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.events.ExperienceChanged; import net.runelite.client.events.ExperienceChanged;
import net.runelite.client.events.MapRegionChanged; import net.runelite.client.events.MapRegionChanged;
@@ -52,8 +53,15 @@ public class Hooks
case "experienceChanged": case "experienceChanged":
{ {
ExperienceChanged experienceChanged = new ExperienceChanged(); ExperienceChanged experienceChanged = new ExperienceChanged();
experienceChanged.setIndex(idx); Skill[] possibleSkills = Skill.values();
runelite.getEventBus().post(experienceChanged);
// We subtract one here because 'Overall' isn't considered a skill that's updated.
if (idx < possibleSkills.length - 1)
{
Skill updatedSkill = possibleSkills[idx];
experienceChanged.setSkill(updatedSkill);
runelite.getEventBus().post(experienceChanged);
}
break; break;
} }
case "mapRegionsChanged": case "mapRegionsChanged":