package net.knarcraft.dynmapcitizens.trait; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.knarcraft.dynmapcitizens.DynmapCitizens; import org.bukkit.Location; import org.bukkit.World; import org.dynmap.DynmapAPI; import org.dynmap.markers.Marker; import org.dynmap.markers.MarkerIcon; import org.dynmap.markers.MarkerSet; import java.util.UUID; import java.util.logging.Level; /** * An abstract class with useful code for all citizens-trait-handlers */ public abstract class AbstractTraitHandler implements CitizensTraitHandler { protected boolean isEnabled = false; @Override public boolean isEnabled() { return isEnabled; } /** * Gets the given marker set (and creates it if necessary) * * @param dynmapAPI

A reference to dynmap's API

* @param setId

The id of the marker set to get

* @param label

The label of the marker set if creation is necessary

* @return

The marker set, or null if something went wrong

*/ protected MarkerSet getMarkerSet(DynmapAPI dynmapAPI, String setId, String label) { MarkerSet markerSet = dynmapAPI.getMarkerAPI().getMarkerSet(setId); if (markerSet == null) { markerSet = dynmapAPI.getMarkerAPI().createMarkerSet(setId, label, null, false); if (markerSet == null) { DynmapCitizens.getInstance().getLogger().log(Level.SEVERE, "Unable to get or create " + setId + " marker set"); DynmapCitizens.getInstance().onDisable(); return null; } } return markerSet; } /** * Adds a marker for an NPC * * @param npcId

The if of the NPC

* @param markerName

The name of the NPC marker

* @param markerDescription

The description of the NPC marker

* @param icon

The icon used for the marker

* @param markerSet

The marker set to add the marker to

*/ protected void addNPCMarker(UUID npcId, String markerName, String markerDescription, MarkerIcon icon, MarkerSet markerSet) { NPC npc = CitizensAPI.getNPCRegistry().getByUniqueId(npcId); //If the NPC has been removed, abort if (npc == null) { return; } //Skip if not a proper location Location npcLocation = npc.getStoredLocation(); World world = npcLocation.getWorld(); if (world == null) { return; } Marker marker = markerSet.createMarker(null, markerName + npc.getName(), npcLocation.getWorld().getName(), npcLocation.getX(), npcLocation.getY(), npcLocation.getZ(), icon, false); if (marker != null) { marker.setDescription(markerDescription); } } /** * Gets whether the given NPC is currently moving * * @param npc

The NPC to check

* @return

True if the NPC is currently moving about

*/ protected boolean isMoving(NPC npc) { return npc.getNavigator().getTargetAsLocation() != null; } }