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 NoSmokeSimplified v1.1.0
NoSmokeSimplified.dll
Decompiled a year agousing System; 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 BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("NoSmokeSimplified")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("06f77987-3f97-4fc3-9f43-44a9412fbbfd")] [assembly: AssemblyFileVersion("1.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.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 NoSmokeSimplified { [BepInPlugin("TastyChickenLegs.NoSmokeSimplified", "NoSmokeSimplified", "1.1.0")] [BepInProcess("valheim.exe")] [BepInIncompatibility("Tastychickenlegs.NoSmokeStayLit")] public class NoSmokeSimplifiedMain : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("Tastychickenlegs.NoSmokeSimplified"); internal const string ModName = "NoSmokeSimplified"; internal const string ModVersion = "1.1.0"; internal const string Author = "TastyChickenLegs"; private const string ModGUID = "TastyChickenLegs.NoSmokeSimplified"; private static string ConfigFileName = "TastyChickenLegs.NoSmokeSimplified.cfg"; private static string ConfigFileFullPath; public static readonly ManualLogSource TastyLogger; public static NoSmokeSimplifiedMain context; private static ConfigEntry<bool> _configEnabled; internal static ConfigEntry<bool> fe_piece_brazierfloor01; internal static ConfigEntry<bool> fe_piece_brazierceiling01; public static ConfigEntry<bool> fe_fire_pit; internal static ConfigEntry<bool> fe_bonfire; internal static ConfigEntry<bool> fe_hearth; internal static ConfigEntry<bool> fe_smelter; internal static ConfigEntry<bool> keepOnInRain; internal static ConfigEntry<bool> fe_oven; private void Awake() { _configEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Mod Enabled", true, "Sets the mod to be enabled or not."); fe_fire_pit = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Camp Fire Enable Smoke", false, "Enable eternal Smoke for Bonfire"); fe_hearth = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Hearth Enable Smoke", false, "Enable Smoke for Hearth"); fe_piece_brazierfloor01 = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Standing Brazier Enable Smoke", false, "Enable for Standing brazier"); fe_piece_brazierceiling01 = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Ceiling Brazier Enable Smoke", false, "Enable timer for Hanging brazier"); fe_smelter = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Smelter Enable Smoke", false, "Enable Smoke for Smelter. This disables Smelter Stacking"); fe_bonfire = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Bonfire Enable Smoke", false, "Enable Smoke for Bonefire"); keepOnInRain = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Keep on in Rain", true, "Keep items from going out in the rain"); fe_oven = ((BaseUnityPlugin)this).Config.Bind<bool>("Really, I Want Smoke", "Oven Enable Smoke", false, "Enable Smoke for Cooking Station."); if (_configEnabled.Value) { harmony.PatchAll(); SetupWatcher(); } } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); harmony.UnpatchSelf(); } 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; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { TastyLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); TastyLogger.LogInfo((object)"NoSmokeSimplifiedConfig Reloaded"); } catch { TastyLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); TastyLogger.LogError((object)"Please check your config entries for spelling and format!"); } } static NoSmokeSimplifiedMain() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; TastyLogger = Logger.CreateLogSource("NoSmokeSimplified"); _configEnabled = null; } } } namespace NoSmokeSimplified.Patches { internal class Case { public static bool ConfigCheckGiveMeSmoke(string instanceName) { bool result = false; switch (instanceName) { case "fire_pit(Clone)": result = NoSmokeSimplifiedMain.fe_fire_pit.Value; break; case "hearth(Clone)": result = NoSmokeSimplifiedMain.fe_hearth.Value; break; case "piece_brazierfloor01(Clone)": result = NoSmokeSimplifiedMain.fe_piece_brazierfloor01.Value; break; case "piece_brazierceiling01(Clone)": result = NoSmokeSimplifiedMain.fe_piece_brazierceiling01.Value; break; case "smelter(Clone)": result = NoSmokeSimplifiedMain.fe_smelter.Value; break; case "piece_oven(Clone)": result = NoSmokeSimplifiedMain.fe_oven.Value; break; case "fire_pit_planned": result = NoSmokeSimplifiedMain.fe_fire_pit.Value; break; case "hearth_planned": result = NoSmokeSimplifiedMain.fe_hearth.Value; break; case "piece_brazierfloor01_planned": result = NoSmokeSimplifiedMain.fe_piece_brazierfloor01.Value; break; case "piece_brazierceiling01_planned": result = NoSmokeSimplifiedMain.fe_piece_brazierceiling01.Value; break; case "smelter_planned": result = NoSmokeSimplifiedMain.fe_smelter.Value; break; case "piece_oven_planned": result = NoSmokeSimplifiedMain.fe_oven.Value; break; } return result; } } internal class CookingStationPatch { [HarmonyPatch(typeof(CookingStation), "UpdateVisual")] private class CookingStationSmoke_Patch { private static void Postfix(CookingStation __instance, ref bool fireLit) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) string text = default(string); float num = default(float); Status val = default(Status); for (int i = 0; i < __instance.m_slots.Length; i++) { __instance.GetSlot(i, ref text, ref num, ref val); __instance.SetSlotVisual(i, text, fireLit, val); } if (__instance.m_useFuel) { bool active = __instance.GetFuel() > 0f; if (Object.op_Implicit((Object)(object)__instance.m_haveFireObject)) { __instance.m_haveFireObject.SetActive(fireLit); } if (Object.op_Implicit((Object)(object)__instance.m_haveFuelObject)) { __instance.m_haveFuelObject.SetActive(active); } } if (((Object)__instance).name.StartsWith("piece_oven(Clone)")) { if (Case.ConfigCheckGiveMeSmoke(((Object)__instance).name)) { ((Behaviour)((Component)Utils.FindChild(((Component)__instance).transform, "SmokeSpawner", (IterativeSearchType)0)).gameObject.GetComponent<SmokeSpawner>()).enabled = true; } else { ((Behaviour)((Component)Utils.FindChild(((Component)__instance).transform, "SmokeSpawner", (IterativeSearchType)0)).gameObject.GetComponent<SmokeSpawner>()).enabled = false; } } } } } internal class FirePlacePatch { [HarmonyPatch(typeof(Fireplace), "IsBurning")] private class FireplaceIsBurning_Patch { private static void Postfix(Fireplace __instance, ref bool __result, ref GameObject ___m_enabledObjectHigh) { //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) try { if (__instance.m_piece.m_name.StartsWith("$piece_candle", StringComparison.Ordinal)) { return; } if (Case.ConfigCheckGiveMeSmoke(((Object)__instance).name)) { if ((Object)(object)__instance.m_smokeSpawner != (Object)null) { ((Behaviour)__instance.m_smokeSpawner).enabled = true; } if (((Object)__instance).name.StartsWith("piece_brazier")) { ((Behaviour)((Component)Utils.FindChild(((Component)__instance).transform, "SmokeSpawner", (IterativeSearchType)0)).gameObject.GetComponent<SmokeSpawner>()).enabled = true; } if (NoSmokeSimplifiedMain.keepOnInRain.Value) { __instance.m_wet = false; } } else { if ((Object)(object)__instance.m_smokeSpawner != (Object)null) { ((Behaviour)__instance.m_smokeSpawner).enabled = false; if (NoSmokeSimplifiedMain.keepOnInRain.Value) { __instance.m_wet = false; } } if (((Object)__instance).name.StartsWith("piece_brazier")) { ((Behaviour)((Component)Utils.FindChild(((Component)__instance).transform, "SmokeSpawner", (IterativeSearchType)0)).gameObject.GetComponent<SmokeSpawner>()).enabled = false; if (NoSmokeSimplifiedMain.keepOnInRain.Value) { __instance.m_wet = false; } } } if (NoSmokeSimplifiedMain.keepOnInRain.Value) { __instance.m_wet = false; } float liquidLevel = Floating.GetLiquidLevel(__instance.m_enabledObject.transform.position, 1f, (LiquidType)10); __result = __instance.m_enabledObject.transform.position.y >= liquidLevel && __instance.m_nview.GetZDO().GetFloat("fuel", 0f) > 0f; } catch (Exception ex) { NoSmokeSimplifiedMain.TastyLogger.LogWarning((object)("NoSmokeSimplified" + ex)); } } } } internal class SmelterPatch { [HarmonyPatch(typeof(Smelter), "UpdateSmoke")] private class SmelterUpdateSmoke_Patch { private static void Postfix(Smelter __instance) { try { if (Case.ConfigCheckGiveMeSmoke(((Object)__instance).name)) { if ((Object)(object)__instance.m_smokeSpawner != (Object)null) { ((Behaviour)__instance.m_smokeSpawner).enabled = true; } } else if ((Object)(object)__instance.m_smokeSpawner != (Object)null) { ((Behaviour)__instance.m_smokeSpawner).enabled = false; __instance.m_blockedSmoke = false; } } catch (Exception ex) { NoSmokeSimplifiedMain.TastyLogger.LogWarning((object)("NoSmokeSimplified" + ex)); } } } } }