package xyz.etztech.minecraftmanager.listeners; import net.md_5.bungee.api.chat.TextComponent; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; 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.web.Http; import xyz.etztech.minecraftmanager.MCMAPI; import xyz.etztech.minecraftmanager.MCMUtil; import xyz.etztech.minecraftmanager.MinecraftManager; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; public class CommandPreprocessListener implements Listener { MinecraftManager plugin; private LinkedHashSet hasReadRules = new LinkedHashSet<>(); public CommandPreprocessListener(MinecraftManager plugin) { this.plugin = plugin; } @EventHandler public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String command = event.getMessage().substring(1); // Strip the slash String base = command.split(" ")[0]; String[] args = command.trim().length() == base.trim().length() ? new String[0] : command.substring(base.length()+1).split(" "); Player sender = event.getPlayer(); if (sender.hasPermission("minecraftmanager.warn") && "ban".equalsIgnoreCase(base)) { if (args.length < 1) { return; } if (plugin.getConfig().getBoolean("ban.enabled")) { String uuid = MCMUtil.getUUID(args[0]); if (uuid != null) { String message = ""; if (StringUtils.isNumeric(args[1])) { int option = Integer.parseInt(args[1]); List options = MinecraftManager.getBanOptions(); if (option <= options.size()) { message = options.get(option-1); Bukkit.getConsoleSender().sendMessage("Reformatting ban..."); sender.chat("/ban " + args[0] + " " + message); } else { sender.sendMessage(ChatColor.RED + "Ban Option not recognized."); } event.setCancelled(true); return; } else { message = StringUtils.join(Arrays.copyOfRange(args, 1, args.length), " "); } if (plugin.getConfig().getBoolean("ban.auto-warning")) { String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/warning/"; Map data = MCMAPI.setup(); data.put("player", uuid); data.put("staff", sender.getUniqueId().toString()); data.put("severity", "H"); data.put("message", message); Http.asyncPost(plugin, djangoUrl, data); } } } } else if (sender.hasPermission("minecraftmanager.guest")) { if ("rules".equalsIgnoreCase(base)) { hasReadRules.add(sender.getUniqueId().toString()); } else if ("apply".equalsIgnoreCase(base)) { if(!hasReadRules.contains(sender.getUniqueId().toString())) { event.setCancelled(true); sender.spigot().sendMessage(new TextComponent(ChatColor.RED + "Make sure to check /rules before applying!")); } } } } }