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.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter
@@ -38,4 +39,9 @@ public class CombatLevelRequirement implements Requirement
{ {
return level + " " + "Combat"; 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 lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.FontTypeFace; import net.runelite.api.FontTypeFace;
import net.runelite.api.QuestState;
import net.runelite.api.ScriptID; import net.runelite.api.ScriptID;
import net.runelite.api.VarPlayer;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetID;
@@ -277,7 +275,7 @@ public class DiaryRequirementsPlugin extends Plugin
assert !req.getRequirements().isEmpty(); assert !req.getRequirements().isEmpty();
for (Requirement ireq : req.getRequirements()) for (Requirement ireq : req.getRequirements())
{ {
boolean satifisfied = satisfiesRequirement(ireq); boolean satifisfied = ireq.satisfiesRequirement(client);
b.append(satifisfied ? "<col=000080><str>" : "<col=800000>"); b.append(satifisfied ? "<col=000080><str>" : "<col=800000>");
b.append(ireq.toString()); b.append(ireq.toString());
b.append(satifisfied ? "</str>" : "<col=000080>"); b.append(satifisfied ? "</str>" : "<col=000080>");
@@ -292,45 +290,4 @@ public class DiaryRequirementsPlugin extends Plugin
} }
return reqs; 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.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.Favour; import net.runelite.api.Favour;
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -40,4 +41,10 @@ public class FavourRequirement implements Requirement
{ {
return percent + "% " + house.getName() + " favour"; 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 com.google.common.collect.ImmutableList;
import java.util.List; import java.util.List;
import lombok.Getter; import lombok.Getter;
import net.runelite.api.Client;
public class OrRequirement implements Requirement public class OrRequirement implements Requirement
{ {
@@ -44,4 +45,16 @@ public class OrRequirement implements Requirement
{ {
return Joiner.on(" or ").join(requirements); 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.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.VarPlayer;
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter
@@ -38,4 +40,9 @@ public class QuestPointRequirement implements Requirement
{ {
return qp + " " + "Quest points"; 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.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.runelite.api.Client;
import net.runelite.api.Quest; import net.runelite.api.Quest;
import net.runelite.api.QuestState;
@Getter @Getter
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -50,4 +52,14 @@ public class QuestRequirement implements Requirement
return quest.getName(); 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; package net.runelite.client.plugins.achievementdiary;
import net.runelite.api.Client;
public interface Requirement public interface Requirement
{ {
boolean satisfiesRequirement(Client client);
} }

View File

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