Decompiled source of Eternal Force Field v1.0.0

plugins/Digitalroot.Valheim.EternalForceField.dll

Decompiled a day ago
using 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 System.Text;
using System.Threading;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Digitalroot.Modding.Framework.Common.Json;
using Digitalroot.Modding.Framework.Logging;
using Digitalroot.Modding.Framework.Names.Vanilla;
using Digitalroot.Modding.Framework.Utils;
using JetBrains.Annotations;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using SimpleJson;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Digitalroot.Valheim.EternalForceField")]
[assembly: AssemblyDescription("Eternal Force Field")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Digitalroot Technologies")]
[assembly: AssemblyProduct("Digitalroot Valheim Mods")]
[assembly: AssemblyCopyright("Copyright © Digitalroot Technologies 2021 - 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("3ccc4dc1-5b17-47c1-b996-ca03b8639a61")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Digitalroot.Valheim.EternalForceField
{
	[BepInPlugin("digitalroot.eternalforcefield", "Eternal Force Field", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class Main : BaseUnityPlugin, ITraceableLogging
	{
		internal static class PluginConfigSection
		{
			internal static readonly string General = "General";

			internal static readonly string Advanced = "Advanced";

			internal static readonly string ForceField = "ForceField";
		}

		public static Main Instance;

		private const string TotemPreFabName = "piece_bone_totem_force_field";

		private const float BaseForceFieldSize = 6f;

		public const string Version = "1.0.0";

		public const string Name = "Eternal Force Field";

		public const string Guid = "digitalroot.eternalforcefield";

		public const string Namespace = "Digitalroot.Valheim.EternalForceField";

		[UsedImplicitly]
		public static ConfigEntry<int> NexusId { get; private set; }

		public static ConfigEntry<float> Size { get; private set; }

		private static Vector3 ForceFieldScale => Vector3.one * (6f + Size.Value);

		public string Source => "Digitalroot.Valheim.EternalForceField";

		public bool EnableTrace { get; }

		public Main()
		{
			Instance = this;
			EnableTrace = false;
		}

		[UsedImplicitly]
		private void Awake()
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Expected O, but got Unknown
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Expected O, but got Unknown
			try
			{
				if (EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
				}
				NexusId = ((BaseUnityPlugin)this).Config.Bind<int>(PluginConfigSection.General, "NexusID", 4424, new ConfigDescription("Nexus mod ID for updates", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
				{
					Browsable = false,
					ReadOnly = true
				} }));
				Size = ((BaseUnityPlugin)this).Config.Bind<float>(PluginConfigSection.Advanced, "ForceFieldSize", 40f, new ConfigDescription("Size of the Force Field", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1] { (object)new ConfigurationManagerAttributes
				{
					Browsable = true,
					ReadOnly = false,
					IsAdminOnly = true,
					IsAdvanced = true
				} }));
				PrefabManager.OnVanillaPrefabsAvailable += PrefabManager_OnVanillaPrefabsAvailable;
				Size.SettingChanged += Size_SettingChanged;
			}
			catch (Exception e)
			{
				Log.Error(Instance, e);
			}
		}

		[UsedImplicitly]
		private void OnDestroy()
		{
			try
			{
				if (EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
				}
				PrefabManager.OnVanillaPrefabsAvailable -= PrefabManager_OnVanillaPrefabsAvailable;
				Size.SettingChanged -= Size_SettingChanged;
			}
			catch (Exception e)
			{
				Log.Error(Instance, e);
			}
		}

		private static GameObject CreateKitbashedPrefab()
		{
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_010f: Expected O, but got Unknown
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02de: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Expected O, but got Unknown
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0322: Unknown result type (might be due to invalid IL or missing references)
			//IL_0329: Unknown result type (might be due to invalid IL or missing references)
			//IL_032e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0364: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			if (Instance.EnableTrace)
			{
				Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
			}
			GameObject totem = PrefabManager.Instance.CreateClonedPrefab("piece_bone_totem_force_field", "goblin_totempole");
			if (!Object.op_Implicit((Object)(object)totem.GetComponent<Piece>()))
			{
				totem.AddComponent<Piece>();
			}
			KitbashObject obj = KitbashManager.Instance.AddKitbash(totem, new KitbashConfig
			{
				FixReferences = true,
				KitbashSources = new List<KitbashSourceConfig>
				{
					new KitbashSourceConfig
					{
						Name = PluginConfigSection.ForceField,
						SourcePrefab = "Hildir_camp",
						SourcePath = PluginConfigSection.ForceField,
						Position = new Vector3(0f, -0.5f, 0f),
						Rotation = Quaternion.identity,
						Scale = ForceFieldScale
					}
				}
			});
			obj.OnKitbashApplied = (Action)Delegate.Combine(obj.OnKitbashApplied, (Action)delegate
			{
				//IL_0021: Unknown result type (might be due to invalid IL or missing references)
				Transform val4 = totem.transform.Find(PluginConfigSection.ForceField);
				if (!((Object)(object)val4 == (Object)null))
				{
					val4.localScale = ForceFieldScale;
					MeshRenderer[] componentsInChildren2 = ((Component)val4).GetComponentsInChildren<MeshRenderer>(true);
					foreach (MeshRenderer val5 in componentsInChildren2)
					{
						Material[] array2 = ((IEnumerable<Material>)((Renderer)val5).sharedMaterials).Select((Func<Material, Material>)((Material m) => new Material(m))).ToArray();
						Material[] array3 = array2;
						foreach (Material val6 in array3)
						{
							if (val6.HasProperty("_RefractionIntensity"))
							{
								float num3 = val6.GetFloat("_RefractionIntensity");
								val6.SetFloat("_RefractionIntensity", num3 * 0.5f);
								if (Instance.EnableTrace)
								{
									Log.Trace(Instance, string.Format("{0}.{1} [{2} -> {3}]", "Main", "CreateKitbashedPrefab", num3, num3 * 0.5f));
								}
							}
						}
						((Renderer)val5).sharedMaterials = array2;
					}
				}
			});
			Pickable component = totem.GetComponent<Pickable>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Object.DestroyImmediate((Object)(object)component);
			}
			DropOnDestroyed component2 = totem.GetComponent<DropOnDestroyed>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				Object.DestroyImmediate((Object)(object)component2);
			}
			GameObject prefab = PrefabManager.Instance.GetPrefab(ItemDropNames.GoblinTotem);
			Sprite[] array = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : null)?.m_itemData?.m_shared?.m_icons;
			if (array != null && array.Length != 0)
			{
				totem.GetComponent<Piece>().m_icon = array[0];
			}
			Color val = default(Color);
			((Color)(ref val))..ctor(0.2f, 0.9f, 1f, 0.25f);
			foreach (Transform item in totem.GetComponentsInChildren<Transform>(true).Where(delegate(Transform t)
			{
				string name = ((Object)t).name;
				return (name == "flare" || name == "sparcs (1)") ? true : false;
			}))
			{
				if (Instance.EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name + " [" + ((Object)item).name + "]");
				}
				if (!((Object)(object)item != (Object)null))
				{
					continue;
				}
				ParticleSystem[] componentsInChildren = ((Component)item).GetComponentsInChildren<ParticleSystem>(true);
				foreach (ParticleSystem obj2 in componentsInChildren)
				{
					MainModule main = obj2.main;
					((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(val);
					ColorOverLifetimeModule colorOverLifetime = obj2.colorOverLifetime;
					if (((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled)
					{
						MinMaxGradient color = ((ColorOverLifetimeModule)(ref colorOverLifetime)).color;
						Gradient gradient = ((MinMaxGradient)(ref color)).gradient;
						Gradient val2 = new Gradient();
						val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
						{
							new GradientColorKey(val, 0f),
							new GradientColorKey(val, 1f)
						}, (GradientAlphaKey[])((gradient != null) ? ((Array)gradient.alphaKeys) : ((Array)new GradientAlphaKey[2]
						{
							new GradientAlphaKey(1f, 0f),
							new GradientAlphaKey(0f, 1f)
						})));
						((ColorOverLifetimeModule)(ref colorOverLifetime)).color = new MinMaxGradient(val2);
					}
				}
			}
			Transform val3 = ((IEnumerable<Transform>)totem.GetComponentsInChildren<Transform>(true)).FirstOrDefault((Func<Transform, bool>)((Transform t) => ((Object)t).name == "Totem"));
			if ((Object)(object)val3 != (Object)null)
			{
				MoveChildrenUpAndDisable(val3, new string[2] { "model", "Point light" });
			}
			return totem;
		}

		private static void MoveChildrenUpAndDisable(Transform target, IEnumerable<string> skipList)
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected O, but got Unknown
			try
			{
				if (Instance.EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
				}
				Transform parent = target.parent;
				if ((Object)(object)parent == (Object)null)
				{
					return;
				}
				List<Transform> list = new List<Transform>();
				List<string> list2 = skipList.ToList();
				foreach (Transform item in target)
				{
					Transform val = item;
					if (!list2.Contains(((Object)val).name))
					{
						list.Add(val);
					}
				}
				foreach (Transform item2 in list)
				{
					if (Instance.EnableTrace)
					{
						Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name + "[" + ((Object)item2).name + "]");
					}
					item2.SetParent(parent, true);
				}
				((Component)target).gameObject.SetActive(false);
			}
			catch (Exception e)
			{
				Log.Error(Instance, e);
			}
		}

		private void PrefabManager_OnVanillaPrefabsAvailable()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Expected O, but got Unknown
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Expected O, but got Unknown
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			try
			{
				if (EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
				}
				GameObject obj = CreateKitbashedPrefab();
				PieceConfig val = new PieceConfig();
				val.PieceTable = "Hammer";
				val.Name = "$piece_bone_totem_force_field";
				val.Description = "$piece_bone_totem_force_field_desc";
				val.Usage = new string[3] { "Misc", "Defense", "Furniture" };
				val.Requirements = (RequirementConfig[])(object)new RequirementConfig[3]
				{
					new RequirementConfig(ItemDropNames.Wood, 10, 0, true),
					new RequirementConfig(ItemDropNames.BoneFragments, 10, 0, true),
					new RequirementConfig(ItemDropNames.HardAntler, 1, 0, true)
				};
				CustomPiece val2 = new CustomPiece(obj, true, val);
				PieceManager.Instance.AddPiece(val2);
			}
			catch (Exception e)
			{
				Log.Error(Instance, e);
			}
			finally
			{
				PrefabManager.OnVanillaPrefabsAvailable -= PrefabManager_OnVanillaPrefabsAvailable;
			}
		}

		private void Size_SettingChanged(object sender, EventArgs e)
		{
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (EnableTrace)
				{
					Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name);
				}
				GameObject prefab = PrefabManager.Instance.GetPrefab("piece_bone_totem_force_field");
				if ((Object)(object)prefab != (Object)null)
				{
					Transform val = prefab.transform.Find(PluginConfigSection.ForceField);
					if ((Object)(object)val != (Object)null)
					{
						if (EnableTrace)
						{
							Log.Trace(Instance, MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name + " [Updating prefab scale]");
						}
						val.localScale = ForceFieldScale;
					}
				}
				if (!((Object)(object)ZNetScene.instance != (Object)null) || !((Behaviour)ZNetScene.instance).isActiveAndEnabled)
				{
					return;
				}
				int num = 0;
				int hash = StringExtensionMethods.GetStableHashCode("piece_bone_totem_force_field");
				foreach (ZNetView item in ZNetScene.instance.m_instances.Values.Where(delegate(ZNetView v)
				{
					if (Object.op_Implicit((Object)(object)v))
					{
						ZDO zDO = v.GetZDO();
						if (zDO == null)
						{
							return false;
						}
						return zDO.GetPrefab() == hash;
					}
					return false;
				}))
				{
					if (EnableTrace)
					{
						Log.Trace(Instance, $"{MethodBase.GetCurrentMethod()?.DeclaringType?.Name}.{MethodBase.GetCurrentMethod()?.Name} [{num}:{((Object)item).name}]");
					}
					Transform val2 = ((Component)item).gameObject.transform.Find(PluginConfigSection.ForceField);
					if ((Object)(object)val2 != (Object)null)
					{
						if (EnableTrace)
						{
							Log.Trace(Instance, $"{MethodBase.GetCurrentMethod()?.DeclaringType?.Name}.{MethodBase.GetCurrentMethod()?.Name} [{num}:{val2.localScale}]");
						}
						val2.localScale = ForceFieldScale;
						if (EnableTrace)
						{
							Log.Trace(Instance, $"{MethodBase.GetCurrentMethod()?.DeclaringType?.Name}.{MethodBase.GetCurrentMethod()?.Name} [{num}:{val2.localScale}]");
						}
					}
					num++;
				}
			}
			catch (Exception e2)
			{
				Log.Error(Instance, e2);
			}
		}
	}
}
namespace Digitalroot.Modding.Framework.Logging
{
	internal interface ITraceableLogging
	{
		string Source { get; }

