private void ParseNamedEntitySpawn(BinaryReader reader) { HandleNamedEntitySpawn(reader.ReadNetworkInt32(), reader.ReadNetworkString(), reader.ReadNetworkInt32(), reader.ReadNetworkInt32(), reader.ReadNetworkInt32(), reader.ReadByte(), reader.ReadByte(), reader.ReadNetworkInt16()); }
private void ParseItemSpawn(BinaryReader reader) { HandleItemSpawn(reader.ReadNetworkInt32(), reader.ReadNetworkInt16(), reader.ReadByte(), reader.ReadNetworkInt32(), reader.ReadNetworkInt32(), reader.ReadNetworkInt32(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); }
private void ParseMapChunk(BinaryReader reader) { int x = reader.ReadNetworkInt32(); short y = reader.ReadNetworkInt16(); int z = reader.ReadNetworkInt32(); byte size_x = reader.ReadByte(); byte size_y = reader.ReadByte(); byte size_z = reader.ReadByte(); int size = reader.ReadNetworkInt32(); if (reader.BaseStream.Position + size > reader.BaseStream.Length) // Like omg BinaryReader won't throw exceptions throw new EndOfStreamException("Reader has reached end of stream."); // if you read past the end of the stream :@ byte[] data = Compression.DecompressZLib(reader.ReadBytes(size)); // parse data block size_x++; size_y++; size_z++; // wat to do here... hmm MCBlock[, ,] blockdata = new MCBlock[size_x, size_y, size_z]; BinaryReader parser = new BinaryReader(new MemoryStream(data)); byte[] blocks = parser.ReadBytes(size_x * size_y * size_z); byte[] metadatas = new byte[blocks.Length]; byte[] lights = new byte[blocks.Length]; byte[] skylights = new byte[blocks.Length]; for (int i = 0; i < blocks.Length; i += 2) { byte metadata = parser.ReadByte(); metadatas[i] = (byte)((metadata >> 4) & 0xF); metadatas[i + 1] = (byte)(metadata & 0xF); } for (int i = 0; i < blocks.Length; i += 2) { byte light = parser.ReadByte(); lights[i] = (byte)((light >> 4) & 0xF); lights[i + 1] = (byte)(light & 0xF); } for (int i = 0; i < blocks.Length; i += 2) { byte skylight = parser.ReadByte(); skylights[i] = (byte)((skylight >> 4) & 0xF); skylights[i + 1] = (byte)(skylight & 0xF); } for (int iX = 0; iX < size_x; iX++) { for (int iY = 0; iY < size_y; iY++) { for (int iZ = 0; iZ < size_z; iZ++) { int index = iY + (iZ * size_y) + (iX * size_y * size_z); blockdata[iX, iY, iZ] = new MCBlock(); blockdata[iX, iY, iZ].Type = (MCBlockType)blocks[index]; blockdata[iX, iY, iZ].MetaData = metadatas[index]; blockdata[iX, iY, iZ].Light = lights[index]; blockdata[iX, iY, iZ].SkyLight = skylights[index]; } } } HandleMapChunk(x, y, z, blockdata); }
private void ParseHoldSwitch(BinaryReader reader) { HandleHoldSwitch(reader.ReadNetworkInt32(), reader.ReadNetworkInt16()); }
private void ParseComplexEntities(BinaryReader reader) { int x = reader.ReadNetworkInt32(); short y = reader.ReadNetworkInt16(); int z = reader.ReadNetworkInt32(); short size = reader.ReadNetworkInt16(); if (reader.BaseStream.Position + size > reader.BaseStream.Length) throw new EndOfStreamException("Reader has reached end of stream."); byte[] data = Compression.DecompressGZip(reader.ReadBytes(size)); INamedBinaryTag nbt = NBTStructure.ParseNBT(data); HandleComplexEntities(x, y, z, nbt); }
private void ParseAddInventory(BinaryReader reader) { HandleAddInventory(reader.ReadNetworkInt16(), reader.ReadByte(), reader.ReadNetworkInt16()); }
protected void ParsePlayerInventory(BinaryReader reader) { int type = reader.ReadNetworkInt32(); short count = reader.ReadNetworkInt16(); List<MCItem> items = new List<MCItem>(); for (int i = 0; i < count; i++) { short itemid = reader.ReadNetworkInt16(); if (itemid == -1) items.Add(new MCItem(-1, 0, 0)); else items.Add(new MCItem(itemid, reader.ReadByte(), reader.ReadNetworkInt16())); } HandlePlayerInventory(type, count, items); }
protected void ParseMultiBlockChange(BinaryReader reader) { int x = reader.ReadNetworkInt32(); int z = reader.ReadNetworkInt32(); short size = reader.ReadNetworkInt16(); List<MCBlockTransform> changes = new List<MCBlockTransform>(); Vector3D[] relativepos = new Vector3D[size]; byte[] blocks = new byte[size]; byte[] metadatas = new byte[size]; for (short i = 0; i < size; i++) { short xyz = reader.ReadNetworkInt16(); int xpos = (xyz >> 12) & 0xF; int zpos = (xyz >> 8) & 0xF; int ypos = xyz & 0xFF; relativepos[i] = new Vector3D(xpos, ypos, zpos); } for (short i = 0; i < size; i++) blocks[i] = reader.ReadByte(); for (short i = 0; i < size; i++) metadatas[i] = reader.ReadByte(); for (short i = 0; i < size; i++) changes.Add(new MCBlockTransform(relativepos[i], blocks[i], metadatas[i])); HandleMultiBlockChange(x, z, size, changes); }