Decompiled source of Auga v1.3.11

Project Auga/Auga.dll

Decompiled a year ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using APIManager;
using Auga.Compat;
using Auga.Utilities;
using AugaUnity;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BepInEx.Preloader;
using BepInEx.Preloader.Patching;
using Fishlabs;
using HarmonyLib;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using Mono.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using fastJSON;

[assembly: AssemblyCopyright("Copyright © Randy Knapp 2021")]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Auga")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Auga")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("bcc7dd31-d943-4684-800e-176a97dddb8f")]
[assembly: AssemblyFileVersion("1.3.11.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.3.11.0")]
[module: UnverifiableCode]
namespace Auga
{
	[PublicAPI]
	public static class API
	{
		public static string RedText = "#CD2121";

		public static string Red = "#AD1616";

		public static string Brown1 = "#EAE1D9";

		public static string Brown2 = "#D1C9C2";

		public static string Brown3 = "#A39689";

		public static string Brown4 = "#706457";

		public static string Brown5 = "#2E2620";

		public static string Brown6 = "#EAE1D9";

		public static string Brown7 = "#181410";

		public static string Blue = "#216388";

		public static string LightBlue = "#1AACEF";

		public static string Gold = "#B98A12";

		public static string BrightGold = "#EAA800";

		public static string BrightestGold = "#FFBF1B";

		public static string GoldDark = "#755608";

		public static string Green = "#1B9B37";

		[UsedImplicitly]
		public static bool IsLoaded()
		{
			return true;
		}

		[UsedImplicitly]
		public static Font GetBoldFont()
		{
			return Auga.Assets.SourceSansProBold;
		}

		[UsedImplicitly]
		public static Font GetSemiBoldFont()
		{
			return Auga.Assets.SourceSansProSemiBold;
		}

		[UsedImplicitly]
		public static Font GetRegularFont()
		{
			return Auga.Assets.SourceSansProRegular;
		}

		[UsedImplicitly]
		public static Sprite GetItemBackgroundSprite()
		{
			return Auga.Assets.ItemBackgroundSprite;
		}

		[UsedImplicitly]
		public static GameObject Panel_Create(Transform parent, Vector2 size, string name, bool withCornerDecoration)
		{
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Expected O, but got Unknown
			//IL_00c8: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Expected O, but got Unknown
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.PanelBase, parent);
			if ((Object)(object)Auga.Assets.PanelBase == (Object)null)
			{
				Auga.LogError("Auga.Assets.PanelBase is null");
				Thread.Sleep(25000);
			}
			((Object)val).name = name;
			if (!withCornerDecoration)
			{
				foreach (Transform item in val.transform.Find("Background"))
				{
					Transform val2 = item;
					Object.Destroy((Object)(object)((Component)val2).gameObject);
				}
			}
			RectTransform val3 = (RectTransform)val.transform;
			Vector2 val4 = default(Vector2);
			((Vector2)(ref val4))..ctor(0.5f, 0.5f);
			val3.anchorMax = val4;
			Vector2 pivot = (val3.anchorMin = val4);
			val3.pivot = pivot;
			val3.anchoredPosition = Vector2.zero;
			val3.SetSizeWithCurrentAnchors((Axis)0, size.x);
			val3.SetSizeWithCurrentAnchors((Axis)1, size.y);
			return val;
		}

