summaryrefslogtreecommitdiff
path: root/src/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java')
-rwxr-xr-xsrc/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java b/src/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java
new file mode 100755
index 0000000..a9dfb85
--- /dev/null
+++ b/src/main/java/lh/lockhead/skynet/chat/commandhandling/CommandHandler.java
@@ -0,0 +1,127 @@
+package lh.lockhead.skynet.chat.commandhandling;
+
+import lh.lockhead.skynet.Skynet;
+import lh.lockhead.skynet.chat.Alert;
+import lh.lockhead.skynet.chat.Message;
+import lh.lockhead.skynet.chat.chatformat.TextComponent;
+import lh.lockhead.skynet.configuration.Settings;
+import org.bukkit.Bukkit;
+import org.bukkit.Sound;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.ConsoleCommandSender;
+import org.bukkit.entity.Player;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class CommandHandler {
+
+ private final List<Command> loadedCommands = new ArrayList<>();
+ private static CommandHandler commandHandler;
+ public final List<Alert> missedAlerts = new ArrayList<>();
+
+ private CommandHandler() {
+ init();
+
+ }
+
+ private void init() {
+ Settings.FORMAT_CONSOLE = Settings.FORMAT_CONSOLE.replace("$name", Skynet.getInstance().getDescription().getName());
+ Settings.FORMAT_PLAYER = Settings.FORMAT_PLAYER.replace("$name", Skynet.getInstance().getDescription().getName());
+ Settings.FORMAT_KICK = Settings.FORMAT_KICK.replace("$name", Skynet.getInstance().getDescription().getName());
+ loadedCommands.addAll(Arrays.asList(
+ new Help(),
+ new ListHeuristics(),
+ new PlayerInfo(),
+ new AbortBan(),
+ new ReloadHeuristics(),
+ new ResetPlayer(),
+ new DebugMode(),
+ new EnableHeuristic(),
+ new DisableHeuristic(),
+ new ReloadConfig(),
+ new ViolationTop(),
+ new TimingsCheck()
+ ));
+ }
+
+ public static CommandHandler get() {
+ return commandHandler == null ? (commandHandler = new CommandHandler()) : commandHandler;
+ }
+
+ public List<Command> getLoadedCommands() {
+ return loadedCommands;
+ }
+
+ public void handle(CommandSender sender, String[] args) {
+ String cmd = args[0];
+ List<String> nArgs = new ArrayList<>(Arrays.asList(args));
+ nArgs.remove(0);
+ for (Command command : loadedCommands) {
+ for (String l : command.getLabels()) {
+ if (cmd.equals(l)) {
+ if (!command.allowConsole && (sender instanceof ConsoleCommandSender))
+ sendConsoleMessage("Error", "This command is not appropriate for console usage.");
+ else {
+ if (command.adminOnly && Skynet.hasPermission(sender, "skynet.admin")) {
+ sendMessage((Player) sender, new Message("Error").add(Settings.COLOR_WARNING + "This command requires elevated permissions."));
+ return;
+ }
+ command.dispatch(sender, nArgs);
+ }
+ return;
+ }
+ }
+ }
+ if (sender instanceof ConsoleCommandSender)
+ sendConsoleMessage("Syntax", "That command could not be found.");
+ else
+ sendMessage((Player) sender, new Message("Syntax").add(Settings.COLOR_WARNING + "That command could not be found."));
+ }
+
+ public CommandHandler notifyStaff(String message) {
+ return notifyStaff(new Message("Alert").add(message));
+ }
+
+ public CommandHandler notifyStaff(Message message) {
+ this.sendConsoleMessage("Alert", message);
+ if (Bukkit.getServer().getOnlinePlayers().size() == 0) {
+ missedAlerts.add(new Alert(System.currentTimeMillis(), TextComponent.toString(message.getLines().get(1))));
+ return commandHandler;
+ }
+ missedAlerts.add(new Alert(System.currentTimeMillis(), message.toString()));
+// message.add(String.valueOf(message));
+ Bukkit.getServer().getOnlinePlayers().stream().filter(p -> Skynet.hasPermission(p, "skynet.mod"))
+ .forEach(p -> this.sendMessage(p, message));
+ return commandHandler;
+ }
+
+ public CommandHandler notifyStaff(String message, Sound sound) {
+ return notifyStaff(new Message("Alert").add(message), sound);
+ }
+
+ public CommandHandler notifyStaff(Message message, Sound sound) {
+ notifyStaff(message);
+ Bukkit.getServer().getOnlinePlayers().stream().filter(p -> Skynet.hasPermission(p, "skynet.mod")).forEach(p -> {
+ p.playSound(p.getLocation(), sound, 1, 0.75f);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(Skynet.getInstance(), () -> p.playSound(p.getLocation(), sound, 1, 1), 4L);
+ });
+ return commandHandler;
+ }
+
+ public CommandHandler sendConsoleMessage(String subject, Object message) {
+ Bukkit.getConsoleSender().sendMessage(String.format(Settings.FORMAT_CONSOLE, subject, String.valueOf(message)));
+ return commandHandler;
+ }
+
+ public CommandHandler debugMessage(Player player, String message) {
+ player.sendMessage(String.format(Settings.FORMAT_CONSOLE, "Debug", message));
+ return commandHandler;
+ }
+
+ public CommandHandler sendMessage(Player player, Message message) {
+ message.getLines().stream().forEach(m -> TextComponent.send(player, m));
+ return commandHandler;
+ }
+}