142 lines
5.3 KiB
Java
142 lines
5.3 KiB
Java
package xyz.etztech.minecraftmanager;
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitScheduler;
|
|
|
|
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() {
|
|
List<String> commands = Arrays.asList("application", "accept", "deny", "global", "staff");
|
|
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<String> args = new ArrayList<>();
|
|
if (input.length > 1) {
|
|
args = new ArrayList<>(Arrays.asList(buf.split(" ")));
|
|
args.remove(0);
|
|
}
|
|
if (commands.contains(base)) {
|
|
switch (base) {
|
|
case "application":
|
|
application(args.get(0), args.get(1));
|
|
break;
|
|
case "accept":
|
|
action(args.get(0), true);
|
|
break;
|
|
case "deny":
|
|
action(args.get(0), false);
|
|
break;
|
|
case "global":
|
|
globalChat(args);
|
|
break;
|
|
case "staff":
|
|
staffChat(args);
|
|
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());
|
|
}
|
|
}
|
|
|
|
private void application(String username, String id) {
|
|
String message = ChatColor.GREEN + "New application #" + id + " from " + username;
|
|
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("<player>", 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
|
|
String engine = MinecraftManager.config.getString("permissions.engine");
|
|
String promote = MinecraftManager.config.getString("permissions.promote");
|
|
if ("permissionsex".equalsIgnoreCase(engine)) {
|
|
runTask("pex user <player> group set " + promote, username);
|
|
} else if ("luckperms".equalsIgnoreCase(engine)) {
|
|
runTask("lp user <player> group set " + promote, username);
|
|
}
|
|
|
|
// Run misc commands
|
|
List<String> commands = MinecraftManager.config.getStringList(path + ".commands");
|
|
for (final String command : commands) {
|
|
runTask(command, username);
|
|
}
|
|
}
|
|
}
|
|
|
|
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("<player>", username));
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
private void globalChat(ArrayList<String> args) {
|
|
String name = args.get(0);
|
|
args.remove(0);
|
|
MCMUtil.globalMessage("[MCM] " + name + " > " + StringUtils.join(args, " "));
|
|
}
|
|
|
|
private void staffChat(ArrayList<String> args) {
|
|
String name = args.get(0);
|
|
args.remove(0);
|
|
MCMUtil.staffMessage(ChatColor.GOLD + "[MCM] " + name + " > " + ChatColor.GREEN + StringUtils.join(args, " "));
|
|
}
|
|
|
|
}
|