package xyz.etztech.minecraftmanager.objects; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import xyz.etztech.minecraftmanager.MCMUtil; import xyz.etztech.minecraftmanager.MinecraftManager; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MinecraftManagerThread extends Thread { private boolean running = true; private MinecraftManager plugin; public MinecraftManagerThread(MinecraftManager plugin) {this.plugin = plugin;} public boolean getRunning() { return running; } public void setRunning(boolean running) { this.running = running; } public void run() { try { ServerSocket cmdSock = new ServerSocket(this.plugin.getConfig().getInt("port"), 0, InetAddress.getByName(null)); while (getRunning()) { Socket data = cmdSock.accept(); BufferedReader myInput = new BufferedReader(new InputStreamReader(data.getInputStream())); String buf = myInput.readLine(); if (buf != null) { String[] input = buf.split(" "); String base = input[0]; ArrayList args = new ArrayList<>(); if (input.length > 1) { args = new ArrayList<>(Arrays.asList(buf.split(" "))); args.remove(0); } switch (base) { case "application": application(args.get(0), args.get(1)); break; case "ticket": ticket(args.get(0), args.get(1), args.get(2)); break; case "accept": action(args.get(0), true); break; case "deny": action(args.get(0), false); break; case "demote": demote(args.get(0)); break; default: Bukkit.getConsoleSender().sendMessage("Input not recognized, ignoring."); break; } } } Bukkit.getConsoleSender().sendMessage("Closing MinecraftManager on Port " + this.plugin.getConfig().get("port")); cmdSock.close(); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage("Error: " + ex.getMessage()); } } public static void application(String username, String id) { ComponentBuilder builder = new ComponentBuilder("New application #" + id + " from " + username) .color(ChatColor.GREEN) .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/app info " + id)); TextComponent message = new TextComponent(builder.create()); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("MCM Staff Chat").create())); MCMUtil.staffMessage(message); } public static void ticket(String username, String id, String link) { ComponentBuilder builder = new ComponentBuilder("New ticket #" + id + " from " + username + ". Click for more info.") .color(ChatColor.GREEN) .event(new ClickEvent(ClickEvent.Action.OPEN_URL, link)); TextComponent message = new TextComponent(builder.create()); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("MCM Staff Chat").create())); MCMUtil.staffMessage(message); } public static void action(final String username, boolean accepted) { String path = accepted ? "accept" : "deny"; String message = MinecraftManager.config.getString(path + ".message").replace("", username); message = ChatColor.translateAlternateColorCodes('&', message); Player online = null; for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (username.equalsIgnoreCase(player.getName())) { online = player; player.sendMessage(message); break; } } if (online != null) { // Set their group if accepted if (accepted) { String engine = MinecraftManager.config.getString("permissions.engine"); String promote = MinecraftManager.config.getString("permissions.promote"); if ("permissionsex".equalsIgnoreCase(engine)) { runTask("pex user group set " + promote, username); } else if ("luckperms".equalsIgnoreCase(engine)) { runTask("lp user group set " + promote, username); } } // Run misc commands List commands = MinecraftManager.config.getStringList(path + ".commands"); for (final String command : commands) { runTask(command, username); } } // Message to staff ComponentBuilder builder = new ComponentBuilder(username + " was " + (accepted ? "accepted" : "denied") + ".") .color(ChatColor.GREEN); TextComponent staffMessage = new TextComponent(builder.create()); staffMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("MCM Staff Chat").create())); MCMUtil.staffMessage(staffMessage); } private static void runTask(final String command, final String username) { Bukkit.getScheduler().runTask(MinecraftManager.instance, new Runnable() { @Override public void run() { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("", username)); } }); } private void demote(String username) { String engine = MinecraftManager.config.getString("permissions.engine"); String promote = MinecraftManager.config.getString("permissions.promote"); if ("permissionsex".equalsIgnoreCase(engine)) { runTask("pex user group set " + promote, username); } else if ("luckperms".equalsIgnoreCase(engine)) { runTask("lp user group set " + promote, username); } ComponentBuilder builder = new ComponentBuilder(username + " has been demoted.") .color(ChatColor.GREEN); TextComponent staffMessage = new TextComponent(builder.create()); staffMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("MCM Staff Chat").create())); MCMUtil.staffMessage(staffMessage); } }