Ejemplo n.º 1
0
        public void Initialize(ChunkExtracted extracted, int c, ushort bitmask)
        {
            int idx = 0;

            for (int ct = 0; ct < 16; ct++)
            {
                if ((bitmask & (1 << ct)) != 0)
                {
                    Section section = GetSection(ct);

                    for (int y = 0; y < 16; y++)
                    {
                        for (int z = 0; z < 16; z++)
                        {
                            for (int x = 0; x < 16; x++)
                            {
                                byte b = (byte)(((extracted.storage[idx + 1] & 255) << 8 | extracted.storage[idx] & 255) >> 4);
                                if (b > 0)
                                {
                                    section.Blocks[GetIdx(x, y, z)] = b;
                                }
                                idx += 2;
                            }
                        }
                    }
                }
            }
            lightValues = new byte[16 * 16];
        }
Ejemplo n.º 2
0
        public void Receive(PacketBuffer buffer)
        {
            int   chunkX             = buffer.ReadInt();
            int   chunkZ             = buffer.ReadInt();
            bool  groundUpContinuous = buffer.ReadBool();
            short bitmask            = buffer.ReadShort();
            int   size = buffer.ReadVarInt();

            if (groundUpContinuous && bitmask == 0)
            {
                Delete   = true;
                DeletedX = chunkX;
                DeletedZ = chunkZ;
            }
            else
            {
                Delete = false;
                Chunk          chunk     = new Chunk(chunkX, chunkZ);
                ChunkExtracted extracted = new ChunkExtracted();
                extracted.bitmask = bitmask;
                extracted.storage = new byte[size];
                buffer.GetStream().Read(extracted.storage, 0, extracted.storage.Length);
                chunk.Initialize(extracted, 0, (ushort)bitmask);
                Chunk = chunk;
            }
        }
Ejemplo n.º 3
0
        public void Receive(PacketBuffer buffer)
        {
            bool skylight = buffer.ReadBool();
            int  colCount = buffer.ReadVarInt();

            int[]            xCoords = new int[colCount];
            int[]            zCoords = new int[colCount];
            ChunkExtracted[] ce      = new ChunkExtracted[colCount];

            for (int i = 0; i < colCount; i++)
            {
                int xC      = buffer.ReadInt();
                int zC      = buffer.ReadInt();
                int bitmask = buffer.ReadShort();
                xCoords[i] = xC;
                zCoords[i] = zC;
                ce[i]      = new ChunkExtracted()
                {
                    bitmask = bitmask
                };
                int bitcount = GetBitcount(ce[i].bitmask);
                int len      = GetChunkPacketSize(bitcount, skylight, true);
                ce[i].storage = new byte[len];
            }

            for (int i = 0; i < colCount; i++)
            {
                buffer.GetStream().Read(ce[i].storage, 0, ce[i].storage.Length);
            }

            int chunkECount = 0;

            lock (chunks)
            {
                foreach (ChunkExtracted e in ce)
                {
                    int   chunkX   = xCoords[chunkECount];
                    int   chunkZ   = zCoords[chunkECount];
                    Chunk theChunk = new Chunk(chunkX, chunkZ);
                    theChunk.Initialize(e, chunkECount, (ushort)e.bitmask);
                    chunks.Add(theChunk);
                    chunkECount++;
                }
            }
        }