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 3e300fad..061cbe08 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java @@ -14,6 +14,8 @@ 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.command.bot.BotCommand; +import org.leavesmc.leaves.command.leaves.LeavesCommand; import org.leavesmc.leaves.config.GlobalConfigManager; import org.leavesmc.leaves.config.annotations.GlobalConfig; import org.leavesmc.leaves.config.annotations.GlobalConfigCategory; @@ -27,8 +29,6 @@ import org.leavesmc.leaves.config.api.impl.ConfigValidatorImpl.IntConfigValidato import org.leavesmc.leaves.config.api.impl.ConfigValidatorImpl.ListConfigValidator; import org.leavesmc.leaves.config.api.impl.ConfigValidatorImpl.LongConfigValidator; import org.leavesmc.leaves.config.api.impl.ConfigValidatorImpl.StringConfigValidator; -import org.leavesmc.leaves.command.bot.BotCommand; -import org.leavesmc.leaves.command.leaves.LeavesCommand; import org.leavesmc.leaves.profile.LeavesMinecraftSessionService; import org.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRule; import org.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRules; @@ -135,13 +135,12 @@ public final class LeavesConfig { private static class FakeplayerValidator extends BooleanConfigValidator { @Override public void verify(Boolean old, Boolean value) throws IllegalArgumentException { - if (value.equals(old)) { - return; - } - if (value) { - BotCommand.INSTANCE.register(); - } else { - BotCommand.INSTANCE.unregister(); + if (!value.equals(old)) { + if (value) { + BotCommand.INSTANCE.register(); + } else { + BotCommand.INSTANCE.unregister(); + } } } } @@ -177,46 +176,46 @@ public final class LeavesConfig { @GlobalConfig("open-fakeplayer-inventory") public boolean canOpenInventory = false; - @GlobalConfig(value = "use-action", validator = CanUseActionValidator.class) + @GlobalConfig(value = "use-action", validator = CanUseConfigValidator.class) public boolean canUseAction = true; - private static class CanUseActionValidator extends BooleanConfigValidator { - @Override - public void verify(Boolean old, Boolean value) throws IllegalArgumentException { - if (old != null && !old.equals(value)) { - Bukkit.getOnlinePlayers().stream() - .filter(sender -> BotCommand.hasPermission(sender, "action")) - .forEach(org.bukkit.entity.Player::updateCommands); - } + private static class CanUseConfigValidator extends BotSubcommandValidator { + private CanUseConfigValidator() { + super("use"); } } @GlobalConfig(value = "modify-config", validator = CanModifyConfigValidator.class) public boolean canModifyConfig = false; - private static class CanModifyConfigValidator extends BooleanConfigValidator { - @Override - public void verify(Boolean old, Boolean value) throws IllegalArgumentException { - if (old != null && !old.equals(value)) { - Bukkit.getOnlinePlayers().stream() - .filter(sender -> - BotCommand.hasPermission(sender, "config") - ).forEach(org.bukkit.entity.Player::updateCommands); - } + private static class CanModifyConfigValidator extends BotSubcommandValidator { + private CanModifyConfigValidator() { + super("config"); } } @GlobalConfig(value = "manual-save-and-load", validator = CanManualSaveAndLoadValidator.class) public boolean canManualSaveAndLoad = false; - private static class CanManualSaveAndLoadValidator extends BooleanConfigValidator { + private static class CanManualSaveAndLoadValidator extends BotSubcommandValidator { + private CanManualSaveAndLoadValidator() { + super("save", "load"); + } + } + + private static class BotSubcommandValidator extends BooleanConfigValidator { + private final List subcommands; + + private BotSubcommandValidator(String... subcommand) { + this.subcommands = List.of(subcommand); + } + @Override public void verify(Boolean old, Boolean value) throws IllegalArgumentException { if (old != null && !old.equals(value)) { Bukkit.getOnlinePlayers().stream() - .filter(sender -> - BotCommand.hasPermission(sender, "save") || BotCommand.hasPermission(sender, "load") - ).forEach(org.bukkit.entity.Player::updateCommands); + .filter(sender -> subcommands.stream().allMatch(subcommand -> BotCommand.hasPermission(sender, subcommand))) + .forEach(org.bukkit.entity.Player::updateCommands); } } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractBotAction.java index eb798ee2..bf82942c 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractBotAction.java @@ -6,12 +6,13 @@ import net.minecraft.core.UUIDUtil; import net.minecraft.nbt.CompoundTag; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.LeavesLogger; import org.leavesmc.leaves.bot.ServerBot; -import org.leavesmc.leaves.event.bot.BotActionExecuteEvent; -import org.leavesmc.leaves.event.bot.BotActionStopEvent; import org.leavesmc.leaves.command.CommandContext; import org.leavesmc.leaves.command.WrappedArgument; +import org.leavesmc.leaves.event.bot.BotActionExecuteEvent; +import org.leavesmc.leaves.event.bot.BotActionStopEvent; import org.leavesmc.leaves.util.UpdateSuppressionException; import java.util.ArrayList; @@ -59,12 +60,11 @@ public abstract class AbstractBotAction> { public abstract Object asCraft(); - public void provideActionData(@NotNull ActionData data) { + public String getActionDataString() { + return getActionDataString(new ActionData(new ArrayList<>())); } - public String getActionDataString() { - ActionData data = new ActionData(new ArrayList<>()); - provideActionData(data); + public String getActionDataString(@NotNull ActionData data) { return data.raw.stream() .map(pair -> pair.getLeft() + "=" + pair.getRight()) .reduce((a, b) -> a + ", " + b) @@ -249,9 +249,7 @@ public abstract class AbstractBotAction> { this.onStop = onStop; } - public record ActionData( - List> raw - ) { + public record ActionData(List> raw) { public void add(String key, String value) { raw.add(Pair.of(key, value)); } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractTimerBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractTimerBotAction.java index 15d904ce..748398d2 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractTimerBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractTimerBotAction.java @@ -32,11 +32,11 @@ public abstract class AbstractTimerBotAction } @Override - public void provideActionData(@NotNull ActionData data) { - super.provideActionData(data); + public String getActionDataString(@NotNull ActionData data) { data.add("delay", String.valueOf(this.getStartDelayTick())); data.add("interval", String.valueOf(this.getDoIntervalTick())); data.add("do_number", String.valueOf(this.getDoNumber())); data.add("remaining_do_number", String.valueOf(this.getDoNumberRemaining())); + return super.getActionDataString(data); } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractUseBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractUseBotAction.java index 69b8fd9f..4cf4c3f1 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractUseBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/AbstractUseBotAction.java @@ -98,10 +98,10 @@ public abstract class AbstractUseBotAction> ex } @Override - public void provideActionData(@NotNull ActionData data) { - super.provideActionData(data); + public String getActionDataString(@NotNull ActionData data) { data.add("use_timeout", String.valueOf(this.useTickTimeout)); data.add("already_used_tick", String.valueOf(this.alreadyUsedTick)); + return super.getActionDataString(data); } @Override diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java index bbf11568..2aba85f8 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java @@ -98,16 +98,6 @@ public class ServerLookAction extends AbstractBotAction { return target; } - @Override - public void provideActionData(@NotNull ActionData data) { - super.provideActionData(data); - if (target != null) { - data.add("target", target.getName().getString()); - } else { - data.add("position", String.format("(%.2f, %.2f, %.2f)", pos.getX(), pos.getY(), pos.getZ())); - } - } - @Override public boolean doTick(@NotNull ServerBot bot) { if (target != null) { diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java index 3d3db621..b9a639d5 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java @@ -3,6 +3,7 @@ package org.leavesmc.leaves.bot.agent.actions; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.exceptions.CommandSyntaxException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.bot.ServerBot; import org.leavesmc.leaves.entity.bot.action.MoveAction.MoveDirection; import org.leavesmc.leaves.entity.bot.actions.CraftMoveAction; @@ -65,9 +66,9 @@ public class ServerMoveAction extends AbstractStateBotAction { } @Override - public void provideActionData(@NotNull ActionData data) { - super.provideActionData(data); + public String getActionDataString(@NotNull ActionData data) { data.add("direction", direction.name); + return super.getActionDataString(data); } public MoveDirection getDirection() { diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerRotationAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerRotationAction.java index 86f9fdaf..b7c6dbd0 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerRotationAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerRotationAction.java @@ -57,10 +57,10 @@ public class ServerRotationAction extends AbstractBotAction