Geyser
Geyser copied to clipboard
Reload breaks Geyser-Spigot
Describe the bug
If you do /reload on Spigot it breaks
To Reproduce
/reload
Expected behaviour
no break
Screenshots / Videos
No response
Server Version and Plugins
No response
Geyser Dump
No response
Geyser Version
As of at least commit c3f146370e32c1338b54d9873378cbdcaad8390c
Minecraft: Bedrock Edition Version
No response
Additional Context
Yes this isn't filled in but it's better to have the issue documented.
On reload Geyser seems to be failing to rebind to the port
[19:57:47] [Server thread/WARN]: java.lang.RuntimeException: Unable to find listening channel! [19:57:47] [Server thread/WARN]: at org.geysermc.geyser.platform.spigot.GeyserSpigotInjector.initializeLocalChannel0(GeyserSpigotInjector.java:104) [19:57:47] [Server thread/WARN]: at org.geysermc.geyser.network.netty.GeyserInjector.initializeLocalChannel(GeyserInjector.java:64) [19:57:47] [Server thread/WARN]: at org.geysermc.geyser.platform.spigot.GeyserSpigotPlugin.onEnable(GeyserSpigotPlugin.java:191) [19:57:47] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) [19:57:47] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) [19:57:47] [Server thread/WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) [19:57:47] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugin(CraftServer.java:525) [19:57:47] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugins(CraftServer.java:439) [19:57:47] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.CraftServer.reload(CraftServer.java:920) [19:57:47] [Server thread/WARN]: at org.bukkit.Bukkit.reload(Bukkit.java:706) [19:57:47] [Server thread/WARN]: at me.yafh.reloadnotifier.Main.update(Main.java:217) [19:57:47] [Server thread/WARN]: at me.yafh.reloadnotifier.Main$1.run(Main.java:68) [19:57:47] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.scheduler.CraftTask.run(CraftTask.java:82) [19:57:47] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:415) [19:57:47] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1255) [19:57:47] [Server thread/WARN]: at net.minecraft.server.dedicated.DedicatedServer.b(DedicatedServer.java:428) [19:57:47] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:1206) [19:57:47] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1034) [19:57:47] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304) [19:57:47] [Server thread/WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
That isn't the issue - it has to do with how we bypass needing a TCP connection to the Java server.
Ahh, I see, any hopes of seeing this fixed regardless?
If you could give me pointers, perhaps I could try to fix it.
It's a low priority on the core development team's end since Bukkit reloading isn't ideal, but alas people still use it and it would be better to fix it or otherwise address it so they aren't struck by a mysterious issue.
You'd have to fix something here: https://github.com/GeyserMC/Geyser/blob/master/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java and all I can say is ViaVersion has worked around whatever is going on. I don't actually know what's going on further than that.
Alright, thanks, I'll see what I can do.
The issue is not limited to Spigot's /reload. It also happens when a plugin manager (say, PlugMan) restarts the plugin without rebooting the whole server. Same goes for disabling & unloading, then reloading the plugin through said plugin manager.
[23:29:39 INFO]: [Geyser-Spigot] Started Geyser on 0.0.0.0:19132 [23:29:39 INFO]: [Geyser-Spigot] Done (3.039s)! Run /geyser help for help!
[23:29:39 WARN]: java.lang.RuntimeException: Unable to find listening channel! [23:29:39 WARN]: at Geyser-Spigot.jar//org.geysermc.geyser.platform.spigot.GeyserSpigotInjector.initializeLocalChannel0(GeyserSpigotInjector.java:107) [23:29:39 WARN]: at Geyser-Spigot.jar//org.geysermc.geyser.network.netty.GeyserInjector.initializeLocalChannel(GeyserInjector.java:64) [23:29:39 WARN]: at Geyser-Spigot.jar//org.geysermc.geyser.platform.spigot.GeyserSpigotPlugin.onEnable(GeyserSpigotPlugin.java:201) [23:29:39 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) [23:29:39 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) [23:29:39 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:541) [23:29:39 WARN]: at PlugMan.jar//com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:366) [23:29:39 WARN]: at PlugMan.jar//com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:114) [23:29:39 WARN]: at PlugMan.jar//com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) [23:29:39 WARN]: at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) [23:29:39 WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) [23:29:39 WARN]: at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:906) [23:29:39 WARN]: at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2307) [23:29:39 WARN]: at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2118) [23:29:39 WARN]: at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2099) [23:29:39 WARN]: at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:46) [23:29:39 WARN]: at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:6) [23:29:39 WARN]: at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$1(PlayerConnectionUtils.java:51) [23:29:39 WARN]: at net.minecraft.server.TickTask.run(TickTask.java:18) [23:29:39 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153) [23:29:39 WARN]: at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1400) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188) [23:29:39 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.y(IAsyncTaskHandler.java:126) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.be(MinecraftServer.java:1377) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1370) [23:29:39 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1348) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1230) [23:29:39 WARN]: at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316) [23:29:39 WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
[23:29:39 ERROR]: Error occurred while enabling Geyser-Spigot v2.0.3-SNAPSHOT (Is it up to date?)
java.lang.IllegalArgumentException: The permission geyser.command.help is already defined! at org.bukkit.plugin.SimplePluginManager.addPermission(SimplePluginManager.java:786) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.plugin.SimplePluginManager.addPermission(SimplePluginManager.java:778) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.geysermc.geyser.platform.spigot.GeyserSpigotPlugin.onEnable(GeyserSpigotPlugin.java:258) ~[Geyser-Spigot.jar:?] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:541) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:366) ~[PlugMan.jar:?] at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:114) ~[PlugMan.jar:?] at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[PlugMan.jar:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:906) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2307) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2118) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2099) ~[?:?] at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[?:?] at net.minecraft.network.protocol.game.ServerboundChatPacket.a(ServerboundChatPacket.java:6) ~[?:?] at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1400) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1377) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1370) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?] at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1348) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1230) ~[paper-1.18.2.jar:git-Paper-378] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316) ~[paper-1.18.2.jar:git-Paper-378] at java.lang.Thread.run(Thread.java:833) ~[?:?]
PlugMan is definitively not supported and we don't plan on it. /reload
will probably be fixed eventually though.
Tested /reload
on both Spigot and Paper 1.20.2, Geyser seems to work just fine now even after a reload :)
Out of curiosity, does plugman still crash it?
Closing, as Geyser appears to work fine even when reloading (tested on paper 1.20.2, latest version).
As a better alternative to reloading the whole server would be using /geyser reload
- that way, only Bedrock players would be affected.
Ideally, you'd still restart the server, but reloading can be handy to e.g. change config values