Decompiled source of NoSmokeSimplified v1.1.0

NoSmokeSimplified.dll

Decompiled a month ago
using 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));
				}
			}
		}
	}
}