Merge branch 'main' into vote_mute

This commit is contained in:
stijn 2025-01-22 20:43:24 +00:00
commit 1c570fd524
3 changed files with 64 additions and 35 deletions

View File

@ -26,6 +26,7 @@ import org.bukkit.inventory.ItemStack;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
public class ChatHandler { public class ChatHandler {
@ -239,10 +240,17 @@ public class ChatHandler {
private void sendChatChannelMessage(CustomChannel chatChannel, UUID uuid, Component component) { private void sendChatChannelMessage(CustomChannel chatChannel, UUID uuid, Component component) {
if (!chatChannel.getServers().contains(Bukkit.getServerName())) return; if (!chatChannel.getServers().contains(Bukkit.getServerName())) return;
Bukkit.getServer().getOnlinePlayers().stream() Player player = Bukkit.getPlayer(uuid);
.filter(p -> p.hasPermission(chatChannel.getPermission())) if (player == null) {
.filter(p -> !ChatUserManager.getChatUser(p.getUniqueId()).getIgnoredPlayers().contains(uuid)) return;
.forEach(p -> p.sendMessage(component)); }
Stream<? extends Player> stream = Bukkit.getServer().getOnlinePlayers().stream()
.filter(p -> p.hasPermission(chatChannel.getPermission()));
if (!player.hasPermission("chat.ignorebypass")) {
stream = stream.filter(p -> !ChatUserManager.getChatUser(p.getUniqueId()).getIgnoredPlayers().contains(uuid) && !p.hasPermission("chat.ignorebypass"));
}
stream.forEach(p -> p.sendMessage(component));
} }
private void sendPluginMessage(Player player, String channel, Component component) { private void sendPluginMessage(Player player, String channel, Component component) {

View File

@ -32,8 +32,10 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ChatListener implements Listener { public class ChatListener implements Listener {
@ -81,13 +83,14 @@ public class ChatListener implements Listener {
} }
Player player = event.getPlayer(); Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
Component input = event.message().colorIfAbsent(NamedTextColor.WHITE); Component input = event.message().colorIfAbsent(NamedTextColor.WHITE);
ModifiableString modifiableString = new ModifiableString(input); ModifiableString modifiableString = new ModifiableString(input);
// todo a better way for this // todo a better way for this
if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, true, "chat", filterType -> { if(!RegexManager.filterText(player.getName(), uuid, modifiableString, true, "chat", filterType -> {
if (!filterType.equals(FilterType.PUNISH)) { if (!filterType.equals(FilterType.PUNISH)) {
ALogger.warn("Received another FilterType than punish when filtering chat and executing a filter action"); ALogger.warn("Received another FilterType than punish when filtering chat and executing a filter action");
return; return;
@ -95,7 +98,7 @@ public class ChatListener implements Listener {
ByteArrayDataOutput out = ByteStreams.newDataOutput(); ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("punish"); out.writeUTF("punish");
out.writeUTF(player.getName()); out.writeUTF(player.getName());
out.writeUTF(player.getUniqueId().toString()); out.writeUTF(uuid.toString());
out.writeUTF(modifiableString.string()); out.writeUTF(modifiableString.string());
player.sendPluginMessage(ChatPlugin.getInstance(), Config.MESSAGECHANNEL, out.toByteArray()); player.sendPluginMessage(ChatPlugin.getInstance(), Config.MESSAGECHANNEL, out.toByteArray());
})) { })) {
@ -103,14 +106,18 @@ public class ChatListener implements Listener {
GalaxyUtility.sendBlockedNotification("Language", player, GalaxyUtility.sendBlockedNotification("Language", player,
modifiableString.component(), modifiableString.component(),
""); "");
chatLogHandler.addChatLog(player.getUniqueId(), player.getServer().getServerName(), PlainTextComponentSerializer.plainText().serialize(input), true); chatLogHandler.addChatLog(uuid, player.getServer().getServerName(), PlainTextComponentSerializer.plainText().serialize(input), true);
return; // the message was blocked return; // the message was blocked
} }
Set<Player> receivers = event.viewers().stream().filter(audience -> audience instanceof Player) Stream<Player> stream = event.viewers().stream().filter(audience -> audience instanceof Player)
.map(audience -> (Player) audience) .map(audience -> (Player) audience);
.filter(receiver -> !ChatUserManager.getChatUser(receiver.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId()))
.collect(Collectors.toSet()); if (!player.hasPermission("chat.ignorebypass")) {
stream = stream.filter(receiver -> !ChatUserManager.getChatUser(receiver.getUniqueId()).getIgnoredPlayers().contains(uuid)
&& !receiver.hasPermission("chat.ignorebypass"));
}
Set<Player> receivers = stream.collect(Collectors.toSet());
Set<Player> playersToPing = new HashSet<>(); Set<Player> playersToPing = new HashSet<>();
pingPlayers(playersToPing, modifiableString, player); pingPlayers(playersToPing, modifiableString, player);
@ -122,7 +129,7 @@ public class ChatListener implements Listener {
for (Player pingPlayer : playersToPing) { for (Player pingPlayer : playersToPing) {
pingPlayer.playSound(pingPlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1); pingPlayer.playSound(pingPlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1);
} }
chatLogHandler.addChatLog(player.getUniqueId(), player.getServer().getServerName(), modifiableString.string(), false); chatLogHandler.addChatLog(uuid, player.getServer().getServerName(), modifiableString.string(), false);
ALogger.info(PlainTextComponentSerializer.plainText().serialize(input)); ALogger.info(PlainTextComponentSerializer.plainText().serialize(input));
} }
@ -151,7 +158,8 @@ public class ChatListener implements Listener {
// String substring = a.group().substring(1); // String substring = a.group().substring(1);
// return ; // return ;
// }); // });
if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())
&& !player.hasPermission("chat.ignorebypass"))
playersToPing.add(onlinePlayer); playersToPing.add(onlinePlayer);
} else if (nickPattern.matcher(modifiableString.string()).find()) { } else if (nickPattern.matcher(modifiableString.string()).find()) {
modifiableString.replace(TextReplacementConfig.builder() modifiableString.replace(TextReplacementConfig.builder()
@ -159,7 +167,8 @@ public class ChatListener implements Listener {
.match(nickPattern) .match(nickPattern)
.replacement(mention.append(onlinePlayerUser.getDisplayName())) .replacement(mention.append(onlinePlayerUser.getDisplayName()))
.build()); .build());
if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())
&& !player.hasPermission("chat.ignorebypass"))
playersToPing.add(onlinePlayer); playersToPing.add(onlinePlayer);
} }
} }

View File

@ -15,20 +15,20 @@ import com.alttd.chat.util.Utility;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.plugin.messaging.PluginMessageListener;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.UUID; import java.util.UUID;
public class PluginMessage implements PluginMessageListener { public class PluginMessage implements PluginMessageListener {
@Override @Override
public void onPluginMessageReceived(String channel, Player player, byte[] bytes) { public void onPluginMessageReceived(String channel, @NotNull Player ignored, byte[] bytes) {
if (!channel.equals(Config.MESSAGECHANNEL)) { if (!channel.equals(Config.MESSAGECHANNEL)) {
return; return;
} }
@ -38,35 +38,36 @@ public class PluginMessage implements PluginMessageListener {
case "privatemessagein": { case "privatemessagein": {
UUID uuid = UUID.fromString(in.readUTF()); UUID uuid = UUID.fromString(in.readUTF());
String target = in.readUTF(); String target = in.readUTF();
Player p = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
String message = in.readUTF(); String message = in.readUTF();
UUID targetuuid = UUID.fromString(in.readUTF()); UUID targetuuid = UUID.fromString(in.readUTF());
if (p != null) { if (player == null) {
ChatUser chatUser = ChatUserManager.getChatUser(uuid); break;
if (!chatUser.getIgnoredPlayers().contains(targetuuid)) { }
p.sendMessage(GsonComponentSerializer.gson().deserialize(message)); ChatUser chatUser = ChatUserManager.getChatUser(uuid);
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1); // todo load this from config if (isTargetNotIgnored(chatUser, targetuuid)) {
ChatUser user = ChatUserManager.getChatUser(uuid); player.sendMessage(GsonComponentSerializer.gson().deserialize(message));
if (!user.getReplyContinueTarget().equalsIgnoreCase(target)) player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1); // todo load this from config
user.setReplyTarget(target); ChatUser user = ChatUserManager.getChatUser(uuid);
} if (!user.getReplyContinueTarget().equalsIgnoreCase(target))
user.setReplyTarget(target);
} }
break;
} }
case "privatemessageout": { case "privatemessageout": {
UUID uuid = UUID.fromString(in.readUTF()); UUID uuid = UUID.fromString(in.readUTF());
String target = in.readUTF(); String target = in.readUTF();
Player p = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
String message = in.readUTF(); String message = in.readUTF();
UUID targetuuid = UUID.fromString(in.readUTF()); UUID targetuuid = UUID.fromString(in.readUTF());
if (p != null) { if (player == null) {
ChatUser chatUser = ChatUserManager.getChatUser(uuid); break;
if (!chatUser.getIgnoredPlayers().contains(targetuuid)) { }
chatUser.setReplyTarget(target); ChatUser chatUser = ChatUserManager.getChatUser(uuid);
p.sendMessage(GsonComponentSerializer.gson().deserialize(message)); if (isTargetNotIgnored(chatUser, targetuuid)) {
chatUser.setReplyTarget(target);
player.sendMessage(GsonComponentSerializer.gson().deserialize(message));
// ChatUser user = ChatUserManager.getChatUser(uuid); // ChatUser user = ChatUserManager.getChatUser(uuid);
// user.setReplyTarget(target); // user.setReplyTarget(target);
}
} }
break; break;
} }
@ -78,7 +79,7 @@ public class PluginMessage implements PluginMessageListener {
Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission(Config.GCPERMISSION)).forEach(p -> { Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission(Config.GCPERMISSION)).forEach(p -> {
ChatUser chatUser = ChatUserManager.getChatUser(p.getUniqueId()); ChatUser chatUser = ChatUserManager.getChatUser(p.getUniqueId());
if (!chatUser.getIgnoredPlayers().contains(uuid)) { if (isTargetNotIgnored(chatUser, uuid)) {
p.sendMessage(GsonComponentSerializer.gson().deserialize(message)); p.sendMessage(GsonComponentSerializer.gson().deserialize(message));
} }
}); });
@ -216,4 +217,15 @@ public class PluginMessage implements PluginMessageListener {
}.runTaskAsynchronously(ChatPlugin.getInstance()); }.runTaskAsynchronously(ChatPlugin.getInstance());
} }
private boolean isTargetNotIgnored(ChatUser chatUser, UUID targetUUID) {
if (!chatUser.getIgnoredPlayers().contains(targetUUID)) {
return true;
}
Player target = Bukkit.getPlayer(targetUUID);
if (target == null) {
return true;
}
return target.hasPermission("chat.ignorebypass");
}
} }