using HarmonyLib; namespace CustomCosmeticLoader.Patches { /* * Hijack the cosmetic of the marble in single player, then apply the custom skin texture. */ [HarmonyPatch(typeof(MarbleController), nameof(MarbleController.ApplyMyCosmetics))] internal class MarbleControllerApplyMyCosmeticsPatch { [HarmonyPostfix] static void Postfix(MarbleController __instance) { if (!Config.enabled) return; if (Config.skinNameToHijack == "*") return; // Shouldn't happen I don't think but we do this elsewhere in mp if (NetworkManager.IsMultiplayer) return; MarbleHolder mHolder = __instance.MHolder; string actualSkinId = mHolder.CosmeticSet.skin; mHolder.SetMarble(Shared.SkinToHijack); Shared.ApplyCustomTexture(mHolder.currentMarble); // Setting the skin id here allows others in multiplayer/replays to see your normal skin mHolder.CosmeticSet.skin = actualSkinId; } } }