From 820b1053271de468a9cc737e9de45ecba7e42640 Mon Sep 17 00:00:00 2001 From: Chipmunk <65827213+ChipmunkMC@users.noreply.github.com> Date: Mon, 6 Feb 2023 01:10:41 +0000 Subject: [PATCH] Make the taken username check more accurate (#336) Instead of using `Bukkit.getPlayer(name)`, now each player is manually iterated over to check if a username is taken. This fixes multiple problems, such as a player not being able to set their name to `a` because a player named `ab` is online, and a player not being able to set their username back to the one they joined with. --- src/main/java/pw/kaboom/extras/commands/CommandUsername.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java index 2befeb7..4c9de77 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java @@ -55,7 +55,9 @@ public final class CommandUsername implements CommandExecutor { return true; } - if (Bukkit.getPlayer(name) != null) { + for (Player other : Bukkit.getOnlinePlayers()) { + if (!other.getName().equals(name)) continue; + player.sendMessage(Component .text("A player with that username is already logged in.")); return true;