public override void NetworkCreateObject(NetWorker networker, int identity, uint id, FrameStream frame, Action <NetworkObject> callback)
        {
            if (networker.IsServer)
            {
                if (frame.Sender != null && frame.Sender != networker.Me)
                {
                    if (!ValidateCreateRequest(networker, identity, id, frame))
                    {
                        return;
                    }
                }
            }

            bool          availableCallback = false;
            NetworkObject obj = null;

            MainThreadManager.Run(() =>
            {
                switch (identity)
                {
                case ChatManagerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new ChatManagerNetworkObject(networker, id, frame);
                    break;

                case CubeForgeGameNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new CubeForgeGameNetworkObject(networker, id, frame);
                    break;

                case ExampleProximityPlayerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new ExampleProximityPlayerNetworkObject(networker, id, frame);
                    break;

                case NetworkCameraNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new NetworkCameraNetworkObject(networker, id, frame);
                    break;

                case TestNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new TestNetworkObject(networker, id, frame);
                    break;

                case BritainPlayerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new BritainPlayerNetworkObject(networker, id, frame);
                    break;
                }

                if (!availableCallback)
                {
                    base.NetworkCreateObject(networker, identity, id, frame, callback);
                }
                else if (callback != null)
                {
                    callback(obj);
                }
            });
        }
        public override void NetworkCreateObject(NetWorker networker, int identity, uint id, FrameStream frame, Action <NetworkObject> callback)
        {
            if (networker.IsServer)
            {
                if (frame.Sender != null && frame.Sender != networker.Me)
                {
                    if (!ValidateCreateRequest(networker, identity, id, frame))
                    {
                        return;
                    }
                }
            }

            bool          availableCallback = false;
            NetworkObject obj = null;

            MainThreadManager.Run(() =>
            {
                switch (identity)
                {
                case ChatManagerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new ChatManagerNetworkObject(networker, id, frame);
                    break;

                case DungeonGeneratorNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new DungeonGeneratorNetworkObject(networker, id, frame);
                    break;

                case GameManagerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new GameManagerNetworkObject(networker, id, frame);
                    break;

                case GameNetworkManagerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new GameNetworkManagerNetworkObject(networker, id, frame);
                    break;

                case PlayerControllerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new PlayerControllerNetworkObject(networker, id, frame);
                    break;

                case SpellManagerNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new SpellManagerNetworkObject(networker, id, frame);
                    break;

                case SpellSpawnPointNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new SpellSpawnPointNetworkObject(networker, id, frame);
                    break;

                case TestNetworkObject.IDENTITY:
                    availableCallback = true;
                    obj = new TestNetworkObject(networker, id, frame);
                    break;
                }

                if (!availableCallback)
                {
                    base.NetworkCreateObject(networker, identity, id, frame, callback);
                }
                else if (callback != null)
                {
                    callback(obj);
                }
            });
        }