Update ChatListener.java
This commit is contained in:
parent
b0e453295b
commit
fb997ae4ed
|
|
@ -5,21 +5,24 @@ import com.alttd.chat.config.Config;
|
|||
import com.alttd.chat.handler.ChatHandler;
|
||||
import com.alttd.chat.managers.ChatUserManager;
|
||||
import com.alttd.chat.managers.RegexManager;
|
||||
import com.alttd.chat.objects.ChatFilter;
|
||||
import com.alttd.chat.objects.ChatUser;
|
||||
import com.alttd.chat.objects.ModifiableString;
|
||||
import com.alttd.chat.objects.Toggleable;
|
||||
import com.alttd.chat.util.ALogger;
|
||||
import com.alttd.chat.util.GalaxyUtility;
|
||||
import com.alttd.chat.util.Utility;
|
||||
import io.papermc.paper.event.player.AsyncChatDecorateEvent;
|
||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextReplacementConfig;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
|
@ -28,6 +31,19 @@ import java.util.stream.Collectors;
|
|||
|
||||
public class ChatListener implements Listener {
|
||||
|
||||
private final PlainTextComponentSerializer plainTextComponentSerializer = PlainTextComponentSerializer.plainText();
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onChatDecorate(AsyncChatDecorateEvent event) {
|
||||
|
||||
if (event.player() == null) return;
|
||||
|
||||
Component formatComponent = Component.text("%message%");
|
||||
Component message = parseMessageContent(event.player(), plainTextComponentSerializer.serialize(event.originalMessage()));
|
||||
|
||||
event.result(formatComponent.replaceText(TextReplacementConfig.builder().match("%message%").replacement(message).build()));
|
||||
}
|
||||
|
||||
@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
|
||||
|
|
@ -43,7 +59,6 @@ public class ChatListener implements Listener {
|
|||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
// ChatUser user = ChatUserManager.getChatUser(player.getUniqueId());
|
||||
|
||||
Set<Player> receivers = event.viewers().stream().filter(audience -> audience instanceof Player)
|
||||
.map(audience -> (Player) audience)
|
||||
|
|
@ -61,40 +76,57 @@ public class ChatListener implements Listener {
|
|||
"");
|
||||
return; // the message was blocked
|
||||
}
|
||||
message = modifiableString.string();
|
||||
if(!player.hasPermission("chat.format")) {
|
||||
message = Utility.stripTokens(message);
|
||||
} else {
|
||||
message = Utility.parseColors(message);
|
||||
}
|
||||
|
||||
Component component = Utility.parseMiniMessage(Utility.formatText(message));
|
||||
component = component.replaceText(
|
||||
TextReplacementConfig.builder()
|
||||
.once()
|
||||
.matchLiteral("[i]")
|
||||
.replacement(ChatHandler.itemComponent(player.getInventory().getItemInMainHand()))
|
||||
.build());
|
||||
|
||||
component = render(player, component);
|
||||
input = render(player, input);
|
||||
for (Player receiver : receivers) {
|
||||
receiver.sendMessage(component);
|
||||
receiver.sendMessage(input);
|
||||
}
|
||||
ALogger.info(PlainTextComponentSerializer.plainText().serialize(component));
|
||||
ALogger.info(PlainTextComponentSerializer.plainText().serialize(input));
|
||||
}
|
||||
|
||||
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()),
|
||||
// Placeholder.component("sendername", player.name()),
|
||||
Placeholder.parsed("sendername", player.getName()),
|
||||
Placeholder.component("prefix", user.getPrefix()),
|
||||
Placeholder.component("prefixall", user.getPrefixAll()),
|
||||
Placeholder.component("staffprefix", user.getStaffPrefix()),
|
||||
Placeholder.component("message", message)
|
||||
);
|
||||
|
||||
return Utility.parseMiniMessage(Config.CHATFORMAT.replaceAll("<sendername>", player.getName()), placeholders);
|
||||
return Utility.parseMiniMessage(Config.CHATFORMAT, placeholders);
|
||||
}
|
||||
|
||||
private Component parseMessageContent(Player player, String rawMessage) {
|
||||
TagResolver.Builder tagResolver = TagResolver.builder();
|
||||
|
||||
Utility.formattingPerms.forEach((perm, pair) -> {
|
||||
if (player.hasPermission(perm)) {
|
||||
tagResolver.resolver(pair.getX());
|
||||
}
|
||||
});
|
||||
|
||||
MiniMessage miniMessage = MiniMessage.builder().tags(tagResolver.build()).build();
|
||||
Component component = miniMessage.deserialize(rawMessage);
|
||||
for(ChatFilter chatFilter : RegexManager.getEmoteFilters()) {
|
||||
component = component.replaceText(
|
||||
TextReplacementConfig.builder()
|
||||
.times(Config.EMOTELIMIT)
|
||||
.match(chatFilter.getRegex())
|
||||
.replacement(chatFilter.getReplacement()).build());
|
||||
}
|
||||
|
||||
component = component
|
||||
.replaceText(
|
||||
TextReplacementConfig.builder()
|
||||
.once()
|
||||
.matchLiteral("[i]")
|
||||
.replacement(ChatHandler.itemComponent(player.getInventory().getItemInMainHand()))
|
||||
.build());
|
||||
|
||||
return component;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user