achivement dairy plugin: Add satisfiesRequirement to Requirement (#12265)

Add satisfiesRequirement to Requirement interface that all other requirements implement Instead of using instanceOf to see if each requirement is satisfied.
This commit is contained in:
JZomerlei
2020-08-03 15:07:21 -05:00
committed by GitHub
parent e53e33d6fb
commit 53cba270b1
8 changed files with 55 additions and 44 deletions

View File

@@ -26,6 +26,7 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
@RequiredArgsConstructor
@Getter
@@ -38,4 +39,9 @@ public class CombatLevelRequirement implements Requirement
{
return level + " " + "Combat";
}
public boolean satisfiesRequirement(Client client)
{
return client.getLocalPlayer() == null ? false : client.getLocalPlayer().getCombatLevel() >= level;
}
}

View File

@@ -35,9 +35,7 @@ import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.FontTypeFace;
import net.runelite.api.QuestState;
import net.runelite.api.ScriptID;
import net.runelite.api.VarPlayer;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
@@ -277,7 +275,7 @@ public class DiaryRequirementsPlugin extends Plugin
assert !req.getRequirements().isEmpty();
for (Requirement ireq : req.getRequirements())
{
boolean satifisfied = satisfiesRequirement(ireq);
boolean satifisfied = ireq.satisfiesRequirement(client);
b.append(satifisfied ? "<col=000080><str>" : "<col=800000>");
b.append(ireq.toString());
b.append(satifisfied ? "</str>" : "<col=000080>");
@@ -292,45 +290,4 @@ public class DiaryRequirementsPlugin extends Plugin
}
return reqs;
}
private boolean satisfiesRequirement(Requirement r)
{
if (r instanceof OrRequirement)
{
return ((OrRequirement) r).getRequirements()
.stream()
.anyMatch(this::satisfiesRequirement);
}
if (r instanceof SkillRequirement)
{
SkillRequirement s = (SkillRequirement) r;
return client.getRealSkillLevel(s.getSkill()) >= s.getLevel();
}
if (r instanceof CombatLevelRequirement)
{
return client.getLocalPlayer().getCombatLevel() >= ((CombatLevelRequirement) r).getLevel();
}
if (r instanceof QuestRequirement)
{
QuestRequirement q = (QuestRequirement) r;
QuestState state = q.getQuest().getState(client);
if (q.isStarted())
{
return state != QuestState.NOT_STARTED;
}
return state == QuestState.FINISHED;
}
if (r instanceof QuestPointRequirement)
{
return client.getVar(VarPlayer.QUEST_POINTS) >= ((QuestPointRequirement) r).getQp();
}
if (r instanceof FavourRequirement)
{
FavourRequirement f = (FavourRequirement) r;
int realFavour = client.getVar(f.getHouse().getVarbit());
return (realFavour / 10) >= f.getPercent();
}
log.warn("Unknown requirement {}", r);
return false;
}
}

View File

@@ -26,6 +26,7 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.Favour;
@RequiredArgsConstructor
@@ -40,4 +41,10 @@ public class FavourRequirement implements Requirement
{
return percent + "% " + house.getName() + " favour";
}
public boolean satisfiesRequirement(Client client)
{
int realFavour = client.getVar(house.getVarbit());
return (realFavour / 10) >= percent;
}
}

View File

@@ -28,6 +28,7 @@ import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import java.util.List;
import lombok.Getter;
import net.runelite.api.Client;
public class OrRequirement implements Requirement
{
@@ -44,4 +45,16 @@ public class OrRequirement implements Requirement
{
return Joiner.on(" or ").join(requirements);
}
public boolean satisfiesRequirement(Client client)
{
for (Requirement r : getRequirements())
{
if (r.satisfiesRequirement(client))
{
return true;
}
}
return false;
}
}

View File

@@ -26,6 +26,8 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.VarPlayer;
@RequiredArgsConstructor
@Getter
@@ -38,4 +40,9 @@ public class QuestPointRequirement implements Requirement
{
return qp + " " + "Quest points";
}
public boolean satisfiesRequirement(Client client)
{
return client.getVar(VarPlayer.QUEST_POINTS) >= qp;
}
}

View File

@@ -26,7 +26,9 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.Quest;
import net.runelite.api.QuestState;
@Getter
@RequiredArgsConstructor
@@ -50,4 +52,14 @@ public class QuestRequirement implements Requirement
return quest.getName();
}
public boolean satisfiesRequirement(Client client)
{
QuestState questState = quest.getState(client);
if (started)
{
return questState != QuestState.NOT_STARTED;
}
return questState == QuestState.FINISHED;
}
}

View File

@@ -24,6 +24,9 @@
*/
package net.runelite.client.plugins.achievementdiary;
import net.runelite.api.Client;
public interface Requirement
{
boolean satisfiesRequirement(Client client);
}

View File

@@ -26,6 +26,7 @@ package net.runelite.client.plugins.achievementdiary;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.Skill;
@RequiredArgsConstructor
@@ -40,4 +41,9 @@ public class SkillRequirement implements Requirement
{
return level + " " + skill.getName();
}
public boolean satisfiesRequirement(Client client)
{
return client.getRealSkillLevel(skill) >= level;
}
}