org.mcmonkey
sentinel
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
index 883a95f..57df48a 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java
@@ -2,6 +2,7 @@ package net.knarcraft.dynmapcitizens;
import net.knarcraft.dynmapcitizens.trait.BlacksmithHandler;
import net.knarcraft.dynmapcitizens.trait.CitizensTraitHandler;
+import net.knarcraft.dynmapcitizens.trait.MinstrelHandler;
import net.knarcraft.dynmapcitizens.trait.SentinelHandler;
import net.knarcraft.dynmapcitizens.trait.quests.QuestsHandler;
import org.bukkit.Bukkit;
@@ -47,6 +48,7 @@ public final class DynmapCitizens extends JavaPlugin {
handlers.add(new BlacksmithHandler());
handlers.add(new QuestsHandler());
handlers.add(new SentinelHandler());
+ handlers.add(new MinstrelHandler());
for (CitizensTraitHandler handler : handlers) {
handler.initialize();
}
@@ -115,6 +117,7 @@ public final class DynmapCitizens extends JavaPlugin {
markerIcons.put(Icon.BLACKSMITH, markerAPI.getMarkerIcon("hammer"));
markerIcons.put(Icon.SENTINEL, markerAPI.getMarkerIcon("shield"));
markerIcons.put(Icon.QUEST_CHAIN, markerAPI.getMarkerIcon("caution"));
+ markerIcons.put(Icon.MINSTREL, markerAPI.getMarkerIcon("theater"));
this.markerIcons = markerIcons;
}
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/Icon.java b/src/main/java/net/knarcraft/dynmapcitizens/Icon.java
index c0fc5fa..4487d96 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/Icon.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/Icon.java
@@ -38,6 +38,11 @@ public enum Icon {
/**
* An icon representing a blacksmith NPC
*/
- BLACKSMITH
+ BLACKSMITH,
+
+ /**
+ * An icon representing a minstrel NPC
+ */
+ MINSTREL
}
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/trait/BlacksmithHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/trait/BlacksmithHandler.java
index 038a932..0bec979 100644
--- a/src/main/java/net/knarcraft/dynmapcitizens/trait/BlacksmithHandler.java
+++ b/src/main/java/net/knarcraft/dynmapcitizens/trait/BlacksmithHandler.java
@@ -55,7 +55,7 @@ public class BlacksmithHandler extends AbstractTraitHandler {
Class extends Trait> blacksmithTrait = CitizensAPI.getTraitFactory().getTraitClass("blacksmith");
for (NPC npc : CitizensAPI.getNPCRegistry()) {
if (npc.hasTrait(blacksmithTrait)) {
- BlacksmithTrait trait = CitizensAPI.getTraitFactory().getTrait("blacksmith");
+ BlacksmithTrait trait = npc.getTraitNullable(BlacksmithTrait.class);
String description = null;
if (trait == null) {
DynmapCitizens.getInstance().getLogger().log(Level.WARNING, "Unable to get blacksmith trait");
diff --git a/src/main/java/net/knarcraft/dynmapcitizens/trait/MinstrelHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/trait/MinstrelHandler.java
new file mode 100644
index 0000000..ada20cb
--- /dev/null
+++ b/src/main/java/net/knarcraft/dynmapcitizens/trait/MinstrelHandler.java
@@ -0,0 +1,85 @@
+package net.knarcraft.dynmapcitizens.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.Icon;
+import net.knarcraft.dynmapcitizens.UpdateRate;
+import net.knarcraft.minstrel.MinstrelPlugin;
+import net.knarcraft.minstrel.music.Song;
+import net.knarcraft.minstrel.trait.MinstrelTrait;
+import org.bukkit.Bukkit;
+import org.dynmap.DynmapAPI;
+import org.dynmap.markers.GenericMarker;
+import org.dynmap.markers.MarkerSet;
+
+import java.util.logging.Level;
+
+/**
+ * A handler class for the minstrel trait
+ */
+public class MinstrelHandler extends AbstractTraitHandler {
+
+ private MarkerSet minstrelSet;
+
+ @Override
+ public void initialize() {
+ MinstrelPlugin minstrelPlugin = (MinstrelPlugin) Bukkit.getServer().getPluginManager().getPlugin("Minstrel");
+ DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI();
+ if (minstrelPlugin != null) {
+ minstrelSet = getMarkerSet(dynmapAPI, "minstrels", "Minstrels");
+ if (minstrelSet != null) {
+ minstrelSet.setHideByDefault(false);
+ minstrelSet.setLayerPriority(3);
+ isEnabled = true;
+ return;
+ }
+ }
+ isEnabled = false;
+ }
+
+ @Override
+ public UpdateRate getUpdateRate() {
+ return UpdateRate.VERY_SLOW;
+ }
+
+ @Override
+ public void updateMarkers() {
+ //Remove existing markers
+ minstrelSet.getMarkers().forEach(GenericMarker::deleteMarker);
+
+ Class extends Trait> minstrelTrait = CitizensAPI.getTraitFactory().getTraitClass("minstrel");
+ for (NPC npc : CitizensAPI.getNPCRegistry()) {
+ if (npc.hasTrait(minstrelTrait)) {
+ MinstrelTrait trait = npc.getTraitNullable(MinstrelTrait.class);
+ String description = null;
+ if (trait == null) {
+ DynmapCitizens.getInstance().getLogger().log(Level.WARNING, "Unable to get minstrel trait");
+ } else {
+ description = getDetailedMinstrelInfo(npc, trait);
+ }
+ addNPCMarker(npc.getUniqueId(), "Minstrel NPC: ", description,
+ DynmapCitizens.getInstance().getMarkerIcons().get(Icon.MINSTREL), minstrelSet);
+ }
+ }
+ }
+
+ /**
+ * Gets detailed information about a minstrel NPC
+ *
+ * @param npc The NPC the settings belong to
+ * @param trait The minstrel trait to get information from
+ * @return A string describing the minstrel
+ */
+ private String getDetailedMinstrelInfo(NPC npc, MinstrelTrait trait) {
+ StringBuilder info = new StringBuilder("Minstrel name: " + npc.getName());
+ info.append("
Songs:");
+ for (Song song : trait.getPlaylist().getSongs()) {
+ info.append("- Category: ").append(song.getCategory()).append(" Sound: ").append(song.getSound()).append("
");
+ }
+ info.append("
");
+ return info.toString();
+ }
+
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 081538d..b31a804 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -4,6 +4,6 @@ main: net.knarcraft.dynmapcitizens.DynmapCitizens
api-version: 1.19
prefix: DynmapCitizens
depend: [ dynmap, Citizens ]
-softdepend: [ Blacksmith, Sentinel, Quests ]
+softdepend: [ Blacksmith, Sentinel, Quests, Minstrel ]
authors: [ EpicKnarvik97 ]
description: A plugin for displaying citizens info on the dynmap map