Protocol icon indicating copy to clipboard operation
Protocol copied to clipboard

Error with encoding CameraInstructionPacket

Open Toper9636 opened this issue 11 months ago • 8 comments

Error occurred when using WDPE (Latest pre-release version)

Created a ticket here because WDPE already has a ticket with this problem, and it's been open unresolved since October 1 (Click here)

When a player switches servers I send him this packet and this error occurs:

16:05:43 [ERROR] Error encoding packet CameraInstructionPacket(setInstruction=CameraSetInstruction(preset=null, ease=null, pos=null, rot=null, facing=null, defaultPreset=OptionalBoolean.empty), fadeInstruction=CameraFadeInstruction(timeData=CameraFadeInstruction.TimeData(fadeInTime=0.5, waitTime=0.6, fadeOutTime=0.5), color=java.awt.Color[r=0,g=0,b=60]), clear=OptionalBoolean.empty)
java.lang.NullPointerException: Cannot invoke "org.cloudburstmc.protocol.bedrock.codec.BedrockPacketDefinition.getId()" because the return value of "org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.getPacketDefinition(java.lang.Class)" is null
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.getPacketId(BedrockPacketCodec.java:143) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:86) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:58) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:36) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:90) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:879) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:984) ~[server.jar:?]
        at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1025) ~[server.jar:?]
        at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:306) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.onTick(ProxiedBedrockPeer.java:106) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.sendPacket0(ProxiedBedrockPeer.java:126) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.lambda$sendPacket$0(ProxiedBedrockPeer.java:114) ~[server.jar:?]
        at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[server.jar:?]
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[server.jar:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[server.jar:?]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[server.jar:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[server.jar:?]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[server.jar:?]
        at java.lang.Thread.run(Thread.java:842) [?:?]

My client version: 1.20.51

Toper9636 avatar Feb 29 '24 13:02 Toper9636

The packet you are sending is wrong. CameraSetInstruction is not properly initialized, does not have any properties. If you do not wish to use set instruction, simply set it to null. If you need to use it, you are required to set preset definitions.

Alemiz112 avatar Feb 29 '24 13:02 Alemiz112

CameraInstructionPacket pk = new CameraInstructionPacket();
CameraFadeInstruction fadeInstruction = new CameraFadeInstruction();
fadeInstruction.setTimeData(new CameraFadeInstruction.TimeData(0.5f, 0.6f, 0.5f));
fadeInstruction.setColor(new Color(0, 0, 0.2352941334247589f));
pk.setSetInstruction(new CameraSetInstruction());
pk.setFadeInstruction(fadeInstruction);

event.getPlayer().sendPacket(pk);

Here is the code I use to send the packet

Toper9636 avatar Feb 29 '24 14:02 Toper9636

The packet you are sending is wrong. CameraSetInstruction is not properly initialized, does not have any properties. If you do not wish to use set instruction, simply set it to null. If you need to use it, you are required to set preset definitions.

I don't get it, what do I need to change to make it work?

Toper9636 avatar Feb 29 '24 16:02 Toper9636

just remove the line where you add empty camera set instructions, that's not needed and causes the issue here

onebeastchris avatar Feb 29 '24 16:02 onebeastchris

CameraInstructionPacket pk = new CameraInstructionPacket();
pk.setFadeInstruction(new CameraFadeInstruction(
        new CameraFadeInstruction.TimeData(0.5f, 0.6f, 0.5f),
        new Color(0, 0, 0.2352941334247589f)
));

event.getPlayer().sendPacket(pk);

This code causes the same error

19:25:26 [ERROR] Error encoding packet CameraInstructionPacket(setInstruction=null, fadeInstruction=CameraFadeInstruction(timeData=CameraFadeInstruction.TimeData(fadeInTime=0.5, waitTime=0.6, fadeOutTime=0.5), color=java.awt.Color[r=0,g=0,b=60]), clear=OptionalBoolean.empty)
java.lang.NullPointerException: Cannot invoke "org.cloudburstmc.protocol.bedrock.codec.BedrockPacketDefinition.getId()" because the return value of "org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.getPacketDefinition(java.lang.Class)" is null
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.getPacketId(BedrockPacketCodec.java:143) ~[server.jar:?]        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:86) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:58) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:36) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:90) ~[server.jar:?]
        at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:879) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934) ~[server.jar:?]
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:984) ~[server.jar:?]
        at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1025) ~[server.jar:?]
        at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:306) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.onTick(ProxiedBedrockPeer.java:106) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.sendPacket0(ProxiedBedrockPeer.java:126) ~[server.jar:?]
        at dev.waterdog.waterdogpe.network.connection.peer.ProxiedBedrockPeer.lambda$sendPacket$0(ProxiedBedrockPeer.java:114) ~[server.jar:?]        at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[server.jar:?]
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[server.jar:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[server.jar:?]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[server.jar:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[server.jar:?]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[server.jar:?]
        at java.lang.Thread.run(Thread.java:842) [?:?]

Toper9636 avatar Feb 29 '24 16:02 Toper9636

???

Toper9636 avatar Feb 29 '24 23:02 Toper9636

???????????????????????????????????

Toper9636 avatar Mar 01 '24 20:03 Toper9636

👍👌😊😘

Toper9636 avatar Mar 07 '24 13:03 Toper9636

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Toper9636 avatar Mar 20 '24 21:03 Toper9636

This looks to be user error, and isn't an issue with the library

SupremeMortal avatar Mar 31 '24 16:03 SupremeMortal