/// <summary>
        /// Processes state sync sent by server.
        /// </summary>
        public void ProcessStateSync(MyPacket packet)
        {
            // Simulated packet loss
            // if (MyRandom.Instance.NextFloat() > 0.05f) return;

            m_receiveStream.ResetRead(packet);
            m_lastStateSyncPacketId = m_receiveStream.ReadByte();

            while (m_receiveStream.BytePosition < m_receiveStream.ByteLength)
            {
                NetworkId    networkID = m_receiveStream.ReadNetworkId();
                IMyNetObject obj       = GetObjectByNetworkId(networkID);

                var pos = m_receiveStream.BytePosition;
                NetProfiler.Begin(obj.GetType().Name);
                Debug.Assert(obj != null && obj is IMyStateGroup, "IMyStateGroup not found by NetworkId");
                ((IMyStateGroup)obj).Serialize(m_receiveStream, null, m_lastStateSyncPacketId, 0);

                NetProfiler.End(m_receiveStream.ByteLength - pos);
            }

            if (!m_acks.Contains(m_lastStateSyncPacketId))
            {
                m_acks.Add(m_lastStateSyncPacketId);
            }
        }
        public static void DispatchBlockingEventPrefix(CallSite site, IMyNetObject targetReplicable)
        {
            if (!calls.ContainsKey(site.MethodInfo.Name))
            {
                calls.Add(site.MethodInfo.Name, 0);
            }
            calls[site.MethodInfo.Name]++;
            targets[site.MethodInfo.Name] = targetReplicable?.GetType().Name ?? "x";
            if (last2 > DateTimeOffset.Now.ToUnixTimeSeconds() - 5)
            {
                return;
            }
            last2 = DateTimeOffset.Now.ToUnixTimeSeconds();
            foreach (var k in calls.Keys)
            {
                Plugin.Log.Info($"called method {k} {calls[k]} times");
            }
            Plugin.Log.Info($"---------------");

            foreach (var k in targets.Keys)
            {
                Plugin.Log.Info($"{k} {targets[k]}");
            }

            Plugin.Log.Info($"----------------------------------------");
            calls.Clear();
            targets.Clear();
        }