cc-tweaked / CC-Tweaked

Just another ComputerCraft fork
https://tweaked.cc
882 stars 206 forks source link

Right-clicking turtle (probably computers in general) while in spectator mode soft crashes the game #1844

Closed Zirunis closed 1 month ago

Zirunis commented 1 month ago

Minecraft Version

1.20.x

Version

1.110.3

Details

The title says it all. Let me clarify what I mean by "soft crash": The world seems to shutdown graciously (without corrupting the world save) and I land back in the minecraft main menu. Interestingly I land there in the server section with a "Connection Lost: Network Protocol Error" even though it's a normal single player world. I attached a screenshot and below are the logs. spectate_bug

Logs ```log [28May2024 01:59:53.964] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Zirunis joined the game [28May2024 01:59:54.070] [Render thread/INFO] [net.minecraft.advancements.AdvancementTree/]: Loaded 172 advancements [28May2024 01:59:55.138] [Render thread/ERROR] [net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl/]: Failed to handle packet net.minecraft.network.protocol.game.ClientboundOpenScreenPacket@44143892 java.lang.NullPointerException: Cannot invoke "net.minecraft.network.FriendlyByteBuf.readEnum(java.lang.Class)" because "buffer" is null at TRANSFORMER/computercraft@1.110.3/dan200.computercraft.shared.network.codec.MoreStreamCodecs$1.decode(MoreStreamCodecs.java:29) ~[cc-tweaked-1.20.5-forge-1.110.3.jar%23186!/:1.110.3] at TRANSFORMER/computercraft@1.110.3/dan200.computercraft.shared.network.codec.MoreStreamCodecs$1.decode(MoreStreamCodecs.java:26) ~[cc-tweaked-1.20.5-forge-1.110.3.jar%23186!/:1.110.3] at TRANSFORMER/minecraft@1.20.5/net.minecraft.network.codec.StreamCodec$10.decode(StreamCodec.java:196) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/computercraft@1.110.3/dan200.computercraft.shared.platform.PlatformHelperImpl.lambda$createMenuType$0(PlatformHelperImpl.java:122) ~[cc-tweaked-1.20.5-forge-1.110.3.jar%23186!/:1.110.3] at TRANSFORMER/neoforge@20.5.21-beta/net.neoforged.neoforge.network.IContainerFactory.create(IContainerFactory.java:18) ~[neoforge-20.5.21-beta-universal.jar%23188!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.world.inventory.MenuType.create(MenuType.java:54) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor.fromPacket(MenuScreens.java:126) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.gui.screens.MenuScreens.lambda$create$0(MenuScreens.java:44) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[?:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.gui.screens.MenuScreens.create(MenuScreens.java:44) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.multiplayer.ClientPacketListener.handleOpenScreen(ClientPacketListener.java:1241) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.network.protocol.game.ClientboundOpenScreenPacket.handle(ClientboundOpenScreenPacket.java:38) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.network.protocol.game.ClientboundOpenScreenPacket.handle(ClientboundOpenScreenPacket.java:13) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:25) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:148) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.util.thread.BlockableEventLoop.runAllTasks(BlockableEventLoop.java:111) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.Minecraft.runTick(Minecraft.java:1216) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.Minecraft.run(Minecraft.java:815) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at TRANSFORMER/minecraft@1.20.5/net.minecraft.client.main.Main.main(Main.java:244) ~[client-1.20.5-20240423.152201-srg.jar%23187!/:?] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] at MC-BOOTSTRAP/fml_loader@3.0.18/net.neoforged.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:127) ~[loader-3.0.18.jar%23101!/:3.0] at MC-BOOTSTRAP/fml_loader@3.0.18/net.neoforged.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:115) ~[loader-3.0.18.jar%23101!/:3.0] at MC-BOOTSTRAP/fml_loader@3.0.18/net.neoforged.fml.loading.targets.CommonClientLaunchHandler.runService(CommonClientLaunchHandler.java:29) ~[loader-3.0.18.jar%23101!/:3.0] at MC-BOOTSTRAP/fml_loader@3.0.18/net.neoforged.fml.loading.targets.CommonLaunchHandler.lambda$launchService$4(CommonLaunchHandler.java:109) ~[loader-3.0.18.jar%23101!/:3.0] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.Launcher.run(Launcher.java:103) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.Launcher.main(Launcher.java:74) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.1.10.jar%23103!/:?] at MC-BOOTSTRAP/cpw.mods.modlauncher@10.1.10/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.1.10.jar%23103!/:?] at cpw.mods.bootstraplauncher@1.1.2/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] [28May2024 01:59:55.185] [Server thread/INFO] [net.minecraft.server.network.ServerGamePacketListenerImpl/]: Zirunis lost connection: Disconnected [28May2024 01:59:55.185] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Zirunis left the game [28May2024 01:59:55.194] [Server thread/INFO] [net.minecraft.server.network.ServerCommonPacketListenerImpl/]: Stopping singleplayer server as player logged out [28May2024 01:59:55.239] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Stopping server [28May2024 01:59:55.239] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving players [28May2024 01:59:55.239] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving worlds [28May2024 01:59:55.626] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[CC-Dev]'/minecraft:overworld [28May2024 01:59:56.496] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[CC-Dev]'/minecraft:the_nether [28May2024 01:59:56.500] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[CC-Dev]'/minecraft:the_end [28May2024 01:59:56.506] [Server thread/DEBUG] [net.neoforged.neoforge.common.CommonHooks/WP]: Gathered mod list to write to world save CC-Dev [28May2024 01:59:56.509] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (CC-Dev): All chunks are saved [28May2024 01:59:56.509] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved [28May2024 01:59:56.509] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved [28May2024 01:59:56.509] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage: All dimensions are saved [28May2024 01:59:57.526] [Server thread/DEBUG] [net.neoforged.fml.config.ConfigTracker/CONFIG]: Unloading configs type SERVER [28May2024 01:59:57.597] [Render thread/WARN] [net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl/]: Client disconnected with reason: Network Protocol Error ```
SquidDev commented 1 month ago

Thanks for the report! The issue here is that spectator mode directly opens a block's menu, rather than going through the right click hook. This means that we don't open the block with any of the custom data we need (i.e. terminal contents).

This might be possible to work around within Fabric (where their menu hooks are a little more powerful), but not for Forge. I think for now I'll just remove the code that enables spectators to open menus.

Zirunis commented 1 month ago

Sounds like a sufficient solution to me. Especially with /computercraft track dump allowing to open a turtles' display this functionality isn't very important. Thank you for the quick fix!