From 980862ba2e04c00c6f01e301405d21fed6d6d2bd Mon Sep 17 00:00:00 2001 From: MC_XiaoHei Date: Wed, 9 Jul 2025 12:23:32 +0800 Subject: [PATCH] fix: fix null in actions reg --- .../org/leavesmc/leaves/bot/agent/Actions.java | 14 ++++++++++++-- .../bot/agent/actions/CraftCustomAction.java | 2 ++ .../bot/agent/actions/CraftCustomBotAction.java | 5 +++++ .../agent/actions/CraftCustomStateBotAction.java | 9 +++++++-- .../agent/actions/CraftCustomTimerBotAction.java | 15 ++++++++++----- 5 files changed, 36 insertions(+), 9 deletions(-) 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 e7c381d8..d5e889c9 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 @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.bot.agent.actions.CraftAttackAction; import org.leavesmc.leaves.bot.agent.actions.CraftBotAction; import org.leavesmc.leaves.bot.agent.actions.CraftBreakBlockAction; +import org.leavesmc.leaves.bot.agent.actions.CraftCustomAction; import org.leavesmc.leaves.bot.agent.actions.CraftDropAction; import org.leavesmc.leaves.bot.agent.actions.CraftFishAction; import org.leavesmc.leaves.bot.agent.actions.CraftJumpAction; @@ -28,6 +29,7 @@ import org.leavesmc.leaves.entity.bot.action.BotAction; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.Set; public class Actions { @@ -57,10 +59,18 @@ public class Actions { register(new CraftMoveAction()); } + public static @NotNull Class getActionClass(@NotNull CraftBotAction action) { + Class actionClass = action.getInterfaceClass(); + if (actionClass == null && action instanceof CraftCustomAction act) { + actionClass = act.getRealActionClass(); + } + return Objects.requireNonNull(actionClass, "Class " + action.getClass() + " is not registered as a BotAction!"); + } + public static boolean register(@NotNull CraftBotAction action) { if (!actionsByName.containsKey(action.getName())) { actionsByName.put(action.getName(), action); - actionsByClass.put(action.getInterfaceClass(), action); + actionsByClass.put(getActionClass(action), action); return true; } return false; @@ -68,7 +78,7 @@ public class Actions { public static boolean unregister(@NotNull String name) { if (actionsByName.containsKey(name)) { - actionsByClass.remove(actionsByName.get(name).getInterfaceClass()); + actionsByClass.remove(getActionClass(actionsByName.get(name))); actionsByName.remove(name); return true; } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomAction.java index 31c90deb..d8fc5239 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomAction.java @@ -5,4 +5,6 @@ import org.jetbrains.annotations.Nullable; public interface CraftCustomAction { E createCraft(@Nullable Player player, String[] args); + + Class getRealActionClass(); } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomBotAction.java index de843d67..18f5e668 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomBotAction.java @@ -34,4 +34,9 @@ public class CraftCustomBotAction extends CraftBotAction getInterfaceClass() { return null; } + + @Override + public Class getRealActionClass() { + return realAction.getClass(); + } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomStateBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomStateBotAction.java index 05b705db..7486c200 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomStateBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomStateBotAction.java @@ -25,13 +25,18 @@ public class CraftCustomStateBotAction extends CraftStateBotAction getInterfaceClass() { return null; } @Override - public boolean doTick(@NotNull ServerBot bot) { - return realAction.doTick(bot.getBukkitEntity()); + public Class getRealActionClass() { + return realAction.getClass(); } } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomTimerBotAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomTimerBotAction.java index 9697b3c4..abe9bfbe 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomTimerBotAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/CraftCustomTimerBotAction.java @@ -15,11 +15,6 @@ public class CraftCustomTimerBotAction extends CraftTimerBotAction getInterfaceClass() { - return null; - } - @Override public CraftCustomTimerBotAction createCraft(@Nullable Player player, String[] args) { AbstractCustomTimerBotAction newRealAction = realAction.getNew(player, args); @@ -33,4 +28,14 @@ public class CraftCustomTimerBotAction extends CraftTimerBotAction getInterfaceClass() { + return null; + } + + @Override + public Class getRealActionClass() { + return realAction.getClass(); + } }