public void SubSetBodyPart(BodyPart Body_Part, string path)
        {
            path = path + "/" + Body_Part.name;

            CustomisationStorage customisationStorage = null;

            foreach (var Custom in ThisCharacter.SerialisedBodyPartCustom)
            {
                if (path == Custom.path)
                {
                    customisationStorage = Custom;
                    break;
                }
            }

            if (customisationStorage != null)
            {
                var data = customisationStorage.Data.Replace("@£", "\"");
                if (Body_Part.OptionalOrgans.Count > 0)
                {
                    BodyPartDropDownOrgans.PlayerBodyDeserialise(Body_Part, data, livingHealthMasterBase);
                }
                else if (Body_Part.OptionalReplacementOrgan.Count > 0)
                {
                    BodyPartDropDownReplaceOrgan.OnPlayerBodyDeserialise(Body_Part, data);
                }
                else
                {
                    if (Body_Part.LobbyCustomisation == null)
                    {
                        Logger.Log($"[PlayerSprites] - Could not find {Body_Part.name}'s characterCustomization script. Returns -> {Body_Part.LobbyCustomisation.characterCustomization}", Category.Character);
                        return;
                    }
                    Body_Part.LobbyCustomisation.OnPlayerBodyDeserialise(Body_Part, data, livingHealthMasterBase);
                }
            }


            foreach (var bodyPartOrgan in Body_Part.ContainBodyParts)
            {
                SubSetBodyPart(bodyPartOrgan, path);
            }
        }
        public void SetupSprites()
        {
            CustomisationStorage customisationStorage = null;

            if (ThisCharacter.SerialisedBodyPartCustom == null)
            {
                //TODO : (Max) - Fix SerialisedBodyPartCustom being null on Dummy players
                Logger.LogWarning($"{gameObject} has spawned with null bodyPart customizations. This error should only appear for Dummy players only.");
                return;
            }

            foreach (var Custom in ThisCharacter.SerialisedBodyPartCustom)
            {
                if (livingHealthMasterBase.name == Custom.path)
                {
                    customisationStorage = Custom;
                    break;
                }
            }

            if (customisationStorage != null)
            {
                BodyPartDropDownOrgans.PlayerBodyDeserialise(null, customisationStorage.Data, livingHealthMasterBase);
            }

            foreach (var bodyPart in livingHealthMasterBase.BodyPartList)
            {
                SubSetBodyPart(bodyPart, "");
            }

            PlayerHealthData SetRace = null;

            foreach (var Race in RaceSOSingleton.Instance.Races)
            {
                if (Race.name == ThisCharacter.Species)
                {
                    SetRace = Race;
                }
            }

            List <IntName> ToClient = new List <IntName>();

            foreach (var Customisation in SetRace.Base.CustomisationSettings)
            {
                ExternalCustomisation externalCustomisation = null;
                foreach (var EC in ThisCharacter.SerialisedExternalCustom)
                {
                    if (EC.Key == Customisation.CustomisationGroup.name)
                    {
                        externalCustomisation = EC;
                    }
                }

                if (externalCustomisation == null)
                {
                    continue;
                }


                var Net = SpriteHandlerManager.GetRecursivelyANetworkBehaviour(this.gameObject);
                var SpriteHandlerNorder = Instantiate(ToInstantiateSpriteCustomisation.gameObject, CustomisationSprites.transform)
                                          .GetComponent <SpriteHandlerNorder>();
                SpriteHandlerManager.UnRegisterHandler(Net, SpriteHandlerNorder.SpriteHandler);

                SpriteHandlerNorder.transform.localPosition = Vector3.zero;
                SpriteHandlerNorder.name = Customisation.CustomisationGroup.ThisType.ToString();
                SpriteHandlerManager.RegisterHandler(Net, SpriteHandlerNorder.SpriteHandler);

                var newone = new IntName();
                newone.Int =
                    CustomNetworkManager.Instance.IndexLookupSpawnablePrefabs[ToInstantiateSpriteCustomisation.gameObject];

                newone.Name = Customisation.CustomisationGroup.ThisType.ToString();
                ToClient.Add(newone);

                OpenSprites.Add(SpriteHandlerNorder);
                //SubSetBodyPart
                foreach (var Sprite_s in Customisation.CustomisationGroup.PlayerCustomisations)
                {
                    if (Sprite_s.Name == externalCustomisation.SerialisedValue.SelectedName)
                    {
                        SpriteHandlerNorder.SpriteHandler.SetSpriteSO(Sprite_s.SpriteEquipped);
                        SpriteHandlerNorder.SetSpriteOrder(new SpriteOrder(Customisation.CustomisationGroup.SpriteOrder));
                        newone.Data = JsonConvert.SerializeObject(new SpriteOrder(SpriteHandlerNorder.SpriteOrder));
                        Color setColor = Color.black;
                        ColorUtility.TryParseHtmlString(externalCustomisation.SerialisedValue.Colour, out setColor);
                        setColor.a = 1;
                        SpriteHandlerNorder.SpriteHandler.SetColor(setColor);
                    }
                }
            }
            GetComponent <RootBodyPartController>().PlayerSpritesData = JsonConvert.SerializeObject(ToClient);

            SetSurfaceColour();
            OnDirectionChange(directional.CurrentDirection);
        }