예제 #1
0
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            // TODO doesn't work anymore I guess
            if (Client.IsEmulator)
            {
                return;
            }

            if (message.cacheEnabled)
            {
                var hits = new ulong[message.blobHashes.Length];

                for (int i = 0; i < message.blobHashes.Length; i++)
                {
                    ulong hash = message.blobHashes[i];
                    hits[i] = hash;
                    Log.Debug($"Got hashes for {message.chunkX}, {message.chunkZ}, {hash}");
                }

                var status = McpeClientCacheBlobStatus.CreateObject();
                status.hashHits = hits;
                Client.SendPacket(status);
            }
            else
            {
                Client.Chunks.GetOrAdd(new ChunkCoordinates(message.chunkX, message.chunkZ), coordinates =>
                {
                    Log.Debug($"Chunk X={message.chunkX}, Z={message.chunkZ}, size={message.chunkData.Length}, Count={Client.Chunks.Count}");

                    ChunkColumn chunk = null;
                    try
                    {
                        chunk = ClientUtils.DecodeChunkColumn((int)message.subChunkCount, message.chunkData);
                        if (chunk != null)
                        {
                            chunk.X = coordinates.X;
                            chunk.Z = coordinates.Z;
                            chunk.RecalcHeight();
                            Log.DebugFormat("Chunk X={0}, Z={1}", chunk.X, chunk.Z);
                            foreach (KeyValuePair <BlockCoordinates, NbtCompound> blockEntity in chunk.BlockEntities)
                            {
                                Log.Debug($"Blockentity: {blockEntity.Value}");
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Error("Reading chunk", e);
                    }

                    return(chunk);
                });
            }
        }
예제 #2
0
 public virtual void HandleMcpeClientCacheBlobStatus(McpeClientCacheBlobStatus message)
 {
 }
 public abstract void HandleMcpeClientCacheBlobStatus(McpeClientCacheBlobStatus message);
예제 #4
0
 public override void HandleMcpeClientCacheBlobStatus(McpeClientCacheBlobStatus message)
 {
 }
예제 #5
0
 public override void HandleMcpeClientCacheBlobStatus(McpeClientCacheBlobStatus message)
 {
     UnhandledPackage(message);
 }