From 66a058225dad7cafed6add4821b1c0acadfa4563 Mon Sep 17 00:00:00 2001 From: Stijn Date: Fri, 24 Jun 2022 21:11:54 +0200 Subject: [PATCH] Fixed chat not sending messages by bypassing Microsoft's chat report system --- .../alttd/chat/listeners/ChatListener.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java index 418c358..959ea33 100755 --- a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java +++ b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java @@ -10,10 +10,7 @@ import com.alttd.chat.objects.ModifiableString; import com.alttd.chat.objects.Toggleable; import com.alttd.chat.util.GalaxyUtility; import com.alttd.chat.util.Utility; -import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.event.player.AsyncChatEvent; -import jdk.jshell.execution.Util; -import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; @@ -24,19 +21,20 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; -public class ChatListener implements Listener, ChatRenderer { +import java.util.Set; +import java.util.stream.Collectors; + +public class ChatListener implements Listener { @EventHandler(ignoreCancelled = true) public void onPlayerChat(AsyncChatEvent event) { + event.setCancelled(true); //Always cancel the event because we do not want to deal with Microsoft's stupid bans Toggleable toggleable = Toggleable.getToggleable(event.getPlayer().getUniqueId()); if (toggleable != null) { - event.setCancelled(true); toggleable.sendMessage(event.getPlayer(), event.message()); return; } if (ChatPlugin.getInstance().serverMuted() && !event.getPlayer().hasPermission("chat.bypass-server-muted")) { - event.setCancelled(true); - Player player = event.getPlayer(); GalaxyUtility.sendBlockedNotification("Chat Muted", player, event.message(), ""); return; @@ -45,8 +43,10 @@ public class ChatListener implements Listener, ChatRenderer { Player player = event.getPlayer(); // ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); - event.viewers().removeIf(audience -> audience instanceof Player receiver - && ChatUserManager.getChatUser(receiver.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())); + Set receivers = event.viewers().stream().filter(audience -> audience instanceof Player) + .map(audience -> (Player) audience) + .filter(receiver -> ChatUserManager.getChatUser(receiver.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) + .collect(Collectors.toSet()); Component input = event.message(); String message = PlainTextComponentSerializer.plainText().serialize(input); @@ -67,20 +67,21 @@ public class ChatListener implements Listener, ChatRenderer { } Component component = Utility.parseMiniMessage(Utility.formatText(message)); -// message = Utility.formatText(message); -// TagResolver placeholders = TagResolver.resolver( -// Placeholder.unparsed("message", message) -// ); - component = component -// Component component = Utility.parseMiniMessage("", placeholders) - .replaceText(TextReplacementConfig.builder().once().matchLiteral("[i]").replacement(ChatHandler.itemComponent(player.getInventory().getItemInMainHand())).build()); + component = component.replaceText( + TextReplacementConfig.builder() + .once() + .matchLiteral("[i]") + .replacement(ChatHandler.itemComponent(player.getInventory().getItemInMainHand())) + .build()); - event.message(component); - event.renderer(this); + component = render(player, component); + player.sendMessage(component); + for (Player receiver : receivers) { + receiver.sendMessage(component); + } } - @Override - public @NotNull Component render(@NotNull Player player, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) { + public @NotNull Component render(@NotNull Player player, @NotNull Component message) { ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); TagResolver placeholders = TagResolver.resolver( Placeholder.component("sender", user.getDisplayName()),