Repository navigation
Players can't connect if they have an oversize book in their inventory #6098
Description
Describe the bug
My server has some custom books that are longer than the standard page limit. Java players have no problem viewing them, but if a Bedrock player leaves with such a book in their inventory, they will not be able to rejoin.
The thrown error is
[17:08:49.349 GeyserServerChild-4-3/ERROR] Exception caught in session of dinnerbone9629
io.netty.handler.codec.DecoderException: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing InventoryTransactionPacket(legacyRequestId=0, legacySlots=[], actions=[], transactionType=ITEM_USE, actionType=0, runtimeEntityId=0, blockPosition=(-2829, 130, -406), blockFace=3, hotbarSlot=7, itemInHand=null, playerPosition=null, clickPosition=null, headPosition=null, usingNetIds=false, blockDefinition=null, triggerType=PLAYER_INPUT, clientInteractPrediction=null)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:101) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:120) ~[Geyser-Standalone.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:354) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:107) [Geyser-Standalone.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:356) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:107) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:120) [Geyser-Standalone.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:354) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:107) [Geyser-Standalone.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:356) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:107) [Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:120) [Geyser-Standalone.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:354) [Geyser-Standalone.jar:?]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) [Geyser-Standalone.jar:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) [Geyser-Standalone.jar:?]
at org.cloudburstmc.netty.channel.raknet.RakChannelPipeline.lambda$onUnhandledInboundMessage$0(RakChannelPipeline.java:60) [Geyser-Standalone.jar:?]
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) [Geyser-Standalone.jar:?]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:141) [Geyser-Standalone.jar:?]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:535) [Geyser-Standalone.jar:?]
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:201) [Geyser-Standalone.jar:?]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1193) [Geyser-Standalone.jar:?]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [Geyser-Standalone.jar:?]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [Geyser-Standalone.jar:?]
at java.lang.Thread.run(Thread.java:1474) [?:?]
Caused by: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing InventoryTransactionPacket(legacyRequestId=0, legacySlots=[], actions=[], transactionType=ITEM_USE, actionType=0, runtimeEntityId=0, blockPosition=(-2829, 130, -406), blockFace=3, hotbarSlot=7, itemInHand=null, playerPosition=null, clickPosition=null, headPosition=null, usingNetIds=false, blockDefinition=null, triggerType=PLAYER_INPUT, clientInteractPrediction=null)
at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:70) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:72) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:21) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec$1.decode(MessageToMessageCodec.java:67) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:91) ~[Geyser-Standalone.jar:?]
... 23 more
Caused by: java.lang.IllegalStateException: Unable to read item user data
at org.cloudburstmc.protocol.bedrock.codec.v431.BedrockCodecHelper_v431.readItem(BedrockCodecHelper_v431.java:162) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v712.BedrockCodecHelper_v712.readItemUse(BedrockCodecHelper_v712.java:153) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryTransactionSerializer_v407.deserialize(InventoryTransactionSerializer_v407.java:67) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryTransactionSerializer_v407.deserialize(InventoryTransactionSerializer_v407.java:13) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:68) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:72) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:21) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec$1.decode(MessageToMessageCodec.java:67) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:91) ~[Geyser-Standalone.jar:?]
... 23 more
Caused by: java.io.IOException: Read size exceeded limit: read=102458, limit=102400
at org.cloudburstmc.nbt.util.stream.LimitedDataInput.tryRead(LimitedDataInput.java:35) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.util.stream.LimitedDataInput.readUTF(LimitedDataInput.java:127) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.deserialize(NBTInputStream.java:111) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.deserialize(NBTInputStream.java:123) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.deserialize(NBTInputStream.java:132) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.deserialize(NBTInputStream.java:123) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.readTag(NBTInputStream.java:57) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.nbt.NBTInputStream.readTag(NBTInputStream.java:46) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v431.BedrockCodecHelper_v431.readItem(BedrockCodecHelper_v431.java:140) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v712.BedrockCodecHelper_v712.readItemUse(BedrockCodecHelper_v712.java:153) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryTransactionSerializer_v407.deserialize(InventoryTransactionSerializer_v407.java:67) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryTransactionSerializer_v407.deserialize(InventoryTransactionSerializer_v407.java:13) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:68) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:72) ~[Geyser-Standalone.jar:?]
at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:21) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageCodec$1.decode(MessageToMessageCodec.java:67) ~[Geyser-Standalone.jar:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:91) ~[Geyser-Standalone.jar:?]
... 23 more
[17:08:49.354 GeyserServerChild-4-3/INFO] dinnerbone9629 has disconnected from remote Java server on address 127.0.0.1 because of An internal error occurred!
To Reproduce
- Create an extra-long book (many hundreds/thousands of pages) using whatever means (I used BooksWithoutBorders)
- Give it to a Bedrock player
- Have them log off
- Have them attempt to log in
- See error in log; player will be unable to join
Expected behaviour
Player would be able to join even with the large book in their inventory
Screenshots / Videos
No response
Server Version and Plugins
This server is running Paper version 1.21.11-64-main@6d5a450 (2025-12-29T02:01:55Z) (Implementing API version 1.21.11-R0.1-SNAPSHOT)
[17:31:57 INFO]: ℹ Server Plugins (38):
[17:31:57 INFO]: Paper Plugins (1):
[17:31:57 INFO]: - FancyNpcs
[17:31:57 INFO]: Bukkit Plugins (37):
[17:31:57 INFO]: - ActionSpeed, AdvancedBan, AntiAbuseCommands, BetterRTP, BlueMap, BlueMapPlayerControl, Censura, ClearLag, CoreProtect, DecentHolograms
[17:31:57 INFO]: Discord-Linker, FasterHappyGhast, floodgate, ImageFrame, Inbox, InvSeePlusPlus, InvSeePlusPlus_Clear, InvSeePlusPlus_Give, ItemEdit, KeepChoice
[17:31:57 INFO]: LocatorToggle, LuckPerms, Multiverse-Core, Multiverse-Inventories, Multiverse-NetherPortals, Multiverse-Portals, Parkour, PlaceholderAPI, *Playtimes, SimpleTpa
[17:31:57 INFO]: Skript, TAB, UniHome, voicechat, WorldEdit, WorldEditSUI, WorldGuard
Geyser Dump
No response
Geyser Version
2.9.2-b1020
Minecraft: Bedrock Edition Device/Version
No response
Additional Context
No response
Activity
onebeastchris commentedon Jan 19, 2026
sooo the fun thing here is that bedrock will happily sent large item NBT to the server; an issue java mostly avoids - this is not therefore not a high priority issue since it's a pretty niche use too