From ce042fe3ecfc345c71f8bdc18b8e76a4c4cbe67f Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 1 Nov 2022 15:08:50 +0100 Subject: [PATCH] Adds minstrel markers --- pom.xml | 6 ++ .../dynmapcitizens/DynmapCitizens.java | 3 + .../net/knarcraft/dynmapcitizens/Icon.java | 7 +- .../trait/BlacksmithHandler.java | 2 +- .../dynmapcitizens/trait/MinstrelHandler.java | 85 +++++++++++++++++++ src/main/resources/plugin.yml | 2 +- 6 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/knarcraft/dynmapcitizens/trait/MinstrelHandler.java diff --git a/pom.xml b/pom.xml index 935eec2..96c2504 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,12 @@ 1.0.1-SNAPSHOT provided + + net.knarcraft + minstrel + 1.0-SNAPSHOT + provided + 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 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 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:"); + 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