Decompiled source of Gungnir v1.7.5

Gungnir.dll

Decompiled 7 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using Gungnir.Patch;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Gungnir")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Gungnir")]
[assembly: AssemblyCopyright("Copyright © zamboni 2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d85db6e6-c4ed-4d3d-9590-0a40b8ce5774")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Gungnir
{
	internal class CustomConsole : MonoBehaviour
	{
		private const BindingFlags s_bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		private const string s_argPattern = "((?:<[^>]+>)|(?:\\[[^\\]]+\\]))";

		private const int s_maxHistory = 1000;

		private const int s_fontSize = 16;

		private const int s_historyEntryMargin = 10;

		private static Color s_backgroundColor = Color32.op_Implicit(new Color32((byte)42, (byte)47, (byte)58, (byte)165));

		private GUIStyle m_consoleStyle = new GUIStyle();

		private Font m_font = Font.CreateDynamicFontFromOSFont("Consolas", 16);

		private List<string> m_history = new List<string>();

		private Vector2 m_scrollPosition = new Vector2(0f, 2.1474836E+09f);

		private string m_currentText = string.Empty;

		private int m_caretPos;

		private float m_hintAlpha;

		private float m_hintAlphaVel;

		private Rect m_windowRect;

		private Image m_background;

		private CommandMeta m_currentCommand;

		private string m_currentHint = string.Empty;

		private bool m_foundConsoleInstance;

		private bool m_foundChatInstance;

		private CommandHandler m_handler;

		public CommandHandler Handler
		{
			get
			{
				return m_handler;
			}
			set
			{
				m_handler = value;
			}
		}

		public int MaxHistory => 1000;

		public float Height => ((Rect)(ref m_windowRect)).height;

		public float LineHeight => m_consoleStyle.CalcHeight(GUIContent.none, ((Rect)(ref m_windowRect)).width);

		public int VisibleLines => (int)((((Rect)(ref m_windowRect)).height - LineHeight) / (LineHeight + 10f));

		public void ClearScreen()
		{
			m_history.Clear();
			((TMP_Text)((Terminal)Console.instance).m_output).text = string.Empty;
			((MonoBehaviour)this).StartCoroutine(clear());
			IEnumerator clear()
			{
				yield return null;
				m_history.Clear();
				((TMP_Text)((Terminal)Console.instance).m_output).text = string.Empty;
			}
		}

		private List<string> GetConsoleBuffer()
		{
			return typeof(Console).GetField("m_chatBuffer", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetValue(Console.instance) as List<string>;
		}

		private void SetConsoleBuffer(List<string> buffer)
		{
			typeof(Console).GetField("m_chatBuffer", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).SetValue(Console.instance, buffer);
		}

		public void Print(string text)
		{
			((MonoBehaviour)this).StartCoroutine(print(text));
			IEnumerator print(string value)
			{
				yield return null;
				m_history.Add(value);
			}
		}

		private void Start()
		{
			Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
			CreateStyle();
		}

		private void CreateStyle()
		{
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Expected O, but got Unknown
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			string[] pathsToOSFonts = Font.GetPathsToOSFonts();
			string text = "Consolas";
			string[] array = pathsToOSFonts;
			foreach (string text2 in array)
			{
				if (text2.IndexOf("consola.ttf", StringComparison.OrdinalIgnoreCase) != -1)
				{
					text = text2;
					break;
				}
			}
			m_consoleStyle.wordWrap = true;
			m_consoleStyle.fontSize = 16;
			m_consoleStyle.font = m_font;
			m_consoleStyle.normal.textColor = Color.white;
			m_consoleStyle.richText = true;
			m_consoleStyle.alignment = (TextAnchor)0;
			if (Object.op_Implicit((Object)(object)Console.instance))
			{
				Canvas component = ((Component)Console.instance).gameObject.GetComponent<Canvas>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.pixelPerfect = true;
					component.planeDistance = 0f;
					component.renderMode = (RenderMode)0;
				}
				Image componentInChildren = ((Component)Console.instance).gameObject.GetComponentInChildren<Image>(true);
				if (Object.op_Implicit((Object)(object)componentInChildren))
				{
					m_background = componentInChildren;
					((Graphic)componentInChildren).color = s_backgroundColor;
				}
				TMP_FontAsset font = TMP_FontAsset.CreateFontAsset(new Font(text));
				((TMP_Text)((Terminal)Console.instance).m_output).font = font;
				((TMP_InputField)((Terminal)Console.instance).m_input).textComponent.font = font;
				((TMP_Text)((Terminal)Console.instance).m_output).fontSize = m_font.fontSize;
				((Graphic)((Terminal)Console.instance).m_output).color = Color.white;
				((TMP_InputField)((Terminal)Console.instance).m_input).textComponent.fontSize = m_font.fontSize;
				((TMP_InputField)((Terminal)Console.instance).m_input).caretColor = Color.white;
				((TMP_InputField)((Terminal)Console.instance).m_input).customCaretColor = true;
				((Component)((Terminal)Console.instance).m_output).gameObject.SetActive(false);
				((TMP_Text)((Terminal)Console.instance).m_output).text = string.Empty;
			}
			m_history.Clear();
		}

		private void SetInputText(string text)
		{
			m_currentText = text;
			if (Object.op_Implicit((Object)(object)Console.instance))
			{
				((TMP_InputField)((Terminal)Console.instance).m_input).text = text;
				((TMP_InputField)((Terminal)Console.instance).m_input).caretPosition = m_currentText.Length;
			}
		}

		private void OnConsoleDetected()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			Rect rect = ((TMP_Text)((Terminal)Console.instance).m_output).rectTransform.rect;
			float num = ((Rect)(ref rect)).width - 10f;
			rect = ((TMP_Text)((Terminal)Console.instance).m_output).rectTransform.rect;
			m_windowRect = new Rect(10f, 1f, num, ((Rect)(ref rect)).height);
			CreateStyle();
			((UnityEvent<string>)(object)((TMP_InputField)((Terminal)Console.instance).m_input).onValueChanged).RemoveListener((UnityAction<string>)OnInputChanged);
			((UnityEvent<string>)(object)((TMP_InputField)((Terminal)Console.instance).m_input).onValueChanged).AddListener((UnityAction<string>)OnInputChanged);
		}

		private void OnInputChanged(string text)
		{
			m_currentText = text;
			string[] array = text.Split();
			if (array.Length != 0)
			{
				string text2 = array[0];
				if (text2.StartsWith("/"))
				{
					m_currentCommand = Handler.GetCommand(text2);
				}
			}
		}

		private void UpdateCommandHint()
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			if (m_currentCommand == null || string.IsNullOrEmpty(m_currentText))
			{
				return;
			}
			if (string.IsNullOrEmpty(m_currentCommand.hint))
			{
				m_currentHint = ("/" + m_currentCommand.data.keyword).WithColor(Logger.WarningColor) + "\n" + m_currentCommand.data.description;
				return;
			}
			List<string> list = Util.SplitByPattern(m_currentCommand.hint, "((?:<[^>]+>)|(?:\\[[^\\]]+\\]))");
			Match[] array = Regex.Matches(m_currentText, Util.CommandPattern).OfType<Match>().Skip(1)
				.ToArray();
			int num = 0;
			string text = "";
			for (int i = 0; i < array.Length; i++)
			{
				Group group = array[i].Groups[0];
				int num2 = group.Index + group.Length;
				if (m_caretPos <= num2 && i < list.Count)
				{
					num = i;
					break;
				}
				if (m_caretPos > num2 && i + 1 < list.Count)
				{
					num = i + 1;
				}
				else if (i >= list.Count)
				{
					num = list.Count - 1;
					break;
				}
			}
			for (int j = 0; j < list.Count; j++)
			{
				string text2 = list[j];
				text = ((j != num) ? (text + text2.WithColor(new Color(0.8f, 0.8f, 0.8f)) + " ") : (text + "<b>" + text2.WithColor(Logger.GoodColor) + "</b> "));
			}
			m_currentHint = ("/" + m_currentCommand.data.keyword).WithColor(Logger.WarningColor) + " " + text.Trim() + "\n" + m_currentCommand.data.description;
		}

		private void Update()
		{
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			if (!m_foundConsoleInstance && Object.op_Implicit((Object)(object)Console.instance))
			{
				m_foundConsoleInstance = true;
				OnConsoleDetected();
			}
			else if (!Object.op_Implicit((Object)(object)Console.instance))
			{
				m_foundConsoleInstance = false;
				return;
			}
			if (!m_foundChatInstance && Object.op_Implicit((Object)(object)Chat.instance))
			{
				m_foundChatInstance = true;
				OnConsoleDetected();
			}
			else if (!Object.op_Implicit((Object)(object)Chat.instance))
			{
				m_foundChatInstance = false;
			}
			if (m_caretPos != ((TMP_InputField)((Terminal)Console.instance).m_input).caretPosition)
			{
				m_caretPos = ((TMP_InputField)((Terminal)Console.instance).m_input).caretPosition;
				UpdateCommandHint();
			}
			List<string> consoleBuffer = GetConsoleBuffer();
			if (consoleBuffer.Count > 0)
			{
				m_history.AddRange(consoleBuffer);
				consoleBuffer.Clear();
				if (m_history.Count > 1000)
				{
					m_history.RemoveRange(0, Math.Abs(1000 - m_history.Count));
				}
				((TMP_Text)((Terminal)Console.instance).m_output).text = string.Empty;
				m_scrollPosition = new Vector2(0f, 2.1474836E+09f);
			}
		}

		private void OnGUI()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0031: 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_00d8: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: 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_0203: Unknown result type (might be due to invalid IL or missing references)
			if (Console.IsVisible())
			{
				GUILayout.Window(5001, m_windowRect, new WindowFunction(DrawConsole), "Gungnir 1.7.5", m_consoleStyle, Array.Empty<GUILayoutOption>());
				float hintAlpha = m_hintAlpha;
				if (m_currentCommand == null || string.IsNullOrEmpty(m_currentText))
				{
					m_hintAlpha = Mathf.SmoothDamp(m_hintAlpha, 0f, ref m_hintAlphaVel, 0.2f);
				}
				else
				{
					m_hintAlpha = Mathf.SmoothDamp(m_hintAlpha, 1f, ref m_hintAlphaVel, 0.2f);
				}
				if (!Mathf.Approximately(m_hintAlpha, 0f))
				{
					GUIContent val = ((m_hintAlpha == hintAlpha) ? new GUIContent(m_currentHint) : new GUIContent(Util.MultiplyColorTagAlpha(m_currentHint, m_hintAlpha)));
					Color color = GUI.color;
					GUI.color = new Color(1f, 1f, 1f, m_hintAlpha);
					Vector2 val2 = m_consoleStyle.CalcSize(val);
					float num = m_consoleStyle.CalcHeight(val, val2.x);
					Vector3[] array = (Vector3[])(object)new Vector3[4];
					((Graphic)m_background).rectTransform.GetWorldCorners(array);
					Rect val3 = default(Rect);
					((Rect)(ref val3))..ctor(array[1].x, (float)Screen.height - array[1].y, array[2].x - array[1].x, array[1].y - array[0].y);
					float num2 = ((Rect)(ref val3)).yMax + 30f;
					GUITools.DrawRect(new Rect(((Rect)(ref m_windowRect)).x - 10f, num2, val2.x + 20f, num + 20f), s_backgroundColor);
					GUI.Label(new Rect(((Rect)(ref m_windowRect)).x, num2 + 10f, ((Rect)(ref m_windowRect)).width, LineHeight * 2f), val, m_consoleStyle);
					GUI.color = color;
				}
			}
			else
			{
				m_hintAlpha = 0f;
			}
		}

		private void DrawConsole(int windowID)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//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)
			if (!Cursor.visible)
			{
				Cursor.visible = true;
				Cursor.lockState = (CursorLockMode)0;
			}
			GUILayout.Space(16f);
			GUILayout.FlexibleSpace();
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			m_scrollPosition = GUILayout.BeginScrollView(m_scrollPosition, Array.Empty<GUILayoutOption>());
			foreach (string item in m_history)
			{
				GUILayout.Label(item, m_consoleStyle, Array.Empty<GUILayoutOption>());
				GUILayout.Space(10f);
			}
			GUILayout.EndScrollView();
			GUILayout.EndVertical();
		}
	}
	public static class GUITools
	{
		private static readonly Texture2D backgroundTexture = Texture2D.whiteTexture;

		private static readonly GUIStyle textureStyle = new GUIStyle
		{
			normal = new GUIStyleState
			{
				background = backgroundTexture
			}
		};

		public static void DrawRect(Rect position, Color color, GUIContent content = null)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			Color backgroundColor = GUI.backgroundColor;
			GUI.backgroundColor = color;
			GUI.Box(position, content ?? GUIContent.none, textureStyle);
			GUI.backgroundColor = backgroundColor;
		}

		public static void DrawCorners(Rect rect, float size, Color color, GUIContent content = null)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			Color backgroundColor = GUI.backgroundColor;
			GUI.backgroundColor = color;
			GUI.Box(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMin, size, size), content ?? GUIContent.none, textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMax - size, ((Rect)(ref rect)).yMin, size, size), content ?? GUIContent.none, textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMax - size, size, size), content ?? GUIContent.none, textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMax - size, ((Rect)(ref rect)).yMax - size, size, size), content ?? GUIContent.none, textureStyle);
			GUI.backgroundColor = backgroundColor;
		}

		public static void DrawCornersID(Rect rect, float size, Color color)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: 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_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			Color backgroundColor = GUI.backgroundColor;
			GUI.backgroundColor = color;
			GUI.Box(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMin, size, size), "1", textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMax - size, ((Rect)(ref rect)).yMin, size, size), "2", textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMax - size, size, size), "3", textureStyle);
			GUI.Box(new Rect(((Rect)(ref rect)).xMax - size, ((Rect)(ref rect)).yMax - size, size, size), "4", textureStyle);
			GUI.backgroundColor = backgroundColor;
		}

		public static void LayoutBox(Color color, GUIContent content = null)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			Color backgroundColor = GUI.backgroundColor;
			GUI.backgroundColor = color;
			GUILayout.Box(content ?? GUIContent.none, textureStyle, Array.Empty<GUILayoutOption>());
			GUI.backgroundColor = backgroundColor;
		}
	}
	internal static class Logger
	{
		internal class LogStream
		{
			private StringBuilder builder = new StringBuilder();

			private readonly int lineNumber;

			private readonly string filePath = "";

			private readonly string methodName = "";

			private readonly LogType type = (LogType)3;

			private bool m_space = true;

			private bool m_quote;

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream space()
			{
				m_space = true;
				builder.Append(' ');
				return this;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream maybeSpace()
			{
				if (m_space)
				{
					builder.Append(' ');
				}
				return this;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream noSpace()
			{
				m_space = false;
				return this;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream quote()
			{
				m_quote = true;
				builder.Append('"');
				return this;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream maybeQuote(char c = '"')
			{
				if (m_quote)
				{
					builder.Append(c);
				}
				return this;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream noQuote()
			{
				m_quote = false;
				return this;
			}

			public bool autoInsertSpaces()
			{
				return m_space;
			}

			public void setAutoInsertSpaces(bool enabled)
			{
				m_space = enabled;
			}

			public LogStream(LogType type, int lineNumber, string filePath, string methodName)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				this.type = type;
				this.lineNumber = lineNumber;
				this.filePath = filePath;
				this.methodName = methodName;
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream write(object input, Color? color = null)
			{
				//IL_001a: Unknown result type (might be due to invalid IL or missing references)
				builder.Append(color.HasValue ? input.ToString().WithColor(color.Value) : input);
				return maybeSpace();
			}

			[MethodImpl(MethodImplOptions.AggressiveInlining)]
			public LogStream param(object input)
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				builder.Append(input.ToString().WithColor(GetLogSubColor(type)));
				return maybeSpace();
			}

			public void commit()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				if (builder.Length > 0)
				{
					Print(builder.ToString().TrimEnd(Array.Empty<char>()), type, logToConsole: true, lineNumber, filePath, methodName);
				}
			}
		}

		public static Color ErrorColor = new Color(0.96862745f, 42f / 85f, 0.5372549f);

		public static Color WarningColor = new Color(0.922f, 0.796f, 0.545f);

		public static Color GoodColor = new Color(35f / 51f, 0.8f, 0.5882353f);

		private static Color GetLogColor(LogType type)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Invalid comparison between Unknown and I4
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			if ((int)type != 0)
			{
				if ((int)type == 2)
				{
					return WarningColor;
				}
				return Color.white;
			}
			return ErrorColor;
		}

		private static Color GetLogSubColor(LogType type)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Invalid comparison between Unknown and I4
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			if ((int)type != 0)
			{
				if ((int)type == 2)
				{
					return Color.white;
				}
				return GoodColor;
			}
			return Color.white;
		}

		private static void Print(string message, LogType type = 3, bool logToConsole = false, int lineNumber = 0, string filePath = "", string methodName = "")
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			if (logToConsole && (Object)(object)Console.instance != (Object)null)
			{
				string text = "87E3FF";
				string text2 = ColorUtility.ToHtmlStringRGBA(GetLogColor(type));
				Console.instance.Print("<color=#" + text + ">[Gungnir]</color> <color=#" + text2 + ">" + message + "</color>");
			}
			message = Util.StripTags(message);
			Debug.unityLogger.Log(type, (object)$"[Gungnir:{Path.GetFileName(filePath)}:{lineNumber}] {message}");
		}

		public static LogStream Log(string message = "", bool logToConsole = true, [CallerLineNumber] int lineNumber = 0, [CallerFilePath] string filePath = "", [CallerMemberName] string methodName = "")
		{
			if (!string.IsNullOrEmpty(message))
			{
				Print(message, (LogType)3, logToConsole, lineNumber, filePath, methodName);
			}
			return new LogStream((LogType)3, lineNumber, filePath, methodName);
		}

		public static LogStream Error(string message = "", bool logToConsole = true, [CallerLineNumber] int lineNumber = 0, [CallerFilePath] string filePath = "", [CallerMemberName] string methodName = "")
		{
			if (!string.IsNullOrEmpty(message))
			{
				Print(message, (LogType)0, logToConsole, lineNumber, filePath, methodName);
			}
			return new LogStream((LogType)0, lineNumber, filePath, methodName);
		}

		public static LogStream Warning(string message = "", bool logToConsole = true, [CallerLineNumber] int lineNumber = 0, [CallerFilePath] string filePath = "", [CallerMemberName] string methodName = "")
		{
			if (!string.IsNullOrEmpty(message))
			{
				Print(message, (LogType)2, logToConsole, lineNumber, filePath, methodName);
			}
			return new LogStream((LogType)2, lineNumber, filePath, methodName);
		}
	}
	[AttributeUsage(AttributeTargets.Method)]
	internal class Command : Attribute
	{
		public readonly string keyword;

		public readonly string description;

		public readonly string autoCompleteTarget;

		public Command(string keyword, string description, string autoComplete = null)
		{
			this.keyword = keyword;
			this.description = description;
			autoCompleteTarget = autoComplete;
		}
	}
	internal class CommandMeta
	{
		public delegate List<string> AutoCompleteDelegate();

		public readonly Command data;

		public readonly MethodBase method;

		public readonly List<ParameterInfo> arguments;

		public readonly string hint;

		public readonly int requiredArguments;

		public readonly AutoCompleteDelegate AutoComplete;

		public CommandMeta(Command data, MethodBase method, List<ParameterInfo> arguments, AutoCompleteDelegate autoCompleteDelegate = null)
		{
			this.data = data;
			this.method = method;
			this.arguments = arguments;
			AutoComplete = autoCompleteDelegate;
			if (arguments.Count > 0)
			{
				StringBuilder stringBuilder = new StringBuilder();
				foreach (ParameterInfo argument in arguments)
				{
					bool hasDefaultValue = argument.HasDefaultValue;
					requiredArguments += ((!hasDefaultValue) ? 1 : 0);
					if (!hasDefaultValue)
					{
						stringBuilder.Append("<" + Util.GetSimpleTypeName(argument.ParameterType) + " " + argument.Name + "> ");
					}
					else
					{
						string text = ((argument.DefaultValue == null) ? "none" : argument.DefaultValue.ToString());
						stringBuilder.Append("[" + Util.GetSimpleTypeName(argument.ParameterType) + " " + argument.Name + "=" + text + "] ");
					}
				}
				stringBuilder.Remove(stringBuilder.Length - 1, 1);
				hint = stringBuilder.ToString();
			}
			else
			{
				requiredArguments = 0;
			}
		}
	}
	internal class CommandHandler
	{
		private Dictionary<string, CommandMeta> m_actions = new Dictionary<string, CommandMeta>();

		private Dictionary<string, string> m_aliases = new Dictionary<string, string>();

		private CustomConsole m_console;

		private Gungnir m_plugin;

		private const BindingFlags s_bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		internal CustomConsole Console
		{
			get
			{
				return m_console;
			}
			set
			{
				m_console = value;
			}
		}

		internal Gungnir Plugin
		{
			get
			{
				return m_plugin;
			}
			set
			{
				m_plugin = value;
			}
		}

		public Dictionary<string, string> Aliases
		{
			get
			{
				return m_aliases;
			}
			set
			{
				m_aliases = value;
			}
		}

		private static List<string> GetPrefabNames()
		{
			ZNetScene instance = ZNetScene.instance;
			if (instance == null)
			{
				return null;
			}
			return instance.GetPrefabNames();
		}

		[Command("alias", "Create a shortcut or alternate name for a command, or sequence of commands.", null)]
		public void Alias(string name, params string[] commandText)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			if (name.Contains(" "))
			{
				Logger.Error("An alias cannot contain spaces.", logToConsole: true, 135, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Alias");
				return;
			}
			if (m_actions.ContainsKey(name))
			{
				Logger.Error(name.WithColor(Color.white) + " is a Gungnir command and cannot be overwritten.", logToConsole: true, 141, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Alias");
				return;
			}
			if (Util.GetPrivateStaticField<Dictionary<string, ConsoleCommand>>(typeof(Terminal), "commands").ContainsKey(name))
			{
				Logger.Error(name.WithColor(Color.white) + " is a built-in Valheim command and cannot be overwritten.", logToConsole: true, 146, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Alias");
				return;
			}
			if (m_aliases.ContainsKey(name))
			{
				m_aliases.Remove(name);
			}
			string text = string.Join(" ", commandText);
			m_aliases.Add(name, text);
			Plugin.SaveAliases();
			Logger.Log("Alias " + name.WithColor(Logger.WarningColor) + " created for " + text.WithColor(Logger.WarningColor), logToConsole: true, 157, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Alias");
		}

		[Command("bind", "Bind a console command to a key. See the Unity documentation for KeyCode names.", null)]
		public void Bind(string keyCode, params string[] commandText)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			if (!Enum.TryParse<KeyCode>(keyCode, ignoreCase: true, out KeyCode result))
			{
				Logger.Error("Couldn't find a key code named " + keyCode.WithColor(Color.white) + ".", logToConsole: true, 165, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Bind");
				return;
			}
			if (Plugin.Binds.ContainsKey(result))
			{
				Plugin.Binds.Remove(result);
			}
			string text = string.Join(" ", commandText);
			Plugin.Binds.Add(result, text);
			Plugin.SaveBinds();
			Logger.Log("Bound " + ((object)(KeyCode)(ref result)).ToString().WithColor(Logger.GoodColor) + " to " + text.WithColor(Logger.WarningColor) + ".", logToConsole: true, 177, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Bind");
		}

		[Command("butcher", "Kills all living creatures within a radius (meters), excluding players.", null)]
		public void KillAll(float radius = 50f, bool killTamed = false)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Expected O, but got Unknown
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 185, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "KillAll");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 191, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "KillAll");
				return;
			}
			List<Character> list = new List<Character>();
			Character.GetCharactersInRange(((Component)Player.m_localPlayer).transform.position, radius, list);
			int num = 0;
			foreach (Character item in list)
			{
				if (!item.IsPlayer() && (!item.IsTamed() || killTamed))
				{
					HitData val = new HitData();
					val.m_damage.m_damage = float.PositiveInfinity;
					item.Damage(val);
					num++;
				}
			}
			Logger.Log("Murdered " + num.ToString().WithColor(Logger.GoodColor) + " creature(s) within " + radius.ToString().WithColor(Logger.GoodColor) + " meters.", logToConsole: true, 210, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "KillAll");
		}

		[Command("clear", "Clears the console's output.", null)]
		public void ClearConsole()
		{
			Console?.ClearScreen();
		}

		[Command("creative", "Toggles creative mode, which removes the need for resources.", null)]
		public void ToggleNoCost(bool? enabled = null)
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			enabled = enabled ?? (!Player.m_localPlayer.GetPrivateField<bool>("m_noPlacementCost"));
			Player.m_localPlayer.SetPrivateField("m_noPlacementCost", enabled);
			if (!enabled.Value && !((Character)Player.m_localPlayer).IsDebugFlying())
			{
				Player.m_debugMode = false;
			}
			else
			{
				Player.m_debugMode = true;
			}
			Player.m_localPlayer.InvokePrivate<object>("UpdateAvailablePiecesList", Array.Empty<object>());
			Logger.Log("Creative mode: " + (enabled.Value ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 233, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleNoCost");
		}

		[Command("echo", "Shout into the void.", null)]
		public void Echo(params string[] values)
		{
			Console.instance.Print(string.Join(" ", values));
		}

		[Command("explore", "Reveals the map around you within a certain radius.", null)]
		public void Explore(float radius = 200f)
		{
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 247, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Explore");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 253, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Explore");
				return;
			}
			Minimap.instance.InvokePrivate<object>("Explore", new object[2]
			{
				((Component)Player.m_localPlayer).transform.position,
				radius
			});
			Logger.Log("", logToConsole: true, 259, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Explore").write("Revealed the map within").param(radius)
				.write("meter(s).")
				.commit();
		}

		[Command("fly", "Toggles the ability to fly. Can also disable collisions with the second argument.", null)]
		public void ToggleFly(bool noCollision = false)
		{
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: 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_00b0: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 271, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleFly");
				return;
			}
			bool flag = Player.m_localPlayer.ToggleDebugFly();
			if (flag)
			{
				((Component)Player.m_localPlayer).GetComponent<Collider>().enabled = !noCollision;
			}
			else
			{
				((Component)Player.m_localPlayer).GetComponent<Collider>().enabled = true;
			}
			if (!flag && !Player.m_localPlayer.NoCostCheat())
			{
				Player.m_debugMode = false;
			}
			else
			{
				Player.m_debugMode = true;
			}
			Logger.Log("Flight: " + (flag ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)) + " | No collision: " + ((noCollision && flag) ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 287, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleFly");
		}

		[Command("give", "Give an item to yourself or another player.", "GetPrefabNames")]
		public void Give(string itemName, int amount = 1, Player player = null, int level = 1)
		{
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: 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_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)ZNetScene.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 296, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			if (string.IsNullOrEmpty(itemName))
			{
				Logger.Error("You must specify a name.", logToConsole: true, 302, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			if (amount <= 0)
			{
				Logger.Error("Amount must be greater than 0.", logToConsole: true, 308, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			if (level <= 0)
			{
				Logger.Error("Level must be greater than 0.", logToConsole: true, 314, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			if ((Object)(object)player == (Object)null)
			{
				player = Player.m_localPlayer;
			}
			GameObject prefabByName;
			try
			{
				prefabByName = Util.GetPrefabByName(itemName);
			}
			catch (TooManyValuesException)
			{
				Logger.Error("Found more than one item containing the text <color=white>" + itemName + "</color>, please be more specific.", logToConsole: true, 329, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			catch (NoMatchFoundException)
			{
				Logger.Error("Couldn't find any items named <color=white>" + itemName + "</color>.", logToConsole: true, 334, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			if ((Object)(object)prefabByName.GetComponent<ItemDrop>() == (Object)null)
			{
				Logger.Error("Found a prefab named <color=white>" + itemName + "</color>, but that isn't an item.", logToConsole: true, 340, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			Vector3 val = Random.insideUnitSphere * 0.5f;
			((Character)Player.m_localPlayer).Message((MessageType)1, "Spawning object " + ((Object)prefabByName).name, 0, (Sprite)null);
			GameObject val2 = Object.Instantiate<GameObject>(prefabByName, ((Component)player).transform.position + ((Component)player).transform.forward * 2f + Vector3.up + val, Quaternion.identity);
			if (!Object.op_Implicit((Object)(object)val2))
			{
				Logger.Error("Something went wrong!", logToConsole: true, 351, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
				return;
			}
			ItemDrop component = val2.GetComponent<ItemDrop>();
			component.m_itemData.m_quality = level;
			component.m_itemData.m_stack = amount;
			component.m_itemData.m_durability = component.m_itemData.GetMaxDurability();
			Logger.Log("Gave " + amount.ToString().WithColor(Logger.GoodColor) + " of " + ((Object)prefabByName).name.WithColor(Logger.GoodColor) + " to " + player.GetPlayerName().WithColor(Logger.GoodColor) + ".", logToConsole: true, 361, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Give");
			if ((Object)(object)player == (Object)(object)Player.m_localPlayer)
			{
				((Humanoid)player).Pickup(val2, false, false);
			}
		}

		[Command("goto", "Teleport yourself to another player.", null)]
		public void Goto(Player player)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 376, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Goto");
				return;
			}
			((Component)Player.m_localPlayer).transform.position = ((Component)player).transform.position - ((Component)player).transform.forward * 1.5f + Vector3.up * 2f;
			Logger.Log("Teleporting to " + player.GetPlayerName().WithColor(Logger.GoodColor) + "...", logToConsole: true, 382, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Goto");
		}

		[Command("ghost", "Toggles ghost mode. Prevents hostile creatures from detecting you.", null)]
		public void ToggleGhostMode(bool? enabled = null)
		{
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 390, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleGhostMode");
				return;
			}
			enabled = enabled ?? (!((Character)Player.m_localPlayer).InGhostMode());
			Player.m_localPlayer.SetGhostMode(enabled.Value);
			Logger.Log("Ghost mode: " + (((Character)Player.m_localPlayer).InGhostMode() ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 397, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleGhostMode");
		}

		[Command("god", "Toggles invincibility.", null)]
		public void ToggleGodmode(bool? enabled = null)
		{
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 405, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleGodmode");
				return;
			}
			enabled = enabled ?? (!((Character)Player.m_localPlayer).InGodMode());
			Player.m_localPlayer.SetGodMode(enabled.Value);
			Logger.Log("God mode: " + (((Character)Player.m_localPlayer).InGodMode() ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 412, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleGodmode");
		}

		[Command("heal", "Heal all of your wounds.", null)]
		public void Heal()
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 420, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Heal");
				return;
			}
			((Character)Player.m_localPlayer).Heal(((Character)Player.m_localPlayer).GetMaxHealth(), true);
			Logger.Log("All wounds cured.", logToConsole: true, 425, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Heal");
		}

		[Command("help", "Prints the command list, or looks up the syntax of a specific command. Also accepts a page number, in case of many commands.", null)]
		public void Help(string commandOrPageNum = null)
		{
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			int result = 1;
			bool flag = int.TryParse(commandOrPageNum, out result);
			result = Math.Max(result, 1);
			if (commandOrPageNum == null || flag)
			{
				int num = Console.VisibleLines - 2;
				int num2 = Math.Max((int)Math.Ceiling((float)m_actions.Count * 3f / (float)num), 1);
				int num3 = (int)Math.Ceiling((float)num / 3f);
				if (result > num2)
				{
					Logger.Error($"Max number of help pages is {num2}.", logToConsole: true, 443, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Help");
					return;
				}
				if (!flag || result == 1)
				{
					Console.instance.Print("\n[Gungnir] Version 1.7.5 by zamboni\n");
				}
				if (flag)
				{
					Console.instance.Print($"Page ({result}/{num2})\n");
				}
				int count = (result - 1) * num3;
				{
					foreach (CommandMeta item in from m in m_actions.Values.ToList().Skip(count).Take(flag ? num3 : m_actions.Count)
						orderby m.data.keyword
						select m)
					{
						string text = "/" + item.data.keyword;
						if (item.arguments.Count > 0)
						{
							Console.instance.Print(text.WithColor(Logger.WarningColor) + " " + item.hint.WithColor(Logger.GoodColor) + "\n" + item.data.description);
						}
						else
						{
							Console.instance.Print(text.WithColor(Logger.WarningColor) + "\n" + item.data.description);
						}
						Console.instance.Print("");
					}
					return;
				}
			}
			if (!commandOrPageNum.StartsWith("/"))
			{
				commandOrPageNum = "/" + commandOrPageNum;
			}
			if (!m_actions.TryGetValue(commandOrPageNum, out var value))
			{
				Logger.Error("Sorry, couldn't find a command named " + commandOrPageNum.WithColor(Color.white) + ".", logToConsole: true, 481, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Help");
				return;
			}
			Console.instance.Print("");
			if (value.arguments.Count > 0)
			{
				Console.instance.Print(commandOrPageNum.WithColor(Logger.WarningColor) + " " + value.hint.WithColor(Logger.GoodColor) + "\n" + value.data.description);
			}
			else
			{
				Console.instance.Print(commandOrPageNum.WithColor(Logger.WarningColor) + "\n" + value.data.description);
			}
		}

		[Command("listaliases", "List all of your custom aliases, or check what a specific alias does.", null)]
		public void ListAliases(string alias = null)
		{
			//IL_0017: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			if (m_aliases.Count == 0)
			{
				Logger.Error("You have no aliases currently set. Use " + "/alias".WithColor(Color.white) + " to add some.", logToConsole: true, 501, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListAliases");
				return;
			}
			if (string.IsNullOrEmpty(alias))
			{
				foreach (KeyValuePair<string, string> alias2 in m_aliases)
				{
					Console.instance.Print(alias2.Key + " = " + alias2.Value.WithColor(Logger.WarningColor));
				}
				return;
			}
			if (!m_aliases.TryGetValue(alias, out var value))
			{
				Logger.Error("The alias " + alias.WithColor(Color.white) + " does not exist.", logToConsole: true, 515, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListAliases");
			}
			else
			{
				Console.instance.Print(alias + " = " + value.WithColor(Logger.WarningColor));
			}
		}

		[Command("listbinds", "List all of your custom keybinds, or check what an individual keycode is bound to.", null)]
		public void ListBinds(string keyCode = null)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: 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_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			if (Plugin.Binds.Count == 0)
			{
				Logger.Error("You have no keybinds currently set. Use " + "/bind".WithColor(Color.white) + " to add some.", logToConsole: true, 527, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListBinds");
				return;
			}
			if (string.IsNullOrEmpty(keyCode))
			{
				foreach (KeyValuePair<KeyCode, string> bind in Plugin.Binds)
				{
					Console.instance.Print($"{bind.Key} = {bind.Value.WithColor(Logger.WarningColor)}");
				}
				return;
			}
			string value;
			if (!Enum.TryParse<KeyCode>(keyCode, ignoreCase: true, out KeyCode result))
			{
				Logger.Error("Couldn't find a key code named " + keyCode.WithColor(Color.white) + ".", logToConsole: true, 541, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListBinds");
			}
			else if (!Plugin.Binds.TryGetValue(result, out value))
			{
				Logger.Error(keyCode.ToString().WithColor(Color.white) + " is not bound to anything.", logToConsole: true, 547, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListBinds");
			}
			else
			{
				Console.instance.Print($"{result} = {value.WithColor(Logger.WarningColor)}");
			}
		}

		[Command("listweather", "Get a list of all available weather types.", null)]
		public void ListWeather()
		{
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)EnvMan.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 559, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListWeather");
				return;
			}
			IEnumerable<string> enumerable = EnvMan.instance.m_environments.Select((EnvSetup env) => env.m_name);
			Logger.Log("Found " + enumerable.Count().ToString().WithColor(Logger.GoodColor) + " available weather types...", logToConsole: true, 567, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListWeather");
			foreach (string item in enumerable)
			{
				Console.instance.Print(item);
			}
		}

		[Command("listitems", "List every item in the game, or search for one that contains your text.", null)]
		public void ListItems(string itemName = null)
		{
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)ZNetScene.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 578, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListItems");
				return;
			}
			List<string> list = new List<string>();
			foreach (string prefabName in ZNetScene.instance.GetPrefabNames())
			{
				if (!Object.op_Implicit((Object)(object)ZNetScene.instance.GetPrefab(prefabName).GetComponent<ItemDrop>()))
				{
					continue;
				}
				if (itemName == null)
				{
					list.Add(prefabName);
					continue;
				}
				int num = prefabName.IndexOf(itemName, StringComparison.OrdinalIgnoreCase);
				if (num != -1)
				{
					string text = prefabName.Substring(num, itemName.Length);
					string item = prefabName.Replace(text, text.WithColor(Logger.GoodColor));
					list.Add(item);
				}
			}
			if (list.Count == 0)
			{
				Logger.Error("Couldn't find any items containing the text " + itemName.WithColor(Color.white) + ".", logToConsole: true, 609, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListItems");
				return;
			}
			Logger.Log("Found " + list.Count.ToString().WithColor(Logger.GoodColor) + " items...", logToConsole: true, 612, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListItems");
			foreach (string item2 in list)
			{
				Console.instance.Print(item2);
			}
		}

		[Command("listportals", "List every portal tag.", null)]
		public void ListPortals()
		{
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 624, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListPortals");
				return;
			}
			HashSet<string> hashSet = new HashSet<string>();
			foreach (int portalHash in Game.instance.PortalPrefabHash)
			{
				foreach (ZDO item in from <>h__TransparentIdentifier0 in ZDOMan.instance.GetPrivateField<Dictionary<ZDOID, ZDO>>("m_objectsByID").Select(delegate(KeyValuePair<ZDOID, ZDO> pair)
					{
						KeyValuePair<ZDOID, ZDO> keyValuePair = pair;
						return new
						{
							pair = pair,
							tag = keyValuePair.Value.GetString("tag", (string)null)
						};
					})
					where <>h__TransparentIdentifier0.pair.Value.GetPrefab() == portalHash && !string.IsNullOrEmpty(<>h__TransparentIdentifier0.tag) && <>h__TransparentIdentifier0.tag != " "
					select <>h__TransparentIdentifier0.pair.Value)
				{
					string @string = item.GetString("tag", (string)null);
					if (!hashSet.Contains(@string))
					{
						hashSet.Add(@string);
					}
				}
			}
			Logger.Log("Found " + hashSet.Count.ToString().WithColor(Logger.GoodColor) + " tag(s)...", logToConsole: true, 647, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListPortals");
			foreach (string item2 in hashSet.OrderBy((string tag) => tag))
			{
				Console.instance.Print(item2);
			}
		}

		[Command("listprefabs", "List every prefab in the game, or search for one that contains your text.", null)]
		public void ListPrefabs(string prefabName = null)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: 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)
			if (!Object.op_Implicit((Object)(object)ZNetScene.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 658, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListPrefabs");
				return;
			}
			List<string> list = new List<string>();
			foreach (string prefabName2 in ZNetScene.instance.GetPrefabNames())
			{
				ZNetScene.instance.GetPrefab(prefabName2);
				if (prefabName == null)
				{
					list.Add(prefabName2);
					continue;
				}
				int num = prefabName2.IndexOf(prefabName, StringComparison.OrdinalIgnoreCase);
				if (num != -1)
				{
					string text = prefabName2.Substring(num, prefabName.Length);
					string item = prefabName2.Replace(text, text.WithColor(Logger.GoodColor));
					list.Add(item);
				}
			}
			if (list.Count == 0)
			{
				Logger.Error("Couldn't find any items containing the text " + prefabName.WithColor(Color.white) + ".", logToConsole: true, 685, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListPrefabs");
				return;
			}
			Logger.Log("Found " + list.Count.ToString().WithColor(Logger.GoodColor) + " prefabs...", logToConsole: true, 688, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListPrefabs");
			foreach (string item2 in list)
			{
				Console.instance.Print(item2);
			}
		}

		[Command("listskills", "List every available skill in the game.", null)]
		public void ListSkills()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			Array values = Enum.GetValues(typeof(SkillType));
			Logger.Log("Found " + values.Length.ToString().WithColor(Logger.GoodColor) + " available skills...", logToConsole: true, 701, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ListSkills");
			foreach (SkillType item in values)
			{
				SkillType val = item;
				Console.instance.Print(((object)(SkillType)(ref val)).ToString());
			}
		}

		[Command("nomana", "Toggles infinite eitr (mana).", null)]
		public void ToggleMana(bool? enabled = null)
		{
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 712, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleMana");
				return;
			}
			enabled = enabled ?? (!Plugin.NoMana);
			if (enabled.Value)
			{
				Player.m_localPlayer.m_eitrRegenDelay = 0f;
				Player.m_localPlayer.m_eiterRegen = 1000f;
				Player.m_localPlayer.InvokePrivate<object>("SetMaxEitr", new object[2] { 1000f, true });
				Plugin.NoMana = true;
			}
			else
			{
				Player.m_localPlayer.m_eitrRegenDelay = 1f;
				Player.m_localPlayer.m_eiterRegen = 5f;
				Player.m_localPlayer.InvokePrivate<object>("SetMaxEitr", new object[2] { 100f, true });
				Plugin.NoMana = false;
			}
			Logger.Log("Infinite mana: " + (Plugin.NoMana ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 733, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleMana");
		}

		[Command("nostam", "Toggles infinite stamina.", null)]
		public void ToggleStamina(bool? enabled = null)
		{
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 744, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleStamina");
				return;
			}
			enabled = enabled ?? (!Plugin.NoStamina);
			if (enabled.Value)
			{
				Player.m_localPlayer.m_staminaRegenDelay = 0.05f;
				Player.m_localPlayer.m_staminaRegen = 999f;
				Player.m_localPlayer.m_runStaminaDrain = 0f;
				Player.m_localPlayer.SetMaxStamina(9999f, true);
				Plugin.NoStamina = true;
			}
			else
			{
				Player.m_localPlayer.m_staminaRegenDelay = 1f;
				Player.m_localPlayer.m_staminaRegen = 5f;
				Player.m_localPlayer.m_runStaminaDrain = 10f;
				Player.m_localPlayer.SetMaxStamina(100f, true);
				Plugin.NoStamina = false;
			}
			Logger.Log("Infinite stamina: " + (Plugin.NoStamina ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 767, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleStamina");
		}

		[Command("nores", "Toggle building restrictions. Allows you to place objects even when the preview is red.", null)]
		public void ToggleBuildAnywhere(bool? enabled = null)
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 778, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleBuildAnywhere");
				return;
			}
			enabled = enabled ?? (!Plugin.BuildAnywhere);
			Plugin.BuildAnywhere = enabled.Value;
			Logger.Log("No build restrictions: " + (Plugin.BuildAnywhere ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 785, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleBuildAnywhere");
		}

		[Command("noslide", "Toggle the ability to walk up steep angles without sliding.", null)]
		public void ToggleNoSlide(bool? enabled = null)
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 793, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleNoSlide");
				return;
			}
			enabled = enabled ?? (!Plugin.NoSlide);
			Plugin.NoSlide = enabled.Value;
			Logger.Log("No slide: " + (Plugin.NoSlide ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 800, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleNoSlide");
		}

		[Command("nosup", "Toggle the need for structural support.", null)]
		public void ToggleNoSupport(bool? enabled = null)
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 808, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleNoSupport");
				return;
			}
			enabled = enabled ?? (!Plugin.NoSlide);
			Plugin.NoStructuralSupport = enabled.Value;
			Logger.Log("No structural support: " + (Plugin.NoStructuralSupport ? "ON".WithColor(Logger.GoodColor) : "OFF".WithColor(Logger.ErrorColor)), logToConsole: true, 815, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "ToggleNoSupport");
		}

		[Command("pos", "Print your current position as XZY coordinates. (XZY is used for tp command.)", null)]
		public void Pos()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 823, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Pos");
				return;
			}
			Vector3 position = ((Component)Player.m_localPlayer).transform.position;
			string text = $"{Math.Round(position.x, 3)} {Math.Round(position.z, 3)} {Math.Round(position.y, 3)}".WithColor(Logger.GoodColor);
			Logger.Log("Your current position is " + text, logToConsole: true, 829, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Pos");
		}

		[Command("puke", "Clears all food buffs and makes room for you to eat something else.", null)]
		public void Puke()
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 837, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Puke");
				return;
			}
			Player.m_localPlayer.ClearFood();
			Logger.Log("Food buffs cleared.", logToConsole: true, 842, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Puke");
		}

		[Command("refreshability", "Refreshes the cooldown on your special ability.", null)]
		public void RefreshAbility()
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 850, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RefreshAbility");
				return;
			}
			Player.m_localPlayer.m_guardianPowerCooldown = 0f;
			Logger.Log("Guardian power cooldown refreshed.", logToConsole: true, 855, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RefreshAbility");
		}

		[Command("removedrops", "Clears all item drops in a radius (meters).", null)]
		public void RemoveDrops(float radius = 50f)
		{
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: 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)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 863, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RemoveDrops");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 869, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RemoveDrops");
				return;
			}
			ItemDrop[] array = Object.FindObjectsOfType<ItemDrop>();
			int num = 0;
			ItemDrop[] array2 = array;
			foreach (ItemDrop val in array2)
			{
				ZNetView component = ((Component)val).GetComponent<ZNetView>();
				if (Object.op_Implicit((Object)(object)component) && Vector3.Distance(((Component)val).gameObject.transform.position, ((Component)Player.m_localPlayer).gameObject.transform.position) <= radius)
				{
					component.ClaimOwnership();
					component.Destroy();
					num++;
				}
			}
			Logger.Log("Removed " + num.ToString().WithColor(Logger.GoodColor) + " item(s) within " + radius.ToString().WithColor(Logger.GoodColor) + " meters.", logToConsole: true, 888, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RemoveDrops");
		}

		[Command("repair", "Repairs every item in your inventory.", null)]
		public void Repair()
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 896, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Repair");
				return;
			}
			List<ItemData> list = new List<ItemData>();
			((Humanoid)Player.m_localPlayer).GetInventory().GetWornItems(list);
			foreach (ItemData item in list)
			{
				item.m_durability = item.GetMaxDurability();
			}
			Logger.Log("All your items have been repaired.", logToConsole: true, 908, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Repair");
		}

		[Command("repairbuilds", "Repairs all nearby structures within a radius. Optionally, you can specify a health value to \"overheal\".", null)]
		public void RepairBuildings(float radius = 50f, float health = 0f)
		{
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 916, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RepairBuildings");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 922, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RepairBuildings");
				return;
			}
			if (health < 0f)
			{
				Logger.Error("Health cannot be negative.", logToConsole: true, 928, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RepairBuildings");
				return;
			}
			int num = 0;
			foreach (WearNTear allInstance in WearNTear.GetAllInstances())
			{
				if (Vector3.Distance(((Component)allInstance).gameObject.transform.position, ((Component)Player.m_localPlayer).transform.position) <= radius)
				{
					ZDO zDO = ((Component)allInstance).gameObject.GetComponent<ZNetView>().GetZDO();
					float @float = zDO.GetFloat("health", 0f);
					if (health == 0f && allInstance.Repair())
					{
						num++;
					}
					else if (health != 0f && @float != health)
					{
						zDO.Set("health", health);
						ZDOMan.instance.ForceSendZDO(zDO.m_uid);
						num++;
					}
				}
			}
			if (health == 0f)
			{
				Logger.Log("", logToConsole: true, 958, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RepairBuildings").write("Repaired").param(num)
					.write("structure(s) within")
					.param(radius)
					.write("meter(s).")
					.commit();
			}
			else
			{
				Logger.Log("", logToConsole: true, 966, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "RepairBuildings").write("Set the health of").param(num)
					.write("structure(s) within")
					.param(radius)
					.write("meter(s) to")
					.noSpace()
					.param(health)
					.write(".")
					.commit();
			}
		}

		[Command("setmaxweight", "Set your maximum carry weight.", null)]
		public void SetCarryWeight(float maxWeight = 300f)
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 983, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetCarryWeight");
				return;
			}
			if (maxWeight <= 0f)
			{
				Logger.Error("Max weight must be greater than 0.", logToConsole: true, 989, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetCarryWeight");
				return;
			}
			Player.m_localPlayer.m_maxCarryWeight = maxWeight;
			Logger.Log("Set maximum carry weight to " + maxWeight.ToString().WithColor(Logger.GoodColor) + ".", logToConsole: true, 995, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetCarryWeight");
		}

		[Command("setskill", "Set the level of one of your skills.", null)]
		public void SetSkill(string skillName, int level)
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1003, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetSkill");
				return;
			}
			string partialMatch;
			try
			{
				partialMatch = Util.GetPartialMatch(((IEnumerable<SkillType>)Enum.GetValues(typeof(SkillType))).Select((SkillType skill) => ((object)(SkillType)(ref skill)).ToString()), skillName);
			}
			catch (TooManyValuesException)
			{
				Logger.Error("Found more than one skill containing the text " + skillName.WithColor(Color.white) + ", please be more specific.", logToConsole: true, 1018, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetSkill");
				return;
			}
			catch (NoMatchFoundException)
			{
				Logger.Error("Couldn't find a skill named " + skillName.WithColor(Color.white) + ".", logToConsole: true, 1023, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetSkill");
				return;
			}
			level = Mathf.Clamp(level, 0, 100);
			((Character)Player.m_localPlayer).GetSkills().CheatResetSkill(partialMatch);
			((Character)Player.m_localPlayer).GetSkills().CheatRaiseSkill(partialMatch, (float)level, false);
			Logger.Log("Set " + partialMatch.WithColor(Logger.GoodColor) + " to level " + level.ToString().WithColor(Logger.GoodColor) + ".", logToConsole: true, 1032, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetSkill");
		}

		[Command("seed", "Print the seed used by this world.", null)]
		public void Seed()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)ZNetScene.instance == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1040, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Seed");
			}
			else
			{
				Logger.Log(WorldGenerator.instance.GetPrivateField<World>("m_world").m_seedName.WithColor(Logger.GoodColor), logToConsole: true, 1044, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Seed");
			}
		}

		[Command("spawn", "Spawn a prefab/creature/item. If it's a creature, levelOrQuantity will set the level, or if it's an item, set the stack size.", "GetPrefabNames")]
		public void SpawnPrefab(string prefab, int levelOrQuantity = 1)
		{
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: 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_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)ZNetScene.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 1052, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			ZNetView[] array = Object.FindObjectsOfType<ZNetView>();
			if (array.Length == 0)
			{
				Logger.Error("Can't locate a base ZDO to use for network reference.", logToConsole: true, 1060, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			ZDO zDO = array[0].GetZDO();
			if (string.IsNullOrEmpty(prefab))
			{
				Logger.Error("You must specify a name.", logToConsole: true, 1068, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			if (levelOrQuantity <= 0)
			{
				Logger.Error("Level/quantity to spawn must be greater than 0.", logToConsole: true, 1074, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			GameObject prefabByName;
			try
			{
				prefabByName = Util.GetPrefabByName(prefab);
			}
			catch (TooManyValuesException)
			{
				Logger.Error("Found more than one prefab containing the text <color=white>" + prefab + "</color>, please be more specific.", logToConsole: true, 1086, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			catch (NoMatchFoundException)
			{
				Logger.Error("Couldn't find any prefabs named <color=white>" + prefab + "</color>.", logToConsole: true, 1091, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			GameObject val = Object.Instantiate<GameObject>(prefabByName, ((Component)Player.m_localPlayer).transform.position + ((Component)Player.m_localPlayer).transform.forward * 1.5f, Quaternion.identity);
			if (!Object.op_Implicit((Object)(object)val))
			{
				Logger.Error("Something went wrong!", logToConsole: true, 1103, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
				return;
			}
			ZNetView component = val.GetComponent<ZNetView>();
			Character component2 = val.GetComponent<Character>();
			ItemDrop component3 = val.GetComponent<ItemDrop>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.SetLevel(Math.Min(levelOrQuantity, 10));
			}
			else if (Object.op_Implicit((Object)(object)component3) && component3.m_itemData != null)
			{
				component3.m_itemData.m_quality = 1;
				component3.m_itemData.m_durability = component3.m_itemData.GetMaxDurability();
				component3.m_itemData.m_stack = levelOrQuantity;
			}
			zDO.Set("spawn_id", component.GetZDO().m_uid);
			zDO.Set("alive_time", ZNet.instance.GetTime().Ticks);
			Logger.Log("Spawned " + ((Object)prefabByName).name.WithColor(Logger.GoodColor) + ".", logToConsole: true, 1129, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnPrefab");
		}

		[Command("spawntamed", "Spawn a tamed version of a creature.", null)]
		public void SpawnTamed(string creature, int level = 1)
		{
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: 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_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)ZNetScene.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 1137, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			if (string.IsNullOrEmpty(creature))
			{
				Logger.Error("You must specify a name.", logToConsole: true, 1143, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			if (level <= 0)
			{
				Logger.Error("Level must be greater than 0.", logToConsole: true, 1149, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			GameObject prefabByName;
			try
			{
				prefabByName = Util.GetPrefabByName(creature);
			}
			catch (TooManyValuesException)
			{
				Logger.Error("Found more than one creature containing the text <color=white>" + creature + "</color>, please be more specific.", logToConsole: true, 1161, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			catch (NoMatchFoundException)
			{
				Logger.Error("Couldn't find any creatures named <color=white>" + creature + "</color>.", logToConsole: true, 1166, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			if ((Object)(object)prefabByName.GetComponent<Character>() == (Object)null)
			{
				Logger.Error(((Object)prefabByName).name.WithColor(Color.white) + " is not a valid creature.", logToConsole: true, 1174, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			GameObject val = Object.Instantiate<GameObject>(prefabByName, ((Component)Player.m_localPlayer).transform.position + ((Component)Player.m_localPlayer).transform.forward * 1.5f, Quaternion.identity);
			if (!Object.op_Implicit((Object)(object)val))
			{
				Logger.Error("Something went wrong!", logToConsole: true, 1186, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
				return;
			}
			Character component = val.GetComponent<Character>();
			((Component)component).gameObject.GetComponent<MonsterAI>().MakeTame();
			component.SetLevel(Math.Min(level, 10));
			Logger.Log("Spawned a tame level " + level.ToString().WithColor(Logger.WarningColor) + " " + ((Object)prefabByName).name.WithColor(Logger.GoodColor) + ".", logToConsole: true, 1194, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SpawnTamed");
		}

		[Command("tame", "Pacify all tameable creatures in a radius.", null)]
		public void Tame(float radius = 10f)
		{
			//IL_005d: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1202, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Tame");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1208, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Tame");
				return;
			}
			List<Character> list = new List<Character>();
			Character.GetCharactersInRange(((Component)Player.m_localPlayer).transform.position, radius, list);
			int num = 0;
			foreach (Character item in list)
			{
				if ((Object)(object)((Component)item).gameObject.GetComponent<Tameable>() != (Object)null)
				{
					((Component)item).gameObject.GetComponent<MonsterAI>().MakeTame();
					num++;
				}
			}
			Logger.Log("Tamed " + num.ToString().WithColor(Logger.GoodColor) + " creatures within " + radius.ToString().WithColor(Logger.GoodColor) + " meters.", logToConsole: true, 1226, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Tame");
		}

		[Command("time", "Overrides the time of day for you only (0 to 1 where 0.5 is noon). Set to a negative number to disable.", null)]
		public void SetTime(float time)
		{
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)EnvMan.instance))
			{
				Logger.Error("No world loaded.", logToConsole: true, 1234, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetTime");
			}
			else if (time >= 0f)
			{
				time = Mathf.Clamp01(time);
				EnvMan.instance.m_debugTimeOfDay = true;
				EnvMan.instance.m_debugTime = time;
				float num = time * 24f;
				string text = (((int)num).ToString().PadLeft(2, '0') + ":" + ((int)((num - (float)(int)num) * 60f)).ToString().PadLeft(2, '0')).WithColor(Logger.GoodColor);
				Logger.Log("Time set to " + text + ".", logToConsole: true, 1248, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetTime");
			}
			else
			{
				EnvMan.instance.m_debugTimeOfDay = false;
				Logger.Log("Time re-synchronized with the game.", logToConsole: true, 1253, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "SetTime");
			}
		}

		[Command("tlevel", "Level the terrain in a radius.", null)]
		public void TerrainLevel(float radius = 10f)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1265, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLevel");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1271, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLevel");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1276, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLevel");
				radius = 50f;
			}
			Ground.Level(((Component)Player.m_localPlayer).transform.position, radius);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) leveled.", logToConsole: true, 1281, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLevel");
		}

		[Command("tlower", "Lower the terrain in a radius by some amount. Strength values closer to 0 make the terrain edges steep, while values further from 0 make them smoother.", null)]
		public void TerrainLower(float radius = 10f, float depth = 1f, float strength = 0.01f)
		{
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1289, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1295, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1300, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
				radius = 50f;
			}
			if (depth <= 0f)
			{
				Logger.Error("Depth must be greater than 0.", logToConsole: true, 1306, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
				return;
			}
			if (strength <= 0f)
			{
				Logger.Error("Strength must be greater than 0.", logToConsole: true, 1312, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
				return;
			}
			Ground.Lower(((Component)Player.m_localPlayer).transform.position, radius, depth, strength);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) lowered.", logToConsole: true, 1317, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainLower");
		}

		[Command("tpaint", "Paint terrain in a radius. Available paint types are: dirt, paved, cultivate, and reset.", null)]
		public void TerrainPaint(float radius = 5f, string paintType = "reset")
		{
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: 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_0088: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1325, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainPaint");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1331, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainPaint");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1336, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainPaint");
				radius = 50f;
			}
			if (!Enum.TryParse<PaintType>(paintType, ignoreCase: true, out PaintType result))
			{
				Logger.Error("No paint type named " + paintType.WithColor(Color.white), logToConsole: true, 1342, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainPaint");
				return;
			}
			Ground.Paint(((Component)Player.m_localPlayer).transform.position, radius, result);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) painted.", logToConsole: true, 1347, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainPaint");
		}

		[Command("traise", "Raise the terrain in a radius by some amount. Strength values closer to 0 make the terrain edges steep, while values further from 0 make them smoother.", null)]
		public void TerrainRaise(float radius = 10f, float height = 1f, float strength = 0.01f)
		{
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1355, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1361, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1366, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
				radius = 50f;
			}
			if (height <= 0f)
			{
				Logger.Error("Height must be greater than 0.", logToConsole: true, 1372, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
				return;
			}
			if (strength <= 0f)
			{
				Logger.Error("Strength must be greater than 0.", logToConsole: true, 1378, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
				return;
			}
			Ground.Raise(((Component)Player.m_localPlayer).transform.position, radius, height, strength);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) raised.", logToConsole: true, 1383, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainRaise");
		}

		[Command("treset", "Reset all terrain modifications in a radius.", null)]
		public void TerrainReset(float radius = 10f)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1391, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainReset");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1397, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainReset");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1402, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainReset");
				radius = 50f;
			}
			Ground.Reset(((Component)Player.m_localPlayer).transform.position, radius);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) reset.", logToConsole: true, 1407, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainReset");
		}

		[Command("tshape", "Choose the shape of terrain modifications with 'circle' or 'square'.", null)]
		public void TerrainShape(string shape)
		{
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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)
			if (shape.Equals("square", StringComparison.OrdinalIgnoreCase) || shape.Equals("box", StringComparison.OrdinalIgnoreCase) || shape.Equals("cube", StringComparison.OrdinalIgnoreCase))
			{
				Ground.square = true;
			}
			else
			{
				if (!shape.Equals("circle", StringComparison.OrdinalIgnoreCase) && !shape.Equals("sphere", StringComparison.OrdinalIgnoreCase) && !shape.Equals("round", StringComparison.OrdinalIgnoreCase))
				{
					Logger.Error("Only " + "square".WithColor(Color.white) + " and " + "circle".WithColor(Color.white) + " are acceptable values.", logToConsole: true, 1423, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainShape");
					return;
				}
				Ground.square = false;
			}
			Logger.Log("Terrain modification shape: " + (Ground.square ? "square".WithColor(Logger.GoodColor) : "circle".WithColor(Logger.GoodColor)), logToConsole: true, 1427, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainShape");
		}

		[Command("tsmooth", "Smooth terrain in a radius with some strength. Higher strengths mean more aggressive smoothing.", null)]
		public void TerrainSmooth(float radius = 10f, float strength = 0.5f)
		{
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				Logger.Error("No world loaded.", logToConsole: true, 1435, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainSmooth");
				return;
			}
			if (radius <= 0f)
			{
				Logger.Error("Radius must be greater than 0.", logToConsole: true, 1441, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainSmooth");
				return;
			}
			if (radius > 50f)
			{
				Logger.Error("To avoid crashing your or another player's game, your radius will be clamped to 50.", logToConsole: true, 1446, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainSmooth");
				radius = 50f;
			}
			if (strength <= 0f)
			{
				Logger.Error("Strength must be greater than 0.", logToConsole: true, 1452, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainSmooth");
				return;
			}
			Ground.Smooth(((Component)Player.m_localPlayer).transform.position, radius, strength);
			Logger.Log("Terrain within " + radius.ToString().WithColor(Logger.GoodColor) + " meter(s) smoothed.", logToConsole: true, 1457, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "TerrainSmooth");
		}

		[Command("tp", "Teleport to specific coordinates. The Y value is optional. If omitted, will attempt to find the best height to put you at automagically.", null)]
		public void Teleport(float x, float z, float? y = null)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//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_0053: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)Player.m_localPlayer))
			{
				Logger.Error("No world loaded.", logToConsole: true, 1467, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Teleport");
				return;
			}
			if (!y.HasValue)
			{
				RaycastHit val = default(RaycastHit);
				Physics.Raycast(new Vector3(x, 5000f, z), Vector3.down, ref val, 10000f);
				y = ((RaycastHit)(ref val)).point.y;
			}
			((Component)Player.m_localPlayer).transform.position = new Vector3(x, y.Value, z);
			Logger.Log("Woosh!", logToConsole: true, 1478, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Teleport");
		}

		[Command("unalias", "Remove an alias you've created.", null)]
		public void Unalias(string alias)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			if (m_aliases.ContainsKey(alias))
			{
				m_aliases.Remove(alias);
				Logger.Log("Alias " + alias.WithColor(Logger.GoodColor) + " deleted.", logToConsole: true, 1487, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Unalias");
			}
			else
			{
				Logger.Error("No alias named " + alias.WithColor(Color.white) + " exists.", logToConsole: true, 1492, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Unalias");
			}
		}

		[Command("unaliasall", "Removes all of your custom command aliases. Requires a true/1/yes as parameter to confirm you mean it.", null)]
		public void UnaliasAll(bool confirm)
		{
			if (!confirm)
			{
				Logger.Error("Your aliases are safe.", logToConsole: true, 1500, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "UnaliasAll");
				return;
			}
			m_aliases.Clear();
			Plugin.SaveAliases();
			Logger.Log("All of your aliases have been cleared.", logToConsole: true, 1507, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "UnaliasAll");
		}

		[Command("unbind", "Removes a custom keybind.", null)]
		public void Unbind(string keyCode)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			if (!Enum.TryParse<KeyCode>(keyCode, ignoreCase: true, out KeyCode result))
			{
				Logger.Error("Couldn't find a key code named " + keyCode.WithColor(Color.white) + ".", logToConsole: true, 1515, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Unbind");
				return;
			}
			if (!Plugin.Binds.ContainsKey(result))
			{
				Logger.Error(((object)(KeyCode)(ref result)).ToString().WithColor(Color.white) + " is not bound to anything.", logToConsole: true, 1521, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\CommandHandler.cs", "Unbind");
				return;
			}
			Plugin.Binds.Remove(result);
			Plugin.SaveBinds();
			Logger.Log("Unbound " + ((object)(KeyCode)(ref result)).ToString().WithColor(Logger.GoodColor) + ".", logToConsole: true, 1528, "C:\\Users\\dylan\\Documents\\Valheim Custom Mods\\Gungnir\\Gungnir\\src\\Co