Пример #1
0
        public override void HandleMcpeClientCacheMissResponse(McpeClientCacheMissResponse message)
        {
            foreach (KeyValuePair <ulong, byte[]> kv in message.blobs)
            {
                ulong  hash = kv.Key;
                byte[] data = kv.Value;

                Client.BlobCache.TryAdd(hash, data);

                var chunks = _futureChunks.Where(c => c.Key.SubChunks.Contains(hash) || c.Key.Biome == hash);
                foreach (KeyValuePair <CachedChunk, object> kvp in chunks)
                {
                    CachedChunk chunk = kvp.Key;

                    if (chunk.Biome == hash)
                    {
                        chunk.Chunk.biomeId = data;
                        chunk.Biome         = 0;
                    }
                    else
                    {
                        for (int i = 0; i < chunk.SubChunks.Length; i++)
                        {
                            ulong subChunkHash = chunk.SubChunks[i];
                            if (subChunkHash == hash)
                            {
                                // parse data
                                chunk.Chunk[i]     = ClientUtils.DecodeChunkColumn(1, data, BlockPalette, _internalStates)[0];
                                chunk.SubChunks[i] = 0;
                            }
                        }
                    }
                    if (chunk.Biome == 0 && chunk.SubChunks.All(c => c == 0))
                    {
                        _futureChunks.TryRemove(chunk, out _);

                        var coordinates = new ChunkCoordinates(chunk.Chunk.X, chunk.Chunk.Z);
                        foreach (KeyValuePair <BlockCoordinates, NbtCompound> bePair in _futureBlockEntities.Where(be => (ChunkCoordinates)be.Key == coordinates))
                        {
                            chunk.Chunk.BlockEntities.Add(bePair);
                            _futureBlockEntities.TryRemove(bePair.Key, out _);
                        }

                        chunk.Chunk.RecalcHeight();
                        Client.Chunks[coordinates] = chunk.Chunk;
                    }
                }
            }
        }
Пример #2
0
 public virtual void HandleMcpeClientCacheMissResponse(McpeClientCacheMissResponse message)
 {
 }
 public abstract void HandleMcpeClientCacheMissResponse(McpeClientCacheMissResponse message);
Пример #4
0
 public override void HandleMcpeClientCacheMissResponse(McpeClientCacheMissResponse message)
 {
 }
Пример #5
0
 public override void HandleMcpeClientCacheMissResponse(McpeClientCacheMissResponse message)
 {
     UnhandledPackage(message);
 }