From 88bf1b28c24279420c70b41854c9aa18c96c5140 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Mon, 21 Aug 2023 22:38:07 +0200 Subject: [PATCH] Adds icons for trader NPCs --- README.MD | 6 ++- pom.xml | 2 +- .../dynmapcitizens/DynmapCitizens.java | 5 ++ .../handler/trait/DTLTradersHandler.java | 53 +++++++++++++++++++ .../trait/quests/QuestAreaHandler.java | 2 +- .../dynmapcitizens/property/Icon.java | 7 ++- .../settings/DTLTradersSettings.java | 20 +++++++ .../settings/GlobalSettings.java | 1 + src/main/resources/config.yml | 15 +++++- 9 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/knarcraft/dynmapcitizens/handler/trait/DTLTradersHandler.java create mode 100644 src/main/java/net/knarcraft/dynmapcitizens/settings/DTLTradersSettings.java 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 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