diff --git a/src/me/arboriginal/SimpleCompass/managers/TargetManager.java b/src/me/arboriginal/SimpleCompass/managers/TargetManager.java index fe1cc7c..a1e62fb 100644 --- a/src/me/arboriginal/SimpleCompass/managers/TargetManager.java +++ b/src/me/arboriginal/SimpleCompass/managers/TargetManager.java @@ -94,25 +94,37 @@ public void disableTarget(Player player, String type, String name) { } public HashMap> getTargetsCoords(Player player) { - HashMap> list = new HashMap>(); - UUID uid = player.getUniqueId(); + HashMap> list = new HashMap>(); + HashMap> stop = new HashMap>(); + UUID uid = player.getUniqueId(); for (String trackerID : sc.trackers.keySet()) { - if (activeTargets.get(trackerID).containsKey(uid)) { - AbstractTracker tracker = sc.trackers.get(trackerID); + if (!activeTargets.get(trackerID).containsKey(uid)) continue; + AbstractTracker tracker = sc.trackers.get(trackerID); + if (tracker == null) continue; - if (tracker == null) continue; + ArrayList sublist = new ArrayList(); + ArrayList closest = new ArrayList(); - ArrayList sublist = new ArrayList(); + for (String name : activeTargets.get(trackerID).get(uid)) { + double[] coords = tracker.get(player, name); - for (String name : activeTargets.get(trackerID).get(uid)) { - double[] coords = tracker.get(player, name); + if (coords == null || tracker.playerIsClose(player, coords)) + closest.add(name); + else + sublist.add(coords); + } - if (coords != null) sublist.add(coords); - } + if (!sublist.isEmpty()) list.put(trackerID, sublist); + if (!closest.isEmpty()) stop.put(tracker, closest); + } - if (!sublist.isEmpty()) list.put(trackerID, sublist); - } + if (!stop.isEmpty()) { + stop.forEach((tracker, stopped) -> { + stopped.forEach(name -> { + tracker.disable(player, name); + }); + }); } return list; diff --git a/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java b/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java index a124b03..591f6a3 100644 --- a/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java +++ b/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; @@ -335,6 +336,12 @@ public boolean set(Player player, String name, double[] coords) { return false; } + public boolean playerIsClose(Player player, double[] coords) { + int dist = settings.getInt("settings.auto_disabled", 0); + return (dist > 0 && player.getLocation().distance( + new Location(player.getWorld(), coords[0], player.getLocation().getY(), coords[1])) < dist); + } + // ---------------------------------------------------------------------------------------------- // Command methods // ---------------------------------------------------------------------------------------------- diff --git a/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java b/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java index 78a1fa0..6370758 100644 --- a/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java +++ b/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java @@ -134,10 +134,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (command.getName().toLowerCase().equals("scompass-reload")) { reloadConfig(); - for (String tracker : trackers.keySet()) { - if (!trackers.get(tracker).init()) { - trackers.remove(tracker); - sendMessage(sender, "tracker_disabled", ImmutableMap.of("tracker", tracker)); + Iterator it = trackers.keySet().iterator(); + while (it.hasNext()) { + String trackerID = it.next(); + + if (!trackers.get(trackerID).init()) { + it.remove(); + sendMessage(sender, "tracker_disabled", ImmutableMap.of("tracker", trackerID)); } } diff --git a/src/me/arboriginal/SimpleCompass/utils/CacheUtil.java b/src/me/arboriginal/SimpleCompass/utils/CacheUtil.java index 20da4ad..7efb9c4 100644 --- a/src/me/arboriginal/SimpleCompass/utils/CacheUtil.java +++ b/src/me/arboriginal/SimpleCompass/utils/CacheUtil.java @@ -85,7 +85,7 @@ public Object versionGet(String key) { } public void versionSet(String key, Object value, int duration) { - vcc.set("version." + key + ".expire", now() + duration * 600000); + vcc.set("version." + key + ".expire", now() + duration * 60000); vcc.set("version." + key + ".value", value); try { diff --git a/src/plugin.yml b/src/plugin.yml index 0e04c4e..ccff872 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: SimpleCompass description: Simple compass to help player who don't have sense of direction. -version: 0.9.4 +version: 0.9.5 author: arboriginal website: https://www.spigotmc.org/resources/simplecompass.63140/