public void packetHandler(object sender, Client.packetReceivedEventArgs e)
        {
            switch ((byte)e.Type)
            {
            case 0x0D:
                Packet_PlayerPosAndLook p = (Packet_PlayerPosAndLook)e.packet;
                moveCamera((float)p.X, (float)p.Y + 3f, (float)p.Z);
                break;

            case 8:
                Packet_UpdateHealth h = (Packet_UpdateHealth)e.packet;
                Console.WriteLine("Health Update: {0} {1}", h.Health, h.Food);
                if (h.Health <= 0)
                {
                    Packet_Respawn r = new Packet_Respawn();
                    r.Dimension   = 0;
                    r.Difficulty  = 1;
                    r.Gamemode    = 0;
                    r.LevelType   = "default";
                    r.WorldHeight = 256;
                    mc.sendPacket(r);
                }
                break;

            /* case 0x32:
             *   Packet_PreChunk c = (Packet_PreChunk)e.packet;
             *   if (c.Mode)
             *   {
             *       if (!chunks.ContainsKey(c.X + "_" + c.Z))
             *           chunks.Add(c.X + "_" + c.Z, new Chunk());
             *   }
             *   else
             *       if (chunks.ContainsKey(c.X + "_" + c.Z))
             *           chunks.Remove(c.X + "_" + c.Z);
             *   break; */
            case 0x33:
                Packet_MapChunk mch = (Packet_MapChunk)e.packet;
                int             cx, cz;
                cx = mch.X;
                cz = mch.Z;
                string key = cx + "_" + cz;
                //output("Chunk: " + key, true);
                if (!chunks.ContainsKey(key))
                {
                    chunks.Add(key, new Chunk());
                    //output("Chunk had to be added! " + key, true);
                }
                chunks[key].update(mch);
                QueueChunk(chunks[key]);
                break;

            case 0x34:
                Packet_MultiBlockChange mb = (Packet_MultiBlockChange)e.packet;
                chunks[mb.X + "_" + mb.Z].update(mb);
                QueueChunk(chunks[mb.X + "_" + mb.Z]);
                break;
            }
        }
Пример #2
0
 public void update(Packet_MultiBlockChange data)
 {
     int[] d = data.Rawdata;
     foreach (int bl in d)
     {
         int metadata, x, y, z, bid;
         metadata = bl & 0x3;
         bid      = (bl & 0xFFF0) >> 4;
         y        = (bl & 0xFF0000) >> 16;
         z        = (bl & 0xF000000) >> 24;
         x        = (int)(bl & (uint)0xF0000000) >> 28;
         //Block b=blocks[x,y,z];
         //b.metaData = (short)metadata;
         //b.ID = (short)bid;
     }
 }