public void SetOutput(PlayerEntity player)
        {
            IBoneRigging boneRigging = player.characterBoneInterface.CharacterBone;

            foreach (var output in _fsmOutput)
            {
                if (output.Valid)
                {
                    if (SharedConfig.IsServer)
                    {
                        _FsmOutputAction[(int)output.Type].ServerAction(player, output);
                    }
                    else
                    {
                        _FsmOutputAction[(int)output.Type].ClientAction(player, output);
                    }
                }
            }
        }
        static FsmOutputBaseSystem()
        {
            Action <PlayerEntity, FsmOutput> empty = (entity, output) => { };

            //ChangeDiveSensitivity

            for (int i = 0; i < _FsmOutputAction.Length; ++i)
            {
                _FsmOutputAction[i] = new FsmOutputAction
                {
                    ClientAction = empty,
                    ServerAction = empty
                };
            }
            _FsmOutputAction[(short)FsmOutputType.ChangeDiveSensitivity].ServerAction = empty;
            _FsmOutputAction[(short)FsmOutputType.ChangeDiveSensitivity].ClientAction = (player, output) =>
            {
                player.appearanceInterface.Appearance.SetInputSchemeActionField((int)output.FloatValue,
                                                                                InputSchemeConst.ActionHorizontal);
                player.appearanceInterface.Appearance.SetInputSchemeActionField((int)output.FloatValue,
                                                                                InputSchemeConst.ActionVertical);
                player.appearanceInterface.Appearance.SetInputSchemeActionField((int)output.FloatValue,
                                                                                InputSchemeConst.ActionUpDown);
            };

            //CharacterControllerHeight
            _FsmOutputAction[(short)FsmOutputType.CharacterControllerHeight].ServerAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerHeight(output.FloatValue);
            };
            _FsmOutputAction[(short)FsmOutputType.CharacterControllerHeight].ClientAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerHeight(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(
                    new KeyValuePair <short, float>((short)FsmOutputType.CharacterControllerHeight, output.FloatValue));
            };

            //CharacterControllerJumpHeight
            _FsmOutputAction[(short)FsmOutputType.CharacterControllerJumpHeight].ServerAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerHeight(output.FloatValue, false);
            };

            _FsmOutputAction[(short)FsmOutputType.CharacterControllerJumpHeight].ClientAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerHeight(output.FloatValue, false);
                entity.stateInterVar.StateInterCommands.Commands.Add(
                    new KeyValuePair <short, float>((short)FsmOutputType.CharacterControllerJumpHeight,
                                                    output.FloatValue));
            };

            //CharacterControllerRadius
            _FsmOutputAction[(short)FsmOutputType.CharacterControllerRadius].ServerAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerRadius(output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.CharacterControllerRadius].ClientAction = (entity, output) =>
            {
                entity.characterControllerInterface.CharacterController.SetCharacterControllerRadius(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(new KeyValuePair <short, float>((short)FsmOutputType.CharacterControllerRadius, output.FloatValue));
            };

            //FirstPersonHeight
            _FsmOutputAction[(short)FsmOutputType.FirstPersonHeight].ServerAction = (entity, output) =>
            {
                entity.appearanceInterface.FirstPersonAppearance.SetFirstPersonHeight(output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.FirstPersonHeight].ClientAction = (entity, output) =>
            {
                entity.appearanceInterface.FirstPersonAppearance.SetFirstPersonHeight(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(new KeyValuePair <short, float>((short)FsmOutputType.FirstPersonHeight, output.FloatValue));
            };

            //FirstPersonForwardOffset
            _FsmOutputAction[(short)FsmOutputType.FirstPersonForwardOffset].ServerAction = (entity, output) =>
            {
                entity.appearanceInterface.FirstPersonAppearance.SetFirstPersonForwardOffset(output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.FirstPersonForwardOffset].ClientAction = (entity, output) =>
            {
                entity.appearanceInterface.FirstPersonAppearance.SetFirstPersonForwardOffset(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(new KeyValuePair <short, float>((short)FsmOutputType.FirstPersonForwardOffset, output.FloatValue));
            };

            // Peek
            _FsmOutputAction[(short)FsmOutputType.Peek].ServerAction = (entity, output) =>
            {
                IBoneRigging boneRigging = entity.characterBoneInterface.CharacterBone;
                output.Valid = false;
                boneRigging.Peek(output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.Peek].ClientAction = (entity, output) =>
            {
                IBoneRigging boneRigging = entity.characterBoneInterface.CharacterBone;
                output.Valid = false;
                boneRigging.Peek(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(new KeyValuePair <short, float>((short)FsmOutputType.Peek, output.FloatValue));
            };

            //FirstPersonSight
            _FsmOutputAction[(short)FsmOutputType.FirstPersonSight].ServerAction = (entity, output) =>
            {
                IBoneRigging boneRigging = entity.characterBoneInterface.CharacterBone;
                output.Valid = false;
                boneRigging.SightProgress(output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.FirstPersonSight].ClientAction = (entity, output) =>
            {
                IBoneRigging boneRigging = entity.characterBoneInterface.CharacterBone;
                output.Valid = false;
                boneRigging.SightProgress(output.FloatValue);
                entity.stateInterVar.StateInterCommands.Commands.Add(new KeyValuePair <short, float>((short)FsmOutputType.FirstPersonSight, output.FloatValue));
            };

            //InterruptAction
            _FsmOutputAction[(short)FsmOutputType.InterruptAction].ServerAction = empty;
            _FsmOutputAction[(short)FsmOutputType.InterruptAction].ClientAction = (entity, output) =>
            {
                entity.stateInterface.State.AddInterruptInput((FsmInput)output.FloatValue);
            };

            _FsmOutputAction[(short)FsmOutputType.RebindAnimator].ServerAction = (entity, output) =>
            {
                if (entity.hasThirdPersonAnimator)
                {
                    entity.thirdPersonAnimator.UnityAnimator.Rebind();
                    Logger.InfoFormat("ThirdPerson   AnimatorRebind");
                }

                if (entity.hasFirstPersonAnimator)
                {
                    entity.firstPersonAnimator.UnityAnimator.Rebind();
                    Logger.InfoFormat("FirstPerson   AnimatorRebind");
                }
            };
            _FsmOutputAction[(short)FsmOutputType.RebindAnimator].ClientAction = (entity, output) =>
            {
                if (entity.hasThirdPersonAnimator)
                {
                    entity.thirdPersonAnimator.UnityAnimator.Rebind();
                    Logger.InfoFormat("ThirdPerson   AnimatorRebind");
                }

                if (entity.hasFirstPersonAnimator)
                {
                    entity.firstPersonAnimator.UnityAnimator.Rebind();
                    Logger.InfoFormat("FirstPerson   AnimatorRebind");
                }
            };

            _FsmOutputAction[(short)FsmOutputType.LayerWeight].ServerAction     =
                _FsmOutputAction[(short)FsmOutputType.LayerWeight].ClientAction =
                    SetLayerWeightOut;

            _FsmOutputAction[(short)FsmOutputType.Bool].ServerAction     =
                _FsmOutputAction[(short)FsmOutputType.Bool].ClientAction =
                    SetCommonOut;

            _FsmOutputAction[(short)FsmOutputType.Float].ServerAction     =
                _FsmOutputAction[(short)FsmOutputType.Float].ClientAction =
                    SetCommonOut;

            _FsmOutputAction[(short)FsmOutputType.Int].ServerAction     =
                _FsmOutputAction[(short)FsmOutputType.Int].ClientAction =
                    SetCommonOut;
        }