diff --git a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java index 07d7e95..eb92eef 100755 --- a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java +++ b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java @@ -5,6 +5,7 @@ import com.alttd.chat.config.Config; import com.alttd.chat.config.ServerConfig; import com.alttd.chat.database.DatabaseConnection; import com.alttd.chat.handler.ChatHandler; +import com.alttd.chat.listeners.BookListener; import com.alttd.chat.listeners.ChatListener; import com.alttd.chat.listeners.PlayerListener; import com.alttd.chat.listeners.PluginMessage; @@ -40,7 +41,7 @@ public class ChatPlugin extends JavaPlugin { chatHandler = new ChatHandler(); DatabaseConnection.initialize(); serverConfig = new ServerConfig(Bukkit.getServerName()); - registerListener(new PlayerListener(), new ChatListener()); + registerListener(new PlayerListener(), new ChatListener(), new BookListener()); if(serverConfig.GLOBALCHAT) { registerCommand("globalchat", new GlobalChat()); registerCommand("toggleglobalchat", new ToggleGlobalChat()); diff --git a/galaxy/src/main/java/com/alttd/chat/listeners/BookListener.java b/galaxy/src/main/java/com/alttd/chat/listeners/BookListener.java new file mode 100755 index 0000000..71236f4 --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/listeners/BookListener.java @@ -0,0 +1,61 @@ +package com.alttd.chat.listeners; + +import com.alttd.chat.config.Config; +import com.alttd.chat.managers.RegexManager; +import com.alttd.chat.objects.ChatFilter; +import com.alttd.chat.util.Utility; +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.TagResolver; +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.bukkit.event.player.PlayerEditBookEvent; +import org.bukkit.inventory.meta.BookMeta; + +import java.util.ArrayList; +import java.util.List; + +public class BookListener implements Listener { + + private final PlainTextComponentSerializer plainTextComponentSerializer = PlainTextComponentSerializer.plainText(); + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerEditBookEvent(PlayerEditBookEvent event) { + BookMeta bookMeta = event.getNewBookMeta(); + List pages = new ArrayList<>(); + for (Component component : bookMeta.pages()) { + Component formatComponent = Component.text("%message%"); + Component message = parseMessageContent(event.getPlayer(), plainTextComponentSerializer.serialize(component)); + pages.add(formatComponent.replaceText(TextReplacementConfig.builder().match("%message%").replacement(message).build())); + } + bookMeta.pages(pages); + event.setNewBookMeta(bookMeta); + } + + 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()); + } + return component; + + } + +} \ No newline at end of file