		bool EnableTrace { get; }
	}
	internal sealed class Log
	{
		private static readonly Dictionary<string, TraceLogger> TraceLoggers;

		[UsedImplicitly]
		private static Log Instance { get; }

		static Log()
		{
			TraceLoggers = new Dictionary<string, TraceLogger>();
			Instance = new Log();
		}

		private Log()
		{
			TraceLoggers.Add("Digitalroot", new TraceLogger("Digitalroot", enableTrace: false));
		}

		public static void RegisterSource(ITraceableLogging sender)
		{
			if ((!TraceLoggers.ContainsKey(sender.Source) || TraceLoggers[sender.Source].IsTraceEnabled != sender.EnableTrace) && (!TraceLoggers.ContainsKey(sender.Source) || sender.EnableTrace))
			{
				if (TraceLoggers.ContainsKey(sender.Source) && sender.EnableTrace)
				{
					TraceLoggers[sender.Source].EnableTrace();
				}
				else
				{
					TraceLoggers.Add(sender.Source, new TraceLogger(sender.Source, sender.EnableTrace));
				}
			}
		}

		private static TraceLogger GetTraceLogger(ITraceableLogging sender)
		{
			if (!TraceLoggers.ContainsKey(sender.Source))
			{
				return TraceLoggers["Digitalroot"];
			}
			return TraceLoggers[sender.Source];
		}

		[UsedImplicitly]
		public static void SetEnableTrace(ITraceableLogging sender, bool value)
		{
			if (value)
			{
				GetTraceLogger(sender).EnableTrace();
			}
			else
			{
				GetTraceLogger(sender).DisableTrace();
			}
		}

		[UsedImplicitly]
		public static void SetEnableTraceForAllLoggers(bool value)
		{
			foreach (TraceLogger value2 in TraceLoggers.Values)
			{
				if (value)
				{
					value2.EnableTrace();
				}
				else
				{
					value2.DisableTrace();
				}
			}
		}

		[UsedImplicitly]
		public static void Debug(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogDebug(value);
		}

