From 3796ab311df053d672356cdb89593935a859c352 Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Mon, 26 Jan 2026 10:10:20 +0200 Subject: [PATCH] Improved detection of vanished players --- .../java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java | 4 +++- src/main/java/pro/cloudnode/smp/cloudnodemsg/Message.java | 2 +- .../cloudnode/smp/cloudnodemsg/command/MessageCommand.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java b/src/main/java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java index 8fdfe44..92947f5 100644 --- a/src/main/java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java +++ b/src/main/java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java @@ -46,7 +46,9 @@ public void onDisable() { // Plugin shutdown logic } - public static boolean isVanished(final @NotNull Player player) { + public static boolean isVanished(final @NotNull Player player, final @NotNull Player observer) { + if (!observer.canSee(player)) + return true; for (final @NotNull MetadataValue meta : player.getMetadata("vanished")) if (meta.asBoolean()) return true; return false; diff --git a/src/main/java/pro/cloudnode/smp/cloudnodemsg/Message.java b/src/main/java/pro/cloudnode/smp/cloudnodemsg/Message.java index b206444..6e42a32 100644 --- a/src/main/java/pro/cloudnode/smp/cloudnodemsg/Message.java +++ b/src/main/java/pro/cloudnode/smp/cloudnodemsg/Message.java @@ -57,7 +57,7 @@ public void send(final @NotNull Context context) throws InvalidPlayerError { final @NotNull Optional<@NotNull Player> senderPlayer = Optional.ofNullable(this.sender.getPlayer()); final @NotNull Optional<@NotNull Player> recipientPlayer = Optional.ofNullable(this.recipient.getPlayer()); - if (!recipient.getUniqueId().equals(console.getUniqueId()) && recipientPlayer.isEmpty() || (recipientPlayer.isPresent() && senderPlayer.isPresent() && CloudnodeMSG.isVanished(recipientPlayer.get()) && !senderPlayer.get().hasPermission(Permission.SEND_VANISHED))) { + if (!recipient.getUniqueId().equals(console.getUniqueId()) && recipientPlayer.isEmpty() || (recipientPlayer.isPresent() && senderPlayer.isPresent() && CloudnodeMSG.isVanished(recipientPlayer.get(), senderPlayer.get()) && !senderPlayer.get().hasPermission(Permission.SEND_VANISHED))) { if (context == Context.CHANNEL) { final @NotNull Player player = Objects.requireNonNull(sender.getPlayer()); Message.exitChannel(player); diff --git a/src/main/java/pro/cloudnode/smp/cloudnodemsg/command/MessageCommand.java b/src/main/java/pro/cloudnode/smp/cloudnodemsg/command/MessageCommand.java index 2ce01de..14caee6 100644 --- a/src/main/java/pro/cloudnode/smp/cloudnodemsg/command/MessageCommand.java +++ b/src/main/java/pro/cloudnode/smp/cloudnodemsg/command/MessageCommand.java @@ -44,7 +44,7 @@ public boolean run(final @NotNull CommandSender sender, final @NotNull String la return sendMessage(player, CloudnodeMSG.getInstance().config().channelClosed(player.getName(), Optional.ofNullable(recipientOffline.getName()).orElse("Unknown Player"), label)); } } - if (recipient.isEmpty() || (CloudnodeMSG.isVanished(recipient.get()) && !player.hasPermission(Permission.SEND_VANISHED))) return new PlayerNotFoundError(args[0]).send(player); + if (recipient.isEmpty() || (CloudnodeMSG.isVanished(recipient.get(), player) && !player.hasPermission(Permission.SEND_VANISHED))) return new PlayerNotFoundError(args[0]).send(player); if (!Message.isIncomingEnabled(recipient.get())) return new PlayerHasIncomingDisabledError(recipient.get().getName()).send(player); Message.createChannel(player, recipient.get()); return sendMessage(player, CloudnodeMSG.getInstance().config().channelCreated(player.getName(), recipient.get().getName(), label));