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 HutchersonWhistle v1.0.3
Hutcherson Whistle.dll
Decompiled 2 years agousing System; 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 System.Security; using System.Security.Permissions; using BepInEx; using CustomEmotesAPI_Template_Mod; using EmotesAPI; using Hutcherson_Whistle; using Microsoft.CodeAnalysis; 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("Hutcherson Whistle")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Hutcherson Whistle")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a9e43460-d5a9-4333-a690-b426cb3bb807")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Hutcherson_Whistle { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.gameystew6.hutchersonwhistle", "hutchersonwhistle", "1.0.0")] public class Whistle : BaseUnityPlugin { public const string PluginGUID = "com.gameystew6.hutchersonwhistle"; public const string PluginName = "hutchersonwhistle"; public const string PluginVersion = "1.0.0"; public static Whistle instance; public static PluginInfo PInfo { get; private set; } public void Awake() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown instance = this; PInfo = ((BaseUnityPlugin)this).Info; Assets.LoadAssetBundlesFromFolder(); AnimationClipParams val = new AnimationClipParams(); val.animationClip = (AnimationClip[])(object)new AnimationClip[1] { Assets.Load<AnimationClip>("assets/whistle.anim") }; val.secondaryAnimation = (AnimationClip[])(object)new AnimationClip[1] { Assets.Load<AnimationClip>("assets/whistle2.anim") }; val.looping = true; val._primaryAudioClips = (AudioClip[])(object)new AudioClip[1] { Assets.Load<AudioClip>("assets/whistleaudio.mp3") }; val._secondaryAudioClips = null; val._primaryDMCAFreeAudioClips = null; val._secondaryDMCAFreeAudioClips = null; val.visible = true; val.syncAnim = false; val.syncAudio = false; val.startPref = -1; val.joinPref = -1; val.joinSpots = null; val.customName = "Josh Hutcherson Whistle"; val.lockType = (LockType)1; val.willGetClaimedByDMCA = true; val.audioLevel = 1f; val.stopWhenMove = true; CustomEmotesAPI.AddCustomAnimation(val); CustomEmotesAPI.animChanged += new AnimationChanged(CustomEmotesAPI_animChanged); } private void CustomEmotesAPI_animChanged(string newAnimation, BoneMapper mapper) { if (newAnimation == "whistle") { DebugClass.Log((object)"we whistled"); } } } } namespace CustomEmotesAPI_Template_Mod { public static class Assets { internal static readonly List<AssetBundle> AssetBundles = new List<AssetBundle>(); private static readonly Dictionary<string, int> AssetIndices = new Dictionary<string, int>(); public static void LoadAssetBundlesFromFolder() { string directoryName = Path.GetDirectoryName(Whistle.PInfo.Location); Console.WriteLine(directoryName); string[] files = Directory.GetFiles(directoryName); foreach (string text in files) { try { AssetBundle val = AssetBundle.LoadFromFile(text); int count = AssetBundles.Count; AssetBundles.Add(val); string[] allAssetNames = val.GetAllAssetNames(); foreach (string text2 in allAssetNames) { string text3 = text2.ToLowerInvariant(); if (text3.StartsWith("assets/")) { text3 = text3.Remove(0, "assets/".Length); } AssetIndices[text3] = count; } DebugClass.Log((object)("Loaded AssetBundle: " + Path.GetFileName(text))); } catch (Exception arg) { DebugClass.Log((object)$"AssetBundle Load Failed: {arg}"); } } } public static T Load<T>(string assetName) where T : Object { try { assetName = assetName.ToLowerInvariant(); if (assetName.Contains(":")) { string[] array = assetName.Split(':'); assetName = array[1].ToLowerInvariant(); } if (assetName.StartsWith("assets/")) { assetName = assetName.Remove(0, "assets/".Length); } int index = AssetIndices[assetName]; return AssetBundles[index].LoadAsset<T>("assets/" + assetName); } catch (Exception arg) { DebugClass.Log((object)$"Couldn't load asset [{assetName}] reason: {arg}"); return default(T); } } } }