		[UsedImplicitly]
		public static void Error(ITraceableLogging sender, Exception e, int i = 1)
		{
			Error(sender, "Message: " + e.Message);
			Error(sender, $"TargetSite: {e.TargetSite}");
			Error(sender, "StackTrace: " + e.StackTrace);
			Error(sender, "Source: " + e.Source);
			if (e.Data.Count > 0)
			{
				foreach (object key in e.Data.Keys)
				{
					Error(sender, $"key: {key}, value: {e.Data[key]}");
				}
			}
			if (e.InnerException != null)
			{
				Error(sender, $"--- InnerException [{i}][Start] ---");
				Error(sender, e.InnerException, ++i);
			}
		}

		[UsedImplicitly]
		public static void Error(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogError(value);
		}

		[UsedImplicitly]
		public static void Info(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogInfo(value);
		}

		[UsedImplicitly]
		public static void Fatal(ITraceableLogging sender, Exception e, int i = 1)
		{
			Fatal(sender, "Message: " + e.Message);
			Fatal(sender, $"TargetSite: {e.TargetSite}");
			Fatal(sender, "StackTrace: " + e.StackTrace);
			Fatal(sender, "Source: " + e.Source);
			if (e.Data.Count > 0)
			{
				foreach (object key in e.Data.Keys)
				{
					Fatal(sender, $"key: {key}, value: {e.Data[key]}");
				}
			}
			if (e.InnerException != null)
			{
				Fatal(sender, $"--- InnerException [{i}][Start] ---");
				Fatal(sender, e.InnerException, ++i);
			}
		}

		[UsedImplicitly]
		public static void Fatal(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogFatal(value);
		}

		[UsedImplicitly]
		public static void Message(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogMessage(value);
		}

		[UsedImplicitly]
		public static void Trace(ITraceableLogging sender, object value)
		{
			if (GetTraceLogger(sender).IsTraceEnabled || sender.EnableTrace)
			{
				GetTraceLogger(sender).LoggerRef.Log((LogLevel)63, value);
			}
		}

		[UsedImplicitly]
		public static void Warning(ITraceableLogging sender, object value)
		{
			GetTraceLogger(sender).LoggerRef.LogWarning(value);
		}
	}
	internal class TraceLogger
	{
		internal readonly ManualLogSource LoggerRef;

		private readonly string _source;

		private readonly FileInfo _traceFileInfo;

		public bool IsTraceEnabled { get; private set; }

		private DirectoryInfo AssemblyDirectory => new FileInfo(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path)).Directory;

		public TraceLogger(string source, bool enableTrace)
		{
			_source = source;
			IsTraceEnabled = enableTrace;
			LoggerRef = Logger.CreateLogSource(_source);
			_traceFileInfo = new FileInfo(Path.Combine(Paths.BepInExRootPath ?? AssemblyDirectory.FullName, "logs", _source + ".Trace.log"));
			if (_traceFileInfo.DirectoryName != null)
			{
				Directory.CreateDirectory(_traceFileInfo.DirectoryName);
			}
			if (_traceFileInfo.Exists)
			{
				_traceFileInfo.Delete();
				_traceFileInfo.Refresh();
			}
			LoggerRef.LogEvent += OnLogEvent;
		}

		public void EnableTrace()
		{
			IsTraceEnabled = true;
		}

		public void DisableTrace()
		{
			IsTraceEnabled = false;
		}

		[UsedImplicitly]
		public void StopTrace()
		{
			LoggerRef.LogEvent -= OnLogEvent;
		}

		private void OnLogEvent(object sender, LogEventArgs e)
		{
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			if (e.Source.SourceName != _source || !IsTraceEnabled)
			{
				return;
			}
			using Mutex mutex = new Mutex(initiallyOwned: false, "Digitalroot.Modding.Log.TraceLogger." + _source);
			mutex.WaitOne();
			try
			{
				if (e.Data is string)
				{
					string contents = $"[{e.Level,-7}:{e.Source.SourceName,10}] {e.Data}{Environment.NewLine}";
					File.AppendAllText(_traceFileInfo.FullName, contents, Encoding.UTF8);
				}
				else
				{
					string contents2 = $"[{e.Level,-7}:{e.Source.SourceName,10}] {JsonSerializationProvider.Serialize(e.Data)}{Environment.NewLine}";
					File.AppendAllText(_traceFileInfo.FullName, contents2, Encoding.UTF8);
				}
			}
			finally
			{
				mutex.ReleaseMutex();
			}
		}
	}
}
namespace Digitalroot.Modding.Framework.Common.Json
{
	[UsedImplicitly]
	internal static class JsonSerializationProvider
	{
		public static T Deserialize<T>(string json)
		{
			return SimpleJson.DeserializeObject<T>(json, (IJsonSerializerStrategy)(object)new DigitalrootJsonSerializerStrategy());
		}

		public static string Serialize(object obj)
		{
			return SimpleJson.SerializeObject(obj, (IJsonSerializerStrategy)(object)new DigitalrootJsonSerializerStrategy());
		}
	}
	internal class DigitalrootJsonSerializerStrategy : PocoJsonSerializerStrategy
	{
		public override bool TrySerializeNonPrimitiveObject(object input, out object output)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			if (!(input is Vector3 val))
			{
				if (input is Quaternion val2)
				{
					output = new float[4] { val2.x, val2.y, val2.z, val2.w };
					return true;
				}
				return ((PocoJsonSerializerStrategy)this).TrySerializeNonPrimitiveObject(input, ref output);
			}
			output = new float[3] { val.x, val.y, val.z };
			return true;
		}

		public override object DeserializeObject(object value, Type type)
		{
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			if (type == null)
			{
				throw new ArgumentNullException("type");
			}
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (value is string value2)
			{
				if (string.IsNullOrWhiteSpace(value2))
				{
					throw new ArgumentNullException("value");
				}
				if (type == typeof(Vector3))
				{
					if (!(((PocoJsonSerializerStrategy)this).DeserializeObject(value, typeof(float[])) is float[] array) || (array != null && array.Length != 3))
					{
						throw new ArgumentException(string.Format("The value '{0}' can be converted to a {1}.", value, "Vector3"), "value");
					}
					return (object)new Vector3(array[0], array[1], array[2]);
				}
				if (type == typeof(Quaternion))
				{
					if (!(((PocoJsonSerializerStrategy)this).DeserializeObject(value, typeof(float[])) is float[] array2) || (array2 != null && array2.Length != 4))
					{
						throw new ArgumentException(string.Format("The value '{0}' can be converted to a {1}.", value, "Quaternion"), "value");
					}
					return (object)new Quaternion(array2[0], array2[1], array2[2], array2[3]);
				}
				return ((PocoJsonSerializerStrategy)this).DeserializeObject(value, type);
			}
			throw new ArgumentException($"The value '{value}' can be converted to a {type.Name}.", "value");
		}
	}
}
namespace Digitalroot.Modding.Framework.Names.Vanilla
{
	internal static class ItemDropNames
	{
		public static readonly IEnumerable<string> AllNames = ReflectionUtils.AllNames(typeof(ItemDropNames));

		public static string Acorn = "Acorn";

		public static string Amber = "Amber";

		public static string AmberPearl = "AmberPearl";

		public static string AncientSkull = "ancient_skull";

		public static string AncientSeed = "AncientSeed";

		public static string ArmorCarapaceChest = "ArmorCarapaceChest";

		public static string ArmorCarapaceLegs = "ArmorCarapaceLegs";

		public static string ArmorDress1 = "ArmorDress1";

		public static string ArmorDress2 = "ArmorDress2";

		public static string ArmorDress3 = "ArmorDress3";

		public static string ArmorDress4 = "ArmorDress4";

		public static string ArmorDress5 = "ArmorDress5";

		public static string ArmorDress6 = "ArmorDress6";

