Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Morph Ball Soccer v1.0.0
MorphBall.dll
Decompiled 2 years agousing System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("MorphBall")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MorphBall")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("57f833e0-fd87-40ba-a798-ac42c29f3bd7")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace MorphBall { internal static class MyPluginInfo { public const string PLUGIN_GUID = "com.Dummydude.MorphBall"; public const string PLUGIN_NAME = "MorphBall"; public const string PLUGIN_VERSION = "1.0.0"; } [BepInPlugin("com.Dummydude.MorphBall", "MorphBall", "1.0.0")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("com.Dummydude.MorphBall"); public static string mainAssetBundleName = "balls"; public static AssetBundle MainAssetBundle = null; public GameObject VariaMorph; public GameObject LightMorph; public GameObject DarkMorph; public GameObject PowerMorph; public GameObject MetroidMorph; public GameObject GravityMorph; public GameObject[] morphGameObjects; public static Plugin Instance { get; private set; } public static ManualLogSource Log => ((BaseUnityPlugin)Instance).Logger; public void Awake() { Instance = this; Log.LogInfo((object)"Subscirbe to Dummydude"); harmony.PatchAll(); PopulateAssets(); } private static string GetAssemblyName() { return Assembly.GetExecutingAssembly().GetName().Name.Replace(" ", "_"); } public static void PopulateAssets() { if ((Object)(object)MainAssetBundle == (Object)null) { Console.WriteLine(GetAssemblyName() + "." + mainAssetBundleName); using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetAssemblyName() + "." + mainAssetBundleName); MainAssetBundle = AssetBundle.LoadFromStream(stream); } Instance.morphGameObjects = MainAssetBundle.LoadAllAssets<GameObject>(); Instance.VariaMorph = MainAssetBundle.LoadAsset<GameObject>("morphball8"); Instance.LightMorph = MainAssetBundle.LoadAsset<GameObject>("morphball3"); Instance.DarkMorph = MainAssetBundle.LoadAsset<GameObject>("morphball4"); Instance.PowerMorph = MainAssetBundle.LoadAsset<GameObject>("morphball5"); Instance.MetroidMorph = MainAssetBundle.LoadAsset<GameObject>("morphball6"); Instance.GravityMorph = MainAssetBundle.LoadAsset<GameObject>("morphball7"); } } } namespace MorphBall.Patches { [HarmonyPatch(typeof(GrabbableObject))] internal class GrabbableObjectPatch { [HarmonyPatch("Start")] [HarmonyPostfix] internal static void ReplaceModel(GrabbableObject __instance) { ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(delay(__instance)); } [HarmonyPatch("LoadItemSaveData")] [HarmonyPrefix] public static bool LoadSoccerBallData(GrabbableObject __instance, int saveData) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if (__instance.itemProperties.itemName == "Soccer ball") { Plugin.Log.LogInfo((object)$"Got soccerball input data. the save value is {saveData}"); __instance.useCooldown = saveData; GameObject val = Object.Instantiate<GameObject>(Plugin.Instance.morphGameObjects[(int)(__instance.useCooldown - 1f)], ((Component)__instance).gameObject.transform); val.transform.rotation = Quaternion.Euler(0f, 90f, 20f); val.transform.position = ((Component)__instance).transform.position; val.transform.localScale = new Vector3(2f, 2f, 2f); ((Renderer)((Component)__instance).gameObject.GetComponent<MeshRenderer>()).material = null; ((Component)__instance).gameObject.GetComponent<MeshFilter>().mesh = null; } return true; } [HarmonyPatch("GetItemDataToSave")] [HarmonyPrefix] public static bool GetSoccerBallDataToSave(GrabbableObject __instance, ref int __result) { if (__instance.itemProperties.itemName == "Soccer ball") { Plugin.Log.LogInfo((object)$"Morph Ball Variant is: {__instance.useCooldown}"); __result = (int)__instance.useCooldown; } return false; } internal static IEnumerator delay(GrabbableObject __instance) { yield return (object)new WaitForSeconds(0.5f); if (__instance.itemProperties.itemName == "Soccer ball" && __instance.useCooldown == 0f) { Plugin.Log.LogWarning((object)"The save value of the Soccer Ball is 0. This either means there is a safe file issue, or the Soccer Ball just spawned."); __instance.useCooldown = Random.Range(1, Plugin.Instance.morphGameObjects.Length + 1); GameObject randomMorph = Plugin.Instance.morphGameObjects[(int)__instance.useCooldown - 1]; GameObject morphball = Object.Instantiate<GameObject>(randomMorph, ((Component)__instance).gameObject.transform); morphball.transform.rotation = Quaternion.Euler(0f, 90f, 20f); morphball.transform.position = ((Component)__instance).transform.position; morphball.transform.localScale = new Vector3(2f, 2f, 2f); ((Renderer)((Component)__instance).gameObject.GetComponent<MeshRenderer>()).material = null; ((Component)__instance).gameObject.GetComponent<MeshFilter>().mesh = null; } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("LoadShipGrabbableItems")] [HarmonyPrefix] public static bool Method(StartOfRound __instance) { for (int i = 0; i < __instance.allItemsList.itemsList.Count; i++) { if (__instance.allItemsList.itemsList[i].itemName == "Soccer ball") { __instance.allItemsList.itemsList[i].saveItemVariable = true; Plugin.Log.LogInfo((object)"Successfully patched the item list."); } } return true; } } }