Estoy creando un complemento donde las personas pueden alternar el chat por sí mismas en el servidor.
Lo que tengo ahora funciona bastante bien:
@EventHandler(priority = EventPriority.HIGHEST) public void onPlayerChat(@NotNull AsyncPlayerChatEvent e) { if(TOGGLED_USERS_BY_UUID.contains(e.getPlayer().getUniqueId().toString())) { e.setCancelled(true); e.getPlayer().sendRawMessage(ToggleChat.LANG.get("cannotChat")); return; } String message = e.getMessage(); getLogger().info(String.format("<%s>: %s", e.getPlayer().getName(), message)); e.setCancelled(true); for(Player p : getServer().getOnlinePlayers()) { if(!TOGGLED_USERS_BY_UUID.contains(p.getUniqueId().toString())) p.sendRawMessage(String.format("<%s> %s", e.getPlayer().getName(), message)); } } Pero el problema surge cuando los usuarios tienen otras cosas para su chat, como un nivel específico para su mensaje de chat como (lvl) [username] - message o algo así.
¿Cómo hago para no tener que volver a enviar el mensaje a los usuarios o simplemente cancelar el evento para un usuario específico?
¡Gracias!
@EventHandler public void onPlayerChat(AsyncPlayerChatEvent event) { event.getRecipients().remove(/*player who shouldn't see chat*/); }Si desea filtrar jugadores por sus niveles de XP, puede usar
getRecipients().removeIf(p -> p.getLevel() < minimumLevel)