tanyaofei / minecraft-fakeplayer

A plugin for minecraft server to spawn fake players, inspired by Carpet Mod
Apache License 2.0
96 stars 12 forks source link

召喚後馬上就退出 #67

Closed kirito-0 closed 1 month ago

kirito-0 commented 2 months ago

召喚假人後,假人馬上就退出伺服器。

To Reproduce / 如何触发 Steps to reproduce the behavior: / 触发的步骤

  1. 召喚假人 /fp spawn abc
  2. 沒進行任何下一步就離開了伺服器

Server information / 服务器信息

Additional context / 更多信息 Add any other context about the problem here. Such as log and plugin list / 添加更多有帮助的信息,如插件列表、日志

[18:32:45] [Server thread/INFO]: issued server command: /fp spawn abc [18:32:46] [Server thread/INFO]: [fakeplayer] Fake player 'abc' will use '5dd889c2-54cc-40e9-a83b-04bb62606c82' as his UUID [18:32:46] [Server thread/WARN]: [ViaVersion] Could not find UserConnection for logging-in player 5dd889c2-54cc-40e9-a83b-04bb62606c82 [18:32:46] [Server thread/INFO]: abc 加入伺服器 [18:32:46] [Server thread/INFO]: abc[/127.0.0.5:25565] logged in with entity id 6029 at ([world]4943.5, 136.0, -494.5) [18:32:46] [Server thread/INFO]: abc lost connection: PacketEvents 2.0 failed to inject [18:32:46] [Server thread/INFO]: abc 離開了伺服器

tanyaofei commented 1 month ago

参考首页readme(英文版)里面有一项配置,可以让假人防踢

kirito-0 commented 1 month ago

當假人死後,就無法再次召喚,會出現這樣的訊息。

[12:02:51 INFO]: ABC_0 issued server command: /fp spawn ABC [12:02:51 ERROR]: [CommandAPI] Unhandled exception executing '/fp spawn ABC' io.github.hello09x.devtools.core.message.RuntimeMessageException: fakeplayer.spawn.error.name.existed at io.github.hello09x.fakeplayer.core.manager.FakeplayerManager.spawnAsync(FakeplayerManager.java:102) ~[fakeplayer-0.3.7.jar:?] at io.github.hello09x.fakeplayer.core.command.impl.SpawnCommand.spawn(SpawnCommand.java:69) ~[fakeplayer-0.3.7.jar:?] at dev.jorel.commandapi.executors.CommandExecutor.run(CommandExecutor.java:49) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.executors.NormalExecutor.executeWith(NormalExecutor.java:44) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:137) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:124) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:91) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIHandler.lambda$generateCommand$0(CommandAPIHandler.java:261) ~[CommandAPI-9.5.1.jar:?] at com.mojang.brigadier.context.ContextChain.runExecutable(ContextChain.java:73) ~[brigadier-1.2.9.jar:?] at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:31) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:19) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.UnboundEntryAction.lambda$bind$0(UnboundEntryAction.java:8) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.CommandQueueEntry.a(CommandQueueEntry.java:5) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.ExecutionContext.runCommandQueue(ExecutionContext.java:103) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.Commands.executeCommandInContext(Commands.java:434) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:336) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:323) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2230) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$14(ServerGamePacketListenerImpl.java:2190) ~[?:?] at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1465) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:194) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:123) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1442) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1365) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:133) ~[?:?] at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1516) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1226) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[paper-1.20.4.jar:git-Paper-497] at java.lang.Thread.run(Thread.java:1570) ~[?:?]

config.yml.txt

tanyaofei commented 1 month ago

这个是报错消息没有正常返回,因为你设置了假人死了不踢 kick-on-dead,所以假人还在,不能召唤相同名称的假人

kirito-0 commented 1 month ago

把kick-on-dead改成 false也是一樣。

