PaperMC / Paper

The most widely used, high performance Minecraft server that aims to fix gameplay and mechanics inconsistencies
https://papermc.io/
Other
9.88k stars 2.29k forks source link

[Chat2qq]Could not pass event MiraiGroupMessageEvent to Chat2QQ v1.5 #7511

Closed JiangQiYan713 closed 2 years ago

JiangQiYan713 commented 2 years ago

Expected behavior

When users send messages in the group, the server can receive feedback output(GroupMessage)

Observed/Actual behavior

When sending messages in the server, the QQ group can normally receive feedback messages, but the messages sent in the group cannot be reflected in the server.(Could not pass event MiraiGroupMessageEvent to Chat2QQ v1.5) The server may have modified the broadcast method of bukkit, the plug-in cannot broadcast group chat messages normally I hope to modify the working mode of broadcast to fix this error

Steps/models to reproduce

Main error reporting

26.02 20:22:43 [服务器] FATAL Thread DefaultDispatcher-worker-2 failed main thread check: ChunkHolder update
26.02 20:22:43 [服务器] 信息 java.lang.Throwable: null
26.02 20:22:43 [服务器] 信息 at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ChunkHolder.addToBroadcastMap(ChunkHolder.java:314) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ChunkHolder.blockChanged(ChunkHolder.java:278) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ServerChunkCache.blockChanged(ServerChunkCache.java:1130) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ServerLevel.sendBlockUpdated(ServerLevel.java:1547) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.world.level.block.entity.CommandBlockEntity$1.onUpdated(CommandBlockEntity.java:45) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.world.level.BaseCommandBlock.sendMessage(BaseCommandBlock.java:180) ~[?:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.命令.CraftBlockCommandSender.sendMessage(CraftBlockCommandSender.java:33) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.命令.CommandSender.sendMessage(CommandSender.java:128) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at net.kyori.adventure.audience.Audience.sendMessage(Audience.java:253) ~[adventure-api-4.9.3.jar:?]
26.02 20:22:43 [服务器] 信息 at net.kyori.adventure.audience.Audience.sendMessage(Audience.java:227) ~[adventure-api-4.9.3.jar:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcast(CraftServer.java:1767) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcast(CraftServer.java:1739) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcastMessage(CraftServer.java:644) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.Bukkit.broadcastMessage(Bukkit.java:420) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at me.dreamvoid.chat2qq.bukkit.listener.onGroupMessage.onGroupMessageReceive(onGroupMessage.java:58) ~[Chat2QQ-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor27.execute(Unknown Source) ~[?:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:75) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:629) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at me.dreamvoid.miraimc.bukkit.MiraiEvent.lambda$startListenEvent$8(MiraiEvent.java:97) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:574) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:574) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt.runInterruptibleInExpectedContext(Interruptible.kt:46) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt.access$runInterruptibleInExpectedContext(Interruptible.kt:1) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt$runInterruptible$2.invokeSuspend(Interruptible.kt:38) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] ERROR Could not pass event MiraiGroupMessageEvent to Chat2QQ v1.5
26.02 20:22:43 [服务器] 信息 java.lang.IllegalStateException: Asynchronous ChunkHolder update!
26.02 20:22:43 [服务器] 信息 at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:16) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ChunkHolder.addToBroadcastMap(ChunkHolder.java:314) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ChunkHolder.blockChanged(ChunkHolder.java:278) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ServerChunkCache.blockChanged(ServerChunkCache.java:1130) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.server.level.ServerLevel.sendBlockUpdated(ServerLevel.java:1547) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.world.level.block.entity.CommandBlockEntity$1.onUpdated(CommandBlockEntity.java:45) ~[?:?]
26.02 20:22:43 [服务器] 信息 at net.minecraft.world.level.BaseCommandBlock.sendMessage(BaseCommandBlock.java:180) ~[?:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.命令.CraftBlockCommandSender.sendMessage(CraftBlockCommandSender.java:33) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.命令.CommandSender.sendMessage(CommandSender.java:128) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at net.kyori.adventure.audience.Audience.sendMessage(Audience.java:253) ~[adventure-api-4.9.3.jar:?]
26.02 20:22:43 [服务器] 信息 at net.kyori.adventure.audience.Audience.sendMessage(Audience.java:227) ~[adventure-api-4.9.3.jar:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcast(CraftServer.java:1767) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcast(CraftServer.java:1739) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.craftbukkit.v1_18_R1.CraftServer.broadcastMessage(CraftServer.java:644) ~[paper-1.18.1.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.Bukkit.broadcastMessage(Bukkit.java:420) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at me.dreamvoid.chat2qq.bukkit.listener.onGroupMessage.onGroupMessageReceive(onGroupMessage.java:58) ~[Chat2QQ-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor27.execute(Unknown Source) ~[?:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:75) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:git-Paper-214]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:629) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
26.02 20:22:43 [服务器] 信息 at me.dreamvoid.miraimc.bukkit.MiraiEvent.lambda$startListenEvent$8(MiraiEvent.java:97) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:574) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:574) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt.runInterruptibleInExpectedContext(Interruptible.kt:46) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt.access$runInterruptibleInExpectedContext(Interruptible.kt:1) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.InterruptibleKt$runInterruptible$2.invokeSuspend(Interruptible.kt:38) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) ~[MiraiMC-Bukkit.jar:?]
26.02 20:22:43 [服务器] 信息 at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) ~[MiraiMC-Bukkit.jar:?]

