MinecraftManagerPlugin/src/main/java/xyz/etztech/minecraftmanager/objects/MinecraftManagerThread.java

168 lines
7.1 KiB
Java

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<String> 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("<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 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 <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);
}
}
// 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("<player>", 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 <player> group set " + promote, username);
} else if ("luckperms".equalsIgnoreCase(engine)) {
runTask("lp user <player> 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);
}
}