		public static string ArmorDress7 = "ArmorDress7";

		public static string ArmorDress8 = "ArmorDress8";

		public static string ArmorDress9 = "ArmorDress9";

		public static string ArmorDress10 = "ArmorDress10";

		public static string ArmorFenringChest = "ArmorFenringChest";

		public static string ArmorFenringLegs = "ArmorFenringLegs";

		public static string ArmorFlametalChest = "ArmorFlametalChest";

		public static string ArmorFlametalLegs = "ArmorFlametalLegs";

		public static string ArmorHarvester1 = "ArmorHarvester1";

		public static string ArmorHarvester2 = "ArmorHarvester2";

		public static string ArmorAshlandsMediumChest = "ArmorAshlandsMediumChest";

		public static string ArmorAshlandsMediumlegs = "ArmorAshlandsMediumlegs";

		public static string ArmorBronzeChest = "ArmorBronzeChest";

		public static string ArmorBronzeLegs = "ArmorBronzeLegs";

		public static string ArmorIronChest = "ArmorIronChest";

		public static string ArmorIronLegs = "ArmorIronLegs";

		public static string ArmorMageChest = "ArmorMageChest";

		public static string ArmorMageLegs = "ArmorMageLegs";

		public static string ArmorMageLegsAshlands = "ArmorMageLegs_Ashlands";

		public static string ArmorLeatherChest = "ArmorLeatherChest";

		public static string ArmorLeatherLegs = "ArmorLeatherLegs";

		public static string ArmorPaddedCuirass = "ArmorPaddedCuirass";

		public static string ArmorPaddedGreaves = "ArmorPaddedGreaves";

		public static string ArmorRagsChest = "ArmorRagsChest";

		public static string ArmorRagsLegs = "ArmorRagsLegs";

		public static string ArmorRootChest = "ArmorRootChest";

		public static string ArmorRootLegs = "ArmorRootLegs";

		public static string ArmorTrollLeatherChest = "ArmorTrollLeatherChest";

		public static string ArmorTrollLeatherLegs = "ArmorTrollLeatherLegs";

		public static string ArmorTunic1 = "ArmorTunic1";

		public static string ArmorTunic2 = "ArmorTunic2";

		public static string ArmorTunic3 = "ArmorTunic3";

		public static string ArmorTunic4 = "ArmorTunic4";

		public static string ArmorTunic5 = "ArmorTunic5";

		public static string ArmorTunic6 = "ArmorTunic6";

		public static string ArmorTunic7 = "ArmorTunic7";

		public static string ArmorTunic8 = "ArmorTunic8";

		public static string ArmorTunic9 = "ArmorTunic9";

		public static string ArmorTunic10 = "ArmorTunic10";

		public static string ArmorWolfChest = "ArmorWolfChest";

		public static string ArmorWolfLegs = "ArmorWolfLegs";

		public static string ArrowBronze = "ArrowBronze";

		public static string ArrowCarapace = "ArrowCarapace";

		public static string ArrowCharred = "ArrowCharred";

		public static string ArrowFire = "ArrowFire";

		public static string ArrowFlint = "ArrowFlint";

		public static string ArrowFrost = "ArrowFrost";

		public static string ArrowIron = "ArrowIron";

		public static string ArrowNeedle = "ArrowNeedle";

		public static string ArrowObsidian = "ArrowObsidian";

		public static string ArrowPoison = "ArrowPoison";

		public static string ArrowSilver = "ArrowSilver";

		public static string ArrowWood = "ArrowWood";

		public static string AsksvinEgg = "AsksvinEgg";

		public static string AsksvinMeat = "AsksvinMeat";

		public static string AtgeirBlackmetal = "AtgeirBlackmetal";

		public static string AtgeirBronze = "AtgeirBronze";

		public static string AtgeirHimminAfl = "AtgeirHimminAfl";

		public static string AtgeirIron = "AtgeirIron";

		public static string AtgeirWood = "AtgeirWood";

		public static string AxeBlackMetal = "AxeBlackMetal";

		public static string AxeBronze = "AxeBronze";

		public static string AxeEarly = "AxeEarly";

		public static string AxeFlint = "AxeFlint";

		public static string AxeIron = "AxeIron";

		public static string AxeJotunBane = "AxeJotunBane";

		public static string AxeStone = "AxeStone";

		public static string AxeWood = "AxeWood";

		public static string BarberKit = "BarberKit";

		public static string Barley = "Barley";

		public static string BarleyFlour = "BarleyFlour";

		public static string BarleyWine = "BarleyWine";

		public static string BarleyWineBase = "BarleyWineBase";

		public static string BarrelRings = "BarrelRings";

		public static string Battleaxe = "Battleaxe";

		public static string BattleaxeCrystal = "BattleaxeCrystal";

		public static string BeechSeeds = "BeechSeeds";

		public static string Bell = "Bell";

		public static string BeltStrength = "BeltStrength";

		public static string Bilebag = "Bilebag";

		public static string BirchSeeds = "BirchSeeds";

		public static string BjornHide = "BjornHide";

		public static string BjornMeat = "BjornMeat";

		public static string BjornPaw = "BjornPaw";

		public static string BlackCore = "BlackCore";

		public static string BlackMarble = "BlackMarble";

		public static string BlackMetal = "BlackMetal";

		public static string BlackMetalScrap = "BlackMetalScrap";

		public static string BlackSoup = "BlackSoup";

		public static string Blackwood = "Blackwood";

		public static string Bloodbag = "Bloodbag";

		public static string BloodPudding = "BloodPudding";

		public static string Blueberries = "Blueberries";

		public static string BoarJerky = "BoarJerky";

		public static string BoltBlackmetal = "BoltBlackmetal";

		public static string BoltBone = "BoltBone";

		public static string BoltCarapace = "BoltCarapace";

		public static string BoltCharred = "BoltCharred";

		public static string BoltIron = "BoltIron";

		public static string BombBile = "BombBile";

		public static string BombLava = "BombLava";

		public static string BombOoze = "BombOoze";

		public static string BombSiege = "BombSiege";

		public static string BombSmoke = "BombSmoke";

		public static string BoneFragments = "BoneFragments";

		public static string BoneMawSerpentMeat = "BoneMawSerpentMeat";

		public static string BonemawSerpentScale = "BonemawSerpentScale";

		public static string BonemawSerpentTooth = "BonemawSerpentTooth";

		public static string Bow = "Bow";

		public static string BowAshlands = "BowAshlands";

		public static string BowAshlandsBlood = "BowAshlandsBlood";

		public static string BowAshlandsRoot = "BowAshlandsRoot";

		public static string BowAshlandsStorm = "BowAshlandsStorm";

		public static string BowDraugrFang = "BowDraugrFang";

		public static string BowFineWood = "BowFineWood";

		public static string BowHuntsman = "BowHuntsman";

		public static string BowSpineSnap = "BowSpineSnap";

		public static string Bread = "Bread";

		public static string BreadDough = "BreadDough";

		public static string Bronze = "Bronze";

		public static string BronzeNails = "BronzeNails";

		public static string BronzeScrap = "BronzeScrap";

		public static string BugMeat = "BugMeat";

		public static string CandleWick = "CandleWick";

		public static string CapeAsh = "CapeAsh";

		public static string CapeAsksvin = "CapeAsksvin";

		public static string CapeDeerHide = "CapeDeerHide";

		public static string CapeFeather = "CapeFeather";

		public static string CapeLinen = "CapeLinen";

		public static string CapeLox = "CapeLox";

		public static string CapeOdin = "CapeOdin";

		public static string CapeTest = "CapeTest";

		public static string CapeTrollHide = "CapeTrollHide";

