diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java index d1c6af0..a2d50d6 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java @@ -71,6 +71,8 @@ public abstract class AbstractTraitHandler implements CitizensTraitHandler { return; } + //TODO: If marker already exists, and the NPC is in the same location, check if description has changed. If changed, update it. If not, do nothing. + Marker marker = markerSet.createMarker(npcId.toString(), markerName + npc.getName(), npcLocation.getWorld().getName(), npcLocation.getX(), npcLocation.getY(), npcLocation.getZ(), icon, false); diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestStagesInfoGenerator.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestStagesInfoGenerator.java index 5dd8618..bf6ec19 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestStagesInfoGenerator.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestStagesInfoGenerator.java @@ -6,6 +6,7 @@ import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCRegistry; import net.knarcraft.dynmapcitizens.util.QuestsHelper; +import org.bukkit.Location; import org.bukkit.inventory.ItemStack; import java.util.List; @@ -41,9 +42,16 @@ public class QuestStagesInfoGenerator { questInfo.append("
The location to show
+ * @returnA human-friendly location string
+ */ + private String getLocationString(Location location) { + String locationString = location.getX() + "," + location.getY() + "," + location.getZ(); + if (location.getWorld() != null) { + locationString += " in world \"" + location.getWorld().getName() + "\""; + } + return locationString; + } + /** * Gets a string to display a quest task involving some action on an item * diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java index 68f37bd..ef40440 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java @@ -12,6 +12,7 @@ import net.knarcraft.dynmapcitizens.util.QuestsHelper; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.entity.EntityType; import org.dynmap.DynmapAPI; import org.dynmap.markers.CircleMarker; import org.dynmap.markers.GenericMarker; @@ -205,6 +206,7 @@ public class QuestsHandler extends AbstractTraitHandler { questAreaMarkerSet.getCircleMarkers().forEach(GenericMarker::deleteMarker); for (IQuest quest : questsAPI.getLoadedQuests()) { for (IStage stage : quest.getStages()) { + //TODO: Put kill and reach locations in separate marker sets markKillLocations(quest, stage); markReachLocations(quest, stage); } @@ -219,8 +221,17 @@ public class QuestsHandler extends AbstractTraitHandler { * @param stageThe stage to search for reach locations
*/ private void markReachLocations(IQuest quest, IStage stage) { - markLocations(stage.getLocationsToReach(), stage.getRadiiToReachWithin(), - "Target location for: " + quest.getName()); + for (int i = 0; i < stage.getLocationsToReach().size(); i++) { + Location location = stage.getLocationsToReach().get(i); + int radius = stage.getRadiiToReachWithin().get(i); + String areaName = stage.getLocationNames().get(i); + String description = ""; + if (areaName != null) { + description += "" + areaName + "The stage to search for kill locations
*/ private void markKillLocations(IQuest quest, IStage stage) { - markLocations(stage.getLocationsToKillWithin(), stage.getRadiiToKillWithin(), - "Kill location for: " + quest.getName()); + for (int i = 0; i < stage.getLocationsToKillWithin().size(); i++) { + Location location = stage.getLocationsToKillWithin().get(i); + int radius = stage.getRadiiToKillWithin().get(i); + EntityType mob = stage.getMobsToKill().get(i); + int mobAmount = stage.getMobNumToKill().get(i); + String areaName = stage.getKillNames().get(i); + + String description = ""; + if (areaName != null) { + description += "" + areaName + "The locations to mark
- * @param radiiThe radius of each location's circle
- * @param descriptionThe description for what the location means
+ * @param locationThe location to mark
+ * @param radiusThe radius of the circular area to mark
+ * @param descriptionThe description to put on the marker
+ * @param fillColorThe color to use inside the marker area
+ * @param lineColorThe color to use outside the marker area
*/ - private void markLocations(List