SetEntityMotionPacket::write() was sending raw entity ID without masking, changing it to mask the ID to 11 bits first since large entity IDs were accidentally setting the compression flag bit and causing wrong number of bytes to be read by receiver.

This commit is contained in:
MathiewMay
2026-03-09 15:34:08 -04:00
parent 3f1c95418f
commit 9c254bbf4d

View File

@@ -73,18 +73,20 @@ void SetEntityMotionPacket::read(DataInputStream *dis) //throws IOException
}
}
void SetEntityMotionPacket::write(DataOutputStream *dos) //throws IOException
void SetEntityMotionPacket::write(DataOutputStream *dos) //throws IOException
{
if( useBytes )
{
dos->writeShort(id | 0x800);
// Masking the id to 11 bits before writing to account for large entitty ids.
dos->writeShort((id & 0x07FF) | 0x800);
dos->writeByte(xa/16);
dos->writeByte(ya/16);
dos->writeByte(za/16);
}
else
{
dos->writeShort(id);
// same thing as line 80 here
dos->writeShort((id & 0x07FF));
dos->writeShort(xa);
dos->writeShort(ya);
dos->writeShort(za);