[13:57:55 INFO]: ABC issued server command: /fp spawn ABC0 [13:57:55 ERROR]: [CommandAPI] Unhandled exception executing '/fp spawn ABC0' io.github.hello09x.devtools.core.message.RuntimeMessageException: fakeplayer.spawn.error.name.existed at io.github.hello09x.fakeplayer.core.manager.FakeplayerManager.spawnAsync(FakeplayerManager.java:102) ~[fakeplayer-0.3.7.jar:?] at io.github.hello09x.fakeplayer.core.command.impl.SpawnCommand.spawn(SpawnCommand.java:69) ~[fakeplayer-0.3.7.jar:?] at dev.jorel.commandapi.executors.CommandExecutor.run(CommandExecutor.java:49) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.executors.NormalExecutor.executeWith(NormalExecutor.java:44) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:137) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:124) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIExecutor.execute(CommandAPIExecutor.java:91) ~[CommandAPI-9.5.1.jar:?] at dev.jorel.commandapi.CommandAPIHandler.lambda$generateCommand$0(CommandAPIHandler.java:261) ~[CommandAPI-9.5.1.jar:?] at com.mojang.brigadier.context.ContextChain.runExecutable(ContextChain.java:73) ~[brigadier-1.2.9.jar:?] at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:31) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:19) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.UnboundEntryAction.lambda$bind$0(UnboundEntryAction.java:8) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.CommandQueueEntry.a(CommandQueueEntry.java:5) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.execution.ExecutionContext.runCommandQueue(ExecutionContext.java:103) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.commands.Commands.executeCommandInContext(Commands.java:434) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:336) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:323) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2230) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$14(ServerGamePacketListenerImpl.java:2190) ~[?:?] at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1465) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:194) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:123) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1442) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1365) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:133) ~[?:?] at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1343) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1232) ~[paper-1.20.4.jar:git-Paper-497] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[paper-1.20.4.jar:git-Paper-497] at java.lang.Thread.run(Thread.java:1570) ~[?:?]

tanyaofei commented 1 month ago

你应该改成 true

tanyaofei commented 1 month ago

你应该改成 true

如果你希望假人死了就退,就改成 true,如果是 false 应该是使用 /fp respawn 去复活他

kirito-0 commented 1 month ago

抱歉,上面說錯了,kick-on-dead改成ture也是報錯。 伺服器重啟後,就無法再用相同名字召喚,使用/fp respawn也是不行。

tanyaofei commented 1 month ago

抱歉,上面說錯了,kick-on-dead改成ture也是報錯。

那试一下看看 TAB 和 list 命令看看这个名称的假人是否还在

kirito-0 commented 1 month ago

TAB 和 list 命令 查看那假人不在,如果是kick-on-dead改成false後,使用/fp respawn 會出現還沒召喚假人。

tanyaofei commented 1 month ago

TAB 和 list 命令 查看那假人不在,如果是kick-on-dead改成false後,使用/fp respawn 會出現還沒召喚假人。

你可以将插件目录和核心压缩成压缩包然后发送到 tan.yaofei@outlook.com 邮箱去吗

kirito-0 commented 1 month ago

請問,是整個plugins資料夾,包含plugins內所有的插件嗎?

tanyaofei commented 1 month ago

請問,是整個plugins資料夾,包含plugins內所有的插件嗎?

是的,因为我在只有 fakeplayer 的插件时是不会有这种问题的,可以不包括数据,但需要包括配置,比如你可以删掉 co i 的数据文件后再发送给我

kirito-0 commented 1 month ago

我在剛剛有發信件給您了,謝謝。

tanyaofei commented 1 month ago

fakeplayer-0.3.8-rc.2.jar.zip

你试试这个还是否有问题

kirito-0 commented 1 month ago

重新召喚假人不會再報錯了,只是重啟伺服器後,需要再重新召喚假人,也要再重新設定同個(相同ID)假人的skin,同個假人背包內的物品是有被保留的。

tanyaofei commented 1 month ago

重新召喚假人不會再報錯了,只是重啟伺服器後,需要再重新召喚假人,也要再重新設定同個(相同ID)假人的skin,同個假人背包內的物品是有被保留的。

这个是正常的,因为目前没有做持久化

kirito-0 commented 1 month ago

原先是什麼導致報錯?

瞭解,謝謝tanyaofei,期待未來的更新。

tanyaofei commented 1 month ago

好的哦,感谢反馈

tanyaofei commented 1 month ago

原先是什麼導致報錯?

瞭解,謝謝tanyaofei,期待未來的更新。

假人自定义名称的时候会判断该名称是否在服务器里游玩过,如果玩过,那么他的存档会在服务器缓存里,插件就会拿到 UUID 判断这个 UUID 是否是假人使用过的,如果不是,则表示这可能是一个真实的玩家,是不被允许使用这个名称的。这一份记录着使用过的 UUID 之前是在 used-uuids.txt 里,后面改造成放在数据库里了,但是指定名称的这一个逻辑少判断了数据库那份,非指定名称的是正常的

tanyaofei commented 1 month ago

诶,我想问问你是通过什么途径找到这个插件的,是 spigotmc 吗,因为我发现最近好多使用繁体字的朋友们来反馈问题

tanyaofei commented 1 month ago

@kirito-0 哥们回一下我呀

kirito-0 commented 1 month ago

@tanyaofei 寄信件回您了。