CloudburstMC / Protocol

A protocol library for Minecraft Bedrock Edition
https://git.io/ProtocolLib
Apache License 2.0
310 stars 96 forks source link

Error with encoding CameraInstructionPacket #218

Closed Toper9636 closed 3 months ago

Toper9636 commented 4 months ago

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

Alemiz112 commented 4 months ago

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.

Toper9636 commented 4 months ago
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 commented 4 months ago

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?

onebeastchris commented 4 months ago

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

Toper9636 commented 4 months ago
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 commented 4 months ago

???

Toper9636 commented 4 months ago

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

Toper9636 commented 4 months ago

👍👌😊😘

Toper9636 commented 4 months ago

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

SupremeMortal commented 3 months ago

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