Fix X360 Crossplay (#26)

^Reviewed-on: #26

Co-authored-by: qloak <realminecart@gmail.com>
This commit was merged in pull request #26.
This commit is contained in:
2026-08-07 17:14:12 +00:00
committed by pieeebot
parent 92891de261
commit ebbd54288b
41 changed files with 1346 additions and 1287 deletions
-33
View File
@@ -26,7 +26,6 @@ TileUpdatePacket::TileUpdatePacket(int x, int y, int z, Level *level)
void TileUpdatePacket::read(DataInputStream *dis) //throws IOException
{
#ifdef _LARGE_WORLDS
x = dis->readInt();
y = dis->readUnsignedByte();
z = dis->readInt();
@@ -36,26 +35,10 @@ void TileUpdatePacket::read(DataInputStream *dis) //throws IOException
BYTE dataLevel = dis->readByte();
data = dataLevel & 0xf;
levelIdx = (dataLevel>>4) & 0xf;
#else
// 4J - See comments in write for packing
int xyzdata = dis->readInt();
x = ( xyzdata >> 22 ) & 0x3ff;
y = ( xyzdata >> 14 ) & 0xff;
z = ( xyzdata >> 4 ) & 0x3ff;
x = ( x << 22 ) >> 22;
z = ( z << 22 ) >> 22;
data = xyzdata & 0xf;
block = (int)dis->readShort() & 0xffff;
//levelIdx = ( xyzdata >> 31 ) & 1;
// Can't pack this as it's now 2 bits
levelIdx = (int)dis->readByte();
#endif
}
void TileUpdatePacket::write(DataOutputStream *dos) //throws IOException
{
#ifdef _LARGE_WORLDS
dos->writeInt(x);
dos->write(y);
dos->writeInt(z);
@@ -63,18 +46,6 @@ void TileUpdatePacket::write(DataOutputStream *dos) //throws IOException
BYTE dataLevel = ((levelIdx & 0xf ) << 4) | (data & 0xf);
dos->writeByte(dataLevel);
#else
// 4J - for our fixed size map, we can pack x & z into 10 bits each (-512 -> 511), y into 8 bits (0 to 255)
// block type could really be 7 bits but leaving that as 8 for future ease of expansion. Data only needs to be 4-bits as that is how it
// is ultimately stored
int xyzdata = ( ( x & 0x3ff ) << 22 ) | ( ( y & 0xff ) << 14 ) | ( ( z & 0x3ff ) << 4 ) | ( data & 0xf);
//xyzdata |= levelIdx << 31;
dos->writeInt(xyzdata);
dos->writeShort(block);
// Can't pack this as it's now 2 bits
dos->write(levelIdx);
#endif
}
void TileUpdatePacket::handle(PacketListener *listener)
@@ -84,9 +55,5 @@ void TileUpdatePacket::handle(PacketListener *listener)
int TileUpdatePacket::getEstimatedSize()
{
#ifdef _LARGE_WORLDS
return 12;
#else
return 5;
#endif
}