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 REPOCartDecorations v1.1.2
REPO Cart Decorations.dll
Decompiled 9 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using Photon.Pun; using REPO_Cart_Decorations.Patches; using TMPro; 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("REPO Cart Decorations")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("REPO Cart Decorations")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("c2c4132e-3771-472d-a673-2d97a3bd837d")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace REPO_Cart_Decorations { public class CartDecorationManager : MonoBehaviour { public static CartDecorationManager instance; [Tooltip("List of all decoration prefabs to cycle through.")] public List<GameObject> decorations; [Tooltip("TextMeshPro to display the name of the current decoration.")] public TextMeshProUGUI label; [Tooltip("Reference to the cart the decorations will be attached to.")] public GameObject cart; public int currentIndex = 0; public GameObject currentDecoration; public void Awake() { instance = this; cart = GameObject.Find("Item Cart Medium(Clone)"); } public void Start() { Debug.Log((object)"CartManager - Start"); if (decorations == null || decorations.Count == 0) { Debug.LogError((object)"[CartDecorationManager] No decorations assigned."); return; } currentIndex = 0; if (currentIndex == -1) { currentIndex = 0; } ApplyDecorationToCart(); UpdateLabel(); } [PunRPC] public void Previous() { Debug.Log((object)"Previous called"); Cycle(-1); } [PunRPC] public void Next() { Debug.Log((object)"Next called"); Cycle(1); } [PunRPC] public void Update() { if (Input.GetKeyDown((KeyCode)44)) { Previous(); } if (Input.GetKeyDown((KeyCode)46)) { Next(); } } [PunRPC] public string GetCurrentDecorationName() { return ((Object)decorations[currentIndex].gameObject).name; } [PunRPC] public void Cycle(int direction) { Debug.Log((object)"Changing decoration!"); if (decorations.Count != 0) { currentIndex = (currentIndex + direction + decorations.Count) % decorations.Count; ApplyDecorationToCart(); UpdateLabel(); } } [PunRPC] public void ApplyDecorationToCart() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)currentDecoration != (Object)null) { Object.Destroy((Object)(object)currentDecoration); } currentDecoration = Object.Instantiate<GameObject>(decorations[currentIndex], cart.transform); currentDecoration.transform.localPosition = new Vector3(0f, 0f, 0f); currentDecoration.transform.localRotation = Quaternion.identity; } [PunRPC] public void UpdateLabel() { Debug.Log((object)"Updating decoration label!"); if ((Object)(object)label != (Object)null) { ((TMP_Text)label).text = ((Object)decorations[currentIndex]).name; } } } public class CartDecorationSelector : MonoBehaviour { private void Update() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) if (Input.GetMouseButtonDown(0)) { Ray val = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, ref val2) && (Object)(object)((Component)((RaycastHit)(ref val2)).collider).gameObject == (Object)(object)((Component)this).gameObject) { Debug.Log((object)"button was pressed. YES!!"); } } } } public class CartXMasLightController : MonoBehaviour { [CompilerGenerated] private sealed class <BlinkLight>d__7 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public int index; public CartXMasLightController <>4__this; private float <blinkTime>5__1; private bool <isOn>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <BlinkLight>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } <blinkTime>5__1 = Random.Range(<>4__this.minBlinkTime, <>4__this.maxBlinkTime); <isOn>5__2 = Random.value > 0.5f; if ((Object)(object)<>4__this.materials[index] != (Object)null) { if (<isOn>5__2) { <>4__this.materials[index].EnableKeyword("_EMISSION"); } else { <>4__this.materials[index].DisableKeyword("_EMISSION"); } } <>2__current = (object)new WaitForSeconds(<blinkTime>5__1); <>1__state = 1; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public List<GameObject> lights = new List<GameObject>(); public float minBlinkTime = 0.3f; public float maxBlinkTime = 1.5f; private Material[] materials; public bool hasTriggered = false; public void Start() { if (hasTriggered) { return; } materials = (Material[])(object)new Material[lights.Count]; for (int i = 0; i < lights.Count; i++) { Renderer component = lights[i].GetComponent<Renderer>(); if ((Object)(object)component != (Object)null) { materials[i] = component.material; } ((MonoBehaviour)this).StartCoroutine(BlinkLight(i)); hasTriggered = true; } } public void OnEnabled() { Start(); } [IteratorStateMachine(typeof(<BlinkLight>d__7))] private IEnumerator BlinkLight(int index) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <BlinkLight>d__7(0) { <>4__this = this, index = index }; } } public class CoroutineRunner : MonoBehaviour { [CompilerGenerated] private sealed class <EnableNextFrame>d__3 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public GameObject obj; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <EnableNextFrame>d__3(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; obj.SetActive(true); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static CoroutineRunner _instance; public static CoroutineRunner Instance { get { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown if ((Object)(object)_instance == (Object)null) { GameObject val = new GameObject("CoroutineRunner"); _instance = val.AddComponent<CoroutineRunner>(); Object.DontDestroyOnLoad((Object)(object)val); } return _instance; } } [IteratorStateMachine(typeof(<EnableNextFrame>d__3))] public static IEnumerator EnableNextFrame(GameObject obj) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <EnableNextFrame>d__3(0) { obj = obj }; } } [BepInPlugin("REPOCartDecos.Core", "REPO Cart Decos", "1.0.0")] public class REPOCartDecorations : BaseUnityPlugin { private const string modGUID = "REPOCartDecos.Core"; private const string modName = "REPO Cart Decos"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("REPOCartDecos.Core"); private static REPOCartDecorations instance; private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"REPO Cart Decos was awaken"); try { harmony.PatchAll(typeof(REPOCartDecorations)); harmony.PatchAll(typeof(PhysGrabCartBPatch)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Patching successful!"); } catch (Exception arg) { ((BaseUnityPlugin)this).Logger.LogError((object)$"Harmony patching failed: {arg}"); } } public void Update() { } } } namespace REPO_Cart_Decorations.Patches { [HarmonyPatch(typeof(PhysGrabCart), "Start")] internal class PhysGrabCartBPatch { public static bool foundCart = false; public static bool spawnedDecoController = false; public static bool spawnedDeco = false; public static int decoIndex = 1; public static GameObject decoRoot; public static List<GameObject> decoList = new List<GameObject>(); public static AssetBundle bundle; public static bool bundleLoaded = false; [HarmonyPatch("Update")] [HarmonyPostfix] public static void Update() { if (Input.GetKeyDown((KeyCode)46)) { Debug.Log((object)"Next deco would be loaded here"); SwitchDeco(); } } [HarmonyPatch("Start")] [HarmonyPostfix] public static void PatchCart() { //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) if ((foundCart && spawnedDeco) || spawnedDecoController) { return; } string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string text = Path.Combine(directoryName, "repocartdecorations"); Debug.Log((object)("[REPOCartDecoLogger] Looking for AssetBundle at: " + text)); if (!File.Exists(text)) { Debug.LogError((object)("[REPOCartDecoLogger] AssetBundle NOT FOUND at path: " + text)); return; } if (!bundleLoaded) { bundle = AssetBundle.LoadFromFile(text); if ((Object)(object)bundle == (Object)null) { Debug.LogError((object)"[REPOCartDecoLogger] Failed to load AssetBundle!"); return; } bundleLoaded = true; Debug.Log((object)"REPO Cart Decos bundle loaded!"); } GameObject val = bundle.LoadAsset<GameObject>("Winter Holiday"); GameObject val2 = bundle.LoadAsset<GameObject>("Cart Deco Castle"); GameObject val3 = bundle.LoadAsset<GameObject>("Cart Deco - Truck"); GameObject val4 = bundle.LoadAsset<GameObject>("Semitary"); Debug.Log((object)"[REPOCartDecoLogger] Cart prefab successfully loaded!"); GameObject val5 = GameObject.Find("Item Cart Medium(Clone)"); if ((Object)(object)val5 == (Object)null) { Debug.LogError((object)"[REPOCartDecoLogger] GameObject 'Item Cart Medium(Clone)' NOT found in scene!"); return; } GameObject val6 = new GameObject(); decoRoot = val6; decoRoot.transform.SetParent(val5.transform, false); decoRoot.transform.localPosition = new Vector3(0f, 0f, 0f); decoRoot.transform.localRotation = Quaternion.identity; if ((Object)(object)val5 != (Object)null) { Debug.Log((object)"Cart Found!"); } if ((Object)(object)decoRoot == (Object)null) { Debug.LogError((object)"Deco Root was not created!"); } if ((Object)(object)decoRoot != (Object)null) { Debug.Log((object)"Now attempting to instantiate the prefabs!"); GameObject val7 = Object.Instantiate<GameObject>(val); val7.transform.SetParent(decoRoot.transform, false); val7.transform.localPosition = new Vector3(0f, 0f, 0f); val7.transform.localRotation = Quaternion.identity; ((MonoBehaviour)CoroutineRunner.Instance).StartCoroutine(CoroutineRunner.EnableNextFrame(val7)); GameObject val8 = Object.Instantiate<GameObject>(val2); val8.transform.SetParent(decoRoot.transform, false); val8.transform.localPosition = new Vector3(0f, 0f, 0f); val8.transform.localRotation = Quaternion.identity; val8.SetActive(false); GameObject val9 = Object.Instantiate<GameObject>(val3); val9.transform.SetParent(decoRoot.transform, false); val9.transform.localPosition = new Vector3(0f, 0f, 0f); val9.transform.localRotation = Quaternion.identity; val9.SetActive(false); GameObject val10 = Object.Instantiate<GameObject>(val4); val10.transform.SetParent(decoRoot.transform, false); val10.transform.localPosition = new Vector3(0f, 0.033f, 0f); val10.transform.localRotation = Quaternion.identity; val10.SetActive(false); decoList.Add(val7); decoList.Add(val8); decoList.Add(val9); decoList.Add(val10); } } public static void TestMethod() { Debug.Log((object)"hello world"); Debug.Log((object)decoList); } public static void SwitchDeco() { for (int i = 0; i < decoRoot.transform.childCount; i++) { ((Component)decoRoot.transform.GetChild(i)).gameObject.SetActive(false); } if ((Object)(object)((Component)decoRoot.transform.GetChild(decoIndex)).gameObject == (Object)null) { Debug.Log((object)"No child at this index!"); return; } ((Component)decoRoot.transform.GetChild(decoIndex)).gameObject.SetActive(true); Debug.Log((object)("Cart Deco is now: " + ((Object)((Component)decoRoot.transform.GetChild(decoIndex)).gameObject).name)); if ((Object)(object)((Component)decoRoot.transform.GetChild(decoIndex)).gameObject.GetComponentInChildren<CartXMasLightController>() != (Object)null) { Debug.Log((object)"Found Light Controller"); CartXMasLightController componentInChildren = ((Component)decoRoot.transform.GetChild(decoIndex)).gameObject.GetComponentInChildren<CartXMasLightController>(); componentInChildren.hasTriggered = false; componentInChildren.Start(); } decoIndex++; if (decoIndex == decoRoot.transform.childCount) { decoIndex = 0; } } } }