From 3395bab928f03c1825b4e15372a7115f1090cdc6 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sun, 2 Sep 2018 23:09:22 -0700 Subject: [PATCH 1/3] Sort /near by nearest player. --- .../essentials/commands/Commandnear.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java index 45a9d4fa2..4081983cb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java @@ -7,8 +7,12 @@ import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; +import javafx.util.Pair; import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.PriorityQueue; +import java.util.Queue; import static com.earth2me.essentials.I18n.tl; @@ -83,6 +87,8 @@ public class Commandnear extends EssentialsCommand { final long radiusSquared = radius * radius; boolean showHidden = user.canInteractVanished(); + Queue> playerDistances = new PriorityQueue<>(Comparator.comparingLong(Pair::getValue)); + for (User player : ess.getOnlineUsers()) { if (!player.equals(user) && (!player.isHidden(user.getBase()) || showHidden || user.getBase().canSee(player.getBase()))) { final Location playerLoc = player.getLocation(); @@ -92,13 +98,19 @@ public class Commandnear extends EssentialsCommand { final long delta = (long) playerLoc.distanceSquared(loc); if (delta < radiusSquared) { - if (output.length() > 0) { - output.append(", "); - } - output.append(player.getDisplayName()).append("§f(§4").append((long) Math.sqrt(delta)).append("m§f)"); + playerDistances.offer(new Pair<>(player, delta)); } } } + + while (!playerDistances.isEmpty()) { + if (output.length() > 0) { + output.append(", "); + } + Pair playerDistance = playerDistances.poll(); + output.append(playerDistance.getKey().getDisplayName()).append("§f(§4").append((long) Math.sqrt(playerDistance.getValue())).append("m§f)"); + } + return output.length() > 1 ? output.toString() : tl("none"); } From 0432546746c7a9cf80016b37aefee58c7ef6488c Mon Sep 17 00:00:00 2001 From: pop4959 Date: Tue, 4 Sep 2018 16:53:01 -0700 Subject: [PATCH 2/3] use less dependencies --- .../earth2me/essentials/commands/Commandnear.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java index 4081983cb..5fcfe9906 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java @@ -7,9 +7,7 @@ import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; -import javafx.util.Pair; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; @@ -87,7 +85,7 @@ public class Commandnear extends EssentialsCommand { final long radiusSquared = radius * radius; boolean showHidden = user.canInteractVanished(); - Queue> playerDistances = new PriorityQueue<>(Comparator.comparingLong(Pair::getValue)); + Queue nearbyPlayers = new PriorityQueue<>((o1, o2) -> (int) (o1.getLocation().distanceSquared(loc) - o2.getLocation().distanceSquared(loc))); for (User player : ess.getOnlineUsers()) { if (!player.equals(user) && (!player.isHidden(user.getBase()) || showHidden || user.getBase().canSee(player.getBase()))) { @@ -98,17 +96,17 @@ public class Commandnear extends EssentialsCommand { final long delta = (long) playerLoc.distanceSquared(loc); if (delta < radiusSquared) { - playerDistances.offer(new Pair<>(player, delta)); + nearbyPlayers.offer(player); } } } - while (!playerDistances.isEmpty()) { + while (!nearbyPlayers.isEmpty()) { if (output.length() > 0) { output.append(", "); } - Pair playerDistance = playerDistances.poll(); - output.append(playerDistance.getKey().getDisplayName()).append("§f(§4").append((long) Math.sqrt(playerDistance.getValue())).append("m§f)"); + User nearbyPlayer = nearbyPlayers.poll(); + output.append(nearbyPlayer.getDisplayName()).append("§f(§4").append((long) Math.sqrt(nearbyPlayer.getLocation().distanceSquared(loc))).append("m§f)"); } return output.length() > 1 ? output.toString() : tl("none"); From 74b0e71015c447dd3416e6eeaa1344bb109efb8f Mon Sep 17 00:00:00 2001 From: pop4959 Date: Tue, 26 Feb 2019 19:54:19 -0800 Subject: [PATCH 3/3] More efficient distance calculation --- .../src/com/earth2me/essentials/commands/Commandnear.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java index 5fcfe9906..cb93f7736 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnear.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnear.java @@ -106,7 +106,7 @@ public class Commandnear extends EssentialsCommand { output.append(", "); } User nearbyPlayer = nearbyPlayers.poll(); - output.append(nearbyPlayer.getDisplayName()).append("§f(§4").append((long) Math.sqrt(nearbyPlayer.getLocation().distanceSquared(loc))).append("m§f)"); + output.append(nearbyPlayer.getDisplayName()).append("§f(§4").append((long) nearbyPlayer.getLocation().distance(loc)).append("m§f)"); } return output.length() > 1 ? output.toString() : tl("none");