diff --git a/pom.xml b/pom.xml index 77e27894..98e57c6e 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,10 @@ glowingink https://repo.glowing.ink/releases/ + + minecraft-repo + https://libraries.minecraft.net/ + diff --git a/reactions/src/main/java/fun/reactions/ReActionsPlugin.java b/reactions/src/main/java/fun/reactions/ReActionsPlugin.java index ef390eab..c8856751 100644 --- a/reactions/src/main/java/fun/reactions/ReActionsPlugin.java +++ b/reactions/src/main/java/fun/reactions/ReActionsPlugin.java @@ -22,7 +22,8 @@ package fun.reactions; -import fun.reactions.commands.Commander; +import fun.reactions.commands.plugin.impl.ExecCommand; +import fun.reactions.commands.plugin.impl.ReactionsCommand; import fun.reactions.commands.user.UserCommandsManager; import fun.reactions.events.listeners.BukkitListener; import fun.reactions.events.listeners.MoveListener; @@ -49,6 +50,7 @@ import fun.reactions.util.Shoot; import fun.reactions.util.message.Messenger; import fun.reactions.util.message.Msg; +import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import net.kyori.adventure.text.logger.slf4j.ComponentLogger; import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; @@ -57,6 +59,8 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import java.util.List; + public class ReActionsPlugin extends JavaPlugin implements ReActions.Platform { private ActivitiesRegistry activitiesRegistry; private ActivatorTypesRegistry typesRegistry; @@ -108,7 +112,7 @@ public void onLoad() { @Override public void onEnable() { - // TODO Why... + // TODO god why Msg.init("ReActions", new Messenger(this), Cfg.language, Cfg.debugMode, Cfg.languageSave); this.savingManager = new SavingManager(this); @@ -118,7 +122,6 @@ public void onEnable() { getDataFolder().mkdirs(); - Commander.init(this); TimersManager.init(); CooldownManager.load(); if (!Cfg.playerSelfVarFile) variablesManager.load(); @@ -135,6 +138,13 @@ public void onEnable() { MoveListener.init(); Metrics metrics = new Metrics(this, 19363); metrics.addCustomChart(new SimplePie("placeholders_manager", () -> Cfg.modernPlaceholders ? "Modern" : "Legacy")); + + this.getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> { + var registrar = commands.registrar(); + registrar.register(new ReactionsCommand(this).asNode(), List.of("rea", "ra")); + registrar.register(new ExecCommand(this).asNode()); + }); + getServer().getScheduler().runTask(this, () -> { modulesRegistry.registerPluginDepended(); activatorsManager.loadGroup("", false); diff --git a/reactions/src/main/java/fun/reactions/commands/Cmd.java b/reactions/src/main/java/fun/reactions/commands/Cmd.java deleted file mode 100644 index dc5cde36..00000000 --- a/reactions/src/main/java/fun/reactions/commands/Cmd.java +++ /dev/null @@ -1,69 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.util.message.Msg; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public abstract class Cmd { - - private String command; - private String[] subCommands; - private String permission; - private boolean allowConsole; - private Msg description; - private String shortDescription; - - - public Cmd() { - if (this.getClass().isAnnotationPresent(CmdDefine.class)) { - CmdDefine cd = this.getClass().getAnnotation(CmdDefine.class); - this.command = cd.command(); - this.subCommands = cd.subCommands(); - this.permission = cd.permission(); - this.allowConsole = cd.allowConsole(); - this.description = cd.description(); - this.shortDescription = cd.shortDescription(); - } - } - - public boolean canExecute(CommandSender sender) { - Player player = (sender instanceof Player) ? (Player) sender : null; - if (player == null) return this.allowConsole; - if (this.permission == null || this.permission.isEmpty()) return true; - return player.hasPermission(this.permission); - } - - public boolean checkParams(String[] params) { - if (this.subCommands == null) return true; - if (this.subCommands.length == 0) return true; - if (params.length < this.subCommands.length) return false; - for (int i = 0; i < this.subCommands.length; i++) { - if (!params[i].matches(this.subCommands[i])) return false; - } - return true; - } - - public boolean executeCommand(CommandSender sender, String[] params) { - if (!canExecute(sender)) return false; - if (!this.checkParams(params)) return false; - if (this.allowConsole) return execute(sender, params); - else return execute((Player) sender, params); - } - - public boolean execute(Player player, String[] params) { - Commander.getPlugin().getLogger().info("Command \"" + this.getCommand() + "\" executed but method \"public boolean execute(Player player, String [] params)\" was not overrided"); - return false; - } - - public boolean execute(CommandSender sender, String[] params) { - Commander.getPlugin().getLogger().info("Command \"" + this.getCommand() + "\" executed but method \"public boolean execute(CommandSender sender, String [] params)\" was not overrided"); - return false; - } - - public String getFullDescription() { - return this.description.getText(this.shortDescription); - - } - - public String getCommand() {return this.command;} -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdAdd.java b/reactions/src/main/java/fun/reactions/commands/CmdAdd.java deleted file mode 100644 index f533ee72..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdAdd.java +++ /dev/null @@ -1,100 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.ReActions; -import fun.reactions.model.activators.Activator; -import fun.reactions.model.activity.actions.Action; -import fun.reactions.model.activity.flags.Flag; -import fun.reactions.util.location.LocationUtils; -import fun.reactions.util.message.Msg; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CmdDefine(command = "reactions", description = Msg.CMD_ADD, permission = "reactions.config", - subCommands = {"add"}, allowConsole = true, - shortDescription = "&3/react add [f | ]") -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] : ""; - StringBuilder arg4 = new StringBuilder(args.length >= 5 ? args[4] : ""); - if (args.length > 5) { - for (int i = 5; i < args.length; i++) - arg4.append(" ").append(args[i]); - arg4 = new StringBuilder(arg4.toString().trim()); - } - if (ReActions.getActivators().containsActivator(arg1)) { - String param = LocationUtils.parsePlaceholders(player, arg4.toString()); // используется в addActions - Activator act = ReActions.getActivators().getActivator(arg1); - switch (arg2) { - case "a": - case "action": - if (addAction(act, arg3, param)) { - Msg.CMD_ACTADDED.print(sender, arg3 + " (" + param + ")"); - break; - } else { - Msg.CMD_ACTNOTADDED.print(sender, arg3 + " (" + param + ")"); - return true; - } - case "r": - case "reaction": - if (addReaction(act, arg3, param)) { - Msg.CMD_REACTADDED.print(sender, arg3 + " (" + param + ")"); - break; - } else { - Msg.CMD_REACTNOTADDED.print(sender, arg3 + " (" + param + ")"); - return true; - } - case "f": - case "flag": - if (addFlag(act, arg3, param)) { - Msg.CMD_FLAGADDED.print(sender, arg3 + " (" + param + ")"); - break; - } else { - Msg.CMD_FLAGNOTADDED.print(sender, arg3 + " (" + param + ")"); - return true; - } - default: - Msg.CMD_UNKNOWNBUTTON.print(sender, arg2); - return true; - } - ReActions.getActivators().saveGroup(act.getLogic().getGroup()); - } else { - Msg.CMD_UNKNOWNADD.print(sender, 'c'); - } - return true; - } - - private boolean addAction(Activator activator, String act, String param) { - Action action = ReActions.getActivities().getAction(act); - if (action != null) { - activator.getLogic().addAction(action, param); - return true; - } - return false; - } - - private boolean addReaction(Activator activator, String act, String param) { - Action action = ReActions.getActivities().getAction(act); - if (action != null) { - activator.getLogic().addReaction(action, param); - return true; - } - return false; - } - - private boolean addFlag(Activator activator, String fl, String param) { - boolean invert = fl.startsWith("!"); - Flag flag = ReActions.getActivities().getFlag(invert ? fl.substring(1) : fl); - if (flag != null) { - activator.getLogic().addFlag(flag, param, invert); - return true; - } - return false; - } - -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdCheck.java b/reactions/src/main/java/fun/reactions/commands/CmdCheck.java deleted file mode 100644 index 73966b6f..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdCheck.java +++ /dev/null @@ -1,46 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.ReActions; -import fun.reactions.model.activators.Activator; -import fun.reactions.util.message.Msg; -import fun.reactions.util.num.Is; -import fun.reactions.util.num.NumberUtils; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -@CmdDefine(command = "reactions", description = Msg.CMD_CHECK, permission = "reactions.config", - subCommands = {"check"}, shortDescription = "&3/react check [radius]") -public class CmdCheck extends Cmd { - - @Override - public boolean execute(Player player, String[] args) { - int radius = args.length > 1 ? NumberUtils.parseInteger(args[1], Is.POSITIVE).orElse(8) : 8; - printActivatorsAround(player, radius); - return true; - } - - private void printActivatorsAround(Player player, int radius) { - int playerX = player.getLocation().getBlockX(); - int playerY = player.getLocation().getBlockY(); - int playerZ = player.getLocation().getBlockZ(); - World world = player.getWorld(); - Bukkit.getScheduler().runTaskAsynchronously(ReActions.getPlugin(), () -> { - List total = new ArrayList<>(); - for (int x = playerX - radius; x <= playerX + radius; x++) { - for (int y = playerY - radius; y <= playerY + radius; y++) { - for (int z = playerZ - radius; z <= playerZ + radius; z++) { - Collection found = ReActions.getActivators().search().byRawLocation(world, x, y, z); - if (found.isEmpty()) continue; - found.forEach(a -> total.add(a.toString())); - } - } - } - Bukkit.getScheduler().runTask(ReActions.getPlugin(), () -> Msg.printPage(player, total, Msg.MSG_CHECK, 1, 100, true)); - }); - } -} \ No newline at end of file diff --git a/reactions/src/main/java/fun/reactions/commands/CmdClear.java b/reactions/src/main/java/fun/reactions/commands/CmdClear.java deleted file mode 100644 index 5ae6c452..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdClear.java +++ /dev/null @@ -1,36 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.ReActions; -import fun.reactions.model.Logic; -import fun.reactions.model.activators.Activator; -import fun.reactions.util.message.Msg; -import org.bukkit.command.CommandSender; - -@CmdDefine(command = "reactions", description = Msg.CMD_CLEAR, permission = "reactions.config", - subCommands = {"clear"}, allowConsole = true, shortDescription = "&3/react clear [f|a|r]") -public class CmdClear extends Cmd { - @Override - public boolean execute(CommandSender sender, String[] args) { - String activatorId = args.length >= 2 ? args[1] : ""; - if (activatorId.isEmpty()) return false; - String arg2 = args.length >= 3 ? args[2] : ""; - Activator activator = ReActions.getActivators().getActivator(activatorId); - if (activator != null) { - Logic logic = activator.getLogic(); - if (arg2.equalsIgnoreCase("f") || arg2.equalsIgnoreCase("flag")) { - logic.clearFlags(); - Msg.MSG_CLEARFLAG.print(sender, activatorId); - } else if (arg2.equalsIgnoreCase("a") || arg2.equalsIgnoreCase("action")) { - logic.clearActions(); - Msg.MSG_CLEARACT.print(sender, activatorId); - } else if (arg2.equalsIgnoreCase("r") || arg2.equalsIgnoreCase("reaction")) { - logic.clearReactions(); - Msg.MSG_CLEARREACT.print(sender, activatorId); - } - ReActions.getActivators().saveGroup(logic.getGroup()); - } else { - Msg.CMD_UNKNOWNBUTTON.print(sender, activatorId); - } - return true; - } -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdCopy.java b/reactions/src/main/java/fun/reactions/commands/CmdCopy.java deleted file mode 100644 index f15b7000..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdCopy.java +++ /dev/null @@ -1,72 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.ReActions; -import fun.reactions.model.activators.Activator; -import fun.reactions.model.activators.ActivatorsManager; -import fun.reactions.util.message.Msg; -import org.bukkit.command.CommandSender; - -import java.util.List; -import java.util.Locale; - -@CmdDefine(command = "reactions", description = Msg.CMD_COPY, permission = "reactions.config", - subCommands = {"copy"}, allowConsole = true, shortDescription = "&3/react copy [f|a|r] ") -public class CmdCopy extends Cmd { - @Override - public boolean execute(CommandSender sender, String[] args) { - if (args.length != 3 && args.length != 4) return false; - String id1 = args.length == 4 ? args[2] : args[1]; - String id2 = args.length == 4 ? args[3] : args[2]; - String copyMode = args.length == 3 ? "all" : args[1]; - ActivatorsManager activators = ReActions.getActivators(); - Activator actFrom = activators.getActivator(id1); - Activator actTo = activators.getActivator(id2); - boolean fail = actFrom == null || actTo == null; - switch (copyMode.toLowerCase(Locale.ROOT)) { - case "f": case "flag": case "flags": - if (fail) { - Msg.printMSG(sender, "msg_copyflagsfailed", 'c', '4', id1, id2); - } else { - copy(actFrom.getLogic().getFlags(), actTo.getLogic().getFlags()); - Msg.printMSG(sender, "msg_copyflags", id1, id2); - } - break; - - case "a": case "action": case "actions": - if (fail) { - Msg.printMSG(sender, "msg_copyactionsfailed", 'c', '4', id1, id2); - } else { - copy(actFrom.getLogic().getActions(), actTo.getLogic().getActions()); - Msg.printMSG(sender, "msg_copyactions", id1, id2); - } - break; - - case "r": case "reaction": case "reactions": - if (fail) { - Msg.printMSG(sender, "msg_copyreactionsfailed", 'c', '4', id1, id2); - } else { - copy(actFrom.getLogic().getReactions(), actTo.getLogic().getReactions()); - Msg.printMSG(sender, "msg_copyreactions", id1, id2); - } - break; - - default: - if (fail) { - Msg.printMSG(sender, "msg_copyallfailed", 'c', '4', id1, id2); - } else { - copy(actFrom.getLogic().getFlags(), actTo.getLogic().getFlags()); - copy(actFrom.getLogic().getActions(), actTo.getLogic().getActions()); - copy(actFrom.getLogic().getReactions(), actTo.getLogic().getReactions()); - Msg.printMSG(sender, "msg_copyall", id1, id2); - } - break; - } - if (!fail) activators.saveGroup(actTo.getLogic().getGroup()); - return true; - } - - private static void copy(List from, List to) { - to.clear(); - to.addAll(from); - } -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdCreate.java b/reactions/src/main/java/fun/reactions/commands/CmdCreate.java deleted file mode 100644 index f4c9609a..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdCreate.java +++ /dev/null @@ -1,96 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.ReActions; -import fun.reactions.holders.LocationHolder; -import fun.reactions.menu.InventoryMenu; -import fun.reactions.model.Logic; -import fun.reactions.model.activators.Activator; -import fun.reactions.model.activators.ActivatorsManager; -import fun.reactions.model.activators.type.ActivatorType; -import fun.reactions.time.timers.TimersManager; -import fun.reactions.util.location.LocationUtils; -import fun.reactions.util.message.Msg; -import fun.reactions.util.num.Is; -import fun.reactions.util.num.NumberUtils; -import fun.reactions.util.parameter.BlockParameters; -import fun.reactions.util.parameter.Parameters; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.Locale; - -@CmdDefine(command = "reactions", description = Msg.CMD_CREATE, permission = "reactions.config", - subCommands = {"create"}, allowConsole = true, - shortDescription = "&3/react create [param]") -public class CmdCreate extends Cmd { - // TODO: Commands creation - // TODO: Cuboids creation - @Override - public boolean execute(CommandSender sender, String[] args) { - if (args.length < 3) return false; - Player player = (sender instanceof Player) ? (Player) sender : null; - String type = args[1].toLowerCase(Locale.ROOT); - String id = args[2]; - StringBuilder param = new StringBuilder(args.length >= 4 ? args[3] : ""); - if (args.length > 4) { - for (int i = 4; i < args.length; i++) - param.append(" ").append(args[i]); - param = new StringBuilder(param.toString().trim()); - } - switch (type) { - case "loc": - if (player == null) return false; - if (!LocationHolder.addTpLoc(id, player.getLocation())) return false; - LocationHolder.saveLocs(); - Msg.CMD_ADDTPADDED.print(sender, id); - return true; - case "timer": - if (param.isEmpty()) return false; - return TimersManager.addTimer(sender, id, Parameters.fromString(param.toString()), true); - case "menu": - // TODO: Create menu from chest - if (param.isEmpty()) return false; - String arg3 = args[3]; - if (InventoryMenu.add(id, - NumberUtils.parseInteger(arg3, Is.NON_NEGATIVE).orElse(9), - (param.length() == 1) ? "" : param.substring(arg3.length()))) { - Msg.CMD_ADDMENUADDED.print(sender, id); - return true; - } - Msg.CMD_ADDMENUADDFAIL.print(sender, id); - return false; - default: - return addActivator(sender, type, id, param.toString()); - } - } - - private boolean addActivator(CommandSender sender, String typeStr, String name, String param) { - ActivatorsManager activators = ReActions.getActivators(); - ActivatorType type = ReActions.getActivatorTypes().get(typeStr); - if (type == null) return false; - Parameters params; - if (sender instanceof Player player) { - param = LocationUtils.parsePlaceholders(player, param); - if (type.isNeedBlock()) - params = new BlockParameters(param, player.getTargetBlock(null, 100)); - else - params = Parameters.fromString(param); - } else { - if (type.isNeedBlock()) return false; - params = Parameters.fromString(param); - } - Logic logic = new Logic(ReActions.getPlatform(), type.getName().toUpperCase(Locale.ROOT), name); - Activator activator = type.createActivator(logic, params); - if (activator == null || !activator.isValid()) { - Msg.CMD_NOTADDBADDEDSYNTAX.print(sender, name, type); - return true; - } - if (activators.addActivator(activator, true)) { - activators.saveGroup(activator.getLogic().getGroup()); - Msg.CMD_ADDBADDED.print(sender, activator.toString()); - } else { - Msg.CMD_NOTADDBADDED.print(sender, activator.toString()); - } - return true; - } -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdDebug.java b/reactions/src/main/java/fun/reactions/commands/CmdDebug.java deleted file mode 100644 index 0a8a7899..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdDebug.java +++ /dev/null @@ -1,25 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.util.message.Msg; -import fun.reactions.util.message.RaDebug; -import org.bukkit.entity.Player; - -@CmdDefine(command = "reactions", description = Msg.CMD_DEBUG, permission = "reactions.debug", - subCommands = {"debug", "off|true|false"}, shortDescription = "&3/react debug [true|false|off]") -public class CmdDebug extends Cmd { - @Override - public boolean execute(Player player, String[] args) { - String arg = args.length >= 2 ? args[1] : "off"; - if (arg.equalsIgnoreCase("false")) { - RaDebug.setPlayerDebug(player, false); - Msg.printMSG(player, "cmd_debugfalse"); - } else if (arg.equalsIgnoreCase("true")) { - RaDebug.setPlayerDebug(player, true); - Msg.printMSG(player, "cmd_debugtrue"); - } else { - RaDebug.offPlayerDebug(player); - Msg.printMSG(player, "cmd_debugoff"); - } - return true; - } -} diff --git a/reactions/src/main/java/fun/reactions/commands/CmdDefine.java b/reactions/src/main/java/fun/reactions/commands/CmdDefine.java deleted file mode 100644 index b7df06d2..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdDefine.java +++ /dev/null @@ -1,22 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.util.message.Msg; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -@Retention(RetentionPolicy.RUNTIME) -public @interface CmdDefine { - String command(); - - String[] subCommands(); - - String permission(); - - boolean allowConsole() default false; - - Msg description(); - - String shortDescription(); -} - diff --git a/reactions/src/main/java/fun/reactions/commands/CmdExec.java b/reactions/src/main/java/fun/reactions/commands/CmdExec.java deleted file mode 100644 index 13ee16df..00000000 --- a/reactions/src/main/java/fun/reactions/commands/CmdExec.java +++ /dev/null @@ -1,22 +0,0 @@ -package fun.reactions.commands; - -import fun.reactions.module.basic.ContextManager; -import fun.reactions.util.message.Msg; -import fun.reactions.util.parameter.Parameters; -import org.bukkit.command.CommandSender; - -@CmdDefine(command = "exec", description = Msg.CMD_EXEC, permission = "reactions.run", - subCommands = {}, allowConsole = true, - shortDescription = "&3/exec [player:] [delay: