diff --git a/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java b/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java
index 004693a..1b56b61 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/formatting/QuestsTranslatableMessage.java
@@ -131,7 +131,36 @@ public enum QuestsTranslatableMessage implements TranslatableMessage {
*
*
Placeholders: {permission}
*/
- QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_ITEM;
+ QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_ITEM,
+
+ /**
+ * The format for a quest's reach area name
+ *
+ * Placeholders: {name}
+ */
+ QUESTS_REACH_AREA_NAME_FORMAT,
+
+ /**
+ * The format for a quest's reach area's description
+ *
+ * Placeholders: {areaName}, {questName}
+ */
+ QUESTS_REACH_AREA_DESCRIPTION_FORMAT,
+
+ /**
+ * The format for a quest's kill area name
+ *
+ * Placeholders: {name}
+ */
+ QUESTS_KILL_AREA_NAME_FORMAT,
+
+ /**
+ * The format for a quest's kill area description
+ *
+ * Placeholders: {areaName}, {questName}, {mobName}, {mobAmount}
+ */
+ QUESTS_KILL_AREA_DESCRIPTION_FORMAT,
+ ;
@Override
public TranslatableMessage[] getAllMessages() {
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestAreaHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestAreaHandler.java
index 25cf000..d8757fa 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestAreaHandler.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestAreaHandler.java
@@ -3,9 +3,13 @@ package net.knarcraft.dynmapcitizens.handler.trait.quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
+import net.knarcraft.dynmapcitizens.DynmapCitizens;
import net.knarcraft.dynmapcitizens.settings.QuestsSettings;
import net.knarcraft.dynmapcitizens.util.DynmapHelper;
import net.knarcraft.dynmapcitizens.util.QuestsHelper;
+import net.knarcraft.knarlib.formatting.StringFormatter;
+import net.knarcraft.knarlib.formatting.StringReplacer;
+import net.knarcraft.knarlib.formatting.Translator;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;
import org.dynmap.DynmapAPI;
@@ -14,6 +18,11 @@ import org.dynmap.markers.MarkerSet;
import java.util.List;
+import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_KILL_AREA_DESCRIPTION_FORMAT;
+import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_KILL_AREA_NAME_FORMAT;
+import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REACH_AREA_DESCRIPTION_FORMAT;
+import static net.knarcraft.dynmapcitizens.formatting.QuestsTranslatableMessage.QUESTS_REACH_AREA_NAME_FORMAT;
+
/**
* A handler class for quest areas
*/
@@ -24,6 +33,7 @@ public class QuestAreaHandler {
private final MarkerSet reachAreaMarkerSet;
private final QuestsSettings settings;
private final List unavailableQuests;
+ private final StringFormatter formatter;
/**
* Instantiates a new quest area handler
@@ -38,6 +48,7 @@ public class QuestAreaHandler {
this.questsAPI = questsAPI;
this.settings = settings;
this.unavailableQuests = unavailableQuests;
+ this.formatter = DynmapCitizens.getFormatter();
killAreaMarkerSet = DynmapHelper.initializeMarkerSet(dynmapAPI, settings.getKillAreaSettings());
reachAreaMarkerSet = DynmapHelper.initializeMarkerSet(dynmapAPI, settings.getReachAreaSettings());
}
@@ -75,11 +86,16 @@ public class QuestAreaHandler {
Location location = stage.getLocationsToReach().get(i);
int radius = stage.getRadiiToReachWithin().get(i);
String areaName = stage.getLocationNames().get(i);
- String description = "";
+
+ String formattedAreaName;
if (areaName != null) {
- description += "" + areaName + "
";
+ formattedAreaName = formatter.replacePlaceholder(QUESTS_REACH_AREA_NAME_FORMAT, "{name}", areaName);
+ } else {
+ formattedAreaName = "";
}
- description += "Target location for " + quest.getName();
+
+ String description = formatter.replacePlaceholders(QUESTS_REACH_AREA_DESCRIPTION_FORMAT,
+ new String[]{"{areaName}", "{questName}"}, new String[]{formattedAreaName, quest.getName()});
DynmapHelper.markLocation(location, radius, description, reachAreaMarkerSet, settings.getReachAreaSettings());
}
}
@@ -101,13 +117,20 @@ public class QuestAreaHandler {
int mobAmount = stage.getMobNumToKill().get(i);
String areaName = stage.getKillNames().get(i);
- String description = "";
+ String formattedAreaName;
if (areaName != null) {
- description += "" + areaName + "
";
+ formattedAreaName = formatter.replacePlaceholder(QUESTS_KILL_AREA_NAME_FORMAT, "{name}", areaName);
+ } else {
+ formattedAreaName = "";
}
- description += "Kill location for " + quest.getName() +
- "
Kill " + QuestsHelper.normalizeName(mob.name()) + " x " + mobAmount;
- DynmapHelper.markLocation(location, radius, description, killAreaMarkerSet, settings.getKillAreaSettings());
+
+ Translator translator = DynmapCitizens.getTranslator();
+ StringReplacer replacer = new StringReplacer(translator.getTranslatedMessage(QUESTS_KILL_AREA_DESCRIPTION_FORMAT));
+ replacer.add("{areaName}", formattedAreaName);
+ replacer.add("{questName}", quest.getName());
+ replacer.add("{mobName}", QuestsHelper.normalizeName(mob.name()));
+ replacer.add("{mobAmount}", String.valueOf(mobAmount));
+ DynmapHelper.markLocation(location, radius, replacer.replace(), killAreaMarkerSet, settings.getKillAreaSettings());
}
}
diff --git a/src/main/resources/strings.yml b/src/main/resources/strings.yml
index e4c183d..21803ac 100644
--- a/src/main/resources/strings.yml
+++ b/src/main/resources/strings.yml
@@ -52,6 +52,10 @@ en:
QUESTS_REQUIREMENTS_MC_MMO_SKILL: "Requires mcMMO skill {skill} at level {level}"
QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_FORMAT: "Required permissions:"
QUESTS_REQUIREMENTS_REQUIRED_PERMISSION_ITEM: "{permission}"
+ QUESTS_REACH_AREA_NAME_FORMAT: "{name}
"
+ QUESTS_REACH_AREA_DESCRIPTION_FORMAT: "{areaName}Target location for {questName}"
+ QUESTS_KILL_AREA_NAME_FORMAT: "{name}
"
+ QUESTS_KILL_AREA_DESCRIPTION_FORMAT: "{areaName}Kill location for {questName}
Kill {mobName} x {mobAmount}"
DURATION_FORMAT: "in {time} {unit}"
UNIT_NOW: "imminently"
UNIT_SECOND: "second"