QoL/src/main/java/xyz/etztech/qol/listeners/AsyncPlayerChatListener.java

78 lines
2.5 KiB
Java

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<Pattern> 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));
}
}
}