package xyz.etztech.qol.listeners; import org.bukkit.ChatColor; 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.AsyncPlayerChatEvent; import xyz.etztech.qol.QoL; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AsyncPlayerChatListener implements Listener { private final List discordSyntax = Arrays.asList( Pattern.compile("__([^_]+)__"), // 0: __underline__ Pattern.compile("_([^_]+)_"), // 1: _italic_ Pattern.compile("\\*\\*([^*]+)\\*\\*"), // 2: **bold** Pattern.compile("\\*([^*]+)\\*"), // 3: *italic* Pattern.compile("~~([^~]+)~~") // 4: ~~strikethrough~~ ); private QoL plugin; public AsyncPlayerChatListener(QoL plugin) { this.plugin = plugin; } @EventHandler(priority=EventPriority.HIGH, ignoreCancelled=true) public void onChat(AsyncPlayerChatEvent event) { Player player = event.getPlayer(); if (QoL.hasSM(player)) { event.getRecipients().clear(); event.getRecipients().add(player); } if (QoL.getTimeout() && !player.hasPermission("qol.timeout.bypass")) { event.getRecipients().clear(); } // Discord syntax for font emphasis if (player.hasPermission("qol.discord")) { String chat = event.getMessage(); Pattern syntax; Matcher matcher; for (int i = 0; i < discordSyntax.size(); i++) { syntax = discordSyntax.get(i); matcher = syntax.matcher(chat); switch (i) { case 0: chat = matcher.replaceAll("&n$1&r"); break; case 1: case 3: chat = matcher.replaceAll("&o$1&r"); break; case 2: chat = matcher.replaceAll("&l$1&r"); break; case 4: chat = matcher.replaceAll("&m$1&r"); break; default: break; } } event.setMessage(ChatColor.translateAlternateColorCodes('&', chat)); } } }