package ee.lunasqu.interaqqt; import ee.lunasqu.interaqqt.events.listeners.RightClickAdder; import ee.lunasqu.interaqqt.triggers.BlockTrigger; import ee.lunasqu.interaqqt.triggers.BlockTriggers; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.UUID; public class MQTTCommand implements CommandExecutor { private static String[] TT = new String[]{"high", "low", "high-low"}; private boolean list (CommandSender sender, String[] arguments) { if (arguments[1].equalsIgnoreCase("triggers")) { BlockTriggers triggers = Main.plugin.getTriggers(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(ChatColor.LIGHT_PURPLE + "List of triggers:"); for (BlockTrigger trig : triggers.getTriggerList()) { stringBuilder.append("\n"); stringBuilder.append(ChatColor.DARK_GREEN + "[*] " + ChatColor.GREEN + "\"" + trig.getName() + "\" "); stringBuilder.append(ChatColor.BLUE + trig.getBlock().getWorld().getName() + " <"); stringBuilder.append(trig.getBlock().getX() + ", " + trig.getBlock().getY() + ", " + trig.getBlock().getZ() + "> "); stringBuilder.append(ChatColor.GOLD + trig.getMqttTrigger() + " "); stringBuilder.append(ChatColor.RED + TT[trig.getType()] + " "); stringBuilder.append(ChatColor.BLUE + trig.getData()); } sender.sendMessage(stringBuilder.toString()); return true; } sender.sendMessage("/mqtt list triggers | commands"); return true; } private boolean management (CommandSender sender, String[] arguments) { RightClickAdder adder = Main.plugin.getAdder(); BlockTriggers triggers = Main.plugin.getTriggers(); Player p = sender.getServer().getPlayer(sender.getName()); if (arguments[0].equalsIgnoreCase("cancel")) { if (p == null) { sender.sendMessage(ChatColor.RED + "This command cannot be used from the console."); return true; } adder.removeTriggerRequest(p.getUniqueId()); sender.sendMessage(ChatColor.GOLD + "Adding of trigger was cancelled."); return true; } if (arguments.length < 2) { return false; } if (arguments[1].equalsIgnoreCase("trigger")) { if (arguments[0].equalsIgnoreCase("remove") && arguments.length == 3) { triggers.removeBlock(arguments[2]); sender.sendMessage(ChatColor.GREEN + "Trigger removed."); return true; } if (p == null) { sender.sendMessage(ChatColor.RED + "This command cannot be used from the console."); return true; } if (arguments.length < 5) { sender.sendMessage("/mqtt add trigger >"); return true; } String name = arguments[2]; String topic = arguments[3]; String condition = arguments[4]; String value = arguments[5]; if (triggers.getTriggerByName(name) != null) { sender.sendMessage(ChatColor.RED + "Trigger by that name already exists."); return true; } if (name.isEmpty() || topic.isEmpty() || condition.isEmpty() || value.isEmpty()) return false; int type = 0; switch (condition.toLowerCase()) { case "high": type = 0; break; case "low": type = 1; break; case "hilo": case "highlow": case "high-low": type = 2; break; default: sender.sendMessage(ChatColor.RED + "Invalid condition type. Supported types: high, low, high-low"); return true; } BlockTrigger t = new BlockTrigger(name, topic, type, value); adder.addTriggerRequest(p.getUniqueId(), t); sender.sendMessage(ChatColor.GOLD + "Right-click a block you wish to add as a trigger. /mqtt cancel to cancel."); return true; } sender.sendMessage("/mqtt add trigger | command"); return false; } @Override public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] arguments) { if (!sender.hasPermission("mqtt.manage")) { sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); return true; } if (arguments.length == 0) return false; switch (arguments[0].toLowerCase()) { case "status": if (Main.plugin.getConnection() != null) { sender.sendMessage(ChatColor.GREEN + "The connection is established."); } else { sender.sendMessage(ChatColor.RED + "The connection is closed."); } break; case "start": if (Main.plugin.getConnection() != null) { sender.sendMessage(ChatColor.RED + "The connection is already established!"); break; } sender.sendMessage(ChatColor.GREEN + "Connection has been attempted!"); Main.plugin.connect(); break; case "stop": if (Main.plugin.getConnection() == null) { sender.sendMessage(ChatColor.RED + "The connection is already closed!"); break; } sender.sendMessage(ChatColor.GOLD + "Connection has been closed!"); Main.plugin.getConnection().die(); break; case "reload": Main.plugin.getTriggers().loadConfiguration(); sender.sendMessage(ChatColor.GREEN + "Configuration has been reloaded!"); break; case "cancel": case "remove": case "add": return management(sender, arguments); case "list": return list(sender, arguments); default: return false; } return true; } }