package xyz.etztech.qol.listeners; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.TextComponent; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import xyz.etztech.core.CoreUtils; import xyz.etztech.core.web.CoreWeb; import xyz.etztech.qol.QoL; import xyz.etztech.qol.other.LinkCommand; import java.util.HashMap; import java.util.Map; public class CommandPreprocessListener implements Listener { QoL plugin; public CommandPreprocessListener(QoL plugin) { this.plugin = plugin; } @EventHandler public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String command = event.getMessage(); String base = command.split(" ")[0].substring(1).toLowerCase(); // Strip the slash Player sender = event.getPlayer(); // Command Auditing if (sender.hasPermission("qol.audit") && plugin.getConfig().getBoolean("audit.enabled")) { boolean auditable = false; for (String audit : QoL.getAudits()) { if (noSlash(command).startsWith(noSlash(audit))) { auditable = true; break; } } if (auditable) { Map post = new HashMap<>(); post.put("username", "QoL Auditor"); post.put("content", "[" + StringUtils.capitalize(sender.getGameMode().name().toLowerCase()) + "] " + sender.getName() + " executed command: " + command); String webhook = plugin.getConfig().getString("audit.webhook"); if (StringUtils.isNotEmpty(webhook)) { CoreWeb.asyncPost(plugin, webhook, post); } } } // Links for (LinkCommand linkCommand : QoL.getLinks()) { if (base.equalsIgnoreCase(linkCommand.getCommand())) { event.setCancelled(true); TextComponent link = new TextComponent(ChatColor.GREEN + linkCommand.getMessage()); link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, linkCommand.getUrl())); sender.spigot().sendMessage(link); return; } } } public String noSlash(String command) { return command.startsWith("/") ? command.substring(1) : command; } }