diff --git a/src/main/java/me/itsskeptical/displaytags/listeners/PlayerListener.java b/src/main/java/me/itsskeptical/displaytags/listeners/PlayerListener.java index 1b8ca40..0f951b4 100644 --- a/src/main/java/me/itsskeptical/displaytags/listeners/PlayerListener.java +++ b/src/main/java/me/itsskeptical/displaytags/listeners/PlayerListener.java @@ -4,6 +4,7 @@ import me.itsskeptical.displaytags.DisplayTags; import me.itsskeptical.displaytags.nametags.Nametag; import me.itsskeptical.displaytags.nametags.NametagManager; +import me.itsskeptical.displaytags.utils.PlayerUtils; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -19,6 +20,8 @@ public class PlayerListener implements Listener { public void onPlayerLoad(PlayerClientLoadedWorldEvent event) { Player player = event.getPlayer(); if (plugin.config().getNametagConfig().isEnabled()) { + if (PlayerUtils.isNPC(player)) return; + if (nametagManager.get(player) != null) { nametagManager.remove(player); } @@ -31,6 +34,8 @@ public void onPlayerLoad(PlayerClientLoadedWorldEvent event) { public void onPlayerQuit(PlayerQuitEvent event) { if (plugin.config().getNametagConfig().isEnabled()) { Player player = event.getPlayer(); + if (PlayerUtils.isNPC(player)) return; + nametagManager.remove(player); } } @@ -38,7 +43,10 @@ public void onPlayerQuit(PlayerQuitEvent event) { @EventHandler public void onPlayerDeath(PlayerDeathEvent event) { if (plugin.config().getNametagConfig().isEnabled()) { - Nametag nametag = nametagManager.get(event.getPlayer()); + Player player = event.getPlayer(); + if (PlayerUtils.isNPC(player)) return; + + Nametag nametag = nametagManager.get(player); if (nametag == null) return; nametag.hideForAll(); @@ -48,7 +56,10 @@ public void onPlayerDeath(PlayerDeathEvent event) { @EventHandler public void onPlayerTeleport(PlayerTeleportEvent event) { if (plugin.config().getNametagConfig().isEnabled()) { - Nametag nametag = nametagManager.get(event.getPlayer()); + Player player = event.getPlayer(); + if (PlayerUtils.isNPC(player)) return; + + Nametag nametag = nametagManager.get(player); if (nametag == null) return; nametag.teleportForAll(); @@ -59,7 +70,10 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { @EventHandler public void onPlayerWorldChange(PlayerChangedWorldEvent event) { if (plugin.config().getNametagConfig().isEnabled()) { - Nametag nametag = nametagManager.get(event.getPlayer()); + Player player = event.getPlayer(); + if (PlayerUtils.isNPC(player)) return; + + Nametag nametag = nametagManager.get(player); if (nametag == null) return; nametag.hideForAll(); @@ -70,11 +84,14 @@ public void onPlayerWorldChange(PlayerChangedWorldEvent event) { @EventHandler public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { if (plugin.config().getNametagConfig().isEnabled()) { - Nametag nametag = nametagManager.get(event.getPlayer()); + Player player = event.getPlayer(); + if (PlayerUtils.isNPC(player)) return; + + Nametag nametag = nametagManager.get(player); if (nametag != null) { if (event.getNewGameMode() == GameMode.SPECTATOR) { nametag.hideForAll(); - } else if (event.getPlayer().getPreviousGameMode() == GameMode.SPECTATOR) { + } else if (player.getPreviousGameMode() == GameMode.SPECTATOR) { nametag.updateVisibilityForAll(); } } diff --git a/src/main/java/me/itsskeptical/displaytags/nametags/Nametag.java b/src/main/java/me/itsskeptical/displaytags/nametags/Nametag.java index 450a07a..fe8f85c 100644 --- a/src/main/java/me/itsskeptical/displaytags/nametags/Nametag.java +++ b/src/main/java/me/itsskeptical/displaytags/nametags/Nametag.java @@ -6,6 +6,7 @@ import me.itsskeptical.displaytags.config.NametagConfig; import me.itsskeptical.displaytags.entities.ClientTextDisplay; import me.itsskeptical.displaytags.utils.ComponentUtils; +import me.itsskeptical.displaytags.utils.PlayerUtils; import me.itsskeptical.displaytags.utils.handlers.NametagHandler; import me.itsskeptical.displaytags.utils.helpers.DependencyHelper; import net.kyori.adventure.text.Component; @@ -61,7 +62,7 @@ public Player getPlayer() { } public void hideForAll() { - for (Player viewer : Bukkit.getOnlinePlayers()) { + for (Player viewer : PlayerUtils.getOnlinePlayers()) { this.hide(viewer); } } @@ -75,7 +76,7 @@ public void updateVisibilityForAll() { return viewer == null || !viewer.isOnline(); }); - for (Player viewer : Bukkit.getOnlinePlayers()) { + for (Player viewer : PlayerUtils.getOnlinePlayers()) { boolean shouldSee = shouldSee(viewer); boolean isVisible = this.viewers.contains(viewer.getUniqueId()); diff --git a/src/main/java/me/itsskeptical/displaytags/nametags/NametagManager.java b/src/main/java/me/itsskeptical/displaytags/nametags/NametagManager.java index 1a40075..e994942 100644 --- a/src/main/java/me/itsskeptical/displaytags/nametags/NametagManager.java +++ b/src/main/java/me/itsskeptical/displaytags/nametags/NametagManager.java @@ -1,7 +1,7 @@ package me.itsskeptical.displaytags.nametags; +import me.itsskeptical.displaytags.utils.PlayerUtils; import me.itsskeptical.displaytags.utils.handlers.NametagHandler; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.Collection; @@ -31,7 +31,7 @@ public void create(Player player) { } public void remove(Player player) { - for (Player viewer : Bukkit.getOnlinePlayers()) { + for (Player viewer : PlayerUtils.getOnlinePlayers()) { NametagHandler.show(player, viewer); } @@ -43,7 +43,7 @@ public void remove(Player player) { } public void createAll() { - for (Player player : Bukkit.getOnlinePlayers()) { + for (Player player : PlayerUtils.getOnlinePlayers()) { this.create(player); } } diff --git a/src/main/java/me/itsskeptical/displaytags/utils/PlayerUtils.java b/src/main/java/me/itsskeptical/displaytags/utils/PlayerUtils.java new file mode 100644 index 0000000..35626c9 --- /dev/null +++ b/src/main/java/me/itsskeptical/displaytags/utils/PlayerUtils.java @@ -0,0 +1,18 @@ +package me.itsskeptical.displaytags.utils; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Collection; + +public class PlayerUtils { + public static Collection getOnlinePlayers() { + return Bukkit.getOnlinePlayers().stream() + .filter(player -> !isNPC(player)) + .toList(); + } + + public static boolean isNPC(Player player) { + return player.hasMetadata("NPC"); + } +}