the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 92 lines 2.3 kB view raw
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}