9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-19 14:59:32 +00:00

Enhance bot api, fix somethings (#341)

This commit is contained in:
MC_XiaoHei
2024-09-18 21:05:41 +08:00
committed by GitHub
parent 56d306cb91
commit 23c47a3cce
3 changed files with 99 additions and 61 deletions

View File

@@ -4,15 +4,6 @@ Date: Wed, 27 Jul 2022 15:30:34 +0800
Subject: [PATCH] Add fakeplayer api Subject: [PATCH] Add fakeplayer api
diff --git a/.gitignore b/.gitignore
index 97e78e27ee0eea2c8b24886eeb19164d552323fe..9764fa643039f215627c20a33ca70c9e36b2d599 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index e20e4239a5a1f952e1c70e899549989d5e42f73c..5f6078bc80e20c9482a96d2bf1095bb32fbfc28c 100644 index e20e4239a5a1f952e1c70e899549989d5e42f73c..5f6078bc80e20c9482a96d2bf1095bb32fbfc28c 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
@@ -149,10 +140,10 @@ index 0000000000000000000000000000000000000000..7a1ee45d571687317883b896f3ec0a83
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/entity/BotCreator.java b/src/main/java/org/leavesmc/leaves/entity/BotCreator.java diff --git a/src/main/java/org/leavesmc/leaves/entity/BotCreator.java b/src/main/java/org/leavesmc/leaves/entity/BotCreator.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..98c7e87854eae9760a6f4427c6b052b192df2b45 index 0000000000000000000000000000000000000000..3c0d985c3e293144f4fef0e447f9bd981bf7912f
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/entity/BotCreator.java +++ b/src/main/java/org/leavesmc/leaves/entity/BotCreator.java
@@ -0,0 +1,52 @@ @@ -0,0 +1,53 @@
+package org.leavesmc.leaves.entity; +package org.leavesmc.leaves.entity;
+ +
+import org.bukkit.Bukkit; +import org.bukkit.Bukkit;
@@ -197,7 +188,8 @@ index 0000000000000000000000000000000000000000..98c7e87854eae9760a6f4427c6b052b1
+ public Bot spawn(); + public Bot spawn();
+ +
+ /** + /**
+ * Create a bot and apply skin + * Create a bot and apply skin of player names `skinName` from MojangAPI
+ * just like `mojangAPISkin().spawn()`, but async
+ * <p> + * <p>
+ * you can not get the bot instance instantly because get skin in on async thread + * you can not get the bot instance instantly because get skin in on async thread
+ * + *
@@ -542,15 +534,17 @@ index 0000000000000000000000000000000000000000..69a99679d407f974ef0e414945d3bcc7
+ +
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..7189649e608d41511d4213c1c3938996361290df index 0000000000000000000000000000000000000000..f1123d55712cc90a1d0bb79b7832c90abb77ae90
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotActionScheduleEvent.java
@@ -0,0 +1,39 @@ @@ -0,0 +1,48 @@
+package org.leavesmc.leaves.event.bot; +package org.leavesmc.leaves.event.bot;
+ +
+import org.bukkit.command.CommandSender;
+import org.bukkit.event.Cancellable; +import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList; +import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.leavesmc.leaves.entity.Bot; +import org.leavesmc.leaves.entity.Bot;
+ +
+import java.util.UUID; +import java.util.UUID;
@@ -560,9 +554,11 @@ index 0000000000000000000000000000000000000000..7189649e608d41511d4213c1c3938996
+ private static final HandlerList handlers = new HandlerList(); + private static final HandlerList handlers = new HandlerList();
+ +
+ private boolean cancel = false; + private boolean cancel = false;
+ private final CommandSender sender;
+ +
+ public BotActionScheduleEvent(@NotNull Bot who, String actionName, UUID actionUUID) { + public BotActionScheduleEvent(@NotNull Bot who, String actionName, UUID actionUUID, CommandSender sender) {
+ super(who, actionName, actionUUID); + super(who, actionName, actionUUID);
+ this.sender = sender;
+ } + }
+ +
+ @Override + @Override
@@ -575,6 +571,11 @@ index 0000000000000000000000000000000000000000..7189649e608d41511d4213c1c3938996
+ this.cancel = cancel; + this.cancel = cancel;
+ } + }
+ +
+ @Nullable
+ public CommandSender getSender() {
+ return sender;
+ }
+
+ @Override + @Override
+ @NotNull + @NotNull
+ public HandlerList getHandlers() { + public HandlerList getHandlers() {
@@ -587,21 +588,25 @@ index 0000000000000000000000000000000000000000..7189649e608d41511d4213c1c3938996
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..e8de7b19d72b3dfd6e4423096573b3a7ef737803 index 0000000000000000000000000000000000000000..56822a944a13394f635a7640d76c66b4cc98698a
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotActionStopEvent.java
@@ -0,0 +1,36 @@ @@ -0,0 +1,56 @@
+package org.leavesmc.leaves.event.bot; +package org.leavesmc.leaves.event.bot;
+ +
+import org.bukkit.command.CommandSender;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList; +import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.leavesmc.leaves.entity.Bot; +import org.leavesmc.leaves.entity.Bot;
+ +
+import java.util.UUID; +import java.util.UUID;
+ +
+public class BotActionStopEvent extends BotActionEvent { +public class BotActionStopEvent extends BotActionEvent implements Cancellable{
+
+ private static final HandlerList handlers = new HandlerList(); + private static final HandlerList handlers = new HandlerList();
+ private boolean cancel = false;
+ private final CommandSender sender;
+ +
+ public enum Reason { + public enum Reason {
+ DONE, COMMAND, PLUGIN, INTERNAL + DONE, COMMAND, PLUGIN, INTERNAL
@@ -609,9 +614,10 @@ index 0000000000000000000000000000000000000000..e8de7b19d72b3dfd6e4423096573b3a7
+ +
+ private final Reason reason; + private final Reason reason;
+ +
+ public BotActionStopEvent(@NotNull Bot who, String actionName, UUID actionUUID, Reason stopReason) { + public BotActionStopEvent(@NotNull Bot who, String actionName, UUID actionUUID, Reason stopReason, CommandSender sender) {
+ super(who, actionName, actionUUID); + super(who, actionName, actionUUID);
+ this.reason = stopReason; + this.reason = stopReason;
+ this.sender = sender;
+ } + }
+ +
+ public Reason getReason() { + public Reason getReason() {
@@ -626,15 +632,31 @@ index 0000000000000000000000000000000000000000..e8de7b19d72b3dfd6e4423096573b3a7
+ public static HandlerList getHandlerList() { + public static HandlerList getHandlerList() {
+ return handlers; + return handlers;
+ } + }
+
+ @Override
+ public boolean isCancelled() {
+ return cancel;
+ }
+
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancel = cancel;
+ }
+
+ @Nullable
+ public CommandSender getSender() {
+ return sender;
+ }
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..053be37cb250d77b1c9f4c1bbd83a49da93027a7 index 0000000000000000000000000000000000000000..5afa2df3566dd038b9f262ce8bc1f01c688b45a5
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
@@ -0,0 +1,50 @@ @@ -0,0 +1,53 @@
+package org.leavesmc.leaves.event.bot; +package org.leavesmc.leaves.event.bot;
+ +
+import org.bukkit.command.CommandSender;
+import org.bukkit.event.Cancellable; +import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList; +import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.NotNull;
@@ -647,11 +669,13 @@ index 0000000000000000000000000000000000000000..053be37cb250d77b1c9f4c1bbd83a49d
+ private final String configName; + private final String configName;
+ private final String[] configValue; + private final String[] configValue;
+ private boolean cancel; + private boolean cancel;
+ private final CommandSender sender;
+ +
+ public BotConfigModifyEvent(@NotNull Bot who, String configName, String[] configValue) { + public BotConfigModifyEvent(@NotNull Bot who, String configName, String[] configValue, CommandSender sender) {
+ super(who); + super(who);
+ this.configName = configName; + this.configName = configName;
+ this.configValue = configValue; + this.configValue = configValue;
+ this.sender = sender;
+ } + }
+ +
+ @NotNull + @NotNull
@@ -685,7 +709,7 @@ index 0000000000000000000000000000000000000000..053be37cb250d77b1c9f4c1bbd83a49d
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..08e382120feec65c2a842134a1643f236a120bbd index 0000000000000000000000000000000000000000..11e55a99b91e4ea11640d3fe02bc7f0106d7b91c
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java
@@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
@@ -700,7 +724,7 @@ index 0000000000000000000000000000000000000000..08e382120feec65c2a842134a1643f23
+import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Nullable;
+ +
+/** +/**
+ * Call when a fakeplayer creates a server + * Call when a fakeplayer created
+ */ + */
+public class BotCreateEvent extends Event implements Cancellable { +public class BotCreateEvent extends Event implements Cancellable {
+ +
@@ -1048,7 +1072,7 @@ index 0000000000000000000000000000000000000000..24e5f4d833897000e0378d4d3c3ff75c
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..d4472675af540cdeeebf428144c70b9a5c3f34ce index 0000000000000000000000000000000000000000..b5295bddb627985ff35ca4de55253bbd68593655
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotLoadEvent.java
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
@@ -1062,7 +1086,7 @@ index 0000000000000000000000000000000000000000..d4472675af540cdeeebf428144c70b9a
+import java.util.UUID; +import java.util.UUID;
+ +
+/** +/**
+ * Call when a fakeplayer loading a server + * Call when a fakeplayer loaded
+ */ + */
+public class BotLoadEvent extends Event implements Cancellable { +public class BotLoadEvent extends Event implements Cancellable {
+ +
@@ -1113,7 +1137,7 @@ index 0000000000000000000000000000000000000000..d4472675af540cdeeebf428144c70b9a
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..408a7e39ee1923d595fb8ac3f91d60e14a2c446c index 0000000000000000000000000000000000000000..76909d03f2b23602335b91f3b168e17f20256d34
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java +++ b/src/main/java/org/leavesmc/leaves/event/bot/BotRemoveEvent.java
@@ -0,0 +1,106 @@ @@ -0,0 +1,106 @@
@@ -1129,7 +1153,7 @@ index 0000000000000000000000000000000000000000..408a7e39ee1923d595fb8ac3f91d60e1
+import org.leavesmc.leaves.entity.Bot; +import org.leavesmc.leaves.entity.Bot;
+ +
+/** +/**
+ * Call when a fakeplayer creates a server + * Call when a fakeplayer removed
+ */ + */
+public class BotRemoveEvent extends BotEvent implements Cancellable { +public class BotRemoveEvent extends BotEvent implements Cancellable {
+ +

View File

@@ -4,15 +4,6 @@ Date: Sat, 5 Aug 2023 09:10:59 +0800
Subject: [PATCH] Replay Mod API Subject: [PATCH] Replay Mod API
diff --git a/.gitignore b/.gitignore
index 9764fa643039f215627c20a33ca70c9e36b2d599..97e78e27ee0eea2c8b24886eeb19164d552323fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,4 +38,3 @@
# vs code
/.vscode
/.factorypath
-
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 5f6078bc80e20c9482a96d2bf1095bb32fbfc28c..d0a9b96f4ab200892d589a68b27585a08780f7ac 100644 index 5f6078bc80e20c9482a96d2bf1095bb32fbfc28c..d0a9b96f4ab200892d589a68b27585a08780f7ac 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java

View File

@@ -626,10 +626,10 @@ index 4632eb883e9f5efde520ee543bcad25827c0da2c..d710803137a325f34e0628405d5ddfd0
return event; return event;
diff --git a/src/main/java/org/leavesmc/leaves/bot/BotCommand.java b/src/main/java/org/leavesmc/leaves/bot/BotCommand.java diff --git a/src/main/java/org/leavesmc/leaves/bot/BotCommand.java b/src/main/java/org/leavesmc/leaves/bot/BotCommand.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec356b5cfbcc index 0000000000000000000000000000000000000000..5a1054414f5313b59d38d89fb84987cad397ff12
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/BotCommand.java +++ b/src/main/java/org/leavesmc/leaves/bot/BotCommand.java
@@ -0,0 +1,522 @@ @@ -0,0 +1,543 @@
+package org.leavesmc.leaves.bot; +package org.leavesmc.leaves.bot;
+ +
+import io.papermc.paper.command.CommandUtil; +import io.papermc.paper.command.CommandUtil;
@@ -657,6 +657,7 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+import org.leavesmc.leaves.bot.agent.actions.CraftCustomBotAction; +import org.leavesmc.leaves.bot.agent.actions.CraftCustomBotAction;
+import org.leavesmc.leaves.command.CommandArgumentResult; +import org.leavesmc.leaves.command.CommandArgumentResult;
+import org.leavesmc.leaves.entity.Bot; +import org.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.event.bot.BotActionStopEvent;
+import org.leavesmc.leaves.event.bot.BotConfigModifyEvent; +import org.leavesmc.leaves.event.bot.BotConfigModifyEvent;
+import org.leavesmc.leaves.event.bot.BotCreateEvent; +import org.leavesmc.leaves.event.bot.BotCreateEvent;
+import org.leavesmc.leaves.event.bot.BotRemoveEvent; +import org.leavesmc.leaves.event.bot.BotRemoveEvent;
@@ -957,7 +958,18 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+ +
+ String index = args[3]; + String index = args[3];
+ if (index.equals("all")) { + if (index.equals("all")) {
+ bot.getBotActions().clear(); + Set<BotAction<?>> forRemoval = new HashSet<>();
+ for (int i = 0; i < bot.getBotActions().size(); i++) {
+ BotAction<?> action = bot.getBotActions().get(i);
+ BotActionStopEvent event = new BotActionStopEvent(
+ bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender
+ );
+ event.callEvent();
+ if (!event.isCancelled()) {
+ forRemoval.add(action);
+ }
+ }
+ bot.getBotActions().removeAll(forRemoval);
+ sender.sendMessage(bot.getScoreboardName() + "'s action list cleared."); + sender.sendMessage(bot.getScoreboardName() + "'s action list cleared.");
+ } else { + } else {
+ try { + try {
@@ -967,8 +979,16 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+ return; + return;
+ } + }
+ +
+ BotAction<?> action = bot.getBotActions().remove(i); + BotAction<?> action = bot.getBotActions().get(i);
+ sender.sendMessage(bot.getScoreboardName() + "'s " + action.getName() + " stopped."); + BotActionStopEvent event = new BotActionStopEvent(
+ bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender
+ );
+ event.callEvent();
+ if (!event.isCancelled()) {
+ bot.getBotActions().remove(i);
+ sender.sendMessage(bot.getScoreboardName() + "'s " + action.getName() + " stopped.");
+
+ }
+ } catch (NumberFormatException e) { + } catch (NumberFormatException e) {
+ sender.sendMessage(text("Invalid index", NamedTextColor.RED)); + sender.sendMessage(text("Invalid index", NamedTextColor.RED));
+ } + }
@@ -1010,7 +1030,7 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+ return; + return;
+ } + }
+ +
+ if (bot.addBotAction(newAction)) { + if (bot.addBotAction(newAction, sender)) {
+ sender.sendMessage("Action " + action.getName() + " has been issued to " + bot.getName().getString()); + sender.sendMessage("Action " + action.getName() + " has been issued to " + bot.getName().getString());
+ } + }
+ } + }
@@ -1045,7 +1065,7 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+ String[] realArgs = new String[args.length - 3]; + String[] realArgs = new String[args.length - 3];
+ System.arraycopy(args, 3, realArgs, 0, realArgs.length); + System.arraycopy(args, 3, realArgs, 0, realArgs.length);
+ +
+ BotConfigModifyEvent event = new BotConfigModifyEvent(bot.getBukkitEntity(), config.getName(), realArgs); + BotConfigModifyEvent event = new BotConfigModifyEvent(bot.getBukkitEntity(), config.getName(), realArgs, sender);
+ Bukkit.getPluginManager().callEvent(event); + Bukkit.getPluginManager().callEvent(event);
+ +
+ if (event.isCancelled()) { + if (event.isCancelled()) {
@@ -1080,8 +1100,9 @@ index 0000000000000000000000000000000000000000..a06f24253a2d941c8fd265f50dcaec35
+ return; + return;
+ } + }
+ +
+ botList.removeBot(bot, BotRemoveEvent.RemoveReason.COMMAND, sender, true); + if (botList.removeBot(bot, BotRemoveEvent.RemoveReason.COMMAND, sender, true)) {
+ sender.sendMessage(bot.getScoreboardName() + " saved to " + bot.createState.realName()); + sender.sendMessage(bot.getScoreboardName() + " saved to " + bot.createState.realName());
+ }
+ } + }
+ +
+ private void onLoad(CommandSender sender, String @NotNull [] args) { + private void onLoad(CommandSender sender, String @NotNull [] args) {
@@ -1604,10 +1625,10 @@ index 0000000000000000000000000000000000000000..4f5e6e5c1b9d8bd38c98e97fd31b3833
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/bot/BotList.java b/src/main/java/org/leavesmc/leaves/bot/BotList.java diff --git a/src/main/java/org/leavesmc/leaves/bot/BotList.java b/src/main/java/org/leavesmc/leaves/bot/BotList.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..003f1e01ba56ea2fa9ff311675c58b1d0a38d53b index 0000000000000000000000000000000000000000..33deb7eeda2c4cda396ac4ed7f05e6a851e89050
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/BotList.java +++ b/src/main/java/org/leavesmc/leaves/bot/BotList.java
@@ -0,0 +1,338 @@ @@ -0,0 +1,339 @@
+package org.leavesmc.leaves.bot; +package org.leavesmc.leaves.bot;
+ +
+import com.google.common.collect.Maps; +import com.google.common.collect.Maps;
@@ -1813,16 +1834,16 @@ index 0000000000000000000000000000000000000000..003f1e01ba56ea2fa9ff311675c58b1d
+ } + }
+ } + }
+ +
+ public void removeBot(@NotNull ServerBot bot, @NotNull BotRemoveEvent.RemoveReason reason, @Nullable CommandSender remover, boolean saved) { + public boolean removeBot(@NotNull ServerBot bot, @NotNull BotRemoveEvent.RemoveReason reason, @Nullable CommandSender remover, boolean saved) {
+ this.removeBot(bot, reason, remover, saved, this.dataStorage); + return this.removeBot(bot, reason, remover, saved, this.dataStorage);
+ } + }
+ +
+ public void removeBot(@NotNull ServerBot bot, @NotNull BotRemoveEvent.RemoveReason reason, @Nullable CommandSender remover, boolean saved, IPlayerDataStorage playerIO) { + public boolean removeBot(@NotNull ServerBot bot, @NotNull BotRemoveEvent.RemoveReason reason, @Nullable CommandSender remover, boolean saved, IPlayerDataStorage playerIO) {
+ BotRemoveEvent event = new BotRemoveEvent(bot.getBukkitEntity(), reason, remover, PaperAdventure.asAdventure(Component.translatable("multiplayer.player.left", bot.getDisplayName())).style(Style.style(NamedTextColor.YELLOW)), saved); + BotRemoveEvent event = new BotRemoveEvent(bot.getBukkitEntity(), reason, remover, PaperAdventure.asAdventure(Component.translatable("multiplayer.player.left", bot.getDisplayName())).style(Style.style(NamedTextColor.YELLOW)), saved);
+ this.server.server.getPluginManager().callEvent(event); + this.server.server.getPluginManager().callEvent(event);
+ +
+ if (event.isCancelled() && event.getReason() != BotRemoveEvent.RemoveReason.INTERNAL) { + if (event.isCancelled() && event.getReason() != BotRemoveEvent.RemoveReason.INTERNAL) {
+ return; + return event.isCancelled();
+ } + }
+ +
+ if (bot.removeTaskId != -1) { + if (bot.removeTaskId != -1) {
@@ -1878,6 +1899,7 @@ index 0000000000000000000000000000000000000000..003f1e01ba56ea2fa9ff311675c58b1d
+ if (removeMessage != null && !removeMessage.equals(net.kyori.adventure.text.Component.empty())) { + if (removeMessage != null && !removeMessage.equals(net.kyori.adventure.text.Component.empty())) {
+ this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(removeMessage), false); + this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(removeMessage), false);
+ } + }
+ return true;
+ } + }
+ +
+ public void removeAll() { + public void removeAll() {
@@ -2133,10 +2155,10 @@ index 0000000000000000000000000000000000000000..517e3321b866abe9d17a6fe9e919528b
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/bot/ServerBot.java b/src/main/java/org/leavesmc/leaves/bot/ServerBot.java diff --git a/src/main/java/org/leavesmc/leaves/bot/ServerBot.java b/src/main/java/org/leavesmc/leaves/bot/ServerBot.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..18cf5182c33c43690d7329d6bd435ebc8ee517e5 index 0000000000000000000000000000000000000000..bab7790db401135cb9ea5b05f749dca5e7d0b95f
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/ServerBot.java +++ b/src/main/java/org/leavesmc/leaves/bot/ServerBot.java
@@ -0,0 +1,543 @@ @@ -0,0 +1,544 @@
+package org.leavesmc.leaves.bot; +package org.leavesmc.leaves.bot;
+ +
+import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap;
@@ -2181,6 +2203,7 @@ index 0000000000000000000000000000000000000000..18cf5182c33c43690d7329d6bd435ebc
+import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.Vec3;
+import org.bukkit.Bukkit; +import org.bukkit.Bukkit;
+import org.bukkit.Location; +import org.bukkit.Location;
+import org.bukkit.command.CommandSender;
+import org.bukkit.util.Vector; +import org.bukkit.util.Vector;
+import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Nullable;
@@ -2642,12 +2665,12 @@ index 0000000000000000000000000000000000000000..18cf5182c33c43690d7329d6bd435ebc
+ } + }
+ } + }
+ +
+ public boolean addBotAction(BotAction<?> action) { + public boolean addBotAction(BotAction<?> action, CommandSender sender) {
+ if (!LeavesConfig.fakeplayerUseAction) { + if (!LeavesConfig.fakeplayerUseAction) {
+ return false; + return false;
+ } + }
+ +
+ if (!new BotActionScheduleEvent(this.getBukkitEntity(), action.getName(), action.getUUID()).callEvent()) { + if (!new BotActionScheduleEvent(this.getBukkitEntity(), action.getName(), action.getUUID(), sender).callEvent()) {
+ return false; + return false;
+ } + }
+ +
@@ -2990,7 +3013,7 @@ index 0000000000000000000000000000000000000000..a37513e1ba8443c702ab0c01fbe5e052
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java b/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java diff --git a/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java b/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..3ad5484f26e3dc7fb45c5d2ee0687604e6974404 index 0000000000000000000000000000000000000000..3bd512b436b32f240466a406a101a051b4b07817
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java +++ b/src/main/java/org/leavesmc/leaves/bot/agent/BotAction.java
@@ -0,0 +1,163 @@ @@ -0,0 +1,163 @@
@@ -3082,7 +3105,7 @@ index 0000000000000000000000000000000000000000..3ad5484f26e3dc7fb45c5d2ee0687604
+ } + }
+ +
+ public void stop(@NotNull ServerBot bot, BotActionStopEvent.Reason reason) { + public void stop(@NotNull ServerBot bot, BotActionStopEvent.Reason reason) {
+ new BotActionStopEvent(bot.getBukkitEntity(), this.name, this.uuid, reason).callEvent(); + new BotActionStopEvent(bot.getBukkitEntity(), this.name, this.uuid, reason, null).callEvent();
+ this.setCancelled(true); + this.setCancelled(true);
+ } + }
+ +
@@ -4356,7 +4379,7 @@ index 0000000000000000000000000000000000000000..a3f978318a67c3c5e147a50eb2b6c01c
+} +}
diff --git a/src/main/java/org/leavesmc/leaves/entity/CraftBot.java b/src/main/java/org/leavesmc/leaves/entity/CraftBot.java diff --git a/src/main/java/org/leavesmc/leaves/entity/CraftBot.java b/src/main/java/org/leavesmc/leaves/entity/CraftBot.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..744f5533859bfe81267b3fd5133597e80e0fdc73 index 0000000000000000000000000000000000000000..46aec2f954919f487e22ab953062b6889fe3e58b
--- /dev/null --- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/entity/CraftBot.java +++ b/src/main/java/org/leavesmc/leaves/entity/CraftBot.java
@@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
@@ -4399,7 +4422,7 @@ index 0000000000000000000000000000000000000000..744f5533859bfe81267b3fd5133597e8
+ +
+ @Override + @Override
+ public void addAction(@NotNull LeavesBotAction action) { + public void addAction(@NotNull LeavesBotAction action) {
+ this.getHandle().addBotAction(CraftBotAction.asInternalCopy(action)); + this.getHandle().addBotAction(CraftBotAction.asInternalCopy(action), null);
+ } + }
+ +
+ @Override + @Override