diff --git a/README.MD b/README.MD
index 0bb4429..610ba4e 100644
--- a/README.MD
+++ b/README.MD
@@ -14,4 +14,8 @@ basis, and possibly choosing exactly what information to display on each trait's
- [Blacksmith](https://www.spigotmc.org/resources/blacksmith.105938/)
- [Quests](https://www.spigotmc.org/resources/quests.3711/)
- [Sentinel](https://www.spigotmc.org/resources/sentinel.22017/)
-- [Minstrel](https://git.knarcraft.net/EpicKnarvik97/Minstrel)
\ No newline at end of file
+- [Minstrel](https://git.knarcraft.net/EpicKnarvik97/Minstrel)
+
+## Somewhat supported NPC traits, because the developers have no API
+
+- [Trader](https://www.spigotmc.org/resources/dtltraders.35890/)
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index efbf2ea..e3393cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,7 +167,7 @@
net.knarcraft
knarlib
- 1.1
+ 1.2.3
compile
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
index bb043c9..265f09d 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
@@ -5,6 +5,7 @@ import net.knarcraft.dynmapcitizens.formatting.SentinelTranslatableMessage;
import net.knarcraft.dynmapcitizens.handler.VaultHandler;
import net.knarcraft.dynmapcitizens.handler.trait.BlacksmithHandler;
import net.knarcraft.dynmapcitizens.handler.trait.CitizensTraitHandler;
+import net.knarcraft.dynmapcitizens.handler.trait.DTLTradersHandler;
import net.knarcraft.dynmapcitizens.handler.trait.MinstrelHandler;
import net.knarcraft.dynmapcitizens.handler.trait.SentinelHandler;
import net.knarcraft.dynmapcitizens.handler.trait.quests.QuestsHandler;
@@ -23,6 +24,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
+/**
+ * DynmapCitizens' main class
+ */
@SuppressWarnings("unused")
public final class DynmapCitizens extends JavaPlugin {
@@ -151,6 +155,7 @@ public final class DynmapCitizens extends JavaPlugin {
this.traitHandlers.add(new QuestsHandler());
this.traitHandlers.add(new SentinelHandler());
this.traitHandlers.add(new MinstrelHandler());
+ this.traitHandlers.add(new DTLTradersHandler());
//Load and initialize all enabled trait handlers
for (CitizensTraitHandler handler : this.traitHandlers) {
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/DTLTradersHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/DTLTradersHandler.java
new file mode 100644
index 0000000..9657fda
--- /dev/null
+++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/DTLTradersHandler.java
@@ -0,0 +1,53 @@
+package net.knarcraft.dynmapcitizens.handler.trait;
+
+import net.citizensnpcs.api.CitizensAPI;
+import net.citizensnpcs.api.npc.NPC;
+import net.citizensnpcs.api.trait.Trait;
+import net.knarcraft.dynmapcitizens.DynmapCitizens;
+import net.knarcraft.dynmapcitizens.property.Icon;
+import net.knarcraft.dynmapcitizens.settings.DTLTradersSettings;
+import net.knarcraft.dynmapcitizens.settings.TraitSettings;
+import org.dynmap.markers.GenericMarker;
+
+/**
+ * A handler class for the minstrel trait
+ */
+public class DTLTradersHandler extends AbstractTraitHandler {
+
+ private final DTLTradersSettings settings = new DTLTradersSettings();
+
+ @Override
+ public void initialize() {
+ super.isEnabled = false;
+ CitizensAPI.getTraitFactory().getRegisteredTraits().forEach(traitInfo -> {
+ if (traitInfo.getTraitName().equals("trader")) {
+ super.isEnabled = true;
+ }
+ });
+
+ if (this.isEnabled) {
+ super.initializeMarkerSet();
+ }
+ }
+
+ @Override
+ public TraitSettings getSettings() {
+ return this.settings;
+ }
+
+ @Override
+ public void updateMarkers() {
+ //Remove existing markers
+ super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
+
+ Class extends Trait> traderTrait = CitizensAPI.getTraitFactory().getTraitClass("trader");
+ for (NPC npc : CitizensAPI.getNPCRegistry()) {
+ if (npc.hasTrait(traderTrait)) {
+ String description = "" + npc.getName() + "
";
+ addNPCMarker(npc.getUniqueId(), "Trader NPC: ", description,
+ DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons().get(Icon.TRADER), super.markerSet);
+ }
+ }
+ }
+
+}
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 d8757fa..adf80b8 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
@@ -93,7 +93,7 @@ public class QuestAreaHandler {
} else {
formattedAreaName = "";
}
-
+
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());
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/property/Icon.java b/src/main/java/net/knarcraft/dynmapcitizens/property/Icon.java
index b0b5ee0..5f2f949 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/property/Icon.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/property/Icon.java
@@ -43,6 +43,11 @@ public enum Icon {
/**
* An icon representing a minstrel NPC
*/
- MINSTREL
+ MINSTREL,
+
+ /**
+ * An icon representing a trader NPC
+ */
+ TRADER,
}
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/settings/DTLTradersSettings.java b/src/main/java/net/knarcraft/dynmapcitizens/settings/DTLTradersSettings.java
new file mode 100644
index 0000000..80b3593
--- /dev/null
+++ b/src/main/java/net/knarcraft/dynmapcitizens/settings/DTLTradersSettings.java
@@ -0,0 +1,20 @@
+package net.knarcraft.dynmapcitizens.settings;
+
+import org.bukkit.configuration.file.FileConfiguration;
+
+/**
+ * All settings for the minstrel trait
+ */
+public class DTLTradersSettings extends AbstractTraitSettings {
+
+ @Override
+ public void load(FileConfiguration configuration) {
+ super.load(configuration);
+ }
+
+ @Override
+ protected String getTraitConfigRoot() {
+ return "traits.trader";
+ }
+
+}
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/settings/GlobalSettings.java b/src/main/java/net/knarcraft/dynmapcitizens/settings/GlobalSettings.java
index a7fe753..47f70bd 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/settings/GlobalSettings.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/settings/GlobalSettings.java
@@ -82,6 +82,7 @@ public class GlobalSettings {
case BLACKSMITH -> "hammer";
case SENTINEL -> "shield";
case MINSTREL -> "theater";
+ case TRADER -> "coins";
};
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 9dd6bdc..95ef02b 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -16,6 +16,8 @@ icon:
SENTINEL: "shield"
# The marker used for minstrels
MINSTREL: "theater"
+ # The marker used for traders
+ TRADER: "coins"
# Settings for how often markers will be updated
timer:
@@ -129,4 +131,15 @@ traits:
# Whether to hide the minstrel icon layer by default
markersHiddenByDefault: false
# Whether to display the list of songs a minstrel is playing
- displayMinstrelSongs: true
\ No newline at end of file
+ displayMinstrelSongs: true
+ # Settings for the trader trait
+ trader:
+ enabled: true
+ # The priority of trader markers. Higher priority markers will display on top of lower priority ones
+ markerSetPriority: 1
+ # The id of the trader marker set. Change if it overlaps with an existing set id
+ markerSetId: "traders"
+ # The name of the trader marker set. Change it if you want a cooler name
+ markerSetName: "Traders"
+ # Whether to hide the trader icon layer by default
+ markersHiddenByDefault: false
\ No newline at end of file