94 lines
3.1 KiB
Java
94 lines
3.1 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;
|
|
plugin.getServer().getPluginManager().registerEvents(this, 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();
|
|
boolean escape = false;
|
|
|
|
// Escape
|
|
if (chat.startsWith("\\")) {
|
|
escape = true;
|
|
event.setMessage(chat.substring(1));
|
|
|
|
// Escape the escape, this monster wants to start their message with a backslash
|
|
if (chat.startsWith("\\\\")) {
|
|
escape = false;
|
|
}
|
|
}
|
|
|
|
if (!escape) {
|
|
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));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|