예제 #1
0
        void HandleExtEntry(byte[] buffer, int offset)
        {
            string extName    = NetUtils.ReadString(buffer, offset + 1);
            int    extVersion = NetUtils.ReadI32(buffer, offset + 65);

            AddExtension(extName, extVersion);
            extensionCount--;
            CheckReadAllExtensions();
        }
예제 #2
0
 void HandleExtEntry(byte[] message)
 {
     AddExtension(enc.GetString(message, 0, 64).Trim(), NetUtils.ReadI32(message, 64));
     extensionCount--;
     if (extensionCount <= 0 && !finishedCpeLogin)
     {
         CompleteLoginProcess();
         finishedCpeLogin = true;
     }
 }
예제 #3
0
        void HandleMovement(byte[] buffer, int offset)
        {
            if (!loggedIn || trainGrab || following.Length > 0)
            {
                CheckBlocks(Pos); return;
            }
            if (Supports(CpeExt.HeldBlock))
            {
                RawHeldBlock = ExtBlock.FromRaw(buffer[offset + 1]);
            }

            int x, y, z;

            if (hasExtPositions)
            {
                x       = NetUtils.ReadI32(buffer, offset + 2);
                y       = NetUtils.ReadI32(buffer, offset + 6);
                z       = NetUtils.ReadI32(buffer, offset + 10);
                offset += 6; // for yaw/pitch offset below
            }
            else
            {
                x = NetUtils.ReadI16(buffer, offset + 2);
                y = NetUtils.ReadI16(buffer, offset + 4);
                z = NetUtils.ReadI16(buffer, offset + 6);
            }

            byte     yaw = buffer[offset + 8], pitch = buffer[offset + 9];
            Position next = new Position(x, y, z);

            CheckBlocks(next);

            OnPlayerMoveEvent.Call(this, next, yaw, pitch);
            if (cancelmove)
            {
                cancelmove = false; return;
            }

            Pos = next;
            SetYawPitch(yaw, pitch);
            if (!Moved() || Loading)
            {
                return;
            }
            if (DateTime.UtcNow < AFKCooldown)
            {
                return;
            }

            LastAction = DateTime.UtcNow;
            if (IsAfk)
            {
                CmdAfk.ToggleAfk(this, "");
            }
        }
예제 #4
0
        int HandleExtEntry(byte[] buffer, int offset, int left)
        {
            const int size = 1 + 64 + 4;

            if (left < size)
            {
                return(0);
            }

            string extName    = NetUtils.ReadString(buffer, offset + 1);
            int    extVersion = NetUtils.ReadI32(buffer, offset + 65);

            AddExtension(extName, extVersion);
            extensionCount--;
            CheckReadAllExtensions();
            return(size);
        }
예제 #5
0
 void HandleExtEntry(byte[] packet)
 {
     AddExtension(NetUtils.ReadString(packet, 1), NetUtils.ReadI32(packet, 65));
     extensionCount--;
     CheckReadAllExtensions();
 }