diff --git a/lophine-server/paper-patches/features/0004-Leaves-Leaves-Fakeplayer.patch b/lophine-server/paper-patches/features/0004-Leaves-Leaves-Fakeplayer.patch index 3f8b90d..2fa0678 100644 --- a/lophine-server/paper-patches/features/0004-Leaves-Leaves-Fakeplayer.patch +++ b/lophine-server/paper-patches/features/0004-Leaves-Leaves-Fakeplayer.patch @@ -8,19 +8,13 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -index 9180f23529a31b6b0a5b38bb7cda3e32d487f691..cc8686b791f4c559e51bb06b52b02e295b6e0547 100644 +index 9180f23529a31b6b0a5b38bb7cda3e32d487f691..e1f456b31ffda9370b63e51f343847d6f9f62263 100644 --- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java +++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -@@ -47,6 +47,23 @@ class PaperEventManager { - throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously."); - } +@@ -36,6 +36,15 @@ class PaperEventManager { -+ // Leaves start - skip bot -+ if (event instanceof org.bukkit.event.player.PlayerEvent playerEvent && playerEvent.getPlayer() instanceof org.leavesmc.leaves.entity.bot.Bot) { -+ return; -+ } -+ // Leaves end - skip bot -+ + // SimplePluginManager + public void callEvent(@NotNull Event event) { + // Leaves start - process bot load/save + if (fun.bm.lophine.config.modules.function.FakeplayerConfig.enable && fun.bm.lophine.config.modules.function.FakeplayerConfig.canResident) { + if (event instanceof org.bukkit.event.world.WorldLoadEvent worldLoadEvent) { @@ -30,7 +24,18 @@ index 9180f23529a31b6b0a5b38bb7cda3e32d487f691..cc8686b791f4c559e51bb06b52b02e29 + } + } + // Leaves end - process bot load/save -+ + // Leaf start - Skip event if no listeners + RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners(); + if (listeners.length == 0) return; +@@ -47,6 +56,12 @@ class PaperEventManager { + throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously."); + } + ++ // Leaves start - skip bot ++ if (event instanceof org.bukkit.event.player.PlayerEvent playerEvent && playerEvent.getPlayer() instanceof org.leavesmc.leaves.entity.bot.Bot) { ++ return; ++ } ++ // Leaves end - skip bot + for (RegisteredListener registration : listeners) { if (!registration.getPlugin().isEnabled()) { diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotList.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotList.java index a05443c..caa96dd 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotList.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotList.java @@ -172,30 +172,36 @@ public class BotList { this.botsByUUID.put(bot.getUUID(), bot); bot.supressTrackerForLogin = true; - world.addNewPlayer(bot); + + io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( + world, net.minecraft.util.Mth.floor(location.getX()) >> 4, net.minecraft.util.Mth.floor(location.getZ()) >> 4, + () -> { + world.addNewPlayer(bot); + + BotJoinEvent event1 = new BotJoinEvent(bot.getBukkitEntity(), PaperAdventure.asAdventure(Component.translatable("multiplayer.player.joined", bot.getDisplayName())).style(Style.style(NamedTextColor.YELLOW))); + this.server.server.getPluginManager().callEvent(event1); + + net.kyori.adventure.text.Component joinMessage = event1.joinMessage(); + if (joinMessage != null && !joinMessage.equals(net.kyori.adventure.text.Component.empty())) { + this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(joinMessage), false); + } + + bot.renderInfo(); + bot.supressTrackerForLogin = false; + + bot.level().getChunkSource().chunkMap.addEntity(bot); + bot.renderData(); + bot.initInventoryMenu(); + botsNameByWorldUuid + .computeIfAbsent(bot.level().uuid.toString(), (k) -> new HashSet<>()) + .add(bot.getBukkitEntity().getRealName()); + BotList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", bot.getName().getString(), "Local", bot.getId(), bot.level().serverLevelData.getLevelName(), bot.getX(), bot.getY(), bot.getZ()); + }, + ca.spottedleaf.concurrentutil.util.Priority.HIGHER); optional.ifPresent(nbt -> { bot.loadAndSpawnEnderPearls(nbt); bot.loadAndSpawnParentVehicle(nbt); }); - - BotJoinEvent event1 = new BotJoinEvent(bot.getBukkitEntity(), PaperAdventure.asAdventure(Component.translatable("multiplayer.player.joined", bot.getDisplayName())).style(Style.style(NamedTextColor.YELLOW))); - this.server.server.getPluginManager().callEvent(event1); - - net.kyori.adventure.text.Component joinMessage = event1.joinMessage(); - if (joinMessage != null && !joinMessage.equals(net.kyori.adventure.text.Component.empty())) { - this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(joinMessage), false); - } - - bot.renderInfo(); - bot.supressTrackerForLogin = false; - - bot.level().getChunkSource().chunkMap.addEntity(bot); - bot.renderData(); - bot.initInventoryMenu(); - botsNameByWorldUuid - .computeIfAbsent(bot.level().uuid.toString(), (k) -> new HashSet<>()) - .add(bot.getBukkitEntity().getRealName()); - BotList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", bot.getName().getString(), "Local", bot.getId(), bot.level().serverLevelData.getLevelName(), bot.getX(), bot.getY(), bot.getZ()); return bot; } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/LocatorBarConfig.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/LocatorBarConfig.java index 2174d5c..94323b3 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/LocatorBarConfig.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/LocatorBarConfig.java @@ -20,9 +20,12 @@ package org.leavesmc.leaves.bot.agent.configs; import com.mojang.brigadier.arguments.BoolArgumentType; import fun.bm.lophine.config.modules.experiment.CommandConfig; import fun.bm.lophine.config.modules.function.FakeplayerConfig; +import me.earthme.luminol.utils.NullPlugin; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.waypoints.ServerWaypointManager; +import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; +import org.leavesmc.leaves.bot.ServerBot; import org.leavesmc.leaves.command.CommandContext; public class LocatorBarConfig extends AbstractBotConfig { @@ -40,12 +43,20 @@ public class LocatorBarConfig extends AbstractBotConfig setValue(value), 20); } else { - manager.untrackWaypoint(this.bot); + setValue(value, this.bot); + } + } + + public void setValue(@NotNull Boolean value, ServerBot bot) throws IllegalArgumentException { + this.value = value; + ServerWaypointManager manager = bot.level().getWaypointManager(); + if (value) { + manager.trackWaypoint(bot); + } else { + manager.untrackWaypoint(bot); } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SimulationDistanceConfig.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SimulationDistanceConfig.java index 3bb2ea0..24bce40 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SimulationDistanceConfig.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SimulationDistanceConfig.java @@ -20,7 +20,9 @@ package org.leavesmc.leaves.bot.agent.configs; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import fun.bm.lophine.config.modules.function.FakeplayerConfig; +import me.earthme.luminol.utils.NullPlugin; import net.minecraft.nbt.CompoundTag; +import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; import org.leavesmc.leaves.command.CommandContext; @@ -66,6 +68,10 @@ public class SimulationDistanceConfig extends AbstractBotConfig load(nbt), 20); + } else { + this.setValue(nbt.getIntOr(getName(), FakeplayerConfig.getSimulationDistance(this.bot))); + } } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SkipSleepConfig.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SkipSleepConfig.java index 83a05bd..53c2b97 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SkipSleepConfig.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SkipSleepConfig.java @@ -19,8 +19,11 @@ package org.leavesmc.leaves.bot.agent.configs; import com.mojang.brigadier.arguments.BoolArgumentType; import fun.bm.lophine.config.modules.function.FakeplayerConfig; +import me.earthme.luminol.utils.NullPlugin; import net.minecraft.nbt.CompoundTag; +import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; +import org.leavesmc.leaves.bot.ServerBot; import org.leavesmc.leaves.command.CommandContext; public class SkipSleepConfig extends AbstractBotConfig { @@ -35,7 +38,15 @@ public class SkipSleepConfig extends AbstractBotConfig setValue(value), 20); + } else { + setValue(value, this.bot); + } + } + + public void setValue(@NotNull Boolean value, ServerBot bot) throws IllegalArgumentException { bot.fauxSleeping = value; } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/TickTypeConfig.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/TickTypeConfig.java index 7145c9f..36bcdaf 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/TickTypeConfig.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/TickTypeConfig.java @@ -71,7 +71,7 @@ public class TickTypeConfig extends AbstractBotConfig ServerBot.TickType.NETWORK; case "entity_list" -> ServerBot.TickType.ENTITY_LIST; default -> throw new IllegalStateException("Unexpected bot tick type value: " + raw);