diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java index 9ad9406b..4ef591f1 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java @@ -14,7 +14,6 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; import org.jetbrains.annotations.NotNull; import org.leavesmc.leaves.bot.ServerBot; -import org.leavesmc.leaves.bot.agent.Actions; import org.leavesmc.leaves.config.GlobalConfigManager; import org.leavesmc.leaves.config.annotations.GlobalConfig; import org.leavesmc.leaves.config.annotations.GlobalConfigCategory; @@ -136,17 +135,14 @@ public final class LeavesConfig { private static class FakeplayerValidator extends BooleanConfigValidator { @Override public void verify(Boolean old, Boolean value) throws IllegalArgumentException { + if (old == null || old.equals(value)) { + return; + } if (value) { - Actions.registerAll(); BotCommand.INSTANCE.register(); } else { BotCommand.INSTANCE.unregister(); } - if (old != null && !old.equals(value)) { - Bukkit.getOnlinePlayers().stream() - .filter(BotCommand::hasPermission) - .forEach(org.bukkit.entity.Player::updateCommands); - } } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java index 9142fa14..7e0be5ea 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java @@ -16,7 +16,7 @@ public class Actions { private static final Map> actionsByName = new HashMap<>(); private static final Map, AbstractBotAction> actionsByClass = new HashMap<>(); - public static void registerAll() { + static { register(new ServerAttackAction(), AttackAction.class); register(new ServerBreakBlockAction(), BreakBlockAction.class); register(new ServerDropAction(), DropAction.class); @@ -38,7 +38,7 @@ public class Actions { register(new ServerSwapAction(), SwapAction.class); } - public static boolean register(@NotNull AbstractBotAction action, Class> type) { + public static boolean register(@NotNull AbstractBotAction action, Class type) { if (!actionsByName.containsKey(action.getName())) { actionsByName.put(action.getName(), action); actionsByClass.put(type, action); @@ -47,9 +47,17 @@ public class Actions { return false; } + public static boolean register(@NotNull AbstractBotAction action) { + return register(action, action.getClass()); + } + public static boolean unregister(@NotNull String name) { - // TODO add in custom action api - return true; + AbstractBotAction action = actionsByName.remove(name); + if (action != null) { + actionsByClass.remove(action.getClass()); + return true; + } + return false; } @NotNull diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java b/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java index 5066ce25..22d2b1e6 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/command/RootNode.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.minecraft.commands.CommandSourceStack; import net.minecraft.server.MinecraftServer; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; @@ -39,6 +40,7 @@ public abstract class RootNode extends LiteralNode { .getCommands() .getDispatcher() .register((LiteralArgumentBuilder) compile()); + Bukkit.getOnlinePlayers().forEach(org.bukkit.entity.Player::updateCommands); } public void unregister() { @@ -46,5 +48,6 @@ public abstract class RootNode extends LiteralNode { .getCommands() .getDispatcher(); dispatcher.getRoot().removeCommand(name); + Bukkit.getOnlinePlayers().forEach(org.bukkit.entity.Player::updateCommands); } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java index 3ce7adac..6c3737ce 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java @@ -40,12 +40,17 @@ public class CraftBot extends CraftPlayer implements Bot { @Override public > void addAction(@NotNull T action) { - switch (action) { - case CraftBotAction act -> this.getHandle().addBotAction(act.getHandle(), null); - default -> throw new IllegalArgumentException("Action " + action.getClass().getName() + " is not a valid BotAction type!"); + if (action instanceof CraftBotAction act) { + this.getHandle().addBotAction(act.getHandle(), null); + } else { + throw new IllegalArgumentException("Action " + action.getClass().getName() + " is not a valid BotAction type!"); } } + public void addAction(@NotNull AbstractBotAction action) { + this.getHandle().addBotAction(action, null); + } + @Override public BotAction getAction(int index) { return (BotAction) this.getHandle().getBotActions().get(index).asCraft();