		public static string CapeWolf = "CapeWolf";

		public static string Carapace = "Carapace";

		public static string Carrot = "Carrot";

		public static string CarrotSeeds = "CarrotSeeds";

		public static string CarrotSoup = "CarrotSoup";

		public static string CelestialFeather = "CelestialFeather";

		public static string CeramicPlate = "CeramicPlate";

		public static string Chain = "Chain";

		public static string CharcoalResin = "CharcoalResin";

		public static string CharredBone = "CharredBone";

		public static string CharredCogwheel = "CharredCogwheel";

		public static string CharredBreastplate = "Charred_Breastplate";

		public static string CharredHelmet = "Charred_Helmet";

		public static string CharredHipCloth = "Charred_HipCloth";

		public static string CharredMageCloths = "Charred_MageCloths";

		public static string ChestHildir1 = "chest_hildir1";

		public static string ChestHildir2 = "chest_hildir2";

		public static string ChestHildir3 = "chest_hildir3";

		public static string Chicken = "Chicken";

		public static string ChickenEgg = "ChickenEgg";

		public static string ChickenMeat = "ChickenMeat";

		public static string Chitin = "Chitin";

		public static string Cinder = "Cinder";

		public static string Cloudberry = "Cloudberry";

		public static string Club = "Club";

		public static string Coal = "Coal";

		public static string Coins = "Coins";

		public static string CookedAsksvinMeat = "CookedAsksvinMeat";

		public static string CookedBoneMawSerpentMeat = "CookedBoneMawSerpentMeat";

		public static string CookedBugMeat = "CookedBugMeat";

		public static string CookedChickenMeat = "CookedChickenMeat";

		public static string CookedDeerMeat = "CookedDeerMeat";

		public static string CookedEgg = "CookedEgg";

		public static string CookedHareMeat = "CookedHareMeat";

		public static string CookedLoxMeat = "CookedLoxMeat";

		public static string CookedWolfMeat = "CookedWolfMeat";

		public static string CookedMeat = "CookedMeat";

		public static string CookedVoltureMeat = "CookedVoltureMeat";

		public static string Copper = "Copper";

		public static string CopperOre = "CopperOre";

		public static string CopperScrap = "CopperScrap";

		public static string CrossbowArbalest = "CrossbowArbalest";

		public static string CryptKey = "CryptKey";

		public static string Crystal = "Crystal";

		public static string Cultivator = "Cultivator";

		public static string CuredSquirrelHamstring = "CuredSquirrelHamstring";

		public static string Dandelion = "Dandelion";

		public static string DeerHide = "DeerHide";

		public static string DeerMeat = "DeerMeat";

		public static string DeerStew = "DeerStew";

		public static string Demister = "Demister";

		public static string DragonEgg = "DragonEgg";

		public static string DragonTear = "DragonTear";

		public static string DvergrKey = "DvergrKey";

		public static string DvergrKeyFragment = "DvergrKeyFragment";

		public static string DvergrNeedle = "DvergrNeedle";

		public static string DvergerStaffFire = "DvergerStaffFire";

		public static string DvergerStaffHeal = "DvergerStaffHeal";

		public static string DvergerStaffIce = "DvergerStaffIce";

		public static string DvergerStaffSupport = "DvergerStaffSupport";

		public static string DvergerSuitArbalest = "DvergerSuitArbalest";

		public static string DvergerSuitArbalestAshlands = "DvergerSuitArbalest_Ashlands";

		public static string DvergerSuitFire = "DvergerSuitFire";

		public static string DvergerSuitIce = "DvergerSuitIce";

		public static string DvergerSuitSupport = "DvergerSuitSupport";

		public static string DyrnwynBladeFragment = "DyrnwynBladeFragment";

		public static string DyrnwynHiltFragment = "DyrnwynHiltFragment";

		public static string DyrnwynTipFragment = "DyrnwynTipFragment";

		public static string Eitr = "Eitr";

		public static string Eikthyrnir = "Eikthyrnir";

		public static string ElderBark = "ElderBark";

		public static string Entrails = "Entrails";

		public static string Eyescream = "Eyescream";

		public static string FaderDrop = "FaderDrop";

		public static string FeastAshlandsMaterial = "FeastAshlands_Material";

		public static string FeastBlackforestMaterial = "FeastBlackforest_Material";

		public static string Feaster = "Feaster";

		public static string FeastMeadowsMaterial = "FeastMeadows_Material";

		public static string FeastMistlandsMaterial = "FeastMistlands_Material";

		public static string FeastMountainsMaterial = "FeastMountains_Material";

		public static string FeastOceansMaterial = "FeastOceans_Material";

		public static string FeastPlainsMaterial = "FeastPlains_Material";

		public static string FeastSwampsMaterial = "FeastSwamps_Material";

		public static string Feathers = "Feathers";

		public static string FineWood = "FineWood";

		public static string FirCone = "FirCone";

		public static string FishAndBread = "FishAndBread";

		public static string FishAndBreadUncooked = "FishAndBreadUncooked";

		public static string FishAnglerRaw = "FishAnglerRaw";

		public static string FishCooked = "FishCooked";

		public static string FishingBait = "FishingBait";

		public static string FishingBaitAshlands = "FishingBaitAshlands";

		public static string FishingBaitCave = "FishingBaitCave";

		public static string FishingBaitDeepNorth = "FishingBaitDeepNorth";

		public static string FishingBaitForest = "FishingBaitForest";

		public static string FishingBaitMistlands = "FishingBaitMistlands";

		public static string FishingBaitOcean = "FishingBaitOcean";

		public static string FishingBaitPlains = "FishingBaitPlains";

		public static string FishingBaitSwamp = "FishingBaitSwamp";

		public static string FishingRod = "FishingRod";

		public static string FishRaw = "FishRaw";

		public static string FishWraps = "FishWraps";

		public static string FistFenrirClaw = "FistFenrirClaw";

		public static string Flametal = "Flametal";

		public static string FlametalNew = "FlametalNew";

		public static string FlametalOre = "FlametalOre";

		public static string FlametalOreNew = "FlametalOreNew";

		public static string Flax = "Flax";

		public static string Flint = "Flint";

		public static string FragrantBundle = "FragrantBundle";

		public static string FreezeGland = "FreezeGland";

		public static string FreshSeaweed = "FreshSeaweed";

		public static string GemstoneBlue = "GemstoneBlue";

		public static string GemstoneGreen = "GemstoneGreen";

		public static string GemstoneRed = "GemstoneRed";

		public static string GiantBloodSack = "GiantBloodSack";

		public static string GlowingMushroom = "GlowingMushroom";

		public static string GoblinGem = "Goblin_Gem";

		public static string GoblinTotem = "GoblinTotem";

		public static string Grausten = "Grausten";

		public static string GreydwarfEye = "GreydwarfEye";

		public static string Guck = "Guck";

		public static string Hammer = "Hammer";

		public static string HareMeat = "HareMeat";

		public static string HardAntler = "HardAntler";

		public static string HelmetAshlandsMediumHood = "HelmetAshlandsMediumHood";

		public static string HelmetBronze = "HelmetBronze";

		public static string HelmetCarapace = "HelmetCarapace";

		public static string HelmetDrake = "HelmetDrake";

		public static string HelmetDverger = "HelmetDverger";

		public static string HelmetFenring = "HelmetFenring";

		public static string HelmetFishingHat = "HelmetFishingHat";

		public static string HelmetFlametal = "HelmetFlametal";

		public static string HelmetHat1 = "HelmetHat1";

		public static string HelmetHat2 = "HelmetHat2";

		public static string HelmetHat3 = "HelmetHat3";

		public static string HelmetHat4 = "HelmetHat4";