More... latest.log

Plugin and Datapack List

Plugins (44): AdvancedColorAPI, AuthMe, BetterNav, Chat2QQ, ChestCommands, Citizens, CMILib, CoreProtect, CtOnlineReward, DamageIndicator, DyedBackpacks, ExoticGarden, ExtraTools, FluffyMachines, FoxyMachines, Geyser-Spigot, GroupManager, GSit, HolographicDisplays, HuskHomes, InfinityExpansion, MiraiMC, Multiverse-Core, Multiverse-Inventories, MyCommand, Networks, PlaceholderAPI, PlayerParticles, ProtocolLib, QuickShop, Residence, SkinsRestorer, Slimefun, SlimeTinker, TAB, TabCompleteFilter, TranscEndence, Vault, ViaBackwards, ViaVersion, Whitelist4QQ, WorldEdit, WorldEditSUI, XConomy

Paper version

> version
[23:10:14 INFO]: This server is running Paper version git-Paper-215 (MC: 1.18.1) (Implementing API version 1.18.1-R0.1-SNAPSHOT)
[23:10:14 INFO]: Checking version, please wait...
[23:10:14 INFO]: Previous version: git-Paper-214 (MC: 1.18.1)
[23:10:14 INFO]: You are running the latest version

Other

Discussion with Chat2QQ author Dreamvoid https://github.com/DreamVoid/Chat2QQ/issues/29

electronicboy commented 2 years ago

sending a message to a command block off the main thread is unsupported as it needs to update the block state which isn't safe to do off main

kennytv commented 2 years ago

Spigot broadcasts messages to anything with the bukkit.broadcast.user permission, which I admit is very odd, but the easy solution is to not have command blocks with that permission (as it is normally the case).

wlritchi commented 2 years ago

@kennytv I have a similar plugin that's failing to use Bukkit.broadcastMessage() with the same exception as OP, and I haven't changed anything about command block permissions. From my perspective, Bukkit.broadcastMessage() is a very simple interface with no obvious (to plugin authors) side effects, and it's at the very least surprising (if not an outright footgun) for it to only be usable from the main thread (especially since it sounds like it works fine async if there are no command blocks, which probably applies to plugin authors' testing worlds). Is there any appetite for Paper to change or remove the method's interaction with command blocks, perhaps by updating default permissions if that's the issue?