the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include <iostream>
3#include "InputOutputStream.h"
4#include "net.minecraft.world.level.h"
5#include "PacketListener.h"
6#include "TileUpdatePacket.h"
7#include "Dimension.h"
8
9
10
11TileUpdatePacket::TileUpdatePacket()
12{
13 shouldDelay = true;
14}
15
16TileUpdatePacket::TileUpdatePacket(int x, int y, int z, Level *level)
17{
18 shouldDelay = true;
19 this->x = x;
20 this->y = y;
21 this->z = z;
22 block = level->getTile(x, y, z);
23 data = level->getData(x, y, z);
24 levelIdx = ( ( level->dimension->id == 0 ) ? 0 : ( (level->dimension->id == -1) ? 1 : 2 ) );
25}
26
27void TileUpdatePacket::read(DataInputStream *dis) //throws IOException
28{
29#ifdef _LARGE_WORLDS
30 x = dis->readInt();
31 y = dis->readUnsignedByte();
32 z = dis->readInt();
33
34 block = (int)dis->readShort() & 0xffff;
35
36 BYTE dataLevel = dis->readByte();
37 data = dataLevel & 0xf;
38 levelIdx = (dataLevel>>4) & 0xf;
39#else
40 // 4J - See comments in write for packing
41 int xyzdata = dis->readInt();
42 x = ( xyzdata >> 22 ) & 0x3ff;
43 y = ( xyzdata >> 14 ) & 0xff;
44 z = ( xyzdata >> 4 ) & 0x3ff;
45 x = ( x << 22 ) >> 22;
46 z = ( z << 22 ) >> 22;
47 data = xyzdata & 0xf;
48 block = (int)dis->readShort() & 0xffff;
49 //levelIdx = ( xyzdata >> 31 ) & 1;
50
51 // Can't pack this as it's now 2 bits
52 levelIdx = (int)dis->readByte();
53#endif
54}
55
56void TileUpdatePacket::write(DataOutputStream *dos) //throws IOException
57{
58#ifdef _LARGE_WORLDS
59 dos->writeInt(x);
60 dos->write(y);
61 dos->writeInt(z);
62 dos->writeShort(block);
63
64 BYTE dataLevel = ((levelIdx & 0xf ) << 4) | (data & 0xf);
65 dos->writeByte(dataLevel);
66#else
67 // 4J - for our fixed size map, we can pack x & z into 10 bits each (-512 -> 511), y into 8 bits (0 to 255)
68 // 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
69 // is ultimately stored
70 int xyzdata = ( ( x & 0x3ff ) << 22 ) | ( ( y & 0xff ) << 14 ) | ( ( z & 0x3ff ) << 4 ) | ( data & 0xf);
71 //xyzdata |= levelIdx << 31;
72 dos->writeInt(xyzdata);
73 dos->writeShort(block);
74
75 // Can't pack this as it's now 2 bits
76 dos->write(levelIdx);
77#endif
78}
79
80void TileUpdatePacket::handle(PacketListener *listener)
81{
82 listener->handleTileUpdate(shared_from_this());
83}
84
85int TileUpdatePacket::getEstimatedSize()
86{
87#ifdef _LARGE_WORLDS
88 return 12;
89#else
90 return 5;
91#endif
92}