[SPIGOT-7132] Messing with AsyncPlayerChatEvent#getRecipients() turns the message into a system message Created: 07/Aug/22  Updated: 25/Dec/24

Status: Open
Project: Spigot
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: MikChan Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: chat

Version: CraftBukkit version 3563-Spigot-2183145-1e3bf58 (MC: 1.19.1) (Implementing API version 1.19.1-R0.1-SNAPSHOT)
Guidelines Read: Yes

 Description   

When the list of the recipients is changed, the sent message is received as a system message on the client. Here's a minimal example that causes it.

 

import org.bukkit.Server;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.AsyncPlayerChatPreviewEvent;
import org.jetbrains.annotations.NotNull;

import java.util.stream.Collectors;

public class DebugChatListener implements Listener {
    private final @NotNull Server server;

    public DebugChatListener(@NotNull Server server) {
        this.server = server;
    }

    private void HandleEvent(@NotNull AsyncPlayerChatEvent event) {
        event.getRecipients().clear();
        event.getRecipients().addAll(server.getOnlinePlayers().stream()
                .filter(player -> player.getWorld() == event.getPlayer().getWorld() &&
                        player.getLocation().distance(event.getPlayer()
                                .getLocation()) < 100)
                .collect(Collectors.toSet()));
    }

    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
    public void OnAsyncPlayerChat(@NotNull AsyncPlayerChatEvent event) {
        HandleEvent(event);
    }


    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
    public void OnAsyncPlayerChatPreview(@NotNull AsyncPlayerChatPreviewEvent event) {
        HandleEvent(event);
    }
}

Generated at Fri Mar 14 15:13:15 UTC 2025 using Jira 10.3.3#10030003-sha1:d220e3fefc8dfc6d47f522d3b9a20c1455e12b7b.