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 Logo Changer v1.0.12
LogoChanger.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; 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 BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LogoChanger")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Azumatt")] [assembly: AssemblyProduct("LogoChanger")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")] [assembly: AssemblyFileVersion("1.0.12")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.12.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace LogoChanger { [BepInPlugin("Azumatt.LogoChanger", "LogoChanger", "1.0.12")] public class LogoChangerPlugin : BaseUnityPlugin { private enum Toggle { On = 1, Off = 0 } internal const string ModName = "LogoChanger"; internal const string ModVersion = "1.0.12"; internal const string Author = "Azumatt"; private const string ModGUID = "Azumatt.LogoChanger"; private static readonly string ConfigFileName = "Azumatt.LogoChanger.cfg"; private static readonly string ConfigFileFullPath; private readonly Harmony _harmony = new Harmony("Azumatt.LogoChanger"); private static readonly ManualLogSource LogoChangerLogger; internal static bool IsAshlandsLogoAdjusted; private static ConfigEntry<Toggle> _modEnabled; private static ConfigEntry<string> _mainMenuLogo; private static ConfigEntry<string> _mistMenuLogo; private static Sprite _mainLogoSprite; private static Sprite _mistLogoSprite; public void Awake() { _modEnabled = ((BaseUnityPlugin)this).Config.Bind<Toggle>("1 - General", "Mod Enabled?", Toggle.On, "Enable/Disable the mod"); _mainMenuLogo = ((BaseUnityPlugin)this).Config.Bind<string>("2 - Main Menu", "Main Menu Logo", "LogoChanger_LOGO.png", "The logo to use on the main menu to replace \"Valheim\" image, should be found somewhere in the plugins folder and sized at 1000x394"); _mistMenuLogo = ((BaseUnityPlugin)this).Config.Bind<string>("2 - Main Menu", "Mislands Menu Logo", "LogoChanger_AshlandsLogo.png", "The logo to use on the main menu to replace \"Valheim\" image, should be found somewhere in the plugins folder and sized at 2048x448"); _modEnabled.SettingChanged += ReloadImagesFromFolder; MoveImagesToConfigFolder(); ReloadImagesFromFolder(null, null); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; FileSystemWatcher fileSystemWatcher2 = new FileSystemWatcher(Paths.ConfigPath, "LogoChanger*.png"); fileSystemWatcher2.Changed += ReloadImagesFromFolder; fileSystemWatcher2.Created += ReloadImagesFromFolder; fileSystemWatcher2.Renamed += ReloadImagesFromFolder; fileSystemWatcher2.IncludeSubdirectories = true; fileSystemWatcher2.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher2.EnableRaisingEvents = true; } private static void MoveImagesToConfigFolder() { string text = Path.Combine(Paths.ConfigPath, "Azumatt.LogoChanger_Images"); if (!Directory.Exists(text)) { Directory.CreateDirectory(text); } string[] files = Directory.GetFiles(Paths.PluginPath, "LogoChanger*.png", SearchOption.AllDirectories); string[] files2 = Directory.GetFiles(Paths.PluginPath, "DefaultLogos.zip", SearchOption.AllDirectories); if (files2.Length != 0) { string sourceFileName = files2[0]; string text2 = Path.Combine(text, "DefaultLogos.zip"); if (File.Exists(text2)) { File.Delete(text2); } File.Move(sourceFileName, text2); } string[] array = files; foreach (string obj in array) { string fileName = Path.GetFileName(obj); string destFileName = Path.Combine(text, fileName); File.Move(obj, destFileName); } } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { LogoChangerLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { LogoChangerLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); LogoChangerLogger.LogError((object)"Please check your config entries for spelling and format!"); } } internal static void ReloadImagesFromFolder(object sender, FileSystemEventArgs e) { if (CheckIfStartScene() && _modEnabled.Value == Toggle.On) { Load("(file system)"); FindMenuLogos(); } } private static void ReloadImagesFromFolder(object sender, EventArgs e) { if (CheckIfStartScene() && _modEnabled.Value == Toggle.On) { Load("(setting changed)"); FindMenuLogos(); } } private static void Load(string calledMethod) { LogoChangerLogger.LogDebug((object)("ReloadImagesFromFolder " + calledMethod + " called")); if ((Object)(object)Player.m_localPlayer != (Object)null) { ((Character)Player.m_localPlayer).Message((MessageType)2, "Reloading images...please wait...", 12, (Sprite)null); } if (_modEnabled.Value == Toggle.On) { _mainLogoSprite = LoadSprite(_mainMenuLogo.Value); _mistLogoSprite = LoadSprite(_mistMenuLogo.Value); } } private static Sprite LoadSprite(string name, bool isEmbed = false) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) Texture2D val = LoadTexture(name, isEmbed); if (!((Object)(object)val != (Object)null)) { return null; } return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero); } private static Texture2D LoadTexture(string name, bool isEmbed) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown string name2 = name; Texture2D val = new Texture2D(0, 0); string directoryName = Path.GetDirectoryName(Paths.ConfigPath); if (directoryName == null) { return val; } List<string> list = Directory.GetFiles(directoryName, "LogoChanger*.png", SearchOption.AllDirectories).OrderBy(Path.GetFileName).ToList(); try { byte[] array = File.ReadAllBytes(list.Find((string x) => x.Contains(name2))); ImageConversion.LoadImage(val, array); } catch (Exception arg) { LogoChangerLogger.LogWarning((object)("The file " + name2 + " couldn't be found in the directory path. Please make sure you are naming your files correctly and they are location somewhere in the BepInEx/plugins folder.\n" + $" Optionally, you can turn off 'Use Custom Backgrounds' inside of your configuration file. If you no longer wish to see this error.\n {arg}")); val = null; } return val; } internal static bool CheckIfStartScene() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); return ((Scene)(ref activeScene)).name == "start"; } private static void FindMenuLogos() { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_mainLogoSprite == (Object)null || (Object)(object)_mistLogoSprite == (Object)null) { return; } Transform obj = Utils.FindChild(FejdStartup.m_instance.m_mainMenu.transform, "Logo", (IterativeSearchType)0); Transform val = ((obj != null) ? ((Component)obj).transform : null); if (!((Object)(object)val == (Object)null)) { TryUpdateLogo(val, "LOGO", _mainLogoSprite, "Couldn't find LOGO in hierarchy of the main menu or couldn't assign the LOGO sprite."); Transform obj2 = Utils.FindChild(val, "Ashlands", (IterativeSearchType)0); if (obj2 != null) { ((Component)obj2).gameObject.SetActive(true); } Transform val2 = Utils.FindChild(val, "AshlandsLogo", (IterativeSearchType)0); if (!Object.op_Implicit((Object)(object)val2)) { LogoChangerLogger.LogError((object)"Couldn't find AshlandsLogo in hierarchy of the main menu or couldn't assign the AshlandsLogo sprite."); throw new Exception(); } if (!IsAshlandsLogoAdjusted) { val2.localPosition -= new Vector3(0f, 10f, 0f); IsAshlandsLogoAdjusted = true; } ((Component)val2).GetComponent<Image>().sprite = _mistLogoSprite; string[] array = new string[4] { "Embers", "Embers (1)", "Embers (2)", "Embers (3)" }; _ = new string[4] { "Embers", "Embers (1)", "Embers (2)", "Embers (3)" }; string[] array2 = new string[7] { "Heat Distortion", "AshlandsLogo_Glow", "Embers", "Embers (1)", "Embers (2)", "Embers (3)", "Ash" }; foreach (string text in array2) { TryDisableChild(val, text, "Couldn't find " + text + " in hierarchy of the main menu or couldn't disable " + text + " gameobject."); } array2 = array; foreach (string text2 in array2) { TryDisableChild(val, text2, "Couldn't find " + text2 + " in hierarchy of the main menu or couldn't disable " + text2 + " gameobject."); } } } private static void TryUpdateLogo(Transform parentTransform, string childName, Sprite logoSprite, string errorMessage) { try { ((Component)Utils.FindChild(parentTransform, childName, (IterativeSearchType)0)).GetComponent<Image>().sprite = logoSprite; } catch (Exception arg) { LogoChangerLogger.LogError((object)$"{errorMessage} {arg}"); throw; } } private static void TryDisableChild(Transform parentTransform, string childName, string errorMessage) { try { ((Component)Utils.FindChild(parentTransform, childName, (IterativeSearchType)0)).gameObject.SetActive(false); } catch (Exception arg) { LogoChangerLogger.LogError((object)$"{errorMessage} {arg}"); throw; } } static LogoChangerPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; LogoChangerLogger = Logger.CreateLogSource("LogoChanger"); IsAshlandsLogoAdjusted = false; _modEnabled = null; _mainMenuLogo = null; _mistMenuLogo = null; _mainLogoSprite = null; _mistLogoSprite = null; } } [HarmonyPatch(typeof(Player), "Awake")] internal static class PlayerAwakePatch { private static void Prefix(Player __instance) { if (!LogoChangerPlugin.CheckIfStartScene()) { LogoChangerPlugin.IsAshlandsLogoAdjusted = false; } else { LogoChangerPlugin.ReloadImagesFromFolder(null, null); } } } }