1
0

more mini message stuff

This commit is contained in:
Lee
2024-03-28 19:01:11 +00:00
parent adeaeb13c0
commit 9a599f319e
6 changed files with 84 additions and 29 deletions

View File

@ -2,32 +2,63 @@ package cc.fascinated.chat;
import cc.fascinated.account.Account;
import cc.fascinated.account.AccountManager;
import cc.fascinated.config.Lang;
import cc.fascinated.utils.Manager;
import cc.fascinated.utils.Style;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
public class ChatManager extends Manager {
private final HashMap<Account, String> lastMessage = new HashMap<>();
private final Pattern domainPattern = Pattern.compile("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,8}$");
@EventHandler
public void onChat(AsyncChatEvent event) {
Player player = event.getPlayer();
Account account = AccountManager.getAccount(player.getUniqueId());
NamedTextColor color = account.getPlayerColorProfile().getColor();
boolean blockedMessage = false;
TextComponent textComponent = (TextComponent) event.message();
String messageContent = textComponent.content();
// Check if the message contains a domain and is not the server's domain.
if (domainPattern.matcher(messageContent).find() && !messageContent.contains("aetheria.cc")) {
blockedMessage = true;
}
// Block the message if it is the same as the last message sent.
if (lastMessage.containsKey(account) && lastMessage.get(account).equalsIgnoreCase(messageContent)) {
blockedMessage = true;
}
if (blockedMessage) {
event.setCancelled(true);
account.sendMessage(Lang.BLOCKED_MESSAGE.getAsString());
return;
}
event.renderer((source, sourceDisplayName, message, viewer) -> {
return Component.text()
.append(Component.text("<"))
.append(player.displayName().color(color))
.append(Component.text(">"))
.append(Component.space())
.append(message)
.hoverEvent(Component.text("Click to message " + player.getName() + ".").hoverEvent())
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + player.getName() + " "))
.asComponent();
MiniMessage miniMessage = Style.getMiniMessage();
return miniMessage.deserialize(Lang.CHAT_FORMAT.getAsString()
.replace("%chatcolor%", color.toString())
.replace("%name%", account.getName())
.replace("%message%", miniMessage.stripTags(messageContent))
);
});
lastMessage.put(account, messageContent);
}
}