		public static string HelmetHat5 = "HelmetHat5";

		public static string HelmetHat6 = "HelmetHat6";

		public static string HelmetHat7 = "HelmetHat7";

		public static string HelmetHat8 = "HelmetHat8";

		public static string HelmetHat9 = "HelmetHat9";

		public static string HelmetHat10 = "HelmetHat10";

		public static string HelmetIron = "HelmetIron";

		public static string HelmetLeather = "HelmetLeather";

		public static string HelmetMage = "HelmetMage";

		public static string HelmetMageAshlands = "HelmetMage_Ashlands";

		public static string HelmetMidsummerCrown = "HelmetMidsummerCrown";

		public static string HelmetOdin = "HelmetOdin";

		public static string HelmetPadded = "HelmetPadded";

		public static string HelmetPointyHat = "HelmetPointyHat";

		public static string HelmetRoot = "HelmetRoot";

		public static string HelmetTrollLeather = "HelmetTrollLeather";

		public static string HelmetYule = "HelmetYule";

		public static string Hoe = "Hoe";

		public static string Honey = "Honey";

		public static string HoneyGlazedChicken = "HoneyGlazedChicken";

		public static string HoneyGlazedChickenUncooked = "HoneyGlazedChickenUncooked";

		public static string Iron = "Iron";

		public static string IronNails = "IronNails";

		public static string IronOre = "IronOre";

		public static string IronScrap = "IronScrap";

		public static string JuteBlue = "JuteBlue";

		public static string JuteRed = "JuteRed";

		public static string KnifeBlackMetal = "KnifeBlackMetal";

		public static string KnifeButcher = "KnifeButcher";

		public static string KnifeChitin = "KnifeChitin";

		public static string KnifeCopper = "KnifeCopper";

		public static string KnifeFlint = "KnifeFlint";

		public static string KnifeSilver = "KnifeSilver";

		public static string KnifeSkollAndHati = "KnifeSkollAndHati";

		public static string Lantern = "Lantern";

		public static string Larva = "Larva";

		public static string LavaRock = "LavaRock";

		public static string LeatherScraps = "LeatherScraps";

		public static string LinenThread = "LinenThread";

		public static string LoxMeat = "LoxMeat";

		public static string LoxPelt = "LoxPelt";

		public static string LoxPie = "LoxPie";

		public static string LoxPieUncooked = "LoxPieUncooked";

		public static string LuredWisp = "LuredWisp";

		public static string MaceBronze = "MaceBronze";

		public static string MaceEldner = "MaceEldner";

		public static string MaceEldnerBlood = "MaceEldnerBlood";

		public static string MaceEldnerLightning = "MaceEldnerLightning";

		public static string MaceEldnerNature = "MaceEldnerNature";

		public static string MaceIron = "MaceIron";

		public static string MaceNeedle = "MaceNeedle";

		public static string MaceSilver = "MaceSilver";

		public static string MagicallyStuffedShroom = "MagicallyStuffedShroom";

		public static string MagicallyStuffedShroomUncooked = "MagicallyStuffedShroomUncooked";

		public static string Mandible = "Mandible";

		public static string MarinatedGreens = "MarinatedGreens";

		public static string MashedMeat = "MashedMeat";

		public static string MeadBaseBugRepellent = "MeadBaseBugRepellent";

		public static string MeadBaseBzerker = "MeadBaseBzerker";

		public static string MeadBaseEitrLingering = "MeadBaseEitrLingering";

		public static string MeadBaseEitrMinor = "MeadBaseEitrMinor";

		public static string MeadBaseFrostResist = "MeadBaseFrostResist";

		public static string MeadBaseHasty = "MeadBaseHasty";

		public static string MeadBaseHealthLingering = "MeadBaseHealthLingering";

		public static string MeadBaseHealthMajor = "MeadBaseHealthMajor";

		public static string MeadBaseHealthMedium = "MeadBaseHealthMedium";

		public static string MeadBaseHealthMinor = "MeadBaseHealthMinor";

		public static string MeadBaseLightFoot = "MeadBaseLightFoot";

		public static string MeadBasePoisonResist = "MeadBasePoisonResist";

		public static string MeadBaseStaminaLingering = "MeadBaseStaminaLingering";

		public static string MeadBaseStaminaMedium = "MeadBaseStaminaMedium";

		public static string MeadBaseStaminaMinor = "MeadBaseStaminaMinor";

		public static string MeadBaseStrength = "MeadBaseStrength";

		public static string MeadBaseSwimmer = "MeadBaseSwimmer";

		public static string MeadBaseTamer = "MeadBaseTamer";

		public static string MeadBaseTasty = "MeadBaseTasty";

		public static string MeadBugRepellent = "MeadBugRepellent";

		public static string MeadBzerker = "MeadBzerker";

		public static string MeadEitrLingering = "MeadEitrLingering";

		public static string MeadEitrMinor = "MeadEitrMinor";

		public static string MeadFrostResist = "MeadFrostResist";

		public static string MeadHasty = "MeadHasty";

		public static string MeadHealthLingering = "MeadHealthLingering";

		public static string MeadHealthMajor = "MeadHealthMajor";

		public static string MeadHealthMedium = "MeadHealthMedium";

		public static string MeadHealthMinor = "MeadHealthMinor";

		public static string MeadLightfoot = "MeadLightfoot";

		public static string MeadPoisonResist = "MeadPoisonResist";

		public static string MeadStaminaLingering = "MeadStaminaLingering";

		public static string MeadStaminaMedium = "MeadStaminaMedium";

		public static string MeadStaminaMinor = "MeadStaminaMinor";

		public static string MeadTasty = "MeadTasty";

		public static string MeadTrollPheromones = "MeadTrollPheromones";

		public static string MeatPlatter = "MeatPlatter";

		public static string MeatPlatterUncooked = "MeatPlatterUncooked";

		public static string MechanicalSpring = "MechanicalSpring";

		public static string MinceMeatSauce = "MinceMeatSauce";

		public static string MisthareSupreme = "MisthareSupreme";

		public static string MisthareSupremeUncooked = "MisthareSupremeUncooked";

		public static string MistileKamikaze = "Mistile_kamikaze";

		public static string MoltenCore = "MoltenCore";

		public static string MorgenHeart = "MorgenHeart";

		public static string Mushroom = "Mushroom";

		public static string MushroomBlue = "MushroomBlue";

		public static string MushroomBzerker = "MushroomBzerker";

		public static string MushroomJotunPuffs = "MushroomJotunPuffs";

		public static string MushroomMagecap = "MushroomMagecap";

		public static string MushroomOmelette = "MushroomOmelette";

		public static string MushroomSmokePuff = "MushroomSmokePuff";

		public static string MushroomYellow = "MushroomYellow";

		public static string NeckTail = "NeckTail";

		public static string NeckTailGrilled = "NeckTailGrilled";

		public static string Needle = "Needle";

		public static string Obsidian = "Obsidian";

		public static string Onion = "Onion";

		public static string OnionSeeds = "OnionSeeds";

		public static string OnionSoup = "OnionSoup";

		public static string Ooze = "Ooze";

		public static string PickaxeAntler = "PickaxeAntler";

		public static string PickaxeBlackMetal = "PickaxeBlackMetal";

		public static string PickaxeBronze = "PickaxeBronze";

		public static string PickaxeIron = "PickaxeIron";

		public static string PickaxeStone = "PickaxeStone";

		public static string PineCone = "PineCone";

		public static string PiquantPie = "PiquantPie";

		public static string PiquantPieUncooked = "PiquantPieUncooked";

		public static string PlaceofMystery1 = "PlaceofMystery1";

