mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
Add scheduled bot remove (#274)
* Add scheduled bot remove * Add scheduled bot remove * Remove scheduled bot remove
This commit is contained in:
@@ -536,10 +536,10 @@ index 22f1ed383313829b8af4badda9ef8dc85cae8fd1..03af280bffbd2070abaf1de4b0c96389
|
|||||||
*/
|
*/
|
||||||
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..b9d4431b8994f79a4569bd267a6f5680b9650bff
|
index 0000000000000000000000000000000000000000..b64361c4151659d5e3f8884562cb811d60776c38
|
||||||
--- /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,407 @@
|
@@ -0,0 +1,472 @@
|
||||||
+package org.leavesmc.leaves.bot;
|
+package org.leavesmc.leaves.bot;
|
||||||
+
|
+
|
||||||
+import org.bukkit.Bukkit;
|
+import org.bukkit.Bukkit;
|
||||||
@@ -550,6 +550,7 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+import org.bukkit.command.CommandSender;
|
+import org.bukkit.command.CommandSender;
|
||||||
+import org.bukkit.command.ConsoleCommandSender;
|
+import org.bukkit.command.ConsoleCommandSender;
|
||||||
+import org.bukkit.craftbukkit.entity.CraftPlayer;
|
+import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
|
+import org.bukkit.craftbukkit.scheduler.CraftScheduler;
|
||||||
+import org.bukkit.entity.Player;
|
+import org.bukkit.entity.Player;
|
||||||
+import org.bukkit.generator.WorldInfo;
|
+import org.bukkit.generator.WorldInfo;
|
||||||
+import org.bukkit.permissions.Permission;
|
+import org.bukkit.permissions.Permission;
|
||||||
@@ -566,11 +567,7 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+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;
|
||||||
+
|
+
|
||||||
+import java.util.ArrayList;
|
+import java.util.*;
|
||||||
+import java.util.HashMap;
|
|
||||||
+import java.util.List;
|
|
||||||
+import java.util.Locale;
|
|
||||||
+import java.util.Map;
|
|
||||||
+import java.util.stream.Stream;
|
+import java.util.stream.Stream;
|
||||||
+
|
+
|
||||||
+public class BotCommand extends Command {
|
+public class BotCommand extends Command {
|
||||||
@@ -618,6 +615,7 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+ }
|
+ }
|
||||||
+ case "create" -> list.add("<BotSkinName>");
|
+ case "create" -> list.add("<BotSkinName>");
|
||||||
+ case "config" -> list.addAll(acceptConfig);
|
+ case "config" -> list.addAll(acceptConfig);
|
||||||
|
+ case "remove" -> list.addAll(List.of("cancel", "[hour]"));
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -633,6 +631,16 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+ list.add("false");
|
+ list.add("false");
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
+ case "remove" -> {
|
||||||
|
+ if (!Objects.equals(args[3], "cancel")) {
|
||||||
|
+ list.add("[minute]");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (args.length == 5 && args[0].equals("remove")) {
|
||||||
|
+ if (!Objects.equals(args[3], "cancel")) {
|
||||||
|
+ list.add("[second]");
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -731,8 +739,8 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private void onRemove(CommandSender sender, String @NotNull [] args) {
|
+ private void onRemove(CommandSender sender, String @NotNull [] args) {
|
||||||
+ if (args.length < 2) {
|
+ if (args.length < 2 || args.length > 5) {
|
||||||
+ sender.sendMessage(ChatColor.RED + "Use /bot remove <name> to remove a fakeplayer");
|
+ sender.sendMessage(ChatColor.RED + "Use /bot remove <name> [hour] [minute] [second] to remove a fakeplayer");
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -743,6 +751,63 @@ index 0000000000000000000000000000000000000000..b9d4431b8994f79a4569bd267a6f5680
|
|||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ if (args.length > 2) {
|
||||||
|
+ if (args[2].equals("cancel")) {
|
||||||
|
+ if (bot.removeTaskId == -1) {
|
||||||
|
+ sender.sendMessage(ChatColor.RED + "This fakeplayer is not scheduled to be removed");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ Bukkit.getScheduler().cancelTask(bot.removeTaskId);
|
||||||
|
+ bot.removeTaskId = -1;
|
||||||
|
+ sender.sendMessage("Remove cancel");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ long time = 0;
|
||||||
|
+ int h; // Preventing out-of-range
|
||||||
|
+ long s = 0;
|
||||||
|
+ long m = 0;
|
||||||
|
+
|
||||||
|
+ try {
|
||||||
|
+ h = Integer.parseInt(args[2]);
|
||||||
|
+ if (h < 0) {
|
||||||
|
+ throw new NumberFormatException();
|
||||||
|
+ }
|
||||||
|
+ time += ((long) h) * 3600 * 20;
|
||||||
|
+ if (args.length > 3) {
|
||||||
|
+ m = Long.parseLong(args[3]);
|
||||||
|
+ if (m > 59 || m < 0) {
|
||||||
|
+ throw new NumberFormatException();
|
||||||
|
+ }
|
||||||
|
+ time += m * 60 * 20;
|
||||||
|
+ }
|
||||||
|
+ if (args.length > 4) {
|
||||||
|
+ s = Long.parseLong(args[4]);
|
||||||
|
+ if (s > 59 || s < 0) {
|
||||||
|
+ throw new NumberFormatException();
|
||||||
|
+ }
|
||||||
|
+ time += s * 20;
|
||||||
|
+ }
|
||||||
|
+ } catch (NumberFormatException e) {
|
||||||
|
+ sender.sendMessage(ChatColor.RED + "This fakeplayer is not scheduled to be removed");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ boolean isReschedule = bot.removeTaskId != -1;
|
||||||
|
+
|
||||||
|
+ if (isReschedule) {
|
||||||
|
+ Bukkit.getScheduler().cancelTask(bot.removeTaskId);
|
||||||
|
+ }
|
||||||
|
+ bot.removeTaskId = Bukkit.getScheduler().runTaskLater(CraftScheduler.MINECRAFT, () -> {
|
||||||
|
+ bot.removeTaskId = -1;
|
||||||
|
+ bot.onRemove(BotRemoveEvent.RemoveReason.COMMAND, sender);
|
||||||
|
+ }, time).getTaskId();
|
||||||
|
+
|
||||||
|
+ sender.sendMessage("This fakeplayer will be removed in " + h + "h " + m + "m " + s + "s" + (isReschedule ? " (rescheduled)" : ""));
|
||||||
|
+
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ bot.onRemove(BotRemoveEvent.RemoveReason.COMMAND, sender);
|
+ bot.onRemove(BotRemoveEvent.RemoveReason.COMMAND, sender);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -1426,10 +1491,10 @@ index 0000000000000000000000000000000000000000..0db337866c71283464d026a4f230016b
|
|||||||
+}
|
+}
|
||||||
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..0cb04bf5c5da387b295897997ae0692eb8baab6e
|
index 0000000000000000000000000000000000000000..c2c88ec8e7ef937af9c014d6511988fce1eb13f5
|
||||||
--- /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,745 @@
|
@@ -0,0 +1,751 @@
|
||||||
+package org.leavesmc.leaves.bot;
|
+package org.leavesmc.leaves.bot;
|
||||||
+
|
+
|
||||||
+import com.google.common.collect.Lists;
|
+import com.google.common.collect.Lists;
|
||||||
@@ -1541,6 +1606,8 @@ index 0000000000000000000000000000000000000000..0cb04bf5c5da387b295897997ae0692e
|
|||||||
+ public int notSleepTicks;
|
+ public int notSleepTicks;
|
||||||
+ public boolean alwaysSendData;
|
+ public boolean alwaysSendData;
|
||||||
+
|
+
|
||||||
|
+ public int removeTaskId = -1;
|
||||||
|
+
|
||||||
+ private ServerBot(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
+ private ServerBot(MinecraftServer server, ServerLevel world, GameProfile profile) {
|
||||||
+ super(server, world, profile, ClientInformation.createDefault());
|
+ super(server, world, profile, ClientInformation.createDefault());
|
||||||
+ this.entityData.set(new EntityDataAccessor<>(16, EntityDataSerializers.INT), 0xFF);
|
+ this.entityData.set(new EntityDataAccessor<>(16, EntityDataSerializers.INT), 0xFF);
|
||||||
@@ -1700,6 +1767,10 @@ index 0000000000000000000000000000000000000000..0cb04bf5c5da387b295897997ae0692e
|
|||||||
+ if (!new BotRemoveEvent(this.getBukkitPlayer(), reason, remover).callEvent()) {
|
+ if (!new BotRemoveEvent(this.getBukkitPlayer(), reason, remover).callEvent()) {
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
|
+ if (this.removeTaskId != -1) {
|
||||||
|
+ Bukkit.getScheduler().cancelTask(this.removeTaskId);
|
||||||
|
+ this.removeTaskId = -1;
|
||||||
|
+ }
|
||||||
+ bots.remove(this);
|
+ bots.remove(this);
|
||||||
+ server.getPlayerList().removeBot(this);
|
+ server.getPlayerList().removeBot(this);
|
||||||
+ remove(RemovalReason.DISCARDED);
|
+ remove(RemovalReason.DISCARDED);
|
||||||
|
|||||||
Reference in New Issue
Block a user