diff --git a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch index 51dd36d..47b6de9 100644 --- a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch +++ b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-cross-region-damage-trace.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable cross region damage trace diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 11e6197dec541b28733715f0d7eaa4c7b834d632..6b7c92fdf562dfa46eee8e8acbc82b02fc3226c5 100644 +index 11e6197dec541b28733715f0d7eaa4c7b834d632..de1263404395c28209234a556347284fa557f81c 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -1345,6 +1345,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -40,7 +40,7 @@ index 11e6197dec541b28733715f0d7eaa4c7b834d632..6b7c92fdf562dfa46eee8e8acbc82b02 + } catch (Throwable ex) { + LOGGER.error(ex.getMessage(), ex); + } -+ }, null, 1L ); ++ }, null, 1L); + } + // Luminol End - Cross Region Damage trace + diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java index 9af1eee..fd478e0 100644 --- a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java +++ b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java @@ -10,15 +10,15 @@ import java.util.List; @ConfigClassInfo(configAttribution = EnumConfigCategory.FUNCTION, mainName = "survux-protocol") public class SurvuxProtocolConfig implements IConfigModule { - @TransformedConfig(name = "entity-protocol", category = {"misc", "survux-protocol"}) + @TransformedConfig(name = "entity-protocol", category = {"misc", "survux-protocol"}) @ConfigInfo(baseName = "entity-protocol") public static boolean entityProtocol = false; - @TransformedConfig(name = "hud-logger-protocol", category = {"misc", "survux-protocol"}) + @TransformedConfig(name = "hud-logger-protocol", category = {"misc", "survux-protocol"}) @ConfigInfo(baseName = "hud-logger-protocol") public static boolean hudLoggerProtocol = false; - @TransformedConfig(name = "hud-metadata-protocol", category = {"misc", "survux-protocol"}) + @TransformedConfig(name = "hud-metadata-protocol", category = {"misc", "survux-protocol"}) @ConfigInfo(baseName = "hud-metadata-protocol") public static boolean hudMetadataProtocol = false; @@ -26,7 +26,7 @@ public class SurvuxProtocolConfig implements IConfigModule { @ConfigInfo(baseName = "hud-metadata-share-seed") public static boolean hudMetadataShareSeed = false; - @TransformedConfig(name ="structure-protocol", category = {"misc", "survux-protocol"}) + @TransformedConfig(name = "structure-protocol", category = {"misc", "survux-protocol"}) @ConfigInfo(baseName = "structure-protocol") public static boolean structureProtocol = false; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCommand.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCommand.java index 10a4ec7..51d97c9 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCommand.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCommand.java @@ -50,6 +50,7 @@ import static net.kyori.adventure.text.Component.text; public class BotCommand extends Command { private static final Logger LOGGER = LogUtils.getLogger(); + public BotCommand() { super("bot"); this.setPermission("lophine.bot"); @@ -115,8 +116,8 @@ public class BotCommand extends Command { String fullName = BotUtil.getFullName(botName); if (this.canCreate(sender, fullName)) { BotCreateState.Builder builder = BotCreateState.builder(botName, Bukkit.getWorlds().getFirst().getSpawnLocation()) - .createReason(BotCreateEvent.CreateReason.COMMAND) - .creator(sender); + .createReason(BotCreateEvent.CreateReason.COMMAND) + .creator(sender); if (args.length >= 3) { builder.skinName(args[2]); @@ -154,7 +155,7 @@ public class BotCommand extends Command { String botName = args[1]; BotList botList = BotList.INSTANCE; ServerBot bot = botList.getBotByName(BotUtil.getFullName(botName)); - + if (bot == null) { sender.sendMessage(text("This fakeplayer is not in server", NamedTextColor.RED)); return true; @@ -223,7 +224,7 @@ public class BotCommand extends Command { private boolean handleList(CommandSender sender, String[] args) { BotList botList = BotList.INSTANCE; - + if (args.length < 2) { Map> botMap = new HashMap<>(); for (World world : Bukkit.getWorlds()) { @@ -265,7 +266,7 @@ public class BotCommand extends Command { sender.sendMessage(text("Bot action feature is disabled!", NamedTextColor.RED)); return true; } - + if (args.length < 3) { sender.sendMessage(text("Use /bot action to make fakeplayer do action", NamedTextColor.RED)); return true; @@ -336,7 +337,7 @@ public class BotCommand extends Command { for (int i = 0; i < bot.getBotActions().size(); i++) { ServerBotAction action = bot.getBotActions().get(i); BotActionStopEvent event = new BotActionStopEvent( - bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender + bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender ); event.callEvent(); if (!event.isCancelled()) { @@ -357,7 +358,7 @@ public class BotCommand extends Command { ServerBotAction action = bot.getBotActions().get(i); BotActionStopEvent event = new BotActionStopEvent( - bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender + bot.getBukkitEntity(), action.getName(), action.getUUID(), BotActionStopEvent.Reason.COMMAND, sender ); event.callEvent(); if (!event.isCancelled()) { @@ -375,7 +376,7 @@ public class BotCommand extends Command { sender.sendMessage(text("Bot config feature is disabled!", NamedTextColor.RED)); return true; } - + if (args.length < 3) { sender.sendMessage(text("Use /bot config to modify fakeplayer's config", NamedTextColor.RED)); return true; @@ -421,7 +422,7 @@ public class BotCommand extends Command { sender.sendMessage(text("Bot save/load feature is disabled!", NamedTextColor.RED)); return true; } - + if (args.length < 2) { sender.sendMessage(text("Use /bot save to save a fakeplayer", NamedTextColor.RED)); return true; @@ -446,7 +447,7 @@ public class BotCommand extends Command { sender.sendMessage(text("Bot save/load feature is disabled!", NamedTextColor.RED)); return true; } - + if (args.length < 2) { sender.sendMessage(text("Use /bot load to load a fakeplayer", NamedTextColor.RED)); return true; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCreateState.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCreateState.java index fcd620f..50bf3af 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCreateState.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotCreateState.java @@ -33,7 +33,8 @@ import org.leavesmc.leaves.plugin.MinecraftInternalPlugin; import java.util.Objects; import java.util.function.Consumer; -public record BotCreateState(String realName, String name, String skinName, String[] skin, Location location, BotCreateEvent.CreateReason createReason, CommandSender creator) { +public record BotCreateState(String realName, String name, String skinName, String[] skin, Location location, + BotCreateEvent.CreateReason createReason, CommandSender creator) { private static final MinecraftServer server = MinecraftServer.getServer(); @@ -117,25 +118,25 @@ public record BotCreateState(String realName, String name, String skinName, Stri public void spawnWithSkin(Consumer consumer) { Bukkit.getRegionScheduler().execute( - MinecraftInternalPlugin.INSTANCE, - location.getWorld(), - location.getBlockX() >> 4, - location.getBlockZ() >> 4, - () -> { - this.mojangAPISkin(); - Bukkit.getRegionScheduler().execute( - MinecraftInternalPlugin.INSTANCE, - location.getWorld(), - location.getBlockX() >> 4, - location.getBlockZ() >> 4, - () -> { - CraftBot bot = this.spawn(); - if (bot != null && consumer != null) { - consumer.accept(bot); - } - } - ); - } + MinecraftInternalPlugin.INSTANCE, + location.getWorld(), + location.getBlockX() >> 4, + location.getBlockZ() >> 4, + () -> { + this.mojangAPISkin(); + Bukkit.getRegionScheduler().execute( + MinecraftInternalPlugin.INSTANCE, + location.getWorld(), + location.getBlockX() >> 4, + location.getBlockZ() >> 4, + () -> { + CraftBot bot = this.spawn(); + if (bot != null && consumer != null) { + consumer.accept(bot); + } + } + ); + } ); } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotInventoryContainer.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotInventoryContainer.java index 86bb0d2..a31ab0f 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotInventoryContainer.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/BotInventoryContainer.java @@ -38,9 +38,9 @@ public class BotInventoryContainer extends Inventory { customData.putBoolean("Leaves.Gui.Placeholder", true); DataComponentPatch patch = DataComponentPatch.builder() - .set(DataComponents.CUSTOM_NAME, Component.empty()) - .set(DataComponents.CUSTOM_DATA, CustomData.of(customData)) - .build(); + .set(DataComponents.CUSTOM_NAME, Component.empty()) + .set(DataComponents.CUSTOM_DATA, CustomData.of(customData)) + .build(); button = new ItemStack(Items.STRUCTURE_VOID); button.applyComponents(patch); 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 bfd4143..cff8981 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 @@ -49,13 +49,7 @@ import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.event.bot.*; import org.slf4j.Logger; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; public class BotList { @@ -189,8 +183,8 @@ public class BotList { bot.renderData(); bot.initInventoryMenu(); botsNameByWorldUuid - .computeIfAbsent(bot.level().uuid.toString(), (k) -> new HashSet<>()) - .add(bot.getBukkitEntity().getRealName()); + .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; } @@ -253,11 +247,11 @@ public class BotList { level.removePlayerImmediately(bot, Entity.RemovalReason.UNLOADED_WITH_PLAYER); } else { io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( - level, chunkX, chunkZ, () -> { - level.removePlayerImmediately(bot, Entity.RemovalReason.UNLOADED_WITH_PLAYER); - }); + level, chunkX, chunkZ, () -> { + level.removePlayerImmediately(bot, Entity.RemovalReason.UNLOADED_WITH_PLAYER); + }); } - + this.bots.remove(bot); this.botsByName.remove(bot.getScoreboardName().toLowerCase(Locale.ROOT)); @@ -314,8 +308,8 @@ public class BotList { continue; } this.botsNameByWorldUuid - .computeIfAbsent(levelUuid.toString(), (k) -> new HashSet<>()) - .add(realName); + .computeIfAbsent(levelUuid.toString(), (k) -> new HashSet<>()) + .add(realName); } } @@ -335,11 +329,11 @@ public class BotList { String prevUuid = bot.level().uuid.toString(); String newUuid = level.uuid.toString(); this.botsNameByWorldUuid - .computeIfAbsent(newUuid, (k) -> new HashSet<>()) - .add(bot.getBukkitEntity().getRealName()); + .computeIfAbsent(newUuid, (k) -> new HashSet<>()) + .add(bot.getBukkitEntity().getRealName()); this.botsNameByWorldUuid - .computeIfAbsent(prevUuid, (k) -> new HashSet<>()) - .remove(bot.getBukkitEntity().getRealName()); + .computeIfAbsent(prevUuid, (k) -> new HashSet<>()) + .remove(bot.getBukkitEntity().getRealName()); } public void networkTick() { diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/MojangAPI.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/MojangAPI.java index 61c5b8d..7736772 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/MojangAPI.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/MojangAPI.java @@ -45,9 +45,9 @@ public class MojangAPI { public static String[] pullFromAPI(String name) { try { String uuid = JsonParser.parseReader(new InputStreamReader(URI.create("https://api.mojang.com/users/profiles/minecraft/" + name).toURL().openStream())) - .getAsJsonObject().get("id").getAsString(); + .getAsJsonObject().get("id").getAsString(); JsonObject property = JsonParser.parseReader(new InputStreamReader(URI.create("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false").toURL().openStream())) - .getAsJsonObject().get("properties").getAsJsonArray().get(0).getAsJsonObject(); + .getAsJsonObject().get("properties").getAsJsonArray().get(0).getAsJsonObject(); return new String[]{property.get("value").getAsString(), property.get("signature").getAsString()}; } catch (IOException | IllegalStateException | IllegalArgumentException e) { return null; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/ServerBot.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/ServerBot.java index 1850d28..6861d0e 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/ServerBot.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/ServerBot.java @@ -62,11 +62,7 @@ import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.portal.TeleportTransition; import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.level.storage.ValueOutput; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.EntityHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.*; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -83,13 +79,7 @@ import org.leavesmc.leaves.plugin.MinecraftInternalPlugin; import org.leavesmc.leaves.util.MathUtils; import org.slf4j.Logger; -import java.util.ArrayList; -import java.util.Collection; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import java.util.function.Predicate; public class ServerBot extends ServerPlayer { @@ -175,15 +165,15 @@ public class ServerBot extends ServerPlayer { Input input = this.getLastClientInput(); this.setLastClientInput( - new Input( - this.zza > 0, - this.zza < 0, - this.xxa > 0, - this.xxa < 0, - input.jump(), - input.shift(), - input.sprint() - ) + new Input( + this.zza > 0, + this.zza < 0, + this.xxa > 0, + this.xxa < 0, + input.jump(), + input.shift(), + input.sprint() + ) ); } @@ -226,11 +216,11 @@ public class ServerBot extends ServerPlayer { if (this.getConfigValue(Configs.TICK_TYPE) == TickType.NETWORK) { try { Bukkit.getRegionScheduler().execute( - MinecraftInternalPlugin.INSTANCE, - this.level().getWorld(), - this.getBlockX() >> 4, - this.getBlockZ() >> 4, - this::runAction + MinecraftInternalPlugin.INSTANCE, + this.level().getWorld(), + this.getBlockX() >> 4, + this.getBlockZ() >> 4, + this::runAction ); } catch (Exception e) { this.runAction(); @@ -495,7 +485,7 @@ public class ServerBot extends ServerPlayer { public void renderData() { this.getServer().getPlayerList().getPlayers().forEach( - player -> this.sendFakeDataIfNeed(player, false) + player -> this.sendFakeDataIfNeed(player, false) ); } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/Configs.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/Configs.java index e269c60..c67b6cc 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/Configs.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/Configs.java @@ -21,12 +21,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.leavesmc.leaves.bot.ServerBot; -import org.leavesmc.leaves.bot.agent.configs.AlwaysSendDataConfig; -import org.leavesmc.leaves.bot.agent.configs.LocatorBarConfig; -import org.leavesmc.leaves.bot.agent.configs.SimulationDistanceConfig; -import org.leavesmc.leaves.bot.agent.configs.SkipSleepConfig; -import org.leavesmc.leaves.bot.agent.configs.SpawnPhantomConfig; -import org.leavesmc.leaves.bot.agent.configs.TickTypeConfig; +import org.leavesmc.leaves.bot.agent.configs.*; import java.util.Collection; import java.util.HashMap; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerBreakBlockAction.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerBreakBlockAction.java index 1a5bb4c..a5c6f84 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerBreakBlockAction.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerBreakBlockAction.java @@ -60,8 +60,8 @@ public class ServerBreakBlockAction extends ServerTimerBotAction bot.onEquippedItemBroken(item, EquipmentSlot.MAINHAND) + bot.level(), bot.getMainHandItem(), bot, bot, EquipmentSlot.MAINHAND, Vec3.atCenterOf(pos), iblockdata, + item -> bot.onEquippedItemBroken(item, EquipmentSlot.MAINHAND) ); iblockdata.attack(bot.level(), pos, bot); float f = iblockdata.getDestroyProgress(bot, bot.level(), pos); diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java index a45f5e0..930896f 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerLookAction.java @@ -46,8 +46,8 @@ public class ServerLookAction extends ServerBotAction { public ServerLookAction() { super("look", CommandArgument.of(CommandArgumentType.STRING, CommandArgumentType.DOUBLE, CommandArgumentType.DOUBLE), ServerLookAction::new); this.setSuggestion(0, (sender, arg) -> sender instanceof Player player ? - Pair.of(Stream.concat(Arrays.stream(MinecraftServer.getServer().getPlayerNames()), Stream.of(DF.format(player.getX()))).toList(), "|") : - Pair.of(Stream.concat(Arrays.stream(MinecraftServer.getServer().getPlayerNames()), Stream.of("0")).toList(), "|") + Pair.of(Stream.concat(Arrays.stream(MinecraftServer.getServer().getPlayerNames()), Stream.of(DF.format(player.getX()))).toList(), "|") : + Pair.of(Stream.concat(Arrays.stream(MinecraftServer.getServer().getPlayerNames()), Stream.of("0")).toList(), "|") ); this.setSuggestion(1, (sender, arg) -> sender instanceof Player player ? Pair.of(List.of(DF.format(player.getY())), "") : Pair.of(List.of("0"), "")); this.setSuggestion(2, (sender, arg) -> sender instanceof Player player ? Pair.of(List.of(DF.format(player.getZ())), "") : Pair.of(List.of("0"), "")); @@ -72,9 +72,9 @@ public class ServerLookAction extends ServerBotAction { public void load(@NotNull CompoundTag nbt) { super.load(nbt); this.setPos(new Vector( - nbt.getDouble("x").orElse(0.0), - nbt.getDouble("y").orElse(0.0), - nbt.getDouble("z").orElse(0.0) + nbt.getDouble("x").orElse(0.0), + nbt.getDouble("y").orElse(0.0), + nbt.getDouble("z").orElse(0.0) )); } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMountAction.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMountAction.java index 4f766a0..6aeb0c7 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMountAction.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMountAction.java @@ -39,11 +39,11 @@ public class ServerMountAction extends ServerBotAction { public boolean doTick(@NotNull ServerBot bot) { Location center = bot.getBukkitEntity().getLocation(); List vehicles = center.getNearbyEntitiesByType( - Vehicle.class, - 3, - vehicle -> manhattanDistance(bot, ((CraftEntity) vehicle).getHandle()) <= 2 + Vehicle.class, + 3, + vehicle -> manhattanDistance(bot, ((CraftEntity) vehicle).getHandle()) <= 2 ).stream().sorted(Comparator.comparingDouble( - (vehicle) -> center.distanceSquared(vehicle.getLocation()) + (vehicle) -> center.distanceSquared(vehicle.getLocation()) )).toList(); for (Vehicle vehicle : vehicles) { @@ -62,7 +62,7 @@ public class ServerMountAction extends ServerBotAction { private double manhattanDistance(@NotNull Entity entity1, @NotNull Entity entity2) { return Math.abs(entity1.getX() - entity2.getX()) + - Math.abs(entity1.getY() - entity2.getY()) + - Math.abs(entity1.getZ() - entity2.getZ()); + Math.abs(entity1.getY() - entity2.getY()) + + Math.abs(entity1.getZ() - entity2.getZ()); } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java index aba2c0a..9abe654 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerMoveAction.java @@ -34,8 +34,8 @@ import java.util.List; public class ServerMoveAction extends ServerStateBotAction { private static final Pair, String> suggestions = Pair.of( - Arrays.stream(MoveDirection.values()).map((it) -> it.name).toList(), - "" + Arrays.stream(MoveDirection.values()).map((it) -> it.name).toList(), + "" ); private MoveDirection direction = MoveDirection.FORWARD; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseBotAction.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseBotAction.java index 481b6fd..815bc81 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseBotAction.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseBotAction.java @@ -124,7 +124,7 @@ public abstract class ServerUseBotAction> extend super.load(nbt); this.useTickTimeout = nbt.getInt("useTick").orElseThrow(); this.alreadyUsedTick = nbt.getInt("alreadyUsedTick").orElseGet( - () -> this.useTickTimeout - nbt.getInt("tickToRelease").orElseThrow() + () -> this.useTickTimeout - nbt.getInt("tickToRelease").orElseThrow() ); } 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 eb2efde..899cd54 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 @@ -17,10 +17,11 @@ package org.leavesmc.leaves.bot.agent.configs; +import fun.bm.lophine.config.modules.experiment.WaypointConfig; +import fun.bm.lophine.config.modules.function.FakeplayerConfig; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.waypoints.ServerWaypointManager; import org.jetbrains.annotations.NotNull; -import fun.bm.lophine.config.modules.function.FakeplayerConfig; import org.leavesmc.leaves.bot.agent.AbstractBotConfig; import org.leavesmc.leaves.command.CommandArgument; import org.leavesmc.leaves.command.CommandArgumentType; @@ -35,7 +36,7 @@ public class LocatorBarConfig extends AbstractBotConfig { public LocatorBarConfig() { super(NAME, CommandArgument.of(CommandArgumentType.BOOLEAN).setSuggestion(0, List.of("true", "false"))); - this.value = FakeplayerConfig.enableLocatorBar; + this.value = FakeplayerConfig.enableLocatorBar && WaypointConfig.forceEnableWaypointUnsafe; } @Override diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SpawnPhantomConfig.java b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SpawnPhantomConfig.java index bdd98a4..30c2f86 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SpawnPhantomConfig.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/bot/agent/configs/SpawnPhantomConfig.java @@ -50,8 +50,8 @@ public class SpawnPhantomConfig extends AbstractBotConfig { @Override public List getMessage() { return List.of( - bot.getScoreboardName() + "'s spawn_phantom: " + this.getValue(), - bot.getScoreboardName() + "'s not_sleeping_ticks: " + bot.notSleepTicks + bot.getScoreboardName() + "'s spawn_phantom: " + this.getValue(), + bot.getScoreboardName() + "'s not_sleeping_ticks: " + bot.notSleepTicks ); } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java b/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java index bffda4d..a5ca4a8 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBot.java @@ -59,7 +59,8 @@ public class CraftBot extends CraftPlayer implements Bot { public > void addAction(@NotNull T action) { switch (action) { case CraftBotAction act -> this.getHandle().addBotAction(act.getHandle(), null); - default -> throw new IllegalArgumentException("Action " + action.getClass().getName() + " is not a valid BotAction type!"); + default -> + throw new IllegalArgumentException("Action " + action.getClass().getName() + " is not a valid BotAction type!"); } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBotManager.java b/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBotManager.java index 4d1d99c..419a554 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBotManager.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/entity/bot/CraftBotManager.java @@ -1,7 +1,3 @@ -package org.leavesmc.leaves.entity.bot; - -import com.google.common.collect.Lists; -import net.minecraft.server.MinecraftServer; /* * This file is part of Leaves (https://github.com/LeavesMC/Leaves) * @@ -19,6 +15,10 @@ import net.minecraft.server.MinecraftServer; * along with Leaves. If not, see . */ +package org.leavesmc.leaves.entity.bot; + +import com.google.common.collect.Lists; +import net.minecraft.server.MinecraftServer; import org.bukkit.Location; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxEntityDataProtocol.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxEntityDataProtocol.java index 0b3ce6b..c9d9271 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxEntityDataProtocol.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxEntityDataProtocol.java @@ -29,6 +29,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.block.entity.BlockEntity; import org.leavesmc.leaves.protocol.core.LeavesCustomPayload; import org.leavesmc.leaves.protocol.core.LeavesProtocol; @@ -101,37 +102,27 @@ public class ServuxEntityDataProtocol implements LeavesProtocol { } public static void onBlockEntityRequest(ServerPlayer player, BlockPos pos) { - io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( - player.level(), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(player.position()), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(player.position()), - () -> { - BlockEntity be = player.level().getBlockEntity(pos); - CompoundTag nbt = be != null ? be.saveWithFullMetadata(player.registryAccess()) : new CompoundTag(); + player.getBukkitEntity().taskScheduler.schedule((LivingEntity nmsEntity) -> { + BlockEntity be = nmsEntity.level().getBlockEntity(pos); + CompoundTag nbt = be != null ? be.saveWithFullMetadata(nmsEntity.registryAccess()) : new CompoundTag(); - EntityDataPayload payload = new EntityDataPayload(EntityDataPayloadType.PACKET_S2C_BLOCK_NBT_RESPONSE_SIMPLE); - payload.pos = pos.immutable(); - payload.nbt.merge(nbt); - sendPacket(player, payload); - } - ); + EntityDataPayload payload = new EntityDataPayload(EntityDataPayloadType.PACKET_S2C_BLOCK_NBT_RESPONSE_SIMPLE); + payload.pos = pos.immutable(); + payload.nbt.merge(nbt); + sendPacket((ServerPlayer) nmsEntity, payload); + }, null, 1L); } public static void onEntityRequest(ServerPlayer player, int entityId) { - io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( - player.level(), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(player.position()), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(player.position()), - () -> { - Entity entity = player.level().getEntity(entityId); - CompoundTag nbt = TagUtil.saveEntityWithoutId(entity); + player.getBukkitEntity().taskScheduler.schedule((LivingEntity nmsEntity) -> { + Entity entity = nmsEntity.level().getEntity(entityId); + CompoundTag nbt = TagUtil.saveEntityWithoutId(entity); - EntityDataPayload payload = new EntityDataPayload(EntityDataPayloadType.PACKET_S2C_ENTITY_NBT_RESPONSE_SIMPLE); - payload.entityId = entityId; - payload.nbt.merge(nbt); - sendPacket(player, payload); - } - ); + EntityDataPayload payload = new EntityDataPayload(EntityDataPayloadType.PACKET_S2C_ENTITY_NBT_RESPONSE_SIMPLE); + payload.entityId = entityId; + payload.nbt.merge(nbt); + sendPacket((ServerPlayer) nmsEntity, payload); + }, null, 1L); } public static void sendPacket(ServerPlayer player, EntityDataPayload payload) { diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/logger/DataLogger.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/logger/DataLogger.java index e06f1b9..28f0761 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/logger/DataLogger.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/logger/DataLogger.java @@ -29,6 +29,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerTickRateManager; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.NaturalSpawner; import org.jetbrains.annotations.NotNull; @@ -114,28 +115,23 @@ public abstract class DataLogger { } private TickData build(MinecraftServer server, ServuxHudDataProtocol protocol, ServerPlayer player) { - io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( - player.level(), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(player.position()), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(player.position()), - () -> { - ServerTickRateManager tickManager = server.tickRateManager(); - boolean frozen = tickManager.isFrozen(); - boolean sprinting = tickManager.isSprinting(); - io.papermc.paper.threadedregions.TickData.TickReportData tickData = TickRegionScheduler.getCurrentRegion().getData().getRegionSchedulingHandle().getTickReport5s(System.nanoTime()); - final double tps = tickData.tpsData().segmentAll().average(); - final double mspt = tickData.timePerTickData().segmentAll().average() / 1.0E6; + player.getBukkitEntity().taskScheduler.schedule((LivingEntity nmsEntity) -> { + ServerTickRateManager tickManager = server.tickRateManager(); + boolean frozen = tickManager.isFrozen(); + boolean sprinting = tickManager.isSprinting(); + io.papermc.paper.threadedregions.TickData.TickReportData tickData = TickRegionScheduler.getCurrentRegion().getData().getRegionSchedulingHandle().getTickReport5s(System.nanoTime()); + final double tps = tickData.tpsData().segmentAll().average(); + final double mspt = tickData.timePerTickData().segmentAll().average() / 1.0E6; - TickData tk = new TickData( - mspt, tps, - tickManager.getRemainingSprintTicks(), - frozen, sprinting, - tickManager.isSteppingForward() - ); - Tag ret = TickData.CODEC.encodeStart(server.registryAccess().createSerializationContext(NbtOps.INSTANCE), tk).getOrThrow(); - protocol.applyData(Type.TPS, player, ret); - } - ); + TickData tk = new TickData( + mspt, tps, + tickManager.getRemainingSprintTicks(), + frozen, sprinting, + tickManager.isSteppingForward() + ); + Tag ret = TickData.CODEC.encodeStart(server.registryAccess().createSerializationContext(NbtOps.INSTANCE), tk).getOrThrow(); + protocol.applyData(Type.TPS, (ServerPlayer) nmsEntity, ret); + }, null, 1L); return null; } @@ -152,30 +148,26 @@ public abstract class DataLogger { @Override public CompoundTag getResult(MinecraftServer server, ServuxHudDataProtocol protocol, ServerPlayer player) { CompoundTag nbt = new CompoundTag(); - io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue( - player.level(), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(player.position()), - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(player.position()), - () -> { - final RegionizedWorldData data = player.level().getCurrentWorldData(); - if (data == null) return; + player.getBukkitEntity().taskScheduler.schedule((LivingEntity nmsEntity) -> { + final RegionizedWorldData data = nmsEntity.level().getCurrentWorldData(); + if (data == null) return; - final NaturalSpawner.SpawnState info = data.lastSpawnState; - if (info == null) return; + final NaturalSpawner.SpawnState info = data.lastSpawnState; + if (info == null) return; - int chunks = info.getSpawnableChunkCount(); - Object2IntMap counts = info.getMobCategoryCounts(); - MobCapData mobCapData = new MobCapData(new ArrayList<>(), player.level().getGameTime()); - for (MobCategory category : MobCategory.values()) { - mobCapData.data().add(new MobCapData.Cap(counts.getOrDefault(category, 0), NaturalSpawner.globalLimitForCategory(player.level(), category, chunks))); - } + int chunks = info.getSpawnableChunkCount(); + Object2IntMap counts = info.getMobCategoryCounts(); + MobCapData mobCapData = new MobCapData(new ArrayList<>(), nmsEntity.level().getGameTime()); + for (MobCategory category : MobCategory.values()) { + mobCapData.data().add(new MobCapData.Cap(counts.getOrDefault(category, 0), NaturalSpawner.globalLimitForCategory(player.level(), category, chunks))); + } - try { - nbt.put(player.level().dimension().location().toString(), MobCapData.CODEC.encodeStart(player.level().registryAccess().createSerializationContext(NbtOps.INSTANCE), mobCapData).getPartialOrThrow()); - protocol.applyData(Type.MOB_CAPS, player, nbt); - } catch (Exception ignored) { - } - }); + try { + nbt.put(nmsEntity.level().dimension().location().toString(), MobCapData.CODEC.encodeStart(player.level().registryAccess().createSerializationContext(NbtOps.INSTANCE), mobCapData).getPartialOrThrow()); + protocol.applyData(Type.MOB_CAPS, (ServerPlayer) nmsEntity, nbt); + } catch (Exception ignored) { + } + }, null, 1L); return null; } }