		public static string PlaceofMystery2 = "PlaceofMystery2";

		public static string PlaceofMystery3 = "PlaceofMystery3";

		public static string PotShardGreen = "Pot_Shard_Green";

		public static string PotShardRed = "Pot_Shard_Red";

		public static string PowderedDragonEgg = "PowderedDragonEgg";

		public static string ProustitePowder = "ProustitePowder";

		public static string PukeBerries = "Pukeberries";

		public static string PungentPebbles = "PungentPebbles";

		public static string QueenBee = "QueenBee";

		public static string QueenDrop = "QueenDrop";

		public static string QueensJam = "QueensJam";

		public static string Raspberry = "Raspberry";

		public static string RawMeat = "RawMeat";

		public static string Resin = "Resin";

		public static string RoastedCrustPie = "RoastedCrustPie";

		public static string RoastedCrustPieUncooked = "RoastedCrustPieUncooked";

		public static string RoundLog = "RoundLog";

		public static string RottenMeat = "RottenMeat";

		public static string RoyalJelly = "RoyalJelly";

		public static string Ruby = "Ruby";

		public static string SaddleLox = "SaddleLox";

		public static string Salad = "Salad";

		public static string Sap = "Sap";

		public static string Sausages = "Sausages";

		public static string ScaleHide = "ScaleHide";

		public static string ScorchingMedley = "ScorchingMedley";

		public static string Scythe = "Scythe";

		public static string ScytheHandle = "ScytheHandle";

		public static string SerpentMeat = "SerpentMeat";

		public static string SerpentMeatCooked = "SerpentMeatCooked";

		public static string SerpentScale = "SerpentScale";

		public static string SerpentStew = "SerpentStew";

		public static string SharpeningStone = "SharpeningStone";

		public static string ShieldBanded = "ShieldBanded";

		public static string ShieldBlackmetal = "ShieldBlackmetal";

		public static string ShieldBlackmetalTower = "ShieldBlackmetalTower";

		public static string ShieldBoneTower = "ShieldBoneTower";

		public static string ShieldBronzeBuckler = "ShieldBronzeBuckler";

		public static string ShieldCarapace = "ShieldCarapace";

		public static string ShieldCarapaceBuckler = "ShieldCarapaceBuckler";

		public static string ShieldCore = "ShieldCore";

		public static string ShieldFlametal = "ShieldFlametal";

		public static string ShieldFlametalTower = "ShieldFlametalTower";

		public static string ShieldIronBuckler = "ShieldIronBuckler";

		public static string ShieldIronSquare = "ShieldIronSquare";

		public static string ShieldIronTower = "ShieldIronTower";

		public static string ShieldKnight = "ShieldKnight";

		public static string ShieldSerpentscale = "ShieldSerpentscale";

		public static string ShieldSilver = "ShieldSilver";

		public static string ShieldWood = "ShieldWood";

		public static string ShieldWoodTower = "ShieldWoodTower";

		public static string ShocklateSmoothie = "ShocklateSmoothie";

		public static string Silver = "Silver";

		public static string SilverNecklace = "SilverNecklace";

		public static string SilverOre = "SilverOre";

		public static string SizzlingBerryBroth = "SizzlingBerryBroth";

		public static string SledgeCheat = "SledgeCheat";

		public static string SledgeDemolisher = "SledgeDemolisher";

		public static string SledgeIron = "SledgeIron";

		public static string SledgeStagbreaker = "SledgeStagbreaker";

		public static string Softtissue = "Softtissue";

		public static string SpearBronze = "SpearBronze";

		public static string SpearCarapace = "SpearCarapace";

		public static string SpearChitin = "SpearChitin";

		public static string SpearElderbark = "SpearElderbark";

		public static string SpearFlint = "SpearFlint";

		public static string SpearSplitner = "SpearSplitner";

		public static string SpearSplitnerBlood = "SpearSplitner_Blood";

		public static string SpearSplitnerLightning = "SpearSplitner_Lightning";

		public static string SpearSplitnerNature = "SpearSplitner_Nature";

		public static string SpearWolfFang = "SpearWolfFang";

		public static string SpiceAshlands = "SpiceAshlands";

		public static string SpiceForests = "SpiceForests";

		public static string SpiceMistlands = "SpiceMistlands";

		public static string SpiceMountains = "SpiceMountains";

		public static string SpiceOceans = "SpiceOceans";

		public static string SpicePlains = "SpicePlains";

		public static string SpicyMarmalade = "SpicyMarmalade";

		public static string StaffClusterbomb = "StaffClusterbomb";

		public static string StaffFireball = "StaffFireball";

		public static string StaffGreenRoots = "StaffGreenRoots";

		public static string StaffIceShards = "StaffIceShards";

		public static string StaffLightning = "StaffLightning";

		public static string StaffRedTroll = "StaffRedTroll";

		public static string StaffShield = "StaffShield";

		public static string StaffSkeleton = "StaffSkeleton";

		public static string StaminaUpgradeGreydwarf = "StaminaUpgrade_Greydwarf";

		public static string StaminaUpgradeTroll = "StaminaUpgrade_Troll";

		public static string StaminaUpgradeWraith = "StaminaUpgrade_Wraith";

		public static string Stone = "Stone";

		public static string SurtlingCore = "SurtlingCore";

		public static string SwordBlackmetal = "SwordBlackmetal";

		public static string SwordBronze = "SwordBronze";

		public static string SwordCheat = "SwordCheat";

		public static string SwordDyrnwyn = "SwordDyrnwyn";

		public static string SwordIron = "SwordIron";

		public static string SwordIronFire = "SwordIronFire";

		public static string SwordMistwalker = "SwordMistwalker";

		public static string SwordNiedhogg = "SwordNiedhogg";

		public static string SwordNiedhoggBlood = "SwordNiedhoggBlood";

		public static string SwordNiedhoggLightning = "SwordNiedhoggLightning";

		public static string SwordNiedhoggNature = "SwordNiedhoggNature";

		public static string SwordSilver = "SwordSilver";

		public static string Tankard = "Tankard";

		public static string TankardDvergr = "Tankard_dvergr";

		public static string TankardAnniversary = "TankardAnniversary";

		public static string TankardOdin = "TankardOdin";

		public static string Tar = "Tar";

		public static string TarLiquid = "TarLiquid";

		public static string ThSwordKrom = "THSwordKrom";

		public static string ThSwordSlayer = "THSwordSlayer";

		public static string ThSwordSlayerBlood = "THSwordSlayerBlood";

		public static string ThSwordSlayerLightning = "THSwordSlayerLightning";

		public static string ThSwordSlayerNature = "THSwordSlayerNature";

		public static string Thistle = "Thistle";

		public static string Thunderstone = "Thunderstone";

		public static string Tin = "Tin";

		public static string TinOre = "TinOre";

		public static string TolrokoFlyer = "tolroko_flyer";

		public static string Torch = "Torch";

		public static string TorchMist = "TorchMist";

		public static string TreasurePile = "treasure_pile";

		public static string TreasureStack = "treasure_stack";

		public static string TrollHide = "TrollHide";

		public static string TrophyAbomination = "TrophyAbomination";

		public static string TrophyAsksvin = "TrophyAsksvin";

		public static string TrophyBlob = "TrophyBlob";

		public static string TrophyBoar = "TrophyBoar";

		public static string TrophyBonemass = "TrophyBonemass";

		public static string TrophyBonemawSerpent = "TrophyBonemawSerpent";

		public static string TrophyCharredArcher = "TrophyCharredArcher";

		public static string TrophyCharredMage = "TrophyCharredMage";

		public static string TrophyCharredMelee = "TrophyCharredMelee";

