From 6c80eb62b1ddc86bf19f9e6a881aac0b2cdfa50f Mon Sep 17 00:00:00 2001 From: MC_XiaoHei Date: Fri, 4 Jul 2025 15:45:55 +0800 Subject: [PATCH] feat: add onSuccess and onFail to bot action api (#589) --- .../entity/botaction/LeavesBotAction.java | 32 ++++++++++++++++--- .../leaves/bot/agent/AbstractBotAction.java | 19 +++++++++++ .../bot/agent/actions/CraftBotAction.java | 4 +++ 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java index 939ffa88..84311dad 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java @@ -1,9 +1,11 @@ package org.leavesmc.leaves.entity.botaction; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.UUID; +import java.util.function.Consumer; @org.jetbrains.annotations.ApiStatus.Experimental public class LeavesBotAction { @@ -13,26 +15,38 @@ public class LeavesBotAction { private final int initialTickDelay; private final int initialTickInterval; private final int initialNumber; + private final @Nullable Consumer onSuccess; + private final @Nullable Consumer onFail; private Player actionPlayer; private int tickToNext; private int numberRemaining; private boolean cancel; - public LeavesBotAction(BotActionType type, int initialTickInterval, int initialNumber) { - this(type.getName(), UUID.randomUUID(), 0, initialTickInterval, initialNumber); + public LeavesBotAction(@NotNull BotActionType type, int initialTickInterval, int initialNumber) { + this(type.getName(), UUID.randomUUID(), 0, initialTickInterval, initialNumber, null, null); } - public LeavesBotAction(BotActionType type, int initialTickDelay, int initialTickInterval, int initialNumber) { - this(type.getName(), UUID.randomUUID(), initialTickDelay, initialTickInterval, initialNumber); + public LeavesBotAction(@NotNull BotActionType type, int initialTickInterval, int initialNumber, @Nullable Consumer onSuccess, @Nullable Consumer onFail) { + this(type.getName(), UUID.randomUUID(), 0, initialTickInterval, initialNumber, onSuccess, onFail); } - protected LeavesBotAction(String name, UUID actionUUID, int initialTickDelay, int initialTickInterval, int initialNumber) { + public LeavesBotAction(@NotNull BotActionType type, int initialTickDelay, int initialTickInterval, int initialNumber) { + this(type.getName(), UUID.randomUUID(), initialTickDelay, initialTickInterval, initialNumber, null, null); + } + + public LeavesBotAction(@NotNull BotActionType type, int initialTickDelay, int initialTickInterval, int initialNumber, @Nullable Consumer onSuccess, @Nullable Consumer onFail) { + this(type.getName(), UUID.randomUUID(), initialTickDelay, initialTickInterval, initialNumber, onSuccess, onFail); + } + + protected LeavesBotAction(String name, UUID actionUUID, int initialTickDelay, int initialTickInterval, int initialNumber, @Nullable Consumer onSuccess, @Nullable Consumer onFail) { this.actionName = name; this.uuid = actionUUID; this.initialTickDelay = initialTickDelay; this.initialTickInterval = initialTickInterval; this.initialNumber = initialNumber; + this.onSuccess = onSuccess; + this.onFail = onFail; } public String getActionName() { @@ -87,4 +101,12 @@ public class LeavesBotAction { public void setTickToNext(int tickToNext) { this.tickToNext = tickToNext; } + + public @Nullable Consumer getOnSuccess() { + return onSuccess; + } + + public @Nullable Consumer getOnFail() { + return onFail; + } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/AbstractBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/AbstractBotAction.java index 72ea8fc5..5345445f 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/AbstractBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/AbstractBotAction.java @@ -8,14 +8,17 @@ import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.bot.ServerBot; +import org.leavesmc.leaves.bot.agent.actions.CraftBotAction; import org.leavesmc.leaves.command.CommandArgument; import org.leavesmc.leaves.command.CommandArgumentResult; +import org.leavesmc.leaves.entity.botaction.LeavesBotAction; import org.leavesmc.leaves.event.bot.BotActionExecuteEvent; import org.leavesmc.leaves.event.bot.BotActionStopEvent; import java.util.List; import java.util.UUID; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Supplier; //TODO onStop for fully terminate action (use, etc.) @@ -34,6 +37,9 @@ public abstract class AbstractBotAction> { private int numberRemaining; private boolean cancel; + private Consumer onFail; + private Consumer onSuccess; + public AbstractBotAction(String name, CommandArgument argument, Supplier creator) { this.name = name; this.argument = argument; @@ -77,6 +83,11 @@ public abstract class AbstractBotAction> { this.numberRemaining--; } this.tickToNext = this.getInitialTickInterval() - 1; + if (this.onSuccess != null) { + this.onSuccess.accept(CraftBotAction.asAPICopy(this)); + } + } else if (this.onFail != null) { + this.onFail.accept(CraftBotAction.asAPICopy(this)); } } else { this.tickToNext--; @@ -191,6 +202,14 @@ public abstract class AbstractBotAction> { return this.argument; } + public void setOnFail(Consumer onFail) { + this.onFail = onFail; + } + + public void setOnSuccess(Consumer onSuccess) { + this.onSuccess = onSuccess; + } + @NotNull public E create() { return this.creator.get(); diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftBotAction.java index 27f2f46d..4d40c7f5 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftBotAction.java @@ -45,6 +45,10 @@ public class CraftBotAction extends LeavesBotAction { if (newAction == null) { throw new IllegalArgumentException("Invalid action!"); // TODO look action } + + newAction.setOnSuccess(action.getOnSuccess()); + newAction.setOnFail(action.getOnFail()); + return newAction; }