Interaqqt/src/main/java/ee/lunasqu/interaqqt/MQTTCommand.java

167 lines
5.2 KiB
Java

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 <name> <MQTT topic> <high | low | high-low> <binary | power | <value>>");
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;
}
}