Implements configuration for common configuration values

Makes "enabled", marker set id, marker set priority, hide markers by default and marker set name configurable for all trait handlers.
Makes "displayMinstrelSongs" configurable for minstrels
This commit is contained in:
2022-11-03 14:14:24 +01:00
parent 0f89c1c29f
commit 1906e593e3
15 changed files with 471 additions and 108 deletions

View File

@ -3,6 +3,7 @@ package net.knarcraft.dynmapcitizens.handler.trait;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.knarcraft.dynmapcitizens.DynmapCitizens;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@ -20,12 +21,27 @@ import java.util.logging.Level;
public abstract class AbstractTraitHandler implements CitizensTraitHandler {
protected boolean isEnabled = false;
protected MarkerSet markerSet;
@Override
public boolean isEnabled() {
return isEnabled;
}
/**
* Initializes this trait's marker set
*/
protected void initializeMarkerSet() {
TraitSettings settings = getSettings();
DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI();
markerSet = getMarkerSet(dynmapAPI, settings.getMarkerSetId(), settings.getMarkerSetName());
if (markerSet != null) {
markerSet.setHideByDefault(settings.markersHiddenByDefault());
markerSet.setLayerPriority(settings.getMarkerSetPriority());
isEnabled = true;
}
}
/**
* Gets the given marker set (and creates it if necessary)
*
@ -84,8 +100,8 @@ public abstract class AbstractTraitHandler implements CitizensTraitHandler {
if (marker != null && isMoving(npc)) {
Bukkit.getScheduler().scheduleSyncRepeatingTask(DynmapCitizens.getInstance(),
() -> marker.setLocation(npcLocation.getWorld().getName(), npc.getStoredLocation().getX(),
npc.getStoredLocation().getY(), npc.getStoredLocation().getZ()), 20, 10 * 20);
//TODO: Make the update rate configurable
npc.getStoredLocation().getY(), npc.getStoredLocation().getZ()), 20,
DynmapCitizens.getInstance().getGlobalSettings().getUpdateMovingNPCDelay() * 20);
}
}

View File

@ -8,11 +8,11 @@ import net.knarcraft.blacksmith.config.NPCSettings;
import net.knarcraft.blacksmith.trait.BlacksmithTrait;
import net.knarcraft.dynmapcitizens.DynmapCitizens;
import net.knarcraft.dynmapcitizens.property.Icon;
import net.knarcraft.dynmapcitizens.settings.BlacksmithSettings;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.dynmap.DynmapAPI;
import org.dynmap.markers.GenericMarker;
import org.dynmap.markers.MarkerSet;
import java.util.ArrayList;
import java.util.List;
@ -23,28 +23,27 @@ import java.util.logging.Level;
*/
public class BlacksmithHandler extends AbstractTraitHandler {
private MarkerSet blacksmithSet;
private final BlacksmithSettings settings = new BlacksmithSettings();
@Override
public void initialize() {
BlacksmithPlugin blacksmithPlugin = (BlacksmithPlugin) Bukkit.getServer().getPluginManager().getPlugin("Blacksmith");
DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI();
if (blacksmithPlugin != null) {
blacksmithSet = getMarkerSet(dynmapAPI, "blacksmiths", "Blacksmiths");
if (blacksmithSet != null) {
blacksmithSet.setHideByDefault(false);
blacksmithSet.setLayerPriority(3);
isEnabled = true;
return;
}
super.initializeMarkerSet();
} else {
super.isEnabled = false;
}
isEnabled = false;
}
@Override
public TraitSettings getSettings() {
return this.settings;
}
@Override
public void updateMarkers() {
//Remove existing markers
blacksmithSet.getMarkers().forEach(GenericMarker::deleteMarker);
super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
Class<? extends Trait> blacksmithTrait = CitizensAPI.getTraitFactory().getTraitClass("blacksmith");
for (NPC npc : CitizensAPI.getNPCRegistry()) {
@ -58,7 +57,7 @@ public class BlacksmithHandler extends AbstractTraitHandler {
description = getDetailedBlacksmithInfo(npc, trait.getSettings());
}
addNPCMarker(npc.getUniqueId(), "Blacksmith NPC: ", description,
DynmapCitizens.getInstance().getMarkerIcons().get(Icon.BLACKSMITH), blacksmithSet);
DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons().get(Icon.BLACKSMITH), super.markerSet);
}
}
}