		public static string TrophyCultist = "TrophyCultist";

		public static string TrophyCultistHildir = "TrophyCultist_Hildir";

		public static string TrophyDeathsquito = "TrophyDeathsquito";

		public static string TrophyDeer = "TrophyDeer";

		public static string TrophyDragonQueen = "TrophyDragonQueen";

		public static string TrophyDraugr = "TrophyDraugr";

		public static string TrophyDraugrElite = "TrophyDraugrElite";

		public static string TrophyDraugrFem = "TrophyDraugrFem";

		public static string TrophyDvergr = "TrophyDvergr";

		public static string TrophyEikthyr = "TrophyEikthyr";

		public static string TrophyFader = "TrophyFader";

		public static string TrophyFallenValkyrie = "TrophyFallenValkyrie";

		public static string TrophyFenring = "TrophyFenring";

		public static string TrophyForestTroll = "TrophyForestTroll";

		public static string TrophyFrostTroll = "TrophyFrostTroll";

		public static string TrophyGjall = "TrophyGjall";

		public static string TrophyGoblin = "TrophyGoblin";

		public static string TrophyGoblinBrute = "TrophyGoblinBrute";

		public static string TrophyGoblinBruteBrosBrute = "TrophyGoblinBruteBrosBrute";

		public static string TrophyGoblinBruteBrosShaman = "TrophyGoblinBruteBrosShaman";

		public static string TrophyGoblinKing = "TrophyGoblinKing";

		public static string TrophyGoblinShaman = "TrophyGoblinShaman";

		public static string TrophyGreydwarf = "TrophyGreydwarf";

		public static string TrophyGreydwarfBrute = "TrophyGreydwarfBrute";

		public static string TrophyGreydwarfShaman = "TrophyGreydwarfShaman";

		public static string TrophyGrowth = "TrophyGrowth";

		public static string TrophyHare = "TrophyHare";

		public static string TrophyHatchling = "TrophyHatchling";

		public static string TrophyKvastur = "TrophyKvastur";

		public static string TrophyLeech = "TrophyLeech";

		public static string TrophyLox = "TrophyLox";

		public static string TrophyMorgen = "TrophyMorgen";

		public static string TrophyNeck = "TrophyNeck";

		public static string TrophySeeker = "TrophySeeker";

		public static string TrophySeekerBrute = "TrophySeekerBrute";

		public static string TrophySeekerQueen = "TrophySeekerQueen";

		public static string TrophySerpent = "TrophySerpent";

		public static string TrophySGolem = "TrophySGolem";

		public static string TrophySkeleton = "TrophySkeleton";

		public static string TrophySkeletonHildir = "TrophySkeletonHildir";

		public static string TrophySkeletonPoison = "TrophySkeletonPoison";

		public static string TrophySurtling = "TrophySurtling";

		public static string TrophyTheElder = "TrophyTheElder";

		public static string TrophyTick = "TrophyTick";

		public static string TrophyUlv = "TrophyUlv";

		public static string TrophyVolture = "TrophyVolture";

		public static string TrophyWolf = "TrophyWolf";

		public static string TrophyWraith = "TrophyWraith";

		public static string Turnip = "Turnip";

		public static string TurnipSeeds = "TurnipSeeds";

		public static string TurnipStew = "TurnipStew";

		public static string TurretBolt = "TurretBolt";

		public static string TurretBoltBone = "TurretBoltBone";

		public static string TurretBoltFlametal = "TurretBoltFlametal";

		public static string TurretBoltWood = "TurretBoltWood";

		public static string VegvisirShardBonemass = "VegvisirShard_Bonemass";

		public static string VineAsh = "VineAsh";

		public static string Vineberry = "Vineberry";

		public static string VineberrySeeds = "VineberrySeeds";

		public static string VoltureEgg = "VoltureEgg";

		public static string VoltureMeat = "VoltureMeat";

		public static string VoltureNest = "VoltureNest";

		public static string WaterLiquid = "WaterLiquid";

		public static string Wishbone = "Wishbone";

		public static string Wisp = "Wisp";

		public static string WitheredBone = "WitheredBone";

		public static string WolfClaw = "WolfClaw";

		public static string WolfHairBundle = "WolfHairBundle";

		public static string WolfFang = "WolfFang";

		public static string WolfJerky = "WolfJerky";

		public static string WolfMeat = "WolfMeat";

		public static string WolfMeatSkewer = "WolfMeatSkewer";

		public static string WolfPelt = "WolfPelt";

		public static string Wood = "Wood";

		public static string YagluthDrop = "YagluthDrop";

		public static string YggdrasilPorridge = "YggdrasilPorridge";

		public static string YggdrasilRoot = "YggdrasilRoot";

		public static string YggdrasilWood = "YggdrasilWood";

		public static string YmirRemains = "YmirRemains";
	}
}
namespace Digitalroot.Modding.Framework.Utils
{
	internal static class ReflectionUtils
	{
		[UsedImplicitly]
		public static List<T> AllOf<T>()
		{
			return Enum.GetValues(typeof(T)).OfType<T>().ToList();
		}

		[UsedImplicitly]
		public static IEnumerable<string> AllNames(Type type)
		{
			foreach (FieldInfo item in from f1 in type.GetFields()
				where f1.FieldType == typeof(string)
				select f1)
			{
				yield return item.GetValue(null).ToString();
			}
		}

		[UsedImplicitly]
		public static T GetPrivateField<T>(object instance, string name)
		{
			FieldInfo field = instance.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
			if (field != null)
			{
				return (T)field.GetValue(instance);
			}
			Log.Error(StaticSourceLogger.PreMadeTraceableInstance, $"Variable {name} does not exist on type: {instance.GetType()}");
			return default(T);
		}

		[UsedImplicitly]
		public static object InvokePrivate(object instance, string name, object[] args = null)
		{
			MethodInfo method = instance.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic);
			if (method == null)
			{
				Type[] types = ((args == null) ? Type.EmptyTypes : args.Select((object arg) => arg.GetType()).ToArray());
				method = instance.GetType().GetMethod(name, types);
			}
			if (method == null)
			{
				Log.Error(StaticSourceLogger.PreMadeTraceableInstance, $"Method {name} does not exist on type: {instance.GetType()}");
				return null;
			}
			return method.Invoke(instance, args);
		}

		[UsedImplicitly]
		public static void SetPrivateField(object instance, string name, object value)
		{
			FieldInfo field = instance.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
			if (field == null)
			{
				Log.Error(StaticSourceLogger.PreMadeTraceableInstance, $"Variable {name} does not exist on type: {instance.GetType()}");
			}
			else
			{
				field.SetValue(instance, value);
			}
		}
	}
}
namespace Digitalroot.Modding.Framework.Logging
{
	[DebuggerDisplay("Source = {Source}, EnableTrace = {EnableTrace}", Name = "{Source}")]
	internal class StaticSourceLogger : ITraceableLogging
	{
		public static readonly StaticSourceLogger PreMadeTraceableInstance = new StaticSourceLogger(enableTrace: true);

		public static StaticSourceLogger PreMadeNonTraceableInstance = new StaticSourceLogger();

		public string Source { get; }

		public bool EnableTrace { get; }

		public StaticSourceLogger(bool enableTrace = false)
			: this("Digitalroot", enableTrace)
		{
		}

		public StaticSourceLogger(string source, bool enableTrace = false)
		{
			Source = source;
			EnableTrace = enableTrace;
		}
	}
}
internal class DigitalrootValheimEternalForceField_ProcessedByFody
{
	internal const string FodyVersion = "6.6.0.0";

	internal const string ILMerge = "1.22.0.0";
}