diff --git a/src/main/java/net/knarcraft/dynmapcitizens/trait/quests/QuestsHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/trait/quests/QuestsHandler.java
index 89973f4..5a70e75 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/trait/quests/QuestsHandler.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/trait/quests/QuestsHandler.java
@@ -3,6 +3,7 @@ package net.knarcraft.dynmapcitizens.trait.quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
+import me.blackvein.quests.quests.Requirements;
import me.blackvein.quests.quests.Rewards;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
@@ -124,11 +125,10 @@ public class QuestsHandler extends AbstractTraitHandler {
for (IQuest quest : questStarts) {
markerDescription.append("
").append(quest.getName()).append("
- ");
markerDescription.append(quest.getDescription()).append("
").append(getQuestStagesInfo(quest));
- markerDescription.append(getQuestRewardsInfo(quest)).append("");
+ markerDescription.append(getQuestRewardsInfo(quest)).append(getQuestRequirementsInfo(quest)).append("");
}
markerDescription.append("");
}
- //TODO: Get information about requirements
//TODO: Get information about the planner (repeatable and/or limited)
if (!questKills.isEmpty()) {
@@ -150,6 +150,71 @@ public class QuestsHandler extends AbstractTraitHandler {
}
}
+ /**
+ * Gets information about all requirements for the given quest
+ *
+ * @param quest The quest to get requirements for
+ * @return Information about the quest's requirements
+ */
+ private String getQuestRequirementsInfo(IQuest quest) {
+ Requirements requirements = quest.getRequirements();
+ StringBuilder requirementInfo = new StringBuilder();
+ if (!requirements.hasRequirement()) {
+ return requirementInfo.toString();
+ }
+
+ requirementInfo.append("
Requirements: ");
+
+ if (requirements.getQuestPoints() > 0) {
+ requirementInfo.append("- ").append(requirements.getQuestPoints()).append(" quest points
");
+ }
+
+ if (requirements.getExp() > 0) {
+ requirementInfo.append("- ").append(requirements.getExp()).append(" exp
");
+ }
+
+ for (IQuest blockQuest : requirements.getBlockQuests()) {
+ requirementInfo.append("- Blocked by quest: ").append(blockQuest.getName()).append("
");
+ }
+
+ for (IQuest neededQuest : requirements.getNeededQuests()) {
+ requirementInfo.append("- Requires quest: ").append(neededQuest.getName()).append("
");
+ }
+
+ for (ItemStack item : requirements.getItems()) {
+ requirementInfo.append("- Requires item: ").append(uppercaseFirst(getItemStackString(item))).append("
");
+ }
+
+ if (!requirements.getMcmmoSkills().isEmpty()) {
+ List skills = requirements.getMcmmoSkills();
+ List amounts = requirements.getMcmmoAmounts();
+ for (int i = 0; i < skills.size(); i++) {
+ requirementInfo.append("- Requires mcMMO skill ").append(skills.get(i)).append(" at level ");
+ requirementInfo.append(amounts.get(i)).append("
");
+ }
+ }
+
+ for (String permission : requirements.getPermissions()) {
+ requirementInfo.append("- Requires permission: ").append(permission).append("
");
+ }
+
+ Map> customRequirementPlugins = requirements.getCustomRequirements();
+ for (String plugin : customRequirementPlugins.keySet()) {
+ requirementInfo.append("- ").append(plugin).append(":
");
+ //Note: The format of custom requirements is kind of weird. First, you have the key for which plugin the
+ // requirement belongs to. Getting the value of the key gives another map. The map contains as key, the type
+ // of value, like "Skill Amount" or "Skill Type". The value is the actual value of whatever it is.
+ Map customRequirementEntry = customRequirementPlugins.get(plugin);
+ for (String requirementDescription : customRequirementEntry.keySet()) {
+ requirementInfo.append("- ").append(requirementDescription).append(" ").append(customRequirementEntry.get(requirementDescription)).append("
");
+ }
+ requirementInfo.append("
");
+ }
+
+ requirementInfo.append("
");
+ return requirementInfo.toString();
+ }
+
/**
* Gets information about all rewards for the given quest
*