package me.fromgate.reactions.commands; import me.fromgate.reactions.actions.Actions; import me.fromgate.reactions.activators.Activator; import me.fromgate.reactions.activators.ActivatorType; import me.fromgate.reactions.activators.Activators; import me.fromgate.reactions.externals.RAWorldGuard; import me.fromgate.reactions.flags.Flags; import me.fromgate.reactions.menu.InventoryMenu; import me.fromgate.reactions.timer.Timers; import me.fromgate.reactions.util.FakeCmd; import me.fromgate.reactions.util.Locator; import me.fromgate.reactions.util.Param; import me.fromgate.reactions.util.Util; import me.fromgate.reactions.util.message.M; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Set; @CmdDefine(command = "react", description = M.CMD_ADD, permission = "reactions.config", subCommands = {"add"}, allowConsole = true, shortDescription = "&3/react add [<activator> <Id>|loc <Id>|<Id> f <flag> <param>|<Id> <a|r> <action> <param>") public class CmdAdd extends Cmd { @Override public boolean execute(CommandSender sender, String[] args) { if (args.length == 1) return false; Player player = (sender instanceof Player) ? (Player) sender : null; String arg1 = args[1]; String arg2 = args.length >= 3 ? args[2] : ""; String arg3 = args.length >= 4 ? args[3] : ""; String arg4 = args.length >= 5 ? args[4] : ""; if (args.length > 5) { for (int i = 5; i < args.length; i++) arg4 = arg4 + " " + args[i]; arg4 = arg4.trim(); } if (ActivatorType.isValid(arg1)) { @SuppressWarnings("deprecation") Block block = player != null ? player.getTargetBlock((Set<Material>) null, 100) : null; return addActivator(sender, player, arg1, arg2, (arg3.isEmpty() ? "" : arg3) + (arg4.isEmpty() ? "" : " " + arg4), block); } else if (arg1.equalsIgnoreCase("loc")) { if (player == null) return false; if (!Locator.addTpLoc(arg2, player.getLocation())) return false; Locator.saveLocs(); M.CMD_ADDTPADDED.print(sender, arg2); } else if (arg1.equalsIgnoreCase("timer")) { Param params = Param.parseParams((arg3.isEmpty() ? "" : arg3) + (arg4.isEmpty() ? "" : " " + arg4)); return Timers.addTimer(sender, arg2, params, true); } else if (arg1.equalsIgnoreCase("menu")) { // /react add menu id size sdjkf if (InventoryMenu.add(arg2, Util.isInteger(arg3) ? Integer.parseInt(arg3) : 9, ((Util.isInteger(arg3) ? "" : arg3 + " ") + (arg4.isEmpty() ? "" : arg4)).trim())) { M.CMD_ADDMENUADDED.print(sender, arg2); } else { M.CMD_ADDMENUADDFAIL.print(sender, arg2); } } else if (Activators.contains(arg1)) { String param = Util.replaceStandartLocations(player, arg4); // используется в addActions if (arg2.equalsIgnoreCase("a") || arg2.equalsIgnoreCase("action")) { if (addAction(arg1, arg3, param)) { Activators.saveActivators(); M.CMD_ACTADDED.print(sender, arg3 + " (" + param + ")"); //TODO~ return true; } else { M.CMD_ACTNOTADDED.print(sender, arg3 + " (" + param + ")"); } } else if (arg2.equalsIgnoreCase("r") || arg2.equalsIgnoreCase("reaction")) { if (addReAction(arg1, arg3, param)) { Activators.saveActivators(); return M.CMD_REACTADDED.print(sender, arg3 + " (" + param + ")"); } else { M.CMD_REACTADDED.print(sender, arg3 + " (" + param + ")"); } } else if (arg2.equalsIgnoreCase("f") || arg2.equalsIgnoreCase("flag")) { if (addFlag(arg1, arg3, param)) { Activators.saveActivators(); return M.CMD_FLAGADDED.print(sender, arg3 + " (" + param + ")"); } else { M.CMD_FLAGNOTADDED.print(sender, arg3 + " (" + arg4 + ")"); } } else { M.CMD_UNKNOWNBUTTON.print(sender, arg2); } } else { M.CMD_UNKNOWNADD.print(sender, 'c'); } return true; } public boolean addAction(String clicker, String flag, String param) { if (Actions.isValid(flag)) { Activators.addAction(clicker, flag, param); return true; } return false; } public boolean addReAction(String clicker, String flag, String param) { if (Actions.isValid(flag)) { Activators.addReaction(clicker, flag, param); return true; } return false; } public boolean addFlag(String clicker, String fl, String param) { String flag = fl.replaceFirst("!", ""); boolean not = fl.startsWith("!"); if (Flags.isValid(flag)) { Activators.addFlag(clicker, flag, param, not); // все эти проверки вынести в соответствующие классы return true; } return false; } private boolean addActivator(CommandSender sender, Player player, String type, String name, String param, Block targetBlock) { ActivatorType at = ActivatorType.getByName(type); if (at == null) return false; Activator activator = at.create(name, targetBlock, param); if (activator == null || !activator.isValid()) { M.CMD_NOTADDBADDEDSYNTAX.print(sender, name, type); return true; } if (Activators.addActivator(activator)) { Activators.saveActivators(); M.CMD_ADDBADDED.print(sender, activator.toString()); } else { M.CMD_NOTADDBADDED.print(sender, activator.toString()); } FakeCmd.updateAllCommands(); RAWorldGuard.updateRegionCache(); return true; } }