Geyser icon indicating copy to clipboard operation
Geyser copied to clipboard

Reload breaks Geyser-Spigot

Open Camotoy opened this issue 3 years ago • 7 comments

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.

Camotoy avatar Dec 02 '21 19:12 Camotoy

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)

TacoCake avatar Dec 21 '21 01:12 TacoCake

That isn't the issue - it has to do with how we bypass needing a TCP connection to the Java server.

Camotoy avatar Dec 21 '21 01:12 Camotoy

Ahh, I see, any hopes of seeing this fixed regardless?

If you could give me pointers, perhaps I could try to fix it.

TacoCake avatar Dec 21 '21 01:12 TacoCake

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.

Camotoy avatar Dec 21 '21 01:12 Camotoy

Alright, thanks, I'll see what I can do.

TacoCake avatar Dec 21 '21 01:12 TacoCake

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) ~[?:?]

MxD-Sans avatar Jun 08 '22 20:06 MxD-Sans

PlugMan is definitively not supported and we don't plan on it. /reload will probably be fixed eventually though.

Konicai avatar Jun 08 '22 20:06 Konicai

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?

onebeastchris avatar Oct 08 '23 18:10 onebeastchris

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

onebeastchris avatar Nov 09 '23 15:11 onebeastchris