Decompiled source of RebindBuildBar v1.0.4

RebindBuildBar.dll

Decompiled a year ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CommonAPI;
using CommonAPI.Systems;
using CommonAPI.Systems.ModLocalization;
using HarmonyLib;
using UnityEngine;
using UnityEngine.UI;
using xiaoye97;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("RebindBuildBar")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RebindBuildBar")]
[assembly: AssemblyTitle("RebindBuildBar")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace RebindBuildBar;

[HarmonyPatch]
public static class Patches
{
	public delegate bool RefAction<T1, in T2, in T3>(ref T1 arg1, T2 arg2, T3 arg3);

	public static UIBuildMenu buildMenu;

	public static ConfigFile customBarBind = new ConfigFile(Paths.ConfigPath + "/RebindBuildBar/CustomBarBind.cfg", true);

	private static Vector2 pickerPos = new Vector2(-300f, 238f);

	public static Color textColor = new Color(0.3821f, 0.8455f, 1f, 0.7843f);

	public static Color lockedTextColor = new Color(0.8f, 0f, 0f, 0.5f);

	public static Color normalColor = new Color(0.588f, 0.588f, 0.588f, 0.7f);

	public static Color disabledColor = new Color(0.2f, 0.15f, 0.15f, 0.7f);

	private static string _lockedText;

	public static string lockedText
	{
		get
		{
			if (string.IsNullOrEmpty(_lockedText))
			{
				_lockedText = Localization.Translate("LockedTipText");
				if (_lockedText.Length < 10)
				{
					int count = (10 - _lockedText.Length) / 2;
					_lockedText += new string(' ', count);
				}
			}
			return _lockedText;
		}
	}

	[HarmonyPatch(typeof(UIBuildMenu), "_OnCreate")]
	[HarmonyPostfix]
	public static void InitResetButton(UIBuildMenu __instance)
	{
		//IL_0035: 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)
		buildMenu = __instance;
		GameObject val = RebindBuildBarPlugin.resources.bundle.LoadAsset<GameObject>("Assets/RebindBuildBar/UI/buildmenu-button.prefab");
		GameObject val2 = Object.Instantiate<GameObject>(val, __instance.childGroup.transform, false);
		((RectTransform)val2.transform).anchoredPosition = new Vector2(-300f, 5f);
		UIButton component = val2.GetComponent<UIButton>();
		component.onClick += delegate
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected O, but got Unknown
			bool heldCtrl = CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue;
			string text = Localization.Translate(heldCtrl ? "ResetBuildMenuQuestion1" : "ResetBuildMenuQuestion2");
			UIMessageBox.Show(Localization.Translate("ResetBuildMenuQuestionTitle"), text, Localization.Translate("否"), Localization.Translate("是"), 2, (Response)null, (Response)delegate
			{
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				ResetBuildBarItems(heldCtrl);
				buildMenu.SetCurrentCategory(buildMenu.currentCategory);
				VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			});
		};
		__instance.randRemindTips = Array.Empty<UIRandomTip>();
	}

	public static void ResetBuildBarItems(bool heldCtrl)
	{
		UIBuildMenu.staticLoaded = false;
		if (heldCtrl)
		{
			UIBuildMenu.StaticLoad();
			LDBTool.SetBuildBar();
			ResetConfigFile();
			customBarBind.Save();
		}
		else
		{
			ReloadOneCategory(buildMenu.currentCategory);
			ResetConfigFile();
			customBarBind.Save();
		}
	}

	public static void ReloadOneCategory(int category)
	{
		ItemProto[] dataArray = ((ProtoSet<ItemProto>)(object)LDB.items).dataArray;
		foreach (ItemProto val in dataArray)
		{
			int buildIndex = val.BuildIndex;
			if (buildIndex > 0)
			{
				int num = buildIndex / 100;
				int num2 = buildIndex % 100;
				if (num == category && num <= 15 && num2 <= 12)
				{
					UIBuildMenu.protos[num, num2] = val;
				}
			}
		}
		foreach (KeyValuePair<int, Dictionary<int, int>> item in LDBTool.BuildBarDict)
		{
			foreach (KeyValuePair<int, int> item2 in item.Value)
			{
				ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(item2.Value);
				if (val2 != null && item.Key == category)
				{
					UIBuildMenu.protos[item.Key, item2.Key] = val2;
				}
			}
		}
		UIBuildMenu.staticLoaded = true;
	}

	[HarmonyPatch(typeof(UIBuildMenu), "SetCurrentCategory")]
	[HarmonyTranspiler]
	public static IEnumerable<CodeInstruction> ShowLockedIcons(IEnumerable<CodeInstruction> instructions)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Expected O, but got Unknown
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Expected O, but got Unknown
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Expected O, but got Unknown
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Expected O, but got Unknown
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Expected O, but got Unknown
		CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[4]
		{
			new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldc_I4_1, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Callvirt, (object)null, (string)null)
		}).Advance(-2).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
		{
			new CodeInstruction(OpCodes.Ldarg_0, (object)null)
		})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldloc_S, (object)4)
			})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { Transpilers.EmitDelegate<Action<UIBuildMenu, int>>((Action<UIBuildMenu, int>)ButtonLogic) });
		return val.InstructionEnumeration();
	}

	[HarmonyPatch(typeof(UIBuildMenu), "_OnUpdate")]
	[HarmonyTranspiler]
	public static IEnumerable<CodeInstruction> ShowLockedIconsUpdate(IEnumerable<CodeInstruction> instructions)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Expected O, but got Unknown
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Expected O, but got Unknown
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Expected O, but got Unknown
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Expected O, but got Unknown
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Expected O, but got Unknown
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Expected O, but got Unknown
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Expected O, but got Unknown
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Expected O, but got Unknown
		//IL_019d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Expected O, but got Unknown
		//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d7: Expected O, but got Unknown
		//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f1: Expected O, but got Unknown
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_020e: Expected O, but got Unknown
		//IL_0231: Unknown result type (might be due to invalid IL or missing references)
		//IL_0237: Expected O, but got Unknown
		//IL_0245: Unknown result type (might be due to invalid IL or missing references)
		//IL_024b: Expected O, but got Unknown
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Expected O, but got Unknown
		//IL_028d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0293: Expected O, but got Unknown
		//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b2: Expected O, but got Unknown
		CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[3]
		{
			new CodeMatch((OpCode?)OpCodes.Ldfld, (object)AccessTools.Field(typeof(Proto), "ID"), (string)null),
			new CodeMatch((OpCode?)OpCodes.Stloc_S, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldloc_0, (object)null, (string)null)
		}).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
		{
			new CodeMatch((OpCode?)OpCodes.Ldloc_3, (object)null, (string)null)
		}).Advance(1)
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldloc_2, (object)null)
			})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldarg_0, (object)null)
			})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { Transpilers.EmitDelegate<Func<bool, int, UIBuildMenu, bool>>((Func<bool, int, UIBuildMenu, bool>)delegate(bool result, int index, UIBuildMenu that)
			{
				if (result)
				{
					return true;
				}
				if (!GameMain.history.TechUnlocked(1001) || index == 9)
				{
					return false;
				}
				that.isAnyCategoryUnlocked = true;
				return true;
			}) });
		val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[3]
		{
			new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldc_I4_1, (object)null, (string)null)
		}).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
		{
			new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.Method(typeof(GameHistoryData), "ItemUnlocked", (Type[])null, (Type[])null), (string)null)
		});
		CodeMatcher val2 = val.Clone();
		val2.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
		{
			new CodeMatch((OpCode?)OpCodes.Stfld, (object)AccessTools.Field(typeof(UIButton), "highlighted"), (string)null)
		}).Advance(1);
		Label label = (Label)val2.Operand;
		val.Advance(1).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
		{
			new CodeInstruction(OpCodes.Pop, (object)null)
		}).SetInstruction(new CodeInstruction(OpCodes.Br, (object)label));
		val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[4]
		{
			new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.Method(typeof(Component), "get_gameObject", (Type[])null, (Type[])null), (string)null),
			new CodeMatch((OpCode?)OpCodes.Ldc_I4_0, (object)null, (string)null),
			new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.Method(typeof(GameObject), "SetActive", (Type[])null, (Type[])null), (string)null)
		}).Advance(5).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
		{
			new CodeInstruction(OpCodes.Ldarg_0, (object)null)
		})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldloc_S, (object)9)
			})
			.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { Transpilers.EmitDelegate<Action<UIBuildMenu, int>>((Action<UIBuildMenu, int>)ButtonLogic) });
		return val.InstructionEnumeration();
	}

	private static void ButtonLogic(UIBuildMenu menu, int i)
	{
		if (UIBuildMenu.protos[menu.currentCategory, i] != null && (UIBuildMenu.protos[menu.currentCategory, i].IsEntity || UIBuildMenu.protos[menu.currentCategory, i].BuildMode == 4))
		{
			int iD = ((Proto)UIBuildMenu.protos[menu.currentCategory, i]).ID;
			if (GameMain.history.ItemUnlocked(iD))
			{
				EnableButton(menu, i, iD);
			}
			else if (menu.currentCategory == 9)
			{
				DisableButton(menu, i);
			}
			else
			{
				GhostButton(menu, i, iD);
			}
		}
		else if (menu.currentCategory == 9)
		{
			DisableButton(menu, i);
		}
		else
		{
			GhostButton(menu, i, 0);
		}
	}

	private static void GhostButton(UIBuildMenu menu, int i, int itemId)
	{
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)menu.childButtons[i] == (Object)null)
		{
			return;
		}
		if (itemId == 0)
		{
			((Behaviour)menu.childIcons[i]).enabled = false;
			menu.childButtons[i].tips.itemId = 0;
		}
		else
		{
			((Behaviour)menu.childIcons[i]).enabled = true;
			menu.childButtons[i].tips.itemId = itemId;
			menu.childButtons[i].tips.corner = 8;
			menu.childButtons[i].tips.delay = 0.2f;
			menu.childNumTexts[i].text = lockedText;
			((Graphic)menu.childNumTexts[i]).color = lockedTextColor;
			if ((Object)(object)menu.childIcons[i].sprite == (Object)null && UIBuildMenu.protos[menu.currentCategory, i] != null)
			{
				menu.childIcons[i].sprite = UIBuildMenu.protos[menu.currentCategory, i].iconSprite;
			}
			((Graphic)menu.childIcons[i]).color = disabledColor;
		}
		((Component)menu.childButtons[i]).gameObject.SetActive(true);
		((Selectable)menu.childButtons[i].button).interactable = true;
	}

	private static void DisableButton(UIBuildMenu menu, int i)
	{
		if (!((Object)(object)menu.childButtons[i] == (Object)null))
		{
			menu.childNumTexts[i].text = "";
			menu.childButtons[i].tips.itemId = 0;
			((Selectable)menu.childButtons[i].button).interactable = false;
			((Component)menu.childButtons[i].button).gameObject.SetActive(false);
		}
	}

	private static void EnableButton(UIBuildMenu menu, int i, int itemId)
	{
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0177: Unknown result type (might be due to invalid IL or missing references)
		//IL_018b: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)menu.childButtons[i] == (Object)null))
		{
			StorageComponent package = menu.player.package;
			((Behaviour)menu.childIcons[i]).enabled = true;
			menu.childButtons[i].tips.itemId = itemId;
			menu.childButtons[i].tips.corner = 8;
			menu.childButtons[i].tips.delay = 0.2f;
			((Component)menu.childButtons[i].button).gameObject.SetActive(true);
			int num = package.GetItemCount(itemId);
			bool flag = menu.player.inhandItemId == itemId;
			if (flag)
			{
				num += menu.player.inhandItemCount;
			}
			StringBuilderUtility.WriteKMG(menu.strb, 5, (long)num, false);
			menu.childNumTexts[i].text = ((num > 0) ? menu.strb.ToString().Trim() : "");
			((Graphic)menu.childNumTexts[i]).color = textColor;
			((Selectable)menu.childButtons[i].button).interactable = true;
			if ((Object)(object)menu.childIcons[i].sprite == (Object)null && UIBuildMenu.protos[menu.currentCategory, i] != null)
			{
				menu.childIcons[i].sprite = UIBuildMenu.protos[menu.currentCategory, i].iconSprite;
			}
			((Graphic)menu.childIcons[i]).color = normalColor;
			((Graphic)menu.childTips[i]).color = menu.tipTextColor;
			menu.childButtons[i].highlighted = flag;
		}
	}

	[HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
	[HarmonyPriority(200)]
	[HarmonyPostfix]
	public static void LoadBar()
	{
		for (int i = 0; i < UIBuildMenu.protos.GetLength(0); i++)
		{
			for (int j = 0; j < UIBuildMenu.protos.GetLength(1); j++)
			{
				if (i == 0 || j == 0 || i > 8 || j > 10)
				{
					continue;
				}
				int num = i * 100 + j;
				ItemProto val = UIBuildMenu.protos[i, j];
				if (val != null && ((Proto)val).ID != 0)
				{
					ConfigEntry<int> val2 = customBarBind.Bind<int>("BuildBarBinds", num.ToString(), ((Proto)val).ID, "Item: " + Localization.Translate(((Proto)val).Name));
					if (val2.Value == 0)
					{
						UIBuildMenu.protos[i, j] = null;
					}
					else if (val2.Value > 0 && ((ProtoSet<ItemProto>)(object)LDB.items).Exist(val2.Value) && val2.Value != ((Proto)val).ID)
					{
						UIBuildMenu.protos[i, j] = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val2.Value);
					}
				}
				else
				{
					ConfigEntry<int> val3 = customBarBind.Bind<int>("BuildBarBinds", num.ToString(), 0, "Unused");
					if (val3.Value > 0 && ((ProtoSet<ItemProto>)(object)LDB.items).Exist(val3.Value))
					{
						UIBuildMenu.protos[i, j] = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val3.Value);
					}
				}
			}
		}
	}

	private static void ResetConfigFile()
	{
		for (int i = 0; i < UIBuildMenu.protos.GetLength(0); i++)
		{
			for (int j = 0; j < UIBuildMenu.protos.GetLength(1); j++)
			{
				if (i != 0 && j != 0 && i <= 8 && j <= 10)
				{
					int num = i * 100 + j;
					ItemProto val = UIBuildMenu.protos[i, j];
					if (val != null && ((Proto)val).ID != 0)
					{
						ConfigEntry<int> val2 = customBarBind.Bind<int>("BuildBarBinds", num.ToString(), ((Proto)val).ID, "Item: " + Localization.Translate(((Proto)val).Name));
						val2.Value = ((Proto)val).ID;
						UIBuildMenu.protos[i, j] = val;
					}
					else
					{
						ConfigEntry<int> val3 = customBarBind.Bind<int>("BuildBarBinds", num.ToString(), 0, "Unused");
						val3.Value = 0;
						UIBuildMenu.protos[i, j] = null;
					}
				}
			}
		}
	}

	[HarmonyPatch(typeof(UIBuildMenu), "OnChildButtonClick")]
	[HarmonyPrefix]
	public static bool OnChildClick(UIBuildMenu __instance, int index)
	{
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		if (!CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue)
		{
			return true;
		}
		if (buildMenu.currentCategory < 1 || buildMenu.currentCategory >= 9)
		{
			return true;
		}
		int buildIndex = buildMenu.currentCategory * 100 + index;
		UIItemPickerExtension.Popup(pickerPos, (Action<ItemProto>)delegate(ItemProto proto)
		{
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			if (proto != null && ((Proto)proto).ID != 0)
			{
				ConfigEntry<int> val = customBarBind.Bind<int>("BuildBarBinds", buildIndex.ToString(), ((Proto)proto).ID, "Item: " + Localization.Translate(((Proto)proto).Name));
				val.Value = ((Proto)proto).ID;
				UIBuildMenu.protos[buildMenu.currentCategory, index] = proto;
				buildMenu.SetCurrentCategory(buildMenu.currentCategory);
				VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			}
		}, true, (Func<ItemProto, bool>)((ItemProto proto) => proto.ModelIndex != 0 && proto.CanBuild));
		UIRoot.instance.uiGame.itemPicker.OnTypeButtonClick(2);
		return false;
	}

	public static void Update()
	{
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)buildMenu == (Object)null || !buildMenu.childGroup.gameObject.activeSelf || buildMenu.currentCategory < 1 || buildMenu.currentCategory >= 9)
		{
			return;
		}
		if (CustomKeyBindSystem.GetKeyBind("ClearBuildBar").keyValue)
		{
			for (int j = 1; j <= 10; j++)
			{
				if (buildMenu.childButtons[j].isPointerEnter)
				{
					int num = buildMenu.currentCategory * 100 + j;
					ConfigEntry<int> val = customBarBind.Bind<int>("BuildBarBinds", num.ToString(), 0, "Cleared by player");
					val.Value = 0;
					UIBuildMenu.protos[buildMenu.currentCategory, j] = null;
					buildMenu.SetCurrentCategory(buildMenu.currentCategory);
					VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
					return;
				}
			}
		}
		if (!CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue)
		{
			return;
		}
		for (int i = 1; i <= 10; i++)
		{
			if (!Input.GetKeyDown((KeyCode)(282 + (i - 1))) || !VFInput.inScreen || VFInput.inputing)
			{
				continue;
			}
			int buildIndex = buildMenu.currentCategory * 100 + i;
			UIItemPickerExtension.Popup(pickerPos, (Action<ItemProto>)delegate(ItemProto proto)
			{
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				if (proto != null && ((Proto)proto).ID != 0)
				{
					ConfigEntry<int> val2 = customBarBind.Bind<int>("BuildBarBinds", buildIndex.ToString(), ((Proto)proto).ID, "Item: " + Localization.Translate(((Proto)proto).Name));
					val2.Value = ((Proto)proto).ID;
					UIBuildMenu.protos[buildMenu.currentCategory, i] = proto;
					buildMenu.SetCurrentCategory(buildMenu.currentCategory);
					VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
				}
			}, true, (Func<ItemProto, bool>)((ItemProto proto) => proto.ModelIndex != 0 && proto.CanBuild));
			UIRoot.instance.uiGame.itemPicker.OnTypeButtonClick(2);
			break;
		}
	}
}
[BepInPlugin("org.kremnev8.plugin.RebindBuildBar", "Rebind Build Bar", "1.0.4")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[CommonAPISubmoduleDependency(new string[] { "ProtoRegistry", "CustomKeyBindSystem", "PickerExtensionsSystem", "LocalizationModule" })]
public class RebindBuildBarPlugin : BaseUnityPlugin
{
	public const string MODNAME = "RebindBuildBar";

	public const string MODGUID = "org.kremnev8.plugin.RebindBuildBar";

	public const string MOD_DISP_NAME = "Rebind Build Bar";

	public const string VERSION = "1.0.4";

	public static ManualLogSource logger;

	public static ResourceData resources;

	private void Awake()
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Expected O, but got Unknown
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Expected O, but got Unknown
		logger = ((BaseUnityPlugin)this).Logger;
		string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
		resources = new ResourceData("RebindBuildBar", "RebindBuildBar", directoryName);
		resources.LoadAssetBundle("rebindbarbundle");
		LocalizationModule.RegisterTranslation("ResetBuildMenuTipTitle", "Reset Build Bar item binding");
		LocalizationModule.RegisterTranslation("ResetBuildMenuTip", "Pressing this button will reset Build Bar items in current category to their defaults. Holding ctrl (Rebindable) resets all items in all categories.");
		LocalizationModule.RegisterTranslation("ResetBuildMenuQuestionTitle", "Are you sure?");
		LocalizationModule.RegisterTranslation("ResetBuildMenuQuestion1", "This action will reset all Build Bar items in build bar to their defaults");
		LocalizationModule.RegisterTranslation("ResetBuildMenuQuestion2", "This action will reset Build Bar items in current category to their defaults");
		LocalizationModule.RegisterTranslation("KEYReassignBuildBar", "Reassign Build Bar item");
		LocalizationModule.RegisterTranslation("KEYClearBuildBar", "Clear Build Bar item");
		LocalizationModule.RegisterTranslation("LockedTipText", "Locked");
		BuiltinKey val = default(BuiltinKey);
		val.id = 150;
		val.key = new CombineKey(0, (byte)2, (ECombineKeyAction)0, false);
		val.conflictGroup = 2050;
		val.name = "ReassignBuildBar";
		val.canOverride = true;
		CustomKeyBindSystem.RegisterKeyBind<HoldKeyBind>(val);
		val = default(BuiltinKey);
		val.id = 151;
		val.key = new CombineKey(325, (byte)0, (ECombineKeyAction)0, false);
		val.conflictGroup = 4098;
		val.name = "ClearBuildBar";
		val.canOverride = true;
		CustomKeyBindSystem.RegisterKeyBind<ReleaseKeyBind>(val);
		Harmony val2 = new Harmony("org.kremnev8.plugin.RebindBuildBar");
		val2.PatchAll(typeof(Patches));
		logger.LogInfo((object)"Rebind Build Bar mod is loaded successfully!");
	}

	private void Update()
	{
		Patches.Update();
	}
}