		[UsedImplicitly]
		public static Button SmallButton_Create(Transform parent, string name, string labelText)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.ButtonSmall, parent);
			((Object)val).name = name;
			TMP_Text componentInChildren = val.GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				componentInChildren.text = Localization.instance.Localize(labelText);
			}
			return (Button)(object)val.GetComponent<ColorButtonText>();
		}

		[UsedImplicitly]
		public static Button MediumButton_Create(Transform parent, string name, string labelText)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.ButtonMedium, parent);
			((Object)val).name = name;
			TMP_Text componentInChildren = val.GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				componentInChildren.text = Localization.instance.Localize(labelText);
			}
			return (Button)(object)val.GetComponent<ColorButtonText>();
		}

		[UsedImplicitly]
		public static Button FancyButton_Create(Transform parent, string name, string labelText)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.ButtonFancy, parent);
			((Object)val).name = name;
			TMP_Text componentInChildren = val.GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				componentInChildren.text = Localization.instance.Localize(labelText);
			}
			return (Button)(object)val.GetComponent<ColorButtonText>();
		}

		[UsedImplicitly]
		public static Button SettingsButton_Create(Transform parent, string name, string labelText)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.ButtonSettings, parent);
			((Object)val).name = name;
			TMP_Text componentInChildren = val.GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				componentInChildren.text = Localization.instance.Localize(labelText);
			}
			return (Button)(object)val.GetComponent<ColorButtonText>();
		}

		[UsedImplicitly]
		public static Button DiamondButton_Create(Transform parent, string name, [CanBeNull] Sprite icon)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.DiamondButton, parent);
			((Object)val).name = name;
			Image componentInChildren = val.GetComponentInChildren<Image>();
			if ((Object)(object)icon == (Object)null)
			{
				((Behaviour)componentInChildren).enabled = false;
			}
			else
			{
				componentInChildren.sprite = icon;
			}
			return val.GetComponent<Button>();
		}

		[UsedImplicitly]
		public static GameObject Divider_CreateSmall(Transform parent, string name, float width = -1f)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.DividerSmall, parent);
			((Object)val).name = name;
			if (width >= 0f)
			{
				val.RectTransform().SetSizeWithCurrentAnchors((Axis)0, width);
			}
			return val;
		}

		[UsedImplicitly]
		public static Tuple<GameObject, GameObject> Divider_CreateMedium(Transform parent, string name, float width = -1f)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.DividerMedium, parent);
			((Object)val).name = name;
			if (width >= 0f)
			{
				val.RectTransform().SetSizeWithCurrentAnchors((Axis)0, width);
			}
			return new Tuple<GameObject, GameObject>(val, ((Component)val.transform.Find("Content")).gameObject);
		}

		[UsedImplicitly]
		public static Tuple<GameObject, GameObject> Divider_CreateLarge(Transform parent, string name, float width = -1f)
		{
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.DividerLarge, parent);
			((Object)val).name = name;
			if (width >= 0f)
			{
				val.RectTransform().SetSizeWithCurrentAnchors((Axis)0, width);
			}
			return new Tuple<GameObject, GameObject>(val, ((Component)val.transform.Find("Content")).gameObject);
		}

		[UsedImplicitly]
		public static void Button_SetTextColors(Button button, Color normal, Color highlighted, Color pressed, Color selected, Color disabled, Color baseTextColor)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			ColorButtonTextValues component = ((Component)button).GetComponent<ColorButtonTextValues>();
			if ((Object)(object)component != (Object)null)
			{
				((ColorBlock)(ref component.TextColors)).normalColor = normal;
				((ColorBlock)(ref component.TextColors)).highlightedColor = highlighted;
				((ColorBlock)(ref component.TextColors)).pressedColor = pressed;
				((ColorBlock)(ref component.TextColors)).selectedColor = selected;
				((ColorBlock)(ref component.TextColors)).disabledColor = disabled;
			}
			TMP_Text componentInChildren = ((Component)button).GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				((Graphic)componentInChildren).color = baseTextColor;
			}
		}

		[UsedImplicitly]
		public static void Button_OverrideTextColor(Button button, Color color)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			ColorButtonTextValues component = ((Component)button).GetComponent<ColorButtonTextValues>();
			if ((Object)(object)component != (Object)null)
			{
				Object.Destroy((Object)(object)component);
			}
			TMP_Text componentInChildren = ((Component)button).GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				((Graphic)componentInChildren).color = color;
			}
		}

		[UsedImplicitly]
		public static void Tooltip_MakeSimpleTooltip(GameObject obj)
		{
			UITooltip val = obj.GetComponent<UITooltip>();
			if ((Object)(object)val == (Object)null)
			{
				val = obj.AddComponent<UITooltip>();
			}
			val.m_tooltipPrefab = Auga.Assets.SimpleTooltip;
		}

		[UsedImplicitly]
		public static void Tooltip_MakeItemTooltip(GameObject obj, ItemData item)
		{
			UITooltip val = obj.GetComponent<UITooltip>();
			if ((Object)(object)val == (Object)null)
			{
				val = obj.AddComponent<UITooltip>();
			}
			val.m_tooltipPrefab = Auga.Assets.InventoryTooltip;
			ItemTooltip val2 = obj.GetComponent<ItemTooltip>();
			if ((Object)(object)val2 == (Object)null)
			{
				val2 = obj.AddComponent<ItemTooltip>();
			}
			val2.Item = item;
		}

		[UsedImplicitly]
		public static void Tooltip_MakeFoodTooltip(GameObject obj, Food food)
		{
			UITooltip val = obj.GetComponent<UITooltip>();
			if ((Object)(object)val == (Object)null)
			{
				val = obj.AddComponent<UITooltip>();
			}
			val.m_tooltipPrefab = Auga.Assets.InventoryTooltip;
			FoodTooltip val2 = obj.GetComponent<FoodTooltip>();
			if ((Object)(object)val2 == (Object)null)
			{
				val2 = obj.AddComponent<FoodTooltip>();
			}
			val2.Food = food;
		}

		[UsedImplicitly]
		public static void Tooltip_MakeStatusEffectTooltip(GameObject obj, StatusEffect statusEffect)
		{
			UITooltip val = obj.GetComponent<UITooltip>();
			if ((Object)(object)val == (Object)null)
			{
				val = obj.AddComponent<UITooltip>();
			}
			val.m_tooltipPrefab = Auga.Assets.InventoryTooltip;
			StatusTooltip val2 = obj.GetComponent<StatusTooltip>();
			if ((Object)(object)val2 == (Object)null)
			{
				val2 = obj.AddComponent<StatusTooltip>();
			}
			val2.StatusEffect = statusEffect;
		}

		[UsedImplicitly]
		public static void Tooltip_MakeSkillTooltip(GameObject obj, Skill skill)
		{
			UITooltip val = obj.GetComponent<UITooltip>();
			if ((Object)(object)val == (Object)null)
			{
				val = obj.AddComponent<UITooltip>();
			}
			val.m_tooltipPrefab = Auga.Assets.InventoryTooltip;
			SkillTooltip val2 = obj.GetComponent<SkillTooltip>();
			if ((Object)(object)val2 == (Object)null)
			{
				val2 = obj.AddComponent<SkillTooltip>();
			}
			val2.Skill = skill;
		}

		[UsedImplicitly]
		public static bool PlayerPanel_HasTab(string tabID)
		{
			return (Object)(object)WorkbenchPanelController.instance != (Object)null && WorkbenchPanelController.instance.HasPlayerPanelTab(tabID);
		}

		[UsedImplicitly]
		public static PlayerPanelTabData PlayerPanel_AddTab(string tabID, Sprite tabIcon, string tabTitleText, Action<int> onTabSelected)
		{
			if ((Object)(object)WorkbenchPanelController.instance != (Object)null)
			{
				PlayerPanelTabData playerPanelTabData = new PlayerPanelTabData();
				TabButton val = default(TabButton);
				WorkbenchPanelController.instance.AddPlayerPanelTab(tabID, tabIcon, tabTitleText, onTabSelected, ref playerPanelTabData.TabTitle, ref val, ref playerPanelTabData.ContentGO);
				playerPanelTabData.Index = WorkbenchPanelController.instance.DefaultTabController.TabButtons.Count - 1;
				playerPanelTabData.TabButtonGO = ((Component)val).gameObject;
				return playerPanelTabData;
			}
			return null;
		}

		[UsedImplicitly]
		public static bool PlayerPanel_IsTabActive(GameObject tabButton)
		{
			return (Object)(object)WorkbenchPanelController.instance != (Object)null && WorkbenchPanelController.instance.IsTabActive(tabButton);
		}

		[UsedImplicitly]
		public static Button PlayerPanel_GetTabButton(int index)
		{
			if ((Object)(object)WorkbenchPanelController.instance != (Object)null && index >= 0 && index < WorkbenchPanelController.instance.DefaultTabController.TabButtons.Count)
			{
				return WorkbenchPanelController.instance.DefaultTabController.TabButtons[index].Button;
			}
			return null;
		}

		[UsedImplicitly]
		public static bool Workbench_HasWorkbenchTab(string tabID)
		{
			return (Object)(object)WorkbenchPanelController.instance != (Object)null && WorkbenchPanelController.instance.HasWorkbenchTab(tabID);
		}

		[UsedImplicitly]
		public static WorkbenchTabData Workbench_AddWorkbenchTab(string tabID, Sprite tabIcon, string tabTitleText, Action<int> onTabSelected)
		{
			if ((Object)(object)WorkbenchPanelController.instance != (Object)null)
			{
				WorkbenchTabData workbenchTabData = new WorkbenchTabData();
				TabButton val = default(TabButton);
				CraftingRequirementsPanel val2 = default(CraftingRequirementsPanel);
				ComplexTooltip val3 = default(ComplexTooltip);
				WorkbenchPanelController.instance.AddWorkbenchTab(tabID, tabIcon, tabTitleText, onTabSelected, false, ref workbenchTabData.TabTitle, ref val, ref val2, ref val3);
				workbenchTabData.Index = WorkbenchPanelController.instance.WorkbenchTabController.TabButtons.Count - 1;
				workbenchTabData.TabButtonGO = ((Component)val).gameObject;
				workbenchTabData.RequirementsPanelGO = ((Component)val2).gameObject;
				workbenchTabData.ItemInfoGO = ((Component)val3).gameObject;
				return workbenchTabData;
			}
			return null;
		}

		[UsedImplicitly]
		public static WorkbenchTabData Workbench_AddVanillaWorkbenchTab(string tabID, Sprite tabIcon, string tabTitleText, Action<int> onTabSelected)
		{
			if ((Object)(object)WorkbenchPanelController.instance != (Object)null)
			{
				WorkbenchTabData workbenchTabData = new WorkbenchTabData();
				TabButton val = default(TabButton);
				CraftingRequirementsPanel val2 = default(CraftingRequirementsPanel);
				ComplexTooltip val3 = default(ComplexTooltip);
				WorkbenchPanelController.instance.AddWorkbenchTab(tabID, tabIcon, tabTitleText, onTabSelected, true, ref workbenchTabData.TabTitle, ref val, ref val2, ref val3);
				workbenchTabData.Index = WorkbenchPanelController.instance.WorkbenchTabController.TabButtons.Count - 1;
				workbenchTabData.TabButtonGO = ((Component)val).gameObject;
				workbenchTabData.RequirementsPanelGO = ((Component)val2).gameObject;
				workbenchTabData.ItemInfoGO = ((Component)val3).gameObject;
				return workbenchTabData;
			}
			return null;
		}

		[UsedImplicitly]
		public static bool Workbench_IsTabActive(GameObject tabButton)
		{
			return (Object)(object)WorkbenchPanelController.instance != (Object)null && WorkbenchPanelController.instance.IsTabActive(tabButton);
		}

		[UsedImplicitly]
		public static Button Workbench_GetCraftingTabButton()
		{
			WorkbenchPanelController instance = WorkbenchPanelController.instance;
			return (instance != null) ? ((Component)instance.WorkbenchTabController.TabButtons[0]).GetComponent<Button>() : null;
		}

		[UsedImplicitly]
		public static Button Workbench_GetUpgradeTabButton()
		{
			WorkbenchPanelController instance = WorkbenchPanelController.instance;
			return (instance != null) ? ((Component)instance.WorkbenchTabController.TabButtons[1]).GetComponent<Button>() : null;
		}

		[UsedImplicitly]
		public static GameObject Workbench_CreateNewResultsPanel()
		{
			WorkbenchPanelController instance = WorkbenchPanelController.instance;
			return (instance != null) ? instance.CraftingPanel.CreateResultsPanel() : null;
		}

		private static bool TextBoxCheck(GameObject tooltipTextBoxGO, out TooltipTextBox tooltipTextBox)
		{
			tooltipTextBox = tooltipTextBoxGO.GetComponent<TooltipTextBox>();
			if ((Object)(object)tooltipTextBox == (Object)null)
			{
				Auga.LogError("Must call TooltipTextBox interface method with a game object with a TooltipTextBox component on it.");
				return false;
			}
			return true;
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, Text t, object s, bool localize = true)
		{
			TooltipTextBox_AddLine(tooltipTextBoxGO, t, s, localize, overwrite: false);
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, Text t, object s, bool localize, bool overwrite)
		{
			if (TextBoxCheck(tooltipTextBoxGO, out var tooltipTextBox))
			{
				tooltipTextBox.AddLine((object)t, s, localize, overwrite);
			}
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, bool localize = true)
		{
			TooltipTextBox_AddLine(tooltipTextBoxGO, a, localize, overwrite: false);
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, bool localize, bool overwrite)
		{
			if (TextBoxCheck(tooltipTextBoxGO, out var tooltipTextBox))
			{
				tooltipTextBox.AddLine(a, localize, overwrite);
			}
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, object b, bool localize = true)
		{
			TooltipTextBox_AddLine(tooltipTextBoxGO, a, b, localize, overwrite: false);
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, object b, bool localize, bool overwrite)
		{
			if (TextBoxCheck(tooltipTextBoxGO, out var tooltipTextBox))
			{
				tooltipTextBox.AddLine(a, b, localize, overwrite);
			}
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, object b, object parenthetical, bool localize = true)
		{
			TooltipTextBox_AddLine(tooltipTextBoxGO, a, b, parenthetical, localize, overwrite: false);
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddLine(GameObject tooltipTextBoxGO, object a, object b, object parenthetical, bool localize, bool overwrite)
		{
			if (TextBoxCheck(tooltipTextBoxGO, out var tooltipTextBox))
			{
				tooltipTextBox.AddLine(a, b, parenthetical, localize, overwrite);
			}
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddUpgradeLine(GameObject tooltipTextBoxGO, object label, object value1, object value2, string color2, bool localize = true)
		{
			TooltipTextBox_AddUpgradeLine(tooltipTextBoxGO, label, value1, value2, color2, localize, overwrite: false);
		}

		[UsedImplicitly]
		public static void TooltipTextBox_AddUpgradeLine(GameObject tooltipTextBoxGO, object label, object value1, object value2, string color2, bool localize, bool overwrite)
		{
			if (TextBoxCheck(tooltipTextBoxGO, out var tooltipTextBox))
			{
				tooltipTextBox.AddUpgradeLine(label, value1, value2, color2, localize, overwrite);
			}
		}

		private static bool ComplexTooltipCheck(GameObject complexTooltipGO, out ComplexTooltip complexTooltip)
		{
			complexTooltip = complexTooltipGO.GetComponent<ComplexTooltip>();
			if ((Object)(object)complexTooltip == (Object)null)
			{
				Auga.LogError("Must call ComplexTooltip interface method with a game object with a ComplexTooltip component on it.");
				return false;
			}
			return true;
		}

		[UsedImplicitly]
		public static void ComplexTooltip_AddItemTooltipCreatedListener(Action<GameObject, ItemData> listener)
		{
			ComplexTooltip.OnComplexTooltipGeneratedForItem += delegate(ComplexTooltip complexTooltip, ItemData item)
			{
				listener(((Component)complexTooltip).gameObject, item);
			};
		}

		[UsedImplicitly]
		public static void ComplexTooltip_AddFoodTooltipCreatedListener(Action<GameObject, Food> listener)
		{
			ComplexTooltip.OnComplexTooltipGeneratedForFood += delegate(ComplexTooltip complexTooltip, Food item)
			{
				listener(((Component)complexTooltip).gameObject, item);
			};
		}

		[UsedImplicitly]
		public static void ComplexTooltip_AddStatusEffectTooltipCreatedListener(Action<GameObject, StatusEffect> listener)
		{
			ComplexTooltip.OnComplexTooltipGeneratedForStatusEffect += delegate(ComplexTooltip complexTooltip, StatusEffect item)
			{
				listener(((Component)complexTooltip).gameObject, item);
			};
		}

		[UsedImplicitly]
		public static void ComplexTooltip_AddSkillTooltipCreatedListener(Action<GameObject, Skill> listener)
		{
			ComplexTooltip.OnComplexTooltipGeneratedForSkill += delegate(ComplexTooltip complexTooltip, Skill item)
			{
				listener(((Component)complexTooltip).gameObject, item);
			};
		}

		[UsedImplicitly]
		public static void ComplexTooltip_AddItemStatPreprocessor(Func<ItemData, string, string, Tuple<string, string>> itemStatPreprocessor)
		{
			ComplexTooltip.AddItemStatPreprocessor(itemStatPreprocessor);
		}

		[UsedImplicitly]
		public static void ComplexTooltip_ClearTextBoxes(GameObject complexTooltipGO)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.ClearTextBoxes();
			}
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddTwoColumnTextBox(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return ((Component)complexTooltip.AddTextBox(complexTooltip.TwoColumnTextBoxPrefab, (RectTransform)null)).gameObject;
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddCenteredTextBox(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return ((Component)complexTooltip.AddTextBox(complexTooltip.CenteredTextBoxPrefab, (RectTransform)null)).gameObject;
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddUpgradeLabels(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return ((Component)complexTooltip.AddTextBox(complexTooltip.UpgradeLabelsPrefab, (RectTransform)null)).gameObject;
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddUpgradeTwoColumnTextBox(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return ((Component)complexTooltip.AddTextBox(complexTooltip.UpgradeTwoColumnTextBoxPrefab, (RectTransform)null)).gameObject;
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddCheckBoxTextBox(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return ((Component)complexTooltip.AddTextBox(complexTooltip.CheckBoxTextBoxPrefab, (RectTransform)null)).gameObject;
		}

		[UsedImplicitly]
		public static GameObject ComplexTooltip_AddDivider(GameObject complexTooltipGO)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return null;
			}
			return complexTooltip.AddDivider((RectTransform)null);
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetTopic(GameObject complexTooltipGO, string topic)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetTopic(topic);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetSubtitle(GameObject complexTooltipGO, string topic)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetSubtitle(topic);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetDescription(GameObject complexTooltipGO, string desc)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetDescription(desc);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetIcon(GameObject complexTooltipGO, Sprite icon)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetIcon(icon);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_EnableDescription(GameObject complexTooltipGO, bool enabled)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.EnableDescription(enabled);
			}
		}

		[UsedImplicitly]
		public static string ComplexTooltip_GenerateItemSubtext(GameObject complexTooltipGO, ItemData item)
		{
			if (!ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				return string.Empty;
			}
			return complexTooltip.GenerateItemSubtext(item);
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetItem(GameObject complexTooltipGO, ItemData item, int quality = -1, int variant = -1)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetItem(item, quality, variant);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetItemNoTextBoxes(GameObject complexTooltipGO, ItemData item, int quality = -1, int variant = -1)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetItemNoTextBoxes(item, quality, variant);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetFood(GameObject complexTooltipGO, Food food)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetFood(food);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetStatusEffect(GameObject complexTooltipGO, StatusEffect statusEffect)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetStatusEffect(statusEffect);
			}
		}

		[UsedImplicitly]
		public static void ComplexTooltip_SetSkill(GameObject complexTooltipGO, Skill skill)
		{
			if (ComplexTooltipCheck(complexTooltipGO, out var complexTooltip))
			{
				complexTooltip.SetSkill(skill);
			}
		}

		private static bool RequirementsPanelCheck(GameObject requirementsPanelGO, out CraftingRequirementsPanel requirementsPanel)
		{
			requirementsPanel = requirementsPanelGO.GetComponent<CraftingRequirementsPanel>();
			if ((Object)(object)requirementsPanel == (Object)null)
			{
				Auga.LogError("Must call RequirementsPanel interface method with a game object with a CraftingRequirementsPanel component on it.");
				return false;
			}
			return true;
		}

		[UsedImplicitly]
		public static Image RequirementsPanel_GetIcon(GameObject requirementsPanelGO)
		{
			CraftingRequirementsPanel requirementsPanel;
			return (!RequirementsPanelCheck(requirementsPanelGO, out requirementsPanel)) ? null : requirementsPanel.Icon;
		}

		[UsedImplicitly]
		public static GameObject[] RequirementsPanel_RequirementList(GameObject requirementsPanelGO)
		{
			CraftingRequirementsPanel requirementsPanel;
			return (!RequirementsPanelCheck(requirementsPanelGO, out requirementsPanel)) ? null : requirementsPanel.RequirementList;
		}

		[UsedImplicitly]
		public static void RequirementsPanel_SetWires(GameObject requirementsPanelGO, RequirementWireState[] wireStates, bool canCraft)
		{
			if (RequirementsPanelCheck(requirementsPanelGO, out var requirementsPanel))
			{
				List<WireState> list = wireStates.Select((RequirementWireState wireState) => (WireState)wireState).ToList();
				requirementsPanel.WireFrame.Set((IReadOnlyList<WireState>)list, canCraft);
			}
		}

		[UsedImplicitly]
		public static TMP_Text CustomVariantPanel_Enable(string buttonLabel, Action<bool> onShow)
		{
			if ((Object)(object)WorkbenchPanelController.instance == (Object)null)
			{
				return null;
			}
			return WorkbenchPanelController.instance.CraftingPanel.EnableCustomVariantDialog(buttonLabel, onShow);
		}

		[UsedImplicitly]
		public static void CustomVariantPanel_SetButtonLabel(string buttonLabel)
		{
			if (!((Object)(object)WorkbenchPanelController.instance == (Object)null))
			{
				WorkbenchPanelController.instance.CraftingPanel.SetCustomVariantButtonLabel(buttonLabel);
			}
		}

		[UsedImplicitly]
		public static void CustomVariantPanel_Disable()
		{
			WorkbenchPanelController instance = WorkbenchPanelController.instance;
			if (instance != null)
			{
				instance.CraftingPanel.DisableCustomVariantDialog();
			}
		}
	}
	public enum RequirementWireState
	{
		Absent,
		Have,
		DontHave
	}
	public class PlayerPanelTabData
	{
		public int Index;

		public TMP_Text TabTitle;

		public GameObject TabButtonGO;

		public GameObject ContentGO;
	}
	public class WorkbenchTabData
	{
		public int Index;

		public TMP_Text TabTitle;

		public GameObject TabButtonGO;

		public GameObject RequirementsPanelGO;

		public GameObject ItemInfoGO;
	}
	public class AugaAssets
	{
		public GameObject AugaLogo;

		public GameObject InventoryScreen;

		public GameObject Hud;

		public Texture2D Cursor;

		public GameObject MenuPrefab;

		public GameObject TextViewerPrefab;

		public GameObject MainMenuPrefab;

		public GameObject BuildHudElement;

		public GameObject SettingsPrefab;

		public GameObject MessageHud;

		public GameObject TextInput;

		public GameObject AugaBarber;

		public GameObject AugaChat;

		public GameObject DamageText;

		public GameObject EnemyHud;

		public GameObject StoreGui;

		public GameObject WorldListElement;

		public GameObject ServerListElement;

		public GameObject PasswordDialog;

		public GameObject ConnectingDialog;

		public GameObject PanelBase;

		public GameObject ButtonSmall;

		public GameObject ButtonMedium;

		public GameObject ButtonFancy;

		public GameObject ButtonToggle;

		public GameObject ButtonSettings;

		public GameObject DiamondButton;

		public Font SourceSansProBold;

		public Font SourceSansProSemiBold;

		public Font SourceSansProRegular;

		public Sprite ItemBackgroundSprite;

		public GameObject InventoryTooltip;

		public GameObject SimpleTooltip;

		public GameObject DividerSmall;

		public GameObject DividerMedium;

		public GameObject DividerLarge;

		public GameObject ConfirmDialog;

		public Sprite RecyclingPanelIcon;

		public GameObject BuildHud;

		public GameObject LeftWristMountUI;
	}
	public class AugaColors
	{
		public string BrightestGold = "#FFBF1B";

		public string Topic = "#EAA800";

		public string Emphasis = "#1AACEF";

		public Color Healing = new Color(0.5f, 1f, 0.5f, 0.7f);

		public Color PlayerDamage = new Color(1f, 0f, 0f, 1f);

		public Color PlayerNoDamage = new Color(0.5f, 0.5f, 0.5f, 1f);

		public Color NormalDamage = new Color(1f, 1f, 1f, 1f);

		public Color ResistDamage = new Color(0.6f, 0.6f, 0.6f, 1f);

		public Color WeakDamage = new Color(1f, 1f, 0f, 1f);

		public Color ImmuneDamage = new Color(0.6f, 0.6f, 0.6f, 1f);

		public Color TooHard = new Color(0.8f, 0.7f, 0.7f, 1f);
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("randyknapp.mods.auga", "Project Auga", "1.3.11")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Auga : BaseUnityPlugin
	{
		public enum StatBarTextDisplayMode
		{
			JustValue,
			ValueAndMax,
			ValueMaxPercent,
			JustPercent
		}

		public enum StatBarTextPosition
		{
			Off = -1,
			Above,
			Below,
			Center,
			Start,
			End
		}

		public const string PluginID = "randyknapp.mods.auga";

		public const string Version = "1.3.11";

		private static ConfigEntry<bool> _loggingEnabled;

		private static ConfigEntry<LogLevel> _logLevel;

		public static ConfigEntry<bool> UseAugaTrash;

		public static ConfigEntry<bool> HealthBarShow;

		public static ConfigEntry<int> HealthBarFixedSize;

		public static ConfigEntry<StatBarTextDisplayMode> HealthBarTextDisplay;

		public static ConfigEntry<StatBarTextPosition> HealthBarTextPosition;

		public static ConfigEntry<bool> HealthBarShowTicks;

		public static ConfigEntry<bool> StaminaBarShow;

		public static ConfigEntry<int> StaminaBarFixedSize;

		public static ConfigEntry<StatBarTextDisplayMode> StaminaBarTextDisplay;

		public static ConfigEntry<StatBarTextPosition> StaminaBarTextPosition;

		public static ConfigEntry<bool> StaminaBarShowTicks;

		public static ConfigEntry<bool> EitrBarShow;

		public static ConfigEntry<int> EitrBarFixedSize;

		public static ConfigEntry<StatBarTextDisplayMode> EitrBarTextDisplay;

		public static ConfigEntry<StatBarTextPosition> EitrBarTextPosition;

		public static ConfigEntry<bool> EitrBarShowTicks;

		public static ConfigEntry<bool> AugaChatShow;

		public static readonly AugaAssets Assets = new AugaAssets();

		public static readonly AugaColors Colors = new AugaColors();

		public static bool HasBetterTrader;

		public static bool HasMultiCraft;

		public static bool HasSimpleRecycling;

		public static bool HasChatter;

		public static bool HasSearsCatalog;

		public static bool HasJewelcrafting;

		private static Auga _instance;

		private Harmony _harmony;

		private static Type _multiCraftUiType;

		private static Type _recyclingContainerButtonHolderType;

		private static Type _recyclingStationButtonHolderType;

		private static WorkbenchTabData _recyclingTabData;

		public static Auga instance => _instance;

		public void Awake()
		{
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Expected O, but got Unknown
			//IL_0297: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Expected O, but got Unknown
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ca: Expected O, but got Unknown
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Expected O, but got Unknown
			//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Expected O, but got Unknown
			//IL_04d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e0: Expected O, but got Unknown
			//IL_096f: Unknown result type (might be due to invalid IL or missing references)
			//IL_097d: Expected O, but got Unknown
			//IL_0996: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a4: Expected O, but got Unknown
			//IL_0a57: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a65: Expected O, but got Unknown
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_0537: Expected O, but got Unknown
			//IL_0a8c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a9a: Expected O, but got Unknown
			//IL_0ac1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0acf: Expected O, but got Unknown
			//IL_0af6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b04: Expected O, but got Unknown
			//IL_05ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b9: Expected O, but got Unknown
			//IL_062f: Unknown result type (might be due to invalid IL or missing references)
			//IL_063b: Expected O, but got Unknown
			//IL_06b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bd: Expected O, but got Unknown
			//IL_0733: Unknown result type (might be due to invalid IL or missing references)
			//IL_073f: Expected O, but got Unknown
			_instance = this;
			if (int.TryParse(Assembly.GetExecutingAssembly().GetName().Version.ToString().Split(new char[1] { '.' })[3], out var result) && result > 0)
			{
				Debug.LogWarning((object)"==============================================================================");
				Debug.LogWarning((object)"You are using a PTB version of this mod. It will not work in prior versions.");
				Debug.LogWarning((object)$"Project Auga - Version {Assembly.GetExecutingAssembly().GetName().Version}");
				Debug.LogWarning((object)("Valheim - Version " + Version.GetVersionString(false)));
				if ((Version.CurrentVersion.m_minor != 217 || Version.CurrentVersion.m_patch < 27) && Version.CurrentVersion.m_minor <= 217)
				{
					Debug.LogError((object)">>>>>>>>> GAME VERSION MISMATCH - EXITING <<<<<<<<");
					Debug.LogWarning((object)"==============================================================================");
					Thread.Sleep(10000);
					Object.Destroy((Object)(object)this);
					return;
				}
				Debug.LogWarning((object)"GAME VERSION CHECK - PASSED");
				Debug.LogWarning((object)"==============================================================================");
			}
			LoadDependencies();
			Patcher.Patch();
			LoadTranslations();
			LoadConfig();
			LoadAssets();
			ApplyCursor();
			HasBetterTrader = Chainloader.PluginInfos.ContainsKey("Menthus.bepinex.plugins.BetterTrader");
			HasMultiCraft = Chainloader.PluginInfos.TryGetValue("maximods.valheim.multicraft", out var value);
			HasSimpleRecycling = Chainloader.PluginInfos.TryGetValue("com.github.abearcodes.valheim.simplerecycling", out var value2);
			HasChatter = Chainloader.PluginInfos.TryGetValue("redseiko.valheim.chatter", out var value3);
			HasSearsCatalog = Chainloader.PluginInfos.TryGetValue("redseiko.valheim.searscatalog", out var value4);
			HasJewelcrafting = Chainloader.PluginInfos.TryGetValue("org.bepinex.plugins.jewelcrafting", out var value5);
			_harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "randyknapp.mods.auga");
			if (HasChatter)
			{
				Chatter.ChatterType = Assembly.LoadFile(value3.Location);
				Chatter.ToggleCell = Chatter.ChatterType.GetType("Chatter.ToggleCell");
				MethodInfo methodInfo = AccessTools.Method(Chatter.ToggleCell, "CreateChildCell", (Type[])null, (Type[])null);
				MethodInfo methodInfo2 = AccessTools.Method(Chatter.ToggleCell, "CreateChildLabel", (Type[])null, (Type[])null);
				MethodInfo methodInfo3 = AccessTools.Method(Chatter.ToggleCell, "OnToggleValueChanged", (Type[])null, (Type[])null);
				if (Chatter.ToggleCell != null)
				{
					_harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(Chatter), "CreateChildCell_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
					_harmony.Patch((MethodBase)methodInfo2, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Chatter), "CreateChildLabel_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
					_harmony.Patch((MethodBase)methodInfo3, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Chatter), "OnToggleValueChanged_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
				}
			}
			if (HasSearsCatalog)
			{
				SearsCatalog.SearsCatalogType = Assembly.LoadFile(value4.Location);
				SearsCatalog.HudPatch = SearsCatalog.SearsCatalogType.GetType("SearsCatalog.HudPatch");
				MethodInfo methodInfo4 = AccessTools.Method(typeof(Hud), "Awake", (Type[])null, (Type[])null);
				if (SearsCatalog.HudPatch != null)
				{
					_harmony.Patch((MethodBase)methodInfo4, (HarmonyMethod)null, new HarmonyMethod(typeof(SearsCatalog), "AwakePostfix_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
			}
			if (HasJewelcrafting)
			{
				Jewelcrafting.ModAssembly = Assembly.LoadFile(value5.Location);
				Jewelcrafting.Synergy = Jewelcrafting.ModAssembly.GetType("Jewelcrafting.Synergy");
				Jewelcrafting.SocketsBackground = Jewelcrafting.ModAssembly.GetType("Jewelcrafting.SocketsBackground");
				Jewelcrafting.FusionBoxSetup = Jewelcrafting.ModAssembly.GetType("Jewelcrafting.FusionBoxSetup");
				Jewelcrafting.AddSealButton = Jewelcrafting.FusionBoxSetup.GetNestedType("AddSealButton");
				Jewelcrafting.AddSynergyIcon = Jewelcrafting.Synergy.GetNestedType("AddSynergyIcon", BindingFlags.Static | BindingFlags.NonPublic);
				Jewelcrafting.DisplaySynergyView = Jewelcrafting.Synergy.GetNestedType("DisplaySynergyView");
				Jewelcrafting.GemCursor = Jewelcrafting.ModAssembly.GetType("Jewelcrafting.GemCursor");
				Jewelcrafting.CacheVanillaCursor = Jewelcrafting.GemCursor.GetNestedType("CacheVanillaCursor", BindingFlags.Static | BindingFlags.NonPublic);
				Jewelcrafting.GemStones = Jewelcrafting.ModAssembly.GetType("Jewelcrafting.GemStones");
				Jewelcrafting.OpenFakeSocketsContainer = Jewelcrafting.GemStones.GetNestedType("OpenFakeSocketsContainer");
				Jewelcrafting.CloseFakeSocketsContainer = Jewelcrafting.GemStones.GetNestedType("CloseFakeSocketsContainer", BindingFlags.Static | BindingFlags.NonPublic);
				bool flag = false;
				if (Jewelcrafting.DisplaySynergyView != null)
				{
					MethodInfo methodInfo5 = AccessTools.Method(Jewelcrafting.DisplaySynergyView, "Awake", (Type[])null, (Type[])null);
					MethodInfo methodInfo6 = AccessTools.Method(typeof(InventoryGui), "Awake", (Type[])null, (Type[])null);
					_harmony.Patch((MethodBase)methodInfo5, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "DisplaySynergyView_Awake_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
					_harmony.Patch((MethodBase)methodInfo6, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "IvnentoryGui_Awake_Postfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (Jewelcrafting.SocketsBackground != null)
				{
					MethodInfo methodInfo7 = AccessTools.Method(typeof(Hud), "Awake", (Type[])null, (Type[])null);
					_harmony.Patch((MethodBase)methodInfo7, new HarmonyMethod(typeof(Jewelcrafting), "Hud_Awake_Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (Jewelcrafting.AddSealButton != null)
				{
					MethodInfo method = Jewelcrafting.AddSealButton.GetMethod("Postfix", BindingFlags.Static | BindingFlags.NonPublic);
					if (method == null)
					{
						flag = true;
						Debug.LogWarning((object)$"sealPostfixMethod ==  null: {method == null}");
					}
					_harmony.Patch((MethodBase)method, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "FusionBoxSetup_AddSealButton_Postfix_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (Jewelcrafting.CacheVanillaCursor != null)
				{
					MethodInfo method2 = Jewelcrafting.CacheVanillaCursor.GetMethod("Postfix", BindingFlags.Static | BindingFlags.NonPublic);
					if (method2 == null)
					{
						flag = true;
						Debug.LogWarning((object)$"cursorPostfixMethod ==  null: {method2 == null}");
					}
					_harmony.Patch((MethodBase)method2, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "GemCursor_CacheVanillaCursor_Postfix_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (Jewelcrafting.OpenFakeSocketsContainer != null)
				{
					MethodInfo method3 = Jewelcrafting.OpenFakeSocketsContainer.GetMethod("Open", BindingFlags.Static | BindingFlags.Public);
					if (method3 == null)
					{
						flag = true;
						Debug.LogWarning((object)$"openSocketsMethod ==  null: {method3 == null}");
					}
					_harmony.Patch((MethodBase)method3, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "GemStones_OpenFakeSocketsContainer_Open_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (Jewelcrafting.CloseFakeSocketsContainer != null)
				{
					MethodInfo method4 = Jewelcrafting.CloseFakeSocketsContainer.GetMethod("Prefix", BindingFlags.Static | BindingFlags.NonPublic);
					if (method4 == null)
					{
						flag = true;
						Debug.LogWarning((object)$"closeSocketsMethod ==  null: {method4 == null}");
					}
					_harmony.Patch((MethodBase)method4, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(Jewelcrafting), "GemStones_CloseFakeSocketsContainer_Prefix_Transpiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
				}
				else
				{
					flag = true;
				}
				if (flag)
				{
					Debug.LogWarning((object)$"Jewelcrafting.DisplaySynergyView ==  null: {Jewelcrafting.DisplaySynergyView == null}");
					Debug.LogWarning((object)$"Jewelcrafting.Synergy ==  null: {Jewelcrafting.Synergy == null}");
					Debug.LogWarning((object)$"Jewelcrafting.SocketsBackground ==  null: {Jewelcrafting.SocketsBackground == null}");
					Debug.LogWarning((object)$"Jewelcrafting.DisplaySynergyView ==  null: {Jewelcrafting.DisplaySynergyView == null}");
					Debug.LogWarning((object)$"Jewelcrafting.AddSynergyIcon ==  null: {Jewelcrafting.AddSynergyIcon == null}");
					Debug.LogWarning((object)$"Jewelcrafting.FusionBoxSetup ==  null: {Jewelcrafting.FusionBoxSetup == null}");
					Debug.LogWarning((object)$"Jewelcrafting.AddSealButton ==  null: {Jewelcrafting.AddSealButton == null}");
					Debug.LogWarning((object)$"Jewelcrafting.GemCursor ==  null: {Jewelcrafting.GemCursor == null}");
					Debug.LogWarning((object)$"Jewelcrafting.CacheVanillaCursor ==  null: {Jewelcrafting.CacheVanillaCursor == null}");
					Debug.LogWarning((object)$"Jewelcrafting.GemStones ==  null: {Jewelcrafting.GemStones == null}");
					Debug.LogWarning((object)$"Jewelcrafting.OpenFakeSocketsContainer ==  null: {Jewelcrafting.OpenFakeSocketsContainer == null}");
					Debug.LogWarning((object)$"Jewelcrafting.CloseFakeSocketsContainer ==  null: {Jewelcrafting.CloseFakeSocketsContainer == null}");
					Debug.LogError((object)"Jewelcrafting Compatibility Failed - Contact Vapok with the above information");
					Thread.Sleep(15000);
				}
			}
			if (HasMultiCraft)
			{
				Assembly assembly = Assembly.LoadFile(value.Location);
				_multiCraftUiType = assembly.GetType("MultiCraft.MultiCraft_UI");
				Type type = assembly.GetType("MultiCraft.MultiCraft_Logic");
				MethodInfo methodInfo8 = AccessTools.Method(_multiCraftUiType, "CreateSpaceFromCraftButton", (Type[])null, (Type[])null);
				MethodInfo methodInfo9 = AccessTools.Method(type, "IsCrafting", (Type[])null, (Type[])null);
				if (methodInfo8 != null)
				{
					_harmony.Patch((MethodBase)methodInfo8, new HarmonyMethod(typeof(Auga), "MultiCraft_UI_CreateSpaceFromCraftButton_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
					_harmony.Patch((MethodBase)methodInfo9, new HarmonyMethod(typeof(Auga), "MultiCraft_Logic_IsCrafting_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
			}
			if (HasSimpleRecycling)
			{
				Assembly assembly2 = Assembly.LoadFile(value2.Location);
				_recyclingContainerButtonHolderType = assembly2.GetType("ABearCodes.Valheim.SimpleRecycling.UI.ContainerRecyclingButtonHolder");
				_recyclingStationButtonHolderType = assembly2.GetType("ABearCodes.Valheim.SimpleRecycling.UI.StationRecyclingTabHolder");
				MethodInfo methodInfo10 = AccessTools.Method(_recyclingContainerButtonHolderType, "SetupButton", (Type[])null, (Type[])null);
				MethodInfo methodInfo11 = AccessTools.Method(_recyclingStationButtonHolderType, "SetupTabButton", (Type[])null, (Type[])null);
				MethodInfo methodInfo12 = AccessTools.Method(_recyclingStationButtonHolderType, "SetActive", (Type[])null, (Type[])null);
				MethodInfo methodInfo13 = AccessTools.Method(_recyclingStationButtonHolderType, "InRecycleTab", (Type[])null, (Type[])null);
				if (methodInfo10 != null)
				{
					_harmony.Patch((MethodBase)methodInfo10, new HarmonyMethod(typeof(Auga), "SimpleRecycling_ContainerRecyclingButtonHolder_SetupButton_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
				if (methodInfo11 != null)
				{
					_harmony.Patch((MethodBase)methodInfo11, new HarmonyMethod(typeof(Auga), "SimpleRecycling_StationRecyclingTabHolder_SetupTabButton_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
				if (methodInfo12 != null)
				{
					_harmony.Patch((MethodBase)methodInfo12, new HarmonyMethod(typeof(Auga), "SimpleRecycling_StationRecyclingTabHolder_SetActive_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
				if (methodInfo13 != null)
				{
					_harmony.Patch((MethodBase)methodInfo13, new HarmonyMethod(typeof(Auga), "SimpleRecycling_StationRecyclingTabHolder_InRecycleTab_Patch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				}
			}
		}

		public static bool MultiCraft_UI_CreateSpaceFromCraftButton_Patch(InventoryGui instance)
		{
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			object multiCraftUiInstance = AccessTools.Method(_multiCraftUiType, "get_instance", (Type[])null, (Type[])null).Invoke(null, BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty, null, new object[0], CultureInfo.InvariantCulture);
			Transform val = ((Component)instance.m_craftButton).transform.parent.Find("plus");
			MethodInfo plusButtonMethod = AccessTools.Method(_multiCraftUiType, "OnPlusButtonPressed", (Type[])null, (Type[])null);
			((UnityEvent)((Component)val).GetComponent<Button>().onClick).AddListener((UnityAction)delegate
			{
				plusButtonMethod.Invoke(multiCraftUiInstance, new object[0]);
			});
			Transform val2 = ((Component)instance.m_craftButton).transform.parent.Find("minus");
			MethodInfo minusButtonMethod = AccessTools.Method(_multiCraftUiType, "OnMinusButtonPressed", (Type[])null, (Type[])null);
			((UnityEvent)((Component)val2).GetComponent<Button>().onClick).AddListener((UnityAction)delegate
			{
				minusButtonMethod.Invoke(multiCraftUiInstance, new object[0]);
			});
			return false;
		}

		public static bool MultiCraft_Logic_IsCrafting_Patch(ref bool __result)
		{
			__result = InventoryGui.instance.m_craftTimer >= 0f;
			return false;
		}

		public static bool SimpleRecycling_ContainerRecyclingButtonHolder_SetupButton_Patch()
		{
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			GameObject gameObject = ((Component)((Transform)InventoryGui.instance.m_container).Find("RecycleAll")).gameObject;
			MethodInfo onRecycleAllPressedMethod = AccessTools.Method(_recyclingContainerButtonHolderType, "OnRecycleAllPressed", (Type[])null, (Type[])null);
			MethodInfo methodInfo = AccessTools.Method(_recyclingContainerButtonHolderType, "SetButtonState", (Type[])null, (Type[])null);
			FieldRef<object, Button> val = AccessTools.FieldRefAccess<Button>(_recyclingContainerButtonHolderType, "_recycleAllButton");
			FieldRef<object, Text> val2 = AccessTools.FieldRefAccess<Text>(_recyclingContainerButtonHolderType, "_textComponent");
			FieldRef<object, Image> val3 = AccessTools.FieldRefAccess<Image>(_recyclingContainerButtonHolderType, "_imageComponent");
			Component component = ((Component)_instance).gameObject.GetComponent("ContainerRecyclingButtonHolder");
			Button component2 = gameObject.GetComponent<Button>();
			val.Invoke((object)component) = component2;
			((UnityEventBase)component2.onClick).RemoveAllListeners();
			((UnityEvent)component2.onClick).AddListener((UnityAction)delegate
			{
				onRecycleAllPressedMethod.Invoke(component, new object[0]);
			});
			val2.Invoke((object)component) = ((Component)component2).GetComponentInChildren<Text>();
			val3.Invoke((object)component) = ((Component)component2).GetComponentInChildren<Image>();
			methodInfo.Invoke(component, new object[1] { false });
			return false;
		}

		public static bool SimpleRecycling_StationRecyclingTabHolder_SetupTabButton_Patch()
		{
			FieldRef<object, Button> val = AccessTools.FieldRefAccess<Button>(_recyclingStationButtonHolderType, "_recyclingTabButtonComponent");
			FieldRef<object, GameObject> val2 = AccessTools.FieldRefAccess<GameObject>(_recyclingStationButtonHolderType, "_recyclingTabButtonGameObject");
			MethodInfo updateCraftingPanelMethod = AccessTools.Method(_recyclingStationButtonHolderType, "UpdateCraftingPanel", (Type[])null, (Type[])null);
			Component component = ((Component)_instance).gameObject.GetComponent("StationRecyclingTabHolder");
			_recyclingTabData = API.Workbench_AddVanillaWorkbenchTab("RECYCLE", Assets.RecyclingPanelIcon, "Recycle", delegate
			{
				updateCraftingPanelMethod.Invoke(component, new object[0]);
			});
			val.Invoke((object)component) = _recyclingTabData.TabButtonGO.GetComponent<Button>();
			val2.Invoke((object)component) = _recyclingTabData.TabButtonGO;
			return false;
		}

		public static bool SimpleRecycling_StationRecyclingTabHolder_SetActive_Patch()
		{
			return false;
		}

		public static bool SimpleRecycling_StationRecyclingTabHolder_InRecycleTab_Patch(ref bool __result)
		{
			__result = (Object)(object)WorkbenchPanelController.instance != (Object)null && WorkbenchPanelController.instance.IsTabActiveById("RECYCLE");
			return false;
		}

		public void OnDestroy()
		{
			_instance = null;
		}

		private void LoadDependencies()
		{
			Assembly callingAssembly = Assembly.GetCallingAssembly();
			LoadEmbeddedAssembly(callingAssembly, "fastJSON.dll");
			LoadEmbeddedAssembly(callingAssembly, "Unity.Auga.dll");
		}

		private static void LoadEmbeddedAssembly(Assembly assembly, string assemblyName)
		{
			Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(assembly.GetName().Name + "." + assemblyName);
			if (manifestResourceStream == null)
			{
				LogError("Could not load embedded assembly (" + assemblyName + ")!");
				return;
			}
			using (manifestResourceStream)
			{
				byte[] array = new byte[manifestResourceStream.Length];
				manifestResourceStream.Read(array, 0, array.Length);
				Assembly.Load(array);
			}
		}

		private static void LoadTranslations()
		{
			string text = LoadJsonText("translations.json");
			if (string.IsNullOrEmpty(text))
			{
				return;
			}
			IDictionary<string, object> dictionary = (IDictionary<string, object>)JSON.Parse(text);
			foreach (KeyValuePair<string, object> item in dictionary)
			{
				if (!string.IsNullOrEmpty(item.Key) && !string.IsNullOrEmpty(item.Value.ToString()))
				{
					Localization.instance.AddWord(item.Key, item.Value.ToString());
				}
			}
		}

		private void LoadConfig()
		{
			_loggingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Logging", "LoggingEnabled", false, "Enable logging");
			_logLevel = ((BaseUnityPlugin)this).Config.Bind<LogLevel>("Logging", "LogLevel", (LogLevel)16, "Only log messages of the selected level or higher");
			UseAugaTrash = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "UseAugaTrash", false, "Enable Auga's built in trash button. Click on the button while holding an item or part of a stack with the mouse.");
			HealthBarShow = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "HealthBarShow", true, "If false, hides the health bar completely.");
			HealthBarFixedSize = ((BaseUnityPlugin)this).Config.Bind<int>("StatBars", "HealthBarFixedSize", 0, "If greater than 0, forces the health bar to be that many pixels long, regardless of the player's max health.");
			HealthBarTextDisplay = ((BaseUnityPlugin)this).Config.Bind<StatBarTextDisplayMode>("StatBars", "HealthBarTextDisplay", StatBarTextDisplayMode.JustValue, "Changes how the label of the health bar is displayed.");
			HealthBarTextPosition = ((BaseUnityPlugin)this).Config.Bind<StatBarTextPosition>("StatBars", "HealthBarTextPosition", StatBarTextPosition.Center, "Changes where the label of the health bar is displayed.");
			HealthBarShowTicks = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "HealthBarShowTicks", true, "Show a faint line on the bar every 25 units");
			StaminaBarShow = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "StaminaBarShow", true, "If false, hides the stamina bar completely.");
			StaminaBarFixedSize = ((BaseUnityPlugin)this).Config.Bind<int>("StatBars", "StaminaBarFixedSize", 0, "If greater than 0, forces the stamina bar to be that many pixels long, regardless of the player's max stamina.");
			StaminaBarTextDisplay = ((BaseUnityPlugin)this).Config.Bind<StatBarTextDisplayMode>("StatBars", "StaminaBarTextDisplay", StatBarTextDisplayMode.JustValue, "Changes how the label of the stamina bar is displayed.");
			StaminaBarTextPosition = ((BaseUnityPlugin)this).Config.Bind<StatBarTextPosition>("StatBars", "StaminaBarTextPosition", StatBarTextPosition.Center, "Changes where the label of the stamina bar is displayed.");
			StaminaBarShowTicks = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "StaminaBarShowTicks", true, "Show a faint line on the bar every 25 units");
			EitrBarShow = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "EitrBarShow", true, "If false, hides the eitr bar completely.");
			EitrBarFixedSize = ((BaseUnityPlugin)this).Config.Bind<int>("StatBars", "EitrBarFixedSize", 0, "If greater than 0, forces the eitr bar to be that many pixels long, regardless of the player's max eitr. Eitr bar still hides if max eitr is zero.");
			EitrBarTextDisplay = ((BaseUnityPlugin)this).Config.Bind<StatBarTextDisplayMode>("StatBars", "EitrBarTextDisplay", StatBarTextDisplayMode.JustValue, "Changes how the label of the eitr bar is displayed.");
			EitrBarTextPosition = ((BaseUnityPlugin)this).Config.Bind<StatBarTextPosition>("StatBars", "EitrBarTextPosition", StatBarTextPosition.Center, "Changes where the label of the eitr bar is displayed.");
			EitrBarShowTicks = ((BaseUnityPlugin)this).Config.Bind<bool>("StatBars", "Eitr", true, "Show a faint line on the bar every 25 units");
			AugaChatShow = ((BaseUnityPlugin)this).Config.Bind<bool>("AugaChat", "Show Auga Chat. Disable to use other mods. (Requires Restart)", true, "If false, disables the Auga Chat window display");
		}

		private static void LoadAssets()
		{
			AssetBundle val = LoadAssetBundle("augaassets");
			Assets.AugaLogo = val.LoadAsset<GameObject>("AugaLogo");
			Assets.InventoryScreen = val.LoadAsset<GameObject>("Inventory_screen");
			Assets.Cursor = val.LoadAsset<Texture2D>("Cursor2");
			Assets.MenuPrefab = val.LoadAsset<GameObject>("AugaMenu");
			Assets.TextViewerPrefab = val.LoadAsset<GameObject>("AugaTextViewer");
			Assets.Hud = val.LoadAsset<GameObject>("HUD");
			Assets.MainMenuPrefab = val.LoadAsset<GameObject>("MainMenu");
			Assets.BuildHudElement = val.LoadAsset<GameObject>("BuildHudElement");
			Assets.SettingsPrefab = val.LoadAsset<GameObject>("AugaSettings");
			Assets.MessageHud = val.LoadAsset<GameObject>("AugaMessageHud");
			Assets.TextInput = val.LoadAsset<GameObject>("AugaTextInput");
			Assets.AugaBarber = val.LoadAsset<GameObject>("AugaBarber");
			Assets.AugaChat = val.LoadAsset<GameObject>("AugaChat");
			Assets.DamageText = val.LoadAsset<GameObject>("AugaDamageText");
			Assets.EnemyHud = val.LoadAsset<GameObject>("AugaEnemyHud");
			Assets.StoreGui = val.LoadAsset<GameObject>("AugaStoreScreen");
			Assets.WorldListElement = val.LoadAsset<GameObject>("WorldListElement");
			Assets.ServerListElement = val.LoadAsset<GameObject>("ServerListElement");
			Assets.PasswordDialog = val.LoadAsset<GameObject>("AugaPassword");
			Assets.ConnectingDialog = val.LoadAsset<GameObject>("AugaConnecting");
			Assets.PanelBase = val.LoadAsset<GameObject>("AugaPanelBase");
			Assets.ButtonSmall = val.LoadAsset<GameObject>("ButtonSmall");
			Assets.ButtonMedium = val.LoadAsset<GameObject>("ButtonMedium");
			Assets.ButtonFancy = val.LoadAsset<GameObject>("ButtonFancy");
			Assets.ButtonToggle = val.LoadAsset<GameObject>("ButtonToggle");
			Assets.ButtonSettings = val.LoadAsset<GameObject>("ButtonSettings");
			Assets.DiamondButton = val.LoadAsset<GameObject>("DiamondButton");
			Assets.SourceSansProBold = val.LoadAsset<Font>("SourceSansPro-Bold");
			Assets.SourceSansProSemiBold = val.LoadAsset<Font>("SourceSansPro-SemiBold");
			Assets.SourceSansProRegular = val.LoadAsset<Font>("SourceSansPro-Regular");
			Assets.ItemBackgroundSprite = val.LoadAsset<Sprite>("Container_Square_A");
			Assets.InventoryTooltip = val.LoadAsset<GameObject>("InventoryTooltip");
			Assets.SimpleTooltip = val.LoadAsset<GameObject>("SimpleTooltip");
			Assets.DividerSmall = val.LoadAsset<GameObject>("DividerSmall");
			Assets.DividerMedium = val.LoadAsset<GameObject>("DividerMedium");
			Assets.DividerLarge = val.LoadAsset<GameObject>("DividerLarge");
			Assets.ConfirmDialog = val.LoadAsset<GameObject>("ConfirmDialog");
			Assets.RecyclingPanelIcon = val.LoadAsset<Sprite>("RecyclingPanel");
			Assets.LeftWristMountUI = val.LoadAsset<GameObject>("LeftWristMountUI");
			Assets.BuildHud = val.LoadAsset<GameObject>("BuildHud");
		}

		private static void ApplyCursor()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			Cursor.SetCursor(Assets.Cursor, new Vector2(6f, 5f), (CursorMode)0);
		}

		public static AssetBundle LoadAssetBundle(string filename)
		{
			string assetPath = GetAssetPath(filename);
			if (!string.IsNullOrEmpty(assetPath))
			{
				return AssetBundle.LoadFromFile(assetPath);
			}
			Assembly callingAssembly = Assembly.GetCallingAssembly();
			return AssetBundle.LoadFromStream(callingAssembly.GetManifestResourceStream(callingAssembly.GetName().Name + "." + filename));
		}

		public static string LoadJsonText(string filename)
		{
			string assetPath = GetAssetPath(filename);
			return (!string.IsNullOrEmpty(assetPath)) ? File.ReadAllText(assetPath) : null;
		}

		public static string GetAssetPath(string assetName)
		{
			string text = Path.Combine(Paths.PluginPath, "Auga", assetName);
			if (!File.Exists(text))
			{
				Assembly assembly = typeof(Auga).Assembly;
				text = Path.Combine(Path.GetDirectoryName(assembly.Location) ?? string.Empty, assetName);
				if (!File.Exists(text))
				{
					LogError("Could not find asset (" + assetName + ")");
					return null;
				}
			}
			return text;
		}

		public static void Log(string message)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Invalid comparison between Unknown and I4
			if (_loggingEnabled.Value && (int)_logLevel.Value <= 16)
			{
				((BaseUnityPlugin)_instance).Logger.LogInfo((object)message);
			}
		}

		public static void LogWarning(string message)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Invalid comparison between Unknown and I4
			if (_loggingEnabled.Value && (int)_logLevel.Value <= 4)
			{
				((BaseUnityPlugin)_instance).Logger.LogWarning((object)message);
			}
		}

		public static void LogError(string message)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Invalid comparison between Unknown and I4
			if (_loggingEnabled.Value && (int)_logLevel.Value <= 2)
			{
				((BaseUnityPlugin)_instance).Logger.LogError((object)message);
			}
		}

		[UsedImplicitly]
		public void Update()
		{
			UpdateStatBars();
		}

		public static void UpdateStatBars()
		{
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)Hud.instance != (Object)null))
			{
				return;
			}
			Transform val = ((Component)Hud.instance).transform.Find("hudroot/HealthBar");
			Transform val2 = ((Component)Hud.instance).transform.Find("hudroot/StaminaBar");
			Transform val3 = ((Component)Hud.instance).transform.Find("hudroot/EitrBar");
			if ((Object)(object)val != (Object)null)
			{
				AugaHealthBar component = ((Component)val).GetComponent<AugaHealthBar>();
				if (component != null)
				{
					component.Hide = !HealthBarShow.Value;
					component.FixedLength = HealthBarFixedSize.Value;
					component.TextDisplay = (TextDisplayMode)HealthBarTextDisplay.Value;
					component.DisplayTextPosition = (TextPosition)HealthBarTextPosition.Value;
					component.ShowTicks = HealthBarShowTicks.Value;
				}
			}
			if ((Object)(object)val2 != (Object)null)
			{
				AugaHealthBar component2 = ((Component)val2).GetComponent<AugaHealthBar>();
				if (component2 != null)
				{
					component2.Hide = !StaminaBarShow.Value;
					component2.FixedLength = StaminaBarFixedSize.Value;
					component2.TextDisplay = (TextDisplayMode)StaminaBarTextDisplay.Value;
					component2.DisplayTextPosition = (TextPosition)StaminaBarTextPosition.Value;
					component2.ShowTicks = StaminaBarShowTicks.Value;
				}
			}
			if ((Object)(object)val3 != (Object)null)
			{
				AugaHealthBar component3 = ((Component)val3).GetComponent<AugaHealthBar>();
				if (component3 != null)
				{
					component3.Hide = !EitrBarShow.Value;
					component3.FixedLength = EitrBarFixedSize.Value;
					component3.TextDisplay = (TextDisplayMode)EitrBarTextDisplay.Value;
					component3.DisplayTextPosition = (TextPosition)EitrBarTextPosition.Value;
					component3.ShowTicks = EitrBarShowTicks.Value;
				}
			}
		}
	}
	[HarmonyPatch(typeof(Terminal), "InitTerminal")]
	public static class Terminal_InitTerminal_Patch
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static ConsoleEvent <>9__0_0;

			internal void <Postfix>b__0_0(ConsoleEventArgs args)
			{
				FieldInfo field = typeof(Player).GetField("m_knownBiome", BindingFlags.Instance | BindingFlags.NonPublic);
				field.SetValue(Player.m_localPlayer, new HashSet<Biome>());
			}
		}

		public static void Postfix()
		{
			//IL_0033: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Expected O, but got Unknown
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				ConsoleEvent val = delegate
				{
					FieldInfo field = typeof(Player).GetField("m_knownBiome", BindingFlags.Instance | BindingFlags.NonPublic);
					field.SetValue(Player.m_localPlayer, new HashSet<Biome>());
				};
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			new ConsoleCommand("resetbiomes", "", (ConsoleEvent)obj, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
		}
	}
	public class MovableHudElement : MonoBehaviour
	{
		public ConfigEntry<TextAnchor> Anchor;

		public ConfigEntry<Vector2> Position;

		public ConfigEntry<float> Scale;

		public void Init(TextAnchor defaultAnchor, float defaultPositionX, float defaultPositionY)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			Init(((Object)((Component)this).gameObject).name, defaultAnchor, defaultPositionX, defaultPositionY);
		}

		public void Init(string nameOverride, TextAnchor defaultAnchor, float defaultPositionX, float defaultPositionY)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			Anchor = ((BaseUnityPlugin)Auga.instance).Config.Bind<TextAnchor>(nameOverride, nameOverride + "Anchor", defaultAnchor, "Anchor for " + nameOverride);
			Position = ((BaseUnityPlugin)Auga.instance).Config.Bind<Vector2>(nameOverride, nameOverride + "Position", new Vector2(defaultPositionX, defaultPositionY), "Position for " + nameOverride);
			Scale = ((BaseUnityPlugin)Auga.instance).Config.Bind<float>(nameOverride, nameOverride + "Scale", 1f, "Uniform scale for " + nameOverride);
		}

		public void Update()
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_0038: 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_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected I4, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: 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_00f3: 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_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			if (Anchor != null && Position != null && Scale != null)
			{
				RectTransform val = (RectTransform)((Component)this).transform;
				TextAnchor value = Anchor.Value;
				TextAnchor val2 = value;
				Vector2 val3 = default(Vector2);
				switch ((int)val2)
				{
				case 0:
				{
					((Vector2)(ref val3))..ctor(0f, 1f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 1:
				{
					((Vector2)(ref val3))..ctor(0.5f, 1f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 2:
				{
					((Vector2)(ref val3))..ctor(1f, 1f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 3:
				{
					((Vector2)(ref val3))..ctor(0f, 0.5f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 4:
				{
					((Vector2)(ref val3))..ctor(0.5f, 0.5f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 5:
				{
					((Vector2)(ref val3))..ctor(1f, 0.5f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 6:
				{
					((Vector2)(ref val3))..ctor(0f, 0f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 7:
				{
					((Vector2)(ref val3))..ctor(0.5f, 0f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				case 8:
				{
					((Vector2)(ref val3))..ctor(1f, 0f);
					val.anchorMax = val3;
					Vector2 pivot = (val.anchorMin = val3);
					val.pivot = pivot;
					break;
				}
				}
				val.anchoredPosition = Position.Value;
				((Transform)val).localScale = new Vector3(Scale.Value, Scale.Value);
			}
		}
	}
	[HarmonyPatch(typeof(Game), "SpawnPlayer")]
	public static class AugaLog_Hooks
	{
		public static void Postfix(Game __instance)
		{
			if (Player.m_localPlayer.m_firstSpawn)
			{
				AugaMessageLog.instance.AddArrivalLog(Player.m_localPlayer);
			}
		}
	}
	[HarmonyPatch(typeof(Player), "OnDeath")]
	public static class Player_OnDeath_Patch
	{
		public static void Postfix(Player __instance)
		{
			LastHitTracker lastHitTracker = ((Component)(object)__instance).RequireComponent<LastHitTracker>();
			HitData val = (((Object)(object)lastHitTracker != (Object)null) ? lastHitTracker.LastHit : null);
			AugaMessageLog.instance.AddDeathLog(__instance, val);
		}
	}
	[HarmonyPatch(typeof(TombStone), "UpdateDespawn")]
	public static class TombStone_UpdateDespawn_Patch
	{
		public static bool Prefix(TombStone __instance)
		{
			if (__instance.m_nview.IsValid() && __instance.IsOwner() && !__instance.m_container.IsInUse() && __instance.m_container.GetInventory().NrOfItems() <= 0)
			{
				AugaMessageLog.instance.AddTombstoneLog(Player.m_localPlayer);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Player), "AddKnownItem")]
	public static class Player_AddKnownItem_Patch
	{
		public static bool Prefix(Player __instance, ItemData item)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Invalid comparison between Unknown and I4
			if (__instance.m_knownMaterial.Contains(item.m_shared.m_name))
			{
				return true;
			}
			if ((int)item.m_shared.m_itemType == 1)
			{
				AugaMessageLog.instance.AddNewMaterialLog(item);
			}
			else if ((int)item.m_shared.m_itemType == 13)
			{
				AugaMessageLog.instance.AddNewTrophyLog(item);
			}
			else
			{
				AugaMessageLog.instance.AddNewItemLog(item);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Player), "UpdateKnownRecipesList")]
	public static class Player_UpdateKnownRecipesList_Patch
	{
		public static bool Prefix(Player __instance)
		{
			List<Recipe> list = new List<Recipe>();
			foreach (Recipe recipe in ObjectDB.instance.m_recipes)
			{
				if (recipe.m_enabled && !__instance.m_knownRecipes.Contains(recipe.m_item.m_itemData.m_shared.m_name) && __instance.HaveRequirements(recipe, true, 0))
				{
					list.Add(recipe);
				}
			}
			if (list.Count > 0)
			{
				AugaMessageLog.instance.AddNewRecipesLog((IReadOnlyList<Recipe>)list);
			}
			List<PieceTable> list2 = new List<PieceTable>();
			List<Piece> list3 = new List<Piece>();
			((Humanoid)__instance).m_inventory.GetAllPieceTables(list2);
			foreach (PieceTable item in list2)
			{
				foreach (GameObject piece in item.m_pieces)
				{
					Piece component = piece.GetComponent<Piece>();
					if (component.m_enabled && !__instance.m_knownRecipes.Contains(component.m_name) && __instance.HaveRequirements(component, (RequirementMode)1))
					{
						list3.Add(component);
					}
				}
			}
			if (list3.Count > 0)
			{
				AugaMessageLog.instance.AddNewPieceLog(list3);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Player), "AddKnownStation")]
	public static class Player_AddKnownStation_Patch
	{
		public static bool Prefix(Player __instance, CraftingStation station)
		{
			if (!__instance.m_knownStations.ContainsKey(station.m_name))
			{
				AugaMessageLog.instance.AddNewStationLog(station);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Player), "AddKnownBiome")]
	public static class Player_AddKnownBiome_Patch
	{
		public static bool Prefix(Player __instance, Biome biome)
		{
			//IL_0007: 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)
			if (!__instance.m_knownBiome.Contains(biome))
			{
				AugaMessageLog.instance.AddNewBiomeLog(biome);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(TeleportWorld), "Teleport")]
	public static class TeleportWorld_Teleport_Patch
	{
		public static void Postfix(TeleportWorld __instance, Player player)
		{
			if (__instance.TargetFound() && ((Humanoid)player).IsTeleportable())
			{
				AugaMessageLog.instance.AddTeleportLog(__instance.GetText(), player);
			}
		}
	}
	[HarmonyPatch(typeof(InventoryGui), "DoCrafting")]
	public static class InventoryGui_DoCrafting_Patch
	{
		public static bool Prefix(InventoryGui __instance, Player player)
		{
			if ((Object)(object)__instance.m_craftRecipe == (Object)null)
			{
				return true;
			}
			ItemData craftUpgradeItem = __instance.m_craftUpgradeItem;
			int num = ((craftUpgradeItem == null) ? 1 : (craftUpgradeItem.m_quality + 1));
			if (num > __instance.m_craftRecipe.m_item.m_itemData.m_shared.m_maxQuality || (!player.HaveRequirements(__instance.m_craftRecipe, false, num) && !player.NoCostCheat()) || (__instance.m_craftUpgradeItem != null && !((Humanoid)player).GetInventory().ContainsItem(__instance.m_craftUpgradeItem)) || (__instance.m_craftUpgradeItem == null && !((Humanoid)player).GetInventory().HaveEmptySlot()))
			{
				return true;
			}
			if (__instance.m_craftRecipe.m_item.m_itemData.m_shared.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(__instance.m_craftRecipe.m_item.m_itemData.m_shared.m_dlc))
			{
				return true;
			}
			if (__instance.m_craftUpgradeItem != null)
			{
				AugaMessageLog.instance.AddUpgradeItemLog(__instance.m_craftUpgradeItem, num);
			}
			else
			{
				AugaMessageLog.instance.AddCraftItemLog(__instance.m_craftRecipe);
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Player), "RaiseSkill")]
	public static class Player_RaiseSkill_Patch
	{
		public static SkillType Skill;

		public static int LevelBefore;

		public static bool Prefix(Player __instance, SkillType skill)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			Skill = skill;
			LevelBefore = Mathf.FloorToInt(__instance.m_skills.GetSkill(skill)?.m_level ?? 0f);
			return true;
		}

		public static void Postfix(Player __instance, SkillType skill)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			if (Skill == skill)
			{
				int num = Mathf.FloorToInt(__instance.m_skills.GetSkill(skill)?.m_level ?? 0f);
				if (LevelBefore != num)
				{
					AugaMessageLog.instance.AddSkillUpLog(skill, num);
				}
			}
		}
	}
	[HarmonyPatch(typeof(Character), "ShowPickupMessage")]
	public static class Character_ShowPickupMessage_Patch
	{
		public static void Postfix(ItemData item, int amount)
		{
			if (item != null && amount > 0)
			{
				AugaMessageLog.instance.AddItemPickupLog(item, amount);
			}
		}
	}
	[HarmonyPatch]
	public static class Chat_Setup
	{
		[HarmonyPatch(typeof(Chat), "Awake")]
		public static class Chat_Awake_Patch
		{
			public static bool Prefix(Chat __instance)
			{
				if (Auga.HasChatter)
				{
					return true;
				}
				if (!Auga.AugaChatShow.Value)
				{
					return true;
				}
				return !SetupHelper.IndirectTwoObjectReplace(((Component)__instance).transform, Auga.Assets.AugaChat, "Chat", "Chat_box", "AugaChat");
			}

			public static void Postfix(Chat __instance)
			{
				if (!Auga.HasChatter && Auga.AugaChatShow.Value && (Object)(object)((Terminal)__instance).m_input != (Object)null)
				{
					((Component)((Component)((Terminal)__instance).m_input).transform.parent).gameObject.AddComponent<MovableHudElement>().Init((TextAnchor)8, 0f, 67f);
				}
			}
		}

		[HarmonyPatch(typeof(Chat), "SetNpcText")]
		public static class Chat_SetNpcText_Patch
		{
			public static void Postfix(Chat __instance)
			{
				if (!Auga.HasChatter && Auga.AugaChatShow.Value)
				{
					NpcText val = __instance.m_npcTexts.LastOrDefault();
					if (val != null)
					{
						string text = ((TMP_Text)val.m_textField).text;
						text = text.Replace("<color=orange>", "<color=" + Auga.Colors.Topic + ">");
						text = text.Replace("<color=yellow>", "<color=" + Auga.Colors.Emphasis + ">");
						((TMP_Text)val.m_textField).text = text;
					}
				}
			}
		}
	}
	[HarmonyPatch(typeof(ZNet), "Awake")]
	public static class ZNet_Awake_Patch
	{
		[UsedImplicitly]
		public static void Postfix(ZNet __instance)
		{
			Transform parent = ((Transform)__instance.m_passwordDialog).parent;
			Object.Destroy((Object)(object)((Component)__instance.m_passwordDialog).gameObject);
			GameObject val = Object.Instantiate<GameObject>(Auga.Assets.PasswordDialog, parent, false);
			val.gameObject.SetActive(false);
			__instance.m_passwordDialog = val.GetComponent<RectTransform>();
			Object.Destroy((Object)(object)((Component)__instance.m_connectingDialog).gameObject);
			GameObject val2 = Object.Instantiate<GameObject>(Auga.Assets.ConnectingDialog, parent, false);
			val2.gameObject.SetActive(false);
			__instance.m_connectingDialog = val2.GetComponent<RectTransform>();
		}
	}
	[HarmonyPatch]
	public static class DamageText_Setup
	{
		[HarmonyPatch(typeof(DamageText), "Awake")]
		public static class DamageText_Awake_Patch
		{
			public static bool Prefix(TextInput __instance)
			{
				return !SetupHelper.DirectObjectReplace(((Component)__instance).transform, Auga.Assets.DamageText, "DamageText");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(DamageText), "AddInworldText")]
		public static void AddInworldText_Postfix(DamageText __instance, TextType type, float dmg, bool mySelf)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Invalid comparison between Unknown and I4
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected I4, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			WorldTextInstance val = __instance.m_worldTexts.LastOrDefault();
			if (val != null)
			{
				Color color;
				if ((int)type == 4)
				{
					color = Auga.Colors.Healing;
				}
				else if (mySelf)
				{
					color = ((dmg != 0f) ? Auga.Colors.PlayerDamage : Auga.Colors.PlayerNoDamage);
				}
				else
				{
					color = (Color)((int)type switch
					{
						0 => Auga.Colors.NormalDamage, 
						1 => Auga.Colors.ResistDamage, 
						2 => Auga.Colors.WeakDamage, 
						3 => Auga.Colors.ImmuneDamage, 
						5 => Auga.Colors.TooHard, 
						_ => Color.white, 
					});
				}
				((Graphic)val.m_textField).color = color;
			}
		}
	}
	[Flags]
	public enum ReplaceFlags
	{
		None = 0,
		Instantiate = 1,
		DestroyOriginal = 2
	}
	public static class AugaExtensions
	{
		public static RectTransform RectTransform(this Component c)
		{
			Transform transform = c.transform;
			return (RectTransform)(object)((transform is RectTransform) ? transform : null);
		}

		public static RectTransform RectTransform(this GameObject go)
		{
			Transform transform = go.transform;
			return (RectTransform)(object)((transform is RectTransform) ? transform : null);
		}

		public static void HideElement(this Component c)
		{
			if ((Object)(object)c != (Object)null)
			{
				c.gameObject.SetActive(false);
			}
		}

		public static void HideElementByType<T>(this Component parent) where T : Component
		{
			if (!((Object)(object)parent == (Object)null))
			{
				T componentInChildren = parent.GetComponentInChildren<T>();
				((Component)(object)componentInChildren).HideElement();
			}
		}

		public static void HideElementByName(this GameObject parent, string name)
		{
			((Component)(object)parent.transform).HideElementByName(name);
		}

		public static void HideElementByName(this Component parent, string name)
		{
			if (!((Object)(object)parent == (Object)null))
			{
				Transform c = parent.transform.Find(name);
				((Component)(object)c).HideElement();
			}
		}

		public static Transform Replace(this Transform c, string findPath, Transform other, string otherFindPath = null, ReplaceFlags flags = ReplaceFlags.Instantiate | ReplaceFlags.DestroyOriginal)
		{
			Transform val = c.Find(findPath);
			if ((Object)(object)val == (Object)null)
			{
				return null;
			}
			otherFindPath = otherFindPath ?? findPath;
			Transform val2 = other.Find(otherFindPath);
			if ((Object)(object)val2 == (Object)null)
			{
				return null;
			}
			Transform parent = val.parent;
			int siblingIndex = val.GetSiblingIndex();
			val.SetParent((Transform)null);
			if ((flags & ReplaceFlags.DestroyOriginal) != 0)
			{
				Object.Destroy((Object)(object)((Component)val).gameObject);
			}
			if ((flags & ReplaceFlags.Instantiate) != 0)
			{
				val2 = Object.Instantiate<Transform>(val2, parent);
				((Object)val2).name = ((Object)val2).name.Replace("(Clone)", "").Replace("(clone)", "");
			}
			else
			{
				val2.SetParent(parent);
			}
			val2.SetSiblingIndex(siblingIndex);
			return val2;
		}

		public static Transform Replace(this Component c, string findPath, GameObject other, string otherFindPath = null, ReplaceFlags flags = ReplaceFlags.Instantiate | ReplaceFlags.DestroyOriginal)
		{
			return c.transform.Replace(findPath, other.transform, otherFindPath, flags);
		}

		public static Transform Replace(this Transform c, string findPath, GameObject other, string otherFindPath = null, ReplaceFlags flags = ReplaceFlags.Instantiate | ReplaceFlags.DestroyOriginal)
		{
			return c.Replace(findPath, other.transform, otherFindPath, flags);
		}

		public static Transform Replace(this GameObject go, string findPath, Transform other, string otherFindPath = null, ReplaceFlags flags = ReplaceFlags.Instantiate | ReplaceFlags.DestroyOriginal)
		{
			return go.transform.Replace(findPath, other, otherFindPath, flags);
		}

		public static Transform Replace(this GameObject go, string findPath, GameObject other, string otherFindPath = null, ReplaceFlags flags = ReplaceFlags.Instantiate | ReplaceFlags.DestroyOriginal)
		{
			return go.transform.Replace(findPath, other.transform, otherFindPath, flags);
		}

		public static Transform CopyOver(this GameObject go, string findPath, GameObject other, int siblingIndex)
		{
			Transform val = other.transform.Find(findPath);
			if ((Object)(object)val == (Object)null)
			{
				return null;
			}
			val = Object.Instantiate<Transform>(val, go.transform);
			((Object)val).name = ((Object)val).name.Replace("(Clone)", "").Replace("(clone)", "");
			val.SetSiblingIndex(siblingIndex);
			return val;
		}

		public static T RequireComponent<T>(this Component c) where T : Component
		{
			T val = c.GetComponent<T>();
			if ((Object)(object)val == (Object)null)
			{
				val = c.gameObject.AddComponent<T>();
			}
			return val;
		}

		public static T RequireComponent<T>(this GameObject go) where T : Component
		{
			T val = go.GetComponent<T>();
			if ((Object)(object)val == (Object)null)
			{
				val = go.AddComponent<T>();
			}
			return val;
		}
	}
	[HarmonyPatch(typeof(GuiBar), "SetBar")]
	public static class GuiBar_Patch
	{
		public static bool Prefix(GuiBar __instance, float i)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Invalid comparison between Unknown and I4
			if ((Object)(object)__instance != (Object)null && (Object)(object)__instance.m_barImage != (Object)null && (int)__instance.m_barImage.type == 3)
			{
				__instance.m_barImage.fillAmount = i;
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Hud))]
	public static class Hud_Setup
	{
		[HarmonyPatch("Awake")]
		[HarmonyPriority(800)]
		[HarmonyPostfix]
		public static void Hud_Awake_Postfix(Hud __instance)
		{
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Expected O, but got Unknown
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Expected O, but got Unknown
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0485: Expected O, but got Unknown
			//IL_07dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Expected O, but got Unknown
			//IL_0860: Unknown result type (might be due to invalid IL or missing references)
			//IL_0867: Expected O, but got Unknown
			//IL_0b15: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b2c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cbe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc8: Expected O, but got Unknown
			//IL_0cec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf6: Expected O, but got Unknown
			//IL_099f: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a11: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a53: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6e: Unknown result type (might be due to invalid IL or missing references)
			Transform val = (Auga.HasJewelcrafting ? ((Component)__instance).transform.Find("hudroot/HotKeyBar") : ((Component)(object)__instance).Replace("hudroot/HotKeyBar", Auga.Assets.Hud, "hudroot/HotKeyBar"));
			((Component)val).gameObject.AddComponent<MovableHudElement>().Init((TextAnchor)0, 55f, -44f);
			Transform val2 = ((Component)(object)__instance).Replace("hudroot/StatusEffects", Auga.Assets.Hud);
			Transform c = val2.Find("StatusEffectsExt/SE_Template");
			Transform val3 = val2.Find("StatusEffectsExt");
			Transform val4 = val2.Find("StatusEffectsInt");
			((Component)val4).gameObject.AddComponent<MovableHudElement>().Init("Status Effect List", (TextAnchor)2, -40f, 0f);
			((Component)val3).gameObject.AddComponent<MovableHudElement>().Init("Abilities and Other Statuses", (TextAnchor)2, -160f, 0f);
			__instance.m_statusEffectTemplate = ((Component)(object)c).RectTransform();
			__instance.m_statusEffectListRoot = ((Component)(object)val3).RectTransform();
			__instance.m_saveIcon = ((Component)((Component)(object)__instance).Replace("hudroot/SaveIcon", Auga.Assets.Hud)).gameObject;
			__instance.m_saveIconImage = __instance.m_saveIcon.GetComponent<Image>();
			__instance.m_badConnectionIcon = ((Component)((Component)(object)__instance).Replace("hudroot/BadConnectionIcon", Auga.Assets.Hud)).gameObject;
			DreamTexts dreamTexts = __instance.m_sleepingProgress.GetComponent<SleepText>().m_dreamTexts;
			Transform val5 = ((Component)(object)__instance).Replace("LoadingBlack", Auga.Assets.Hud);
			__instance.m_loadingScreen = ((Component)val5).GetComponent<CanvasGroup>();
			__instance.m_loadingProgress = ((Component)val5.Find("Loading")).gameObject;
			__instance.m_sleepingProgress = ((Component)val5.Find("Sleeping")).gameObject;
			__instance.m_teleportingProgress = ((Component)val5.Find("Teleporting")).gameObject;
			__instance.m_loadingImage = ((Component)val5.Find("Loading/Image")).GetComponent<Image>();
			__instance.m_loadingTip = ((Component)val5.Find("Loading/Tip")).GetComponent<TMP_Text>();
			__instance.m_sleepingProgress.GetComponent<SleepText>().m_dreamTexts = dreamTexts;
			__instance.m_eventBar = ((Component)((Component)(object)__instance).Replace("hudroot/EventBar", Auga.Assets.Hud)).gameObject;
			__instance.m_eventName = __instance.m_eventBar.GetComponentInChildren<TMP_Text>();
			__instance.m_eventBar.gameObject.AddComponent<MovableHudElement>().Init((TextAnchor)1, 0f, -90f);
			__instance.m_damageScreen = ((Component)((Component)(object)__instance).Replace("hudroot/Damaged", Auga.Assets.Hud)).GetComponent<Image>();
			Transform val6 = ((Component)(object)__instance).Replace("hudroot/crosshair", Auga.Assets.Hud);
			__instance.m_crosshair = ((Component)val6.Find("crosshair")).GetComponent<Image>();
			__instance.m_crosshairBow = ((Component)val6.Find("crosshair_bow")).GetComponent<Image>();
			__instance.m_hoverName = ((Component)val6.Find("Dummy/HoverName")).GetComponent<TextMeshProUGUI>();
			__instance.m_pieceHealthRoot = (RectTransform)val6.Find("PieceHealthRoot");
			__instance.m_pieceHealthBar = ((Component)val6.Find("PieceHealthRoot/PieceHealthBar")).GetComponent<GuiBar>();
			__instance.m_targetedAlert = ((Component)val6.Find("Sneak/Alert")).gameObject;
			__instance.m_targeted = ((Component)val6.Find("Sneak/Detected")).gameObject;
			__instance.m_hidden = ((Component)val6.Find("Sneak/Hidden")).gameObject;
			__instance.m_stealthBar = ((Component)val6.Find("Sneak/StealthBar")).GetComponent<GuiBar>();
			((Component)__instance.m_pieceHealthBar).gameObject.AddComponent<MovableHudElement>().Init("BuildPieceHealthBar", (TextAnchor)4, 130f, 0f);
			((Component)__instance.m_targetedAlert.transform.parent).gameObject.AddComponent<MovableHudElement>().Init("Stealth", (TextAnchor)4, 0f, 0f);
			Material material = ((Graphic)__instance.m_gpIcon).material;
			__instance.m_gpRoot = (RectTransform)((Component)(object)__instance).Replace("hudroot/GuardianPower", Auga.Assets.Hud);
			__instance.m_gpName = ((Component)((Transform)__instance.m_gpRoot).Find("Name")).GetComponent<TMP_Text>();
			__instance.m_gpIcon = ((Component)((Transform)__instance.m_gpRoot).Find("Icon")).GetComponent<Image>();
			((Graphic)__instance.m_gpIcon).material = material;
			__instance.m_gpCooldown = ((Component)((Transform)__instance.m_gpRoot).Find("GPTimeText")).GetComponent<TMP_Text>();
			((Component)__instance.m_gpRoot).gameObject.AddComponent<MovableHudElement>().Init((TextAnchor)6, 60f, 70f);
			foreach (Transform item in (Transform)__instance.m_healthPanel)
			{
				Transform val7 = item;
				Object.Destroy((Object)(object)((Component)val7).gameObject);
			}
			Object.Destroy((Object)(object)((Component)__instance.m_staminaBar2Root).gameObject);
			Object.Destroy((Object)(object)((Component)__instance.m_eitrBarRoot).gameObject);
			Transform val8 = ((Component)__instance).transform.Find("hudroot");
			Transform val9 = ((Component)val8).gameObject.CopyOver("hudroot/FoodPanel0", Auga.Assets.Hud, 5);
			Transform val10 = ((Component)val8).gameObject.CopyOver("hudroot/FoodPanel1", Auga.Assets.Hud, 6);
			Transform val11 = ((Component)val8).gameObject.CopyOver("hudroot/FoodPanel2", Auga.Assets.Hud, 7);
			Transform val12 = ((Component)val8).gameObject.CopyOver("hudroot/HealthBar", Auga.Assets.Hud, 8);
			Transform val13 = ((Component)val8).gameObject.CopyOver("hudroot/StaminaBar", Auga.Assets.Hud, 9);
			Transform val14 = ((Component)val8).gameObject.CopyOver("hudroot/EitrBar", Auga.Assets.Hud, 10);
			((Component)val9).gameObject.AddComp