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: