GeyserMC / Geyser

A bridge/proxy allowing you to connect to Minecraft: Java Edition servers with Minecraft: Bedrock Edition.
https://geysermc.org
MIT License
4.73k stars 680 forks source link

Geyser-Velocity fails to register commands when players join immediately #5005

Closed DarkChromaMC closed 2 months ago

DarkChromaMC commented 2 months ago

Describe the bug

Experiencing an issue where running the MCXBoxBroadcast extension on the production proxy causes the GeyserMC plugin to malfunction, preventing players from connecting. This problem does not occur on a test proxy under identical conditions on the same machine.

To Reproduce

  1. Add the MCXBoxBroadcast extension on the production proxy.
  2. Observe that players are unable to connect to the server, and an error is generated.

Expected behaviour

The MCXBoxBroadcast extension should not interfere with the functionality of the GeyserMC plugin, allowing players to connect without issues.

Screenshots / Videos

No response

Server Version and Plugins

Geyser Dump

https://dump.geysermc.org/F1pO1epHwYtOsHFDBL67H3EyBvIqS3sV

Geyser Version

Geyser Version: 2.4.2-b658 (git-master-8356b63) (Java: 1.21, Bedrock: 1.20.80/1.20.81 - 1.21.20/1.21.21)

Minecraft: Bedrock Edition Device/Version

No response

Additional Context

Logs: 2024-08-28-7.log https://mclo.gs/seaeusw

onebeastchris commented 2 months ago

Please report this issue to MCXboxBroadcast - if it's causing connections to fail, it would need to address it. Thanks!

DarkChromaMC commented 2 months ago

I have already reported it but its related to how GeyserMC software is coded:

"I believe this is due to players immediately connecting once Velocity binds, and the way Geyser is currently setup leads to its command registration being somewhat "interrupted""

onebeastchris commented 2 months ago

Just re-checked the log; i see it now - that has nothing to do with mcxboxbroadcast.

Stacktrace:

[15:23:53] [Velocity Async Event Executor - #2/ERROR] [org.geysermc.geyser.event.GeyserEventBus]: An exception occurred while executing event  for subscriber org.geysermc.geyser.event.GeyserEventSubscriber
java.lang.IllegalStateException: Unable to register commands because the manager is no longer in a registration state. Your platform may allow unsafe registrations by enabling the appropriate manager setting.
    at org.geysermc.geyser.platform.velocity.shaded.org.incendo.cloud.CommandManager.command(CommandManager.java:241) ~[?:?]
    at org.geysermc.geyser.platform.velocity.shaded.org.incendo.cloud.CommandManager.command(CommandManager.java:276) ~[?:?]
    at org.geysermc.geyser.extension.command.GeyserExtensionCommand$Builder$1.register(GeyserExtensionCommand.java:191) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.register(CommandRegistry.java:215) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.registerExtensionCommand(CommandRegistry.java:205) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry$1.register(CommandRegistry.java:160) ~[?:?]
    at com.rtm516.mcxboxbroadcast.bootstrap.geyser.MCXboxBroadcastExtension.onCommandDefine(MCXboxBroadcastExtension.java:38) ~[?:?]
    at org.lanternpowered.lmbda.Lmbda$55.accept(Unknown Source) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at org.geysermc.event.subscribe.impl.SubscriberImpl.lambda$new$0(SubscriberImpl.java:55) ~[?:?]
    at org.geysermc.event.subscribe.impl.SubscriberImpl.invoke(SubscriberImpl.java:75) ~[?:?]
    at org.geysermc.event.bus.impl.BaseBusImpl.fireSilently(BaseBusImpl.java:201) ~[?:?]
    at org.geysermc.event.bus.impl.OwnedEventBusImpl.fireSilently(OwnedEventBusImpl.java:41) ~[?:?]
    at org.geysermc.event.bus.impl.BaseBusImpl.fire(BaseBusImpl.java:180) ~[?:?]
    at org.geysermc.event.bus.impl.OwnedEventBusImpl.fire(OwnedEventBusImpl.java:41) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.<init>(CommandRegistry.java:163) ~[?:?]
    at org.geysermc.geyser.platform.velocity.GeyserVelocityPlugin.onGeyserEnable(GeyserVelocityPlugin.java:139) ~[?:?]
    at org.geysermc.geyser.platform.velocity.GeyserVelocityPlugin.onProxyBound(GeyserVelocityPlugin.java:207) ~[?:?]
    at org.geysermc.geyser.platform.velocity.Lmbda$13.execute(Unknown Source) ~[?:?]
    at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:598) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:479) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
    at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
[15:23:53] [Velocity Async Event Executor - #2/ERROR] [com.velocitypowered.proxy.event.VelocityEventManager]: Couldn't pass ListenerBoundEvent to geyser 2.4.2-b658 (git-master-8356b63)
java.lang.IllegalStateException: Unable to register commands because the manager is no longer in a registration state. Your platform may allow unsafe registrations by enabling the appropriate manager setting.
    at org.geysermc.geyser.platform.velocity.shaded.org.incendo.cloud.CommandManager.command(CommandManager.java:241) ~[?:?]
    at org.geysermc.geyser.platform.velocity.shaded.org.incendo.cloud.CommandManager.command(CommandManager.java:276) ~[?:?]
    at org.geysermc.geyser.command.GeyserCommand.register(GeyserCommand.java:203) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.register(CommandRegistry.java:215) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.registerExtensionCommand(CommandRegistry.java:205) ~[?:?]
    at org.geysermc.geyser.command.CommandRegistry.<init>(CommandRegistry.java:181) ~[?:?]
    at org.geysermc.geyser.platform.velocity.GeyserVelocityPlugin.onGeyserEnable(GeyserVelocityPlugin.java:139) ~[?:?]
    at org.geysermc.geyser.platform.velocity.GeyserVelocityPlugin.onProxyBound(GeyserVelocityPlugin.java:207) ~[?:?]
    at org.geysermc.geyser.platform.velocity.Lmbda$13.execute(Unknown Source) ~[?:?]
    at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:598) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:479) ~[velocity.jar:3.3.0-SNAPSHOT (git-09f687e5-b413)]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
    at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
onebeastchris commented 2 months ago

IIRC this would happen if players connect to the proxy while Geyser hasn't fully started yet - that should be resolvable on Geyser's side by registering commands at an earlier stage.

Konicai commented 2 months ago

Yes, that quote was of me

JerichoTorrent commented 2 months ago

Any update on this?

Konicai commented 2 months ago

Its on the list - this issue will be closed when it has been fixed

JerichoTorrent commented 2 months ago

Is there a build I can revert to that allows players to late on the latest bedrock protocol but doesn't break due to the registering of commands?

Konicai commented 2 months ago

@JerichoTorrent Please try the build archived under the Checks tab of #5013