package xyz.etztech.commandlistener; import org.bukkit.Bukkit; 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 CommandListenerThread extends Thread { private boolean running = true; private CommandListener plugin; public CommandListenerThread(CommandListener plugin) {this.plugin = plugin;} public boolean getRunning() { return running; } public void setRunning(boolean running) { this.running = running; } public void run() { List commands = this.plugin.getConfig().getStringList("commands"); 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); } if (this.plugin.getConfig().getBoolean("verbose")) { Bukkit.getConsoleSender().sendMessage("Received input '" + buf + "'"); Bukkit.getConsoleSender().sendMessage("Base Command '" + base + "'"); Bukkit.getConsoleSender().sendMessage("Arguments '" + args.toString() + "'"); } if (commands.contains(base)) { Bukkit.getScheduler().runTask(plugin, () -> { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), buf); }); } else if (this.plugin.getConfig().getBoolean("verbose")){ Bukkit.getConsoleSender().sendMessage("Input not recognized, ignoring."); } } } Bukkit.getConsoleSender().sendMessage("Closing CommandListener on Port " + this.plugin.getConfig().get("port")); cmdSock.close(); } catch (Exception ex) { Bukkit.getConsoleSender().sendMessage("Error: " + ex.getMessage()); } } }