diff --git a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java index b7fd8cb..3622c69 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/DynmapCitizens.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; @SuppressWarnings("unused") @@ -54,24 +53,17 @@ public final class DynmapCitizens extends JavaPlugin { handlers.add(new MinstrelHandler()); for (CitizensTraitHandler handler : handlers) { handler.initialize(); + handler.updateMarkers(); } //Schedule handlers to run periodically - AtomicInteger elapsedSeconds = new AtomicInteger(); - elapsedSeconds.set(240); Bukkit.getScheduler().runTaskTimer(this, () -> { for (CitizensTraitHandler handler : handlers) { - if (handler.isEnabled() && elapsedSeconds.get() % handler.getUpdateRate().getEveryNSeconds() == 0) { + if (handler.isEnabled()) { handler.updateMarkers(); } } - elapsedSeconds.addAndGet(5); - if (elapsedSeconds.get() > 3600) { - elapsedSeconds.set(240); - } - //TODO: It would probably make more sense to have individual timers for each marker based on whether the - // NPC is likely to move about. - }, 5 * 20, 5 * 20); + }, 10 * 20, 300 * 20); vaultHandler = new VaultHandler(this.getServer().getServicesManager()); } diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java index b129fdd..d1c6af0 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/AbstractTraitHandler.java @@ -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 org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.dynmap.DynmapAPI; @@ -70,11 +71,20 @@ public abstract class AbstractTraitHandler implements CitizensTraitHandler { return; } - Marker marker = markerSet.createMarker(null, markerName + npc.getName(), npcLocation.getWorld().getName(), - npcLocation.getX(), npcLocation.getY(), npcLocation.getZ(), icon, false); + Marker marker = markerSet.createMarker(npcId.toString(), markerName + npc.getName(), + npcLocation.getWorld().getName(), npcLocation.getX(), npcLocation.getY(), npcLocation.getZ(), icon, + false); if (marker != null) { marker.setDescription(markerDescription); } + + //For NPCs that move around, update their marker's location every n seconds + 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 + } } /** diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/BlacksmithHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/BlacksmithHandler.java index 6f1ba99..4ed0c0c 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/BlacksmithHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/BlacksmithHandler.java @@ -8,7 +8,6 @@ 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.property.UpdateRate; import org.bukkit.Bukkit; import org.bukkit.Material; import org.dynmap.DynmapAPI; @@ -42,11 +41,6 @@ public class BlacksmithHandler extends AbstractTraitHandler { isEnabled = false; } - @Override - public UpdateRate getUpdateRate() { - return UpdateRate.VERY_SLOW; - } - @Override public void updateMarkers() { //Remove existing markers diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/CitizensTraitHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/CitizensTraitHandler.java index f3cb726..a9cbaf6 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/CitizensTraitHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/CitizensTraitHandler.java @@ -1,7 +1,5 @@ package net.knarcraft.dynmapcitizens.handler.trait; -import net.knarcraft.dynmapcitizens.property.UpdateRate; - /** * A handler which takes care of everything for one citizen trait */ @@ -12,13 +10,6 @@ public interface CitizensTraitHandler { */ void initialize(); - /** - * Gets the update rate used for this handler - * - * @return

The update rate for this handler

- */ - UpdateRate getUpdateRate(); - /** * Gets whether this handler was properly initialized and enabled * diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/MinstrelHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/MinstrelHandler.java index 639e9b9..07ef46c 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/MinstrelHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/MinstrelHandler.java @@ -5,7 +5,6 @@ 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.property.UpdateRate; import net.knarcraft.minstrel.MinstrelPlugin; import net.knarcraft.minstrel.music.Song; import net.knarcraft.minstrel.trait.MinstrelTrait; @@ -39,11 +38,6 @@ public class MinstrelHandler extends AbstractTraitHandler { isEnabled = false; } - @Override - public UpdateRate getUpdateRate() { - return UpdateRate.VERY_SLOW; - } - @Override public void updateMarkers() { //Remove existing markers diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/SentinelHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/SentinelHandler.java index aae0f44..24eba4e 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/SentinelHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/SentinelHandler.java @@ -5,7 +5,6 @@ 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.property.UpdateRate; import org.bukkit.Bukkit; import org.dynmap.DynmapAPI; import org.dynmap.markers.GenericMarker; @@ -36,11 +35,6 @@ public class SentinelHandler extends AbstractTraitHandler { isEnabled = false; } - @Override - public UpdateRate getUpdateRate() { - return UpdateRate.FAST; - } - @Override public void updateMarkers() { sentinelSet.getMarkers().forEach(GenericMarker::deleteMarker); diff --git a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java index c9b482f..9ac73c5 100644 --- a/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java +++ b/src/main/java/net/knarcraft/dynmapcitizens/handler/trait/quests/QuestsHandler.java @@ -8,7 +8,6 @@ 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.property.UpdateRate; import net.knarcraft.dynmapcitizens.util.QuestsHelper; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -59,11 +58,6 @@ public class QuestsHandler extends AbstractTraitHandler { isEnabled = false; } - @Override - public UpdateRate getUpdateRate() { - return UpdateRate.VERY_SLOW; - } - @Override public void updateMarkers() { if (questsAPI.isLoading()) { @@ -79,14 +73,15 @@ public class QuestsHandler extends AbstractTraitHandler { //Updates all quest area markers if (questsChanged) { + //Update all area markers for quests updateQuestAreas(); + + //Generate information about all NPCs involved in quests + generateQuestNPCInfo(); + + //Generate markers based on the generated info + generateAllMarkers(); } - - //Generate information about all NPCs involved in quests - generateQuestNPCInfo(); - - //Generate markers based on the generated info - generateAllMarkers(); } /** diff --git a/src/main/java/net/knarcraft/dynmapcitizens/property/UpdateRate.java b/src/main/java/net/knarcraft/dynmapcitizens/property/UpdateRate.java deleted file mode 100644 index 7d5e55d..0000000 --- a/src/main/java/net/knarcraft/dynmapcitizens/property/UpdateRate.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.knarcraft.dynmapcitizens.property; - -/** - * An update rate for a group of icons - */ -public enum UpdateRate { - - /** - * This is run quite often, to display movement - */ - FAST(5), - - /** - * This is run rarely, as change isn't expected - */ - VERY_SLOW(120); - - private final int everyNSeconds; - - /** - * Instantiates a new update rate - * - * @param everyNSeconds

The number of seconds to wait between each run

- */ - UpdateRate(int everyNSeconds) { - this.everyNSeconds = everyNSeconds; - } - - /** - * Gets the number of seconds between each time an update should be performed - * - * @return

The N in every N seconds

- */ - public int getEveryNSeconds() { - return everyNSeconds; - } - -}