BUG: PlayerAuthInputPacket deserialization breaks under high-frequency block action input from cheat nuker clients
this does not fail inside Allay gameplay logic itself, but earlier during PlayerAuthInputPacket decoding in org.cloudburstmc.protocol.bedrock.codec; when a client uses a nuker cheat and sends intense block-breaking input, the server/proxy starts throwing DecoderException -> PacketSerializeException -> ArrayIndexOutOfBoundsException in PlayerAuthInputSerializer_v527.readInteractionModel() (Index 3 out of bounds for length 3), followed by IllegalArgumentException: Tried to read 100 bytes but maximum is 32 in PlayerAuthInputSerializer_v766.deserialize(), which strongly suggests that cloudburst is reading the current PlayerAuthInputPacket with an incorrect field layout / enum mapping and then desynchronizes the remaining byte stream, corrupting inputInteractionModel and playerActions parsing; in other words, the primary root cause looks like a protocol-layer serializer/deserializer bug in PlayerAuthInputPacket, not the Allay packet processor, although Allay may still need separate gameplay-side validation to harden block action handling against nuker behavior.
```
2026-03-17 13:53:13.927 | [10:53:13 WARN] [nioEventLoopGroup-3-1] [DefaultChannelPipeline] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
2026-03-17 13:53:13.928 | io.netty.handler.codec.DecoderException: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at miroshka.proxytransport.server.handler.PacketRateLimiter.channelRead(PacketRateLimiter.java:43)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:1024)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:460)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1877)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1754)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1689)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:999)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:371)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:142)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:200)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:191)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:100)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
2026-03-17 13:53:13.928 | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
2026-03-17 13:53:13.928 | at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
2026-03-17 13:53:13.928 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
2026-03-17 13:53:13.928 | at java.base/java.lang.Thread.run(Thread.java:1583)
2026-03-17 13:53:13.928 | Caused by: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:70)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:72)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:21)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
2026-03-17 13:53:13.928 | ... 43 more
2026-03-17 13:53:13.928 | Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v527.serializer.PlayerAuthInputSerializer_v527.readInteractionModel(PlayerAuthInputSerializer_v527.java:18)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v766.serializer.PlayerAuthInputSerializer_v766.deserialize(PlayerAuthInputSerializer_v766.java:68)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v766.serializer.PlayerAuthInputSerializer_v766.deserialize(PlayerAuthInputSerializer_v766.java:15)
2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:68)
2026-03-17 13:53:13.928 | ... 47 more
2026-03-17 13:53:13.928 | [10:53:13 WARN] [nioEventLoopGroup-3-1] [DefaultChannelPipeline] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
2026-03-17 13:53:13.928 | io.netty.handler.codec.DecoderException: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at miroshka.proxytransport.server.handler.PacketRateLimiter.channelRead(PacketRateLimiter.java:43)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:1024)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:460)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1877)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1754)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1689)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:999)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:371)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:142)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:200)
2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:191)
2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:100)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512)
2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
2026-03-17 13:53:13.928 | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
2026-03-17 13:53:13.928 | at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
2026-03-17 13:53:13.928 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
2026-03-17 13:53:13.928 | at java.base/java.lang.Thread.run(Thread.java:1583)```
1 条评论