View File

@ -1,5 +1,7 @@
package net.knarcraft.dynmapcitizens.handler.trait;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
/**
* A handler which takes care of everything for one citizen trait
*/
@ -17,6 +19,13 @@ public interface CitizensTraitHandler {
*/
boolean isEnabled();
/**
* Gets the settings set for this trait
*
* @return <p>The settings for this trait</p>
*/
TraitSettings getSettings();
/**
* Updates all markers used for this handler
*/

View File

@ -5,13 +5,13 @@ 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.MinstrelSettings;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
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;
@ -20,28 +20,27 @@ import java.util.logging.Level;
*/
public class MinstrelHandler extends AbstractTraitHandler {
private MarkerSet minstrelSet;
private final MinstrelSettings settings = new MinstrelSettings();
@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;
}
super.initializeMarkerSet();
} else {
super.isEnabled = false;
}
isEnabled = false;
}
@Override
public TraitSettings getSettings() {
return this.settings;
}
@Override
public void updateMarkers() {
//Remove existing markers
minstrelSet.getMarkers().forEach(GenericMarker::deleteMarker);
super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
Class<? extends Trait> minstrelTrait = CitizensAPI.getTraitFactory().getTraitClass("minstrel");
for (NPC npc : CitizensAPI.getNPCRegistry()) {
@ -54,7 +53,7 @@ public class MinstrelHandler extends AbstractTraitHandler {
description = getDetailedMinstrelInfo(npc, trait);
}
addNPCMarker(npc.getUniqueId(), "Minstrel NPC: ", description,
DynmapCitizens.getInstance().getMarkerIcons().get(Icon.MINSTREL), minstrelSet);
DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons().get(Icon.MINSTREL), super.markerSet);
}
}
}
@ -68,11 +67,14 @@ public class MinstrelHandler extends AbstractTraitHandler {
*/
private String getDetailedMinstrelInfo(NPC npc, MinstrelTrait trait) {
StringBuilder info = new StringBuilder("<h2>" + npc.getName() + "</h2>");
info.append("<b>Songs:</b><ul>");
for (Song song : trait.getPlaylist().getSongs()) {
info.append("<li>Category: ").append(song.getCategory()).append("<br>Sound: ").append(song.getSound()).append("</li>");
if (this.settings.displayMinstrelSongs()) {
info.append("<b>Songs:</b><ul>");
for (Song song : trait.getPlaylist().getSongs()) {
info.append("<li>Category: ").append(song.getCategory()).append("<br>Sound: ").append(song.getSound());
info.append("</li>");
}
info.append("</ul>");
}
info.append("</ul>");
return info.toString();
}

View File

@ -5,10 +5,10 @@ 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.SentinelSettings;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
import org.bukkit.Bukkit;
import org.dynmap.DynmapAPI;
import org.dynmap.markers.GenericMarker;
import org.dynmap.markers.MarkerSet;
import org.mcmonkey.sentinel.SentinelPlugin;
import org.mcmonkey.sentinel.SentinelTrait;
@ -17,27 +17,26 @@ import org.mcmonkey.sentinel.SentinelTrait;
*/
public class SentinelHandler extends AbstractTraitHandler {
private MarkerSet sentinelSet;
protected final SentinelSettings settings = new SentinelSettings();
@Override
public void initialize() {
SentinelPlugin sentinelPlugin = (SentinelPlugin) Bukkit.getServer().getPluginManager().getPlugin("Sentinel");
DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI();
if (sentinelPlugin != null) {
sentinelSet = getMarkerSet(dynmapAPI, "sentinels", "Sentinels");
if (sentinelSet != null) {
sentinelSet.setHideByDefault(false);
sentinelSet.setLayerPriority(1);
isEnabled = true;
return;
}
super.initializeMarkerSet();
} else {
super.isEnabled = false;
}
isEnabled = false;
}
@Override
public TraitSettings getSettings() {
return this.settings;
}
@Override
public void updateMarkers() {
sentinelSet.getMarkers().forEach(GenericMarker::deleteMarker);
super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
Class<? extends Trait> sentinelTrait = CitizensAPI.getTraitFactory().getTraitClass("sentinel");
for (NPC npc : CitizensAPI.getNPCRegistry()) {
@ -54,7 +53,7 @@ public class SentinelHandler extends AbstractTraitHandler {
description += "<br><b>Targets:</b> " + trait.allTargets.toAllInOneString() + "<br><b>Avoids:</b> " +
trait.allAvoids.toAllInOneString() + "<br><b>Ignores:</b> " + trait.allIgnores.toAllInOneString();
addNPCMarker(npc.getUniqueId(), "Sentinel NPC: ", description,
DynmapCitizens.getInstance().getMarkerIcons().get(Icon.SENTINEL), sentinelSet);
DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons().get(Icon.SENTINEL), super.markerSet);
}
}
}

View File

@ -8,6 +8,8 @@ import net.citizensnpcs.api.npc.NPCRegistry;
import net.knarcraft.dynmapcitizens.DynmapCitizens;
import net.knarcraft.dynmapcitizens.handler.trait.AbstractTraitHandler;
import net.knarcraft.dynmapcitizens.property.Icon;
import net.knarcraft.dynmapcitizens.settings.QuestsSettings;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
import net.knarcraft.dynmapcitizens.util.QuestsHelper;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -33,31 +35,33 @@ import java.util.logging.Level;
public class QuestsHandler extends AbstractTraitHandler {
private QuestsAPI questsAPI;
private MarkerSet questMarkerSet;
private MarkerSet questAreaMarkerSet;
private Map<Icon, MarkerIcon> markerIcons;
private Map<UUID, NPCQuestInfo> questGiverInfo;
private final QuestsSettings settings = new QuestsSettings();
@Override
public void initialize() {
questsAPI = (QuestsAPI) Bukkit.getServer().getPluginManager().getPlugin("Quests");
DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI();
markerIcons = DynmapCitizens.getInstance().getMarkerIcons();
markerIcons = DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons();
if (questsAPI != null) {
questMarkerSet = getMarkerSet(dynmapAPI, "quests", "Quests");
super.initializeMarkerSet();
questAreaMarkerSet = getMarkerSet(dynmapAPI, "quest_areas", "Quest areas");
if (questMarkerSet != null && questAreaMarkerSet != null) {
questMarkerSet.setHideByDefault(false);
if (questAreaMarkerSet != null) {
questAreaMarkerSet.setHideByDefault(true);
questMarkerSet.setLayerPriority(3);
questAreaMarkerSet.setLayerPriority(2);
isEnabled = true;
//Remove old quest markers
questMarkerSet.getMarkers().forEach(GenericMarker::deleteMarker);
return;
super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
}
} else {
isEnabled = false;
}
isEnabled = false;
}
@Override
public TraitSettings getSettings() {
return settings;
}
@Override
@ -73,7 +77,7 @@ public class QuestsHandler extends AbstractTraitHandler {
generateQuestNPCInfo();
//Remove any markers for deleted quests
for (Marker marker : questMarkerSet.getMarkers()) {
for (Marker marker : super.markerSet.getMarkers()) {
if (!questGiverInfo.containsKey(UUID.fromString(marker.getMarkerID()))) {
marker.deleteMarker();
}
@ -137,14 +141,14 @@ public class QuestsHandler extends AbstractTraitHandler {
markerDescription.append(getInvolvedInQuestsString(info));
Marker existingMarker = questMarkerSet.findMarker(npcId.toString());
Marker existingMarker = super.markerSet.findMarker(npcId.toString());
String newDescription = markerDescription.toString();
if (existingMarker != null) {
if (!existingMarker.getDescription().equals(newDescription)) {
existingMarker.setDescription(newDescription);
}
} else {
addNPCMarker(npcId, QuestsHelper.getMarkerTitle(info.getQuestNPCType()), newDescription, icon, questMarkerSet);
addNPCMarker(npcId, QuestsHelper.getMarkerTitle(info.getQuestNPCType()), newDescription, icon, super.markerSet);
}
}
}