diff --git a/src/main/java/xyz/etztech/qol/QoL.java b/src/main/java/xyz/etztech/qol/QoL.java index ae931a6..1ba18d1 100644 --- a/src/main/java/xyz/etztech/qol/QoL.java +++ b/src/main/java/xyz/etztech/qol/QoL.java @@ -43,8 +43,6 @@ public class QoL extends JavaPlugin { essentials = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials"); } - - if( isEnabled() ) { // Add listeners @@ -149,6 +147,7 @@ public class QoL extends JavaPlugin { for (String command : config.getStringList("audit.commands")) { audits.add(command.toLowerCase()); } + links = new ArrayList<>(); for (String raw : config.getStringList("links")) { links.add(LinkCommand.fromString(raw)); @@ -235,9 +234,7 @@ public class QoL extends JavaPlugin { timeout = enabled; } - public static List getAudits() { - return audits; - } + public static List getAudits() { return audits; } public static List getLinks() { return links; diff --git a/src/main/java/xyz/etztech/qol/listeners/CommandPreprocessListener.java b/src/main/java/xyz/etztech/qol/listeners/CommandPreprocessListener.java index 64c0a2b..0c9d7bb 100644 --- a/src/main/java/xyz/etztech/qol/listeners/CommandPreprocessListener.java +++ b/src/main/java/xyz/etztech/qol/listeners/CommandPreprocessListener.java @@ -4,6 +4,7 @@ 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.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,11 +16,13 @@ import xyz.etztech.qol.other.LinkCommand; import java.util.HashMap; import java.util.Map; +import java.util.UUID; public class CommandPreprocessListener implements Listener { QoL plugin; + private Map confirmTpMap = new HashMap<>(); public CommandPreprocessListener(QoL plugin) { this.plugin = plugin; @@ -33,23 +36,48 @@ public class CommandPreprocessListener implements Listener { String base = command.split(" ")[0].substring(1).toLowerCase(); // Strip the slash Player sender = event.getPlayer(); + if (sender.hasPermission("qol.tpconfirm")) { + //check if the command is a tp command + if (noSlash(base).equals("tp") || noSlash(base).startsWith("tele") || noSlash(command).startsWith("lagg tpchunk")) { + //If the user is in the confirm tp map, remove them and let the command run + if (command.equals(confirmTpMap.get(sender.getUniqueId()))) { + confirmTpMap.remove(sender.getUniqueId()); + } + //If the user is running the tp command for the first time outside of spec + else if (sender.getGameMode() != GameMode.SPECTATOR) { + //Cancel the command + event.setCancelled(true); + + //Add the user to the tp confirm map + confirmTpMap.put(sender.getUniqueId(), command); + + TextComponent message = new TextComponent(ChatColor.GREEN + "You are TPing out of spec, run command again to confirm."); + sender.spigot().sendMessage(message); + } + } + } + // 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); } + } } @@ -71,12 +99,4 @@ public class CommandPreprocessListener implements Listener { } - - - - - - - - } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 14289ac..4943f31 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -68,6 +68,9 @@ permissions: qol.audit: description: Audits command usage default: op + qol.tpconfirm: + description: Makes the user confirm they want to TP out of spec + default: op qol.whitelist.bypass: description: Allows someone into the server when Whitelist is enabled default: op