Decompiled source of FractionateEverything v1.4.3

FractionateEverything.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BuildBarTool;
using CommonAPI;
using CommonAPI.Systems;
using CommonAPI.Systems.ModLocalization;
using FractionateEverything.Compatibility;
using FractionateEverything.Main;
using FractionateEverything.Utils;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using ProjectGenesis.Patches.Logic.QTools;
using ProjectGenesis.Patches.UI.QTools;
using ProjectGenesis.Patches.UI.QTools.MyComboBox;
using ProjectGenesis.Utils;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using crecheng.DSPModSave;
using xiaoye97;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("FractionateEverything")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FractionateEverything")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("3204cf73-a6e8-4c3b-a91d-e4baf6fca974")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace FractionateEverything
{
	[BepInPlugin("com.menglei.dsp.FractionateEverything", "FractionateEverything", "1.4.3")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[CommonAPISubmoduleDependency(new string[] { "ProtoRegistry", "TabSystem", "LocalizationModule" })]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class FractionateEverything : BaseUnityPlugin, IModCanSave
	{
		public const string GUID = "com.menglei.dsp.FractionateEverything";

		public const string NAME = "FractionateEverything";

		public const string VERSION_Main = "1.4.3";

		public const string VERSION_Debug = "";

		public const string VERSION = "1.4.3";

		private static ManualLogSource logger;

		public const string Tech1134IconPath = "Icons/Tech/1134";

		public static int tab分馏1;

		public static int tab分馏2;

		public static string ModPath;

		public static ResourceData fracicons;

		public static readonly Harmony harmony = new Harmony("com.menglei.dsp.FractionateEverything");

		private static bool _finished;

		private static ConfigFile configFile;

		public static ConfigEntry<string> CurrentVersionEntry;

		public static ConfigEntry<bool> DisableMessageBoxEntry;

		public static ConfigEntry<bool> AddedBlueprintsEntry;

		public static ConfigEntry<int> IconVersionEntry;

		public static ConfigEntry<bool> EnableDestroyEntry;

		public static ConfigEntry<bool> EnableFuelRodFracEntry;

		public static ConfigEntry<bool> EnableMatrixFracEntry;

		public static ConfigEntry<bool> EnableBuildingAsTrashEntry;

		public static bool isVersionChanged => CurrentVersionEntry.Value != "1.4.3";

		public static bool disableMessageBox => DisableMessageBoxEntry.Value;

		public static bool addedBlueprints => AddedBlueprintsEntry.Value;

		public static int iconVersion => IconVersionEntry.Value;

		public static bool enableDestroy => EnableDestroyEntry.Value;

		public static bool enableFuelRodFrac => EnableFuelRodFracEntry.Value;

		public static bool enableMatrixFrac => EnableMatrixFracEntry.Value;

		public static bool enableBuildingAsTrash => EnableBuildingAsTrashEntry.Value;

		public static void LogDebug(object data)
		{
			logger.LogDebug(data);
		}

		public static void LogInfo(object data)
		{
			logger.LogInfo(data);
		}

		public static void LogWarning(object data)
		{
			logger.LogWarning(data);
		}

		public static void LogError(object data)
		{
			logger.LogError(data);
		}

		public static void LogFatal(object data)
		{
			logger.LogFatal(data);
		}

		public void LoadConfig()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Expected O, but got Unknown
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Expected O, but got Unknown
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Expected O, but got Unknown
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Expected O, but got Unknown
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Expected O, but got Unknown
			configFile = ((BaseUnityPlugin)this).Config;
			CurrentVersionEntry = ((BaseUnityPlugin)this).Config.Bind<string>("config", "CurrentVersion", "", new ConfigDescription("Current game version, used to control whether or not to show the update pop-up window.\n当前游戏版本,用于控制是否显示更新弹窗。", (AcceptableValueBase)(object)new AcceptableStringValue(""), (object[])null));
			DisableMessageBoxEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "DisableMessageBox", false, new ConfigDescription("Don't show message when FractionateEverything is loaded.\n禁用游戏加载完成后显示的万物分馏提示信息。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: false), (object[])null));
			AddedBlueprintsEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "AddedBlueprints", false, new ConfigDescription("Indicates whether the blueprint has been added. Change this to false to re-add the blueprint.\n指示是否添加过蓝图。该项改为false即可重新添加蓝图。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: false), (object[])null));
			IconVersionEntry = ((BaseUnityPlugin)this).Config.Bind<int>("config", "IconVersion", 3, new ConfigDescription("Which style of the fractionate recipe icon to use.\n1 for original deuterium fractionate style, 2 for slanting line segmentation style, 3 for circular segmentation style.\n使用哪个样式的分馏配方图标。\n1表示原版重氢分馏样式,2表示斜线分割样式,3表示圆弧分割样式。", (AcceptableValueBase)(object)new AcceptableIntValue(3, 1, 3), (object[])null));
			EnableDestroyEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "EnableDestroy", true, new ConfigDescription("Whether to enable the probability of destruction in fractionate recipes (recommended enable).\nWhen enabled, if the fractionation recipe has a probability of destruction, there is a certain probability that the input item will disappear during fractionation.\n是否启用分馏配方中的损毁概率(建议开启)。\n启用情况下,如果分馏配方具有损毁概率,则分馏时会有一定概率导致原料直接消失。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: true), (object[])null));
			EnableFuelRodFracEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "EnableFuelRodFracEntry", false, new ConfigDescription("Whether to enable fuel rod fractionation.\n是否启用燃料棒分馏。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: false), (object[])null));
			EnableMatrixFracEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "EnableMatrixFracEntry", false, new ConfigDescription("Whether to enable matrix fractionation (recommended disable).\n是否启用矩阵分馏(建议关闭)。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: false), (object[])null));
			EnableBuildingAsTrashEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("config", "EnableBuildingAsTrashEntry", false, new ConfigDescription("Whether buildings can input into Trash Recycle Fractionator (recommended disable).\n建筑能否输入垃圾回收分馏塔(建议关闭)。", (AcceptableValueBase)(object)new AcceptableBoolValue(defVal: false), (object[])null));
			(Traverse.Create((object)((BaseUnityPlugin)this).Config).Property("OrphanedEntries", (object[])null).GetValue() as IDictionary)?.Clear();
			((BaseUnityPlugin)this).Config.Save();
		}

		public static void SetConfig()
		{
			DisableMessageBoxEntry.Value = true;
			CurrentVersionEntry.Value = "1.4.3";
			AddedBlueprintsEntry.Value = true;
			configFile.Save();
		}

		public static void SetConfig(int iconVersion, bool enableDestroy, bool enableFuelRodFrac, bool enableMatrixFrac, bool enableBuildingAsTrash)
		{
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Invalid comparison between Unknown and I4
			bool flag = iconVersion != IconVersionEntry.Value;
			bool flag2 = enableDestroy != EnableDestroyEntry.Value;
			bool flag3 = enableFuelRodFrac != EnableFuelRodFracEntry.Value;
			bool flag4 = enableMatrixFrac != EnableMatrixFracEntry.Value;
			bool flag5 = enableBuildingAsTrash != EnableBuildingAsTrashEntry.Value;
			IconVersionEntry.Value = iconVersion;
			EnableDestroyEntry.Value = enableDestroy;
			EnableFuelRodFracEntry.Value = enableFuelRodFrac;
			EnableMatrixFracEntry.Value = enableMatrixFrac;
			logger.LogInfo((object)("Fractionate Everything setting changed.\n" + $" iconVersion:{iconVersion}" + $" enableDestroy:{enableDestroy}" + $" enableFuelRodFrac:{enableFuelRodFrac}" + $" enableMatrixFrac:{enableMatrixFrac}"));
			configFile.Save();
			if (flag || flag2 || flag3 || flag4)
			{
				RecipeProto[] dataArray = ((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray;
				foreach (RecipeProto val in dataArray)
				{
					if ((int)val.Type == 8 && ((Proto)val).ID != 115)
					{
						val.ModifyIconAndDesc();
						val.Preload(val.index);
					}
				}
			}
			if (flag5)
			{
				ItemProto obj = ((ProtoSet<ItemProto>)(object)LDB.items).Select(2324);
				obj.Description = (enableBuildingAsTrash ? "I垃圾回收分馏塔2" : "I垃圾回收分馏塔");
				obj.Preload(obj.index);
			}
		}

		public void Awake()
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Expected O, but got Unknown
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Expected O, but got Unknown
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Expected O, but got Unknown
			using (ProtoRegistry.StartModLoad("com.menglei.dsp.FractionateEverything"))
			{
				logger = ((BaseUnityPlugin)this).Logger;
				Translation.AddTranslations();
				LoadConfig();
				tab分馏1 = TabSystem.RegisterTab("com.menglei.dsp.FractionateEverything:com.menglei.dsp.FractionateEverythingTab1", new TabData(Localization.Translate("分馏页面1"), "Icons/Tech/1134"));
				tab分馏2 = TabSystem.RegisterTab("com.menglei.dsp.FractionateEverything:com.menglei.dsp.FractionateEverythingTab2", new TabData(Localization.Translate("分馏页面2"), "Icons/Tech/1134"));
				Assembly executingAssembly = Assembly.GetExecutingAssembly();
				ModPath = Path.GetDirectoryName(executingAssembly.Location);
				fracicons = new ResourceData("com.menglei.dsp.FractionateEverything", "fracicons", ModPath);
				fracicons.LoadAssetBundle("fracicons");
				ProtoRegistry.AddResource(fracicons);
				LDBTool.PreAddDataAction = (Action)Delegate.Combine(LDBTool.PreAddDataAction, new Action(PreAddData));
				LDBTool.PostAddDataAction = (Action)Delegate.Combine(LDBTool.PostAddDataAction, new Action(PostAddData));
				Type[] types = executingAssembly.GetTypes();
				foreach (Type type in types)
				{
					if (type.Namespace != null && !type.Namespace.StartsWith("FractionateEverything.Compatibility"))
					{
						harmony.PatchAll(type);
					}
				}
				Harmony obj = harmony;
				MethodInfo methodInfo = AccessTools.Method(typeof(VFPreload), "InvokeOnLoadWorkEnded", (Type[])null, (Type[])null);
				HarmonyMethod val = new HarmonyMethod(typeof(FractionateEverything), "FinalAction", (Type[])null);
				val.after = new string[1] { "me.xiaoye97.plugin.Dyson.LDBTool" };
				obj.Patch((MethodBase)methodInfo, (HarmonyMethod)null, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				Harmony obj2 = harmony;
				MethodInfo methodInfo2 = AccessTools.Method(typeof(Localization), "LoadLanguage", (Type[])null, (Type[])null);
				val = new HarmonyMethod(typeof(TranslationUtils), "LoadLanguagePostfixAfterCommonApi", (Type[])null);
				val.after = new string[1] { "dsp.common-api.CommonAPI" };
				obj2.Patch((MethodBase)methodInfo2, (HarmonyMethod)null, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			}
		}

		public void PreAddData()
		{
			Tech.AddTechs();
			FractionatorBuildings.CreateAndPreAddNewFractionators();
		}

		public void PostAddData()
		{
			((ProtoSet<ModelProto>)(object)LDB.models).OnAfterDeserialize();
			ModelProto.InitMaxModelIndex();
			ModelProto.InitModelIndices();
			ModelProto.InitModelOrders();
			TechProto[] dataArray = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray;
			for (int i = 0; i < dataArray.Length; i++)
			{
				dataArray[i].Preload();
			}
			dataArray = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray;
			foreach (TechProto val in dataArray)
			{
				val.PreTechsImplicit = val.PreTechsImplicit.Except(val.PreTechs).ToArray();
				val.UnlockRecipes = val.UnlockRecipes.Distinct().ToArray();
				val.Preload2();
			}
			FractionatorBuildings.SetUnlockInfo();
		}

		public static void FinalAction()
		{
			if (!_finished)
			{
				PreloadAndInitAll();
				FractionatorLogic.Init();
				FractionatorBuildings.SetFractionatorCacheSize();
				FractionateRecipes.AddFracRecipes();
				_finished = true;
			}
		}

		public static void PreloadAndInitAll()
		{
			ItemProto.InitFuelNeeds();
			ItemProto.InitTurretNeeds();
			ItemProto.InitFluids();
			ItemProto.InitTurrets();
			ItemProto.InitEnemyDropTables();
			ItemProto.InitConstructableItems();
			ItemProto.InitItemIds();
			ItemProto.InitItemIndices();
			ItemProto.InitMechaMaterials();
			ItemProto.InitFighterIndices();
			ModelProto.InitMaxModelIndex();
			ModelProto.InitModelIndices();
			ModelProto.InitModelOrders();
			RecipeProto.InitFractionatorNeeds();
			RaycastLogic.LoadStatic();
			StorageComponent.staticLoaded = false;
			StorageComponent.LoadStatic();
		}

		public void Import(BinaryReader binaryReader)
		{
			_ = (Object)(object)DSPGame.Game == (Object)null;
		}

		public void Export(BinaryWriter binaryWriter)
		{
			_ = (Object)(object)DSPGame.Game == (Object)null;
		}

		public void IntoOtherSave()
		{
			if (!((Object)(object)DSPGame.Game == (Object)null))
			{
				_ = DSPGame.IsMenuDemo;
			}
		}
	}
}
namespace FractionateEverything.Utils
{
	public class AcceptableIntValue : AcceptableValueBase
	{
		[CompilerGenerated]
		private int <min>P;

		[CompilerGenerated]
		private int <max>P;

		private readonly int defVal;

		public AcceptableIntValue(int defVal, int min, int max)
		{
			<min>P = min;
			<max>P = max;
			this.defVal = ((defVal >= <min>P && defVal <= <max>P) ? defVal : <min>P);
			((AcceptableValueBase)this)..ctor(typeof(int));
		}

		public override object Clamp(object value)
		{
			return ((AcceptableValueBase)this).IsValid(value) ? ((int)value) : defVal;
		}

		public override bool IsValid(object value)
		{
			if (value.GetType() == ((AcceptableValueBase)this).ValueType && (int)value >= <min>P)
			{
				return (int)value <= <max>P;
			}
			return false;
		}

		public override string ToDescriptionString()
		{
			return null;
		}
	}
	public class AcceptableBoolValue : AcceptableValueBase
	{
		[CompilerGenerated]
		private bool <defVal>P;

		public AcceptableBoolValue(bool defVal)
		{
			<defVal>P = defVal;
			((AcceptableValueBase)this)..ctor(typeof(bool));
		}

		public override object Clamp(object value)
		{
			return ((AcceptableValueBase)this).IsValid(value) ? ((bool)value) : <defVal>P;
		}

		public override bool IsValid(object value)
		{
			return value.GetType() == ((AcceptableValueBase)this).ValueType;
		}

		public override string ToDescriptionString()
		{
			return null;
		}
	}
	public class AcceptableStringValue : AcceptableValueBase
	{
		[CompilerGenerated]
		private string <defVal>P;

		public AcceptableStringValue(string defVal)
		{
			<defVal>P = defVal;
			((AcceptableValueBase)this)..ctor(typeof(string));
		}

		public override object Clamp(object value)
		{
			if (!((AcceptableValueBase)this).IsValid(value))
			{
				return <defVal>P;
			}
			return (string)value;
		}

		public override bool IsValid(object value)
		{
			return value.GetType() == ((AcceptableValueBase)this).ValueType;
		}

		public override string ToDescriptionString()
		{
			return null;
		}
	}
	public static class AddProtoUtils
	{
		public static void AddItem(ItemProto item)
		{
			AddItem(new List<Proto>(1) { (Proto)(object)item });
		}

		public static void AddItem(List<Proto> itemList)
		{
			typeof(LDBTool).GetMethod("AddProtosToSet", AccessTools.all)?.MakeGenericMethod(typeof(ItemProto)).Invoke(null, new object[2]
			{
				LDB.items,
				itemList
			});
		}

		public static void AddRecipe(RecipeProto recipe)
		{
			AddRecipe(new List<RecipeProto>(1) { recipe });
		}

		public static void AddRecipe(List<RecipeProto> recipeList)
		{
			List<Proto> list = new List<Proto>();
			list.AddRange((IEnumerable<Proto>)recipeList);
			typeof(LDBTool).GetMethod("AddProtosToSet", AccessTools.all)?.MakeGenericMethod(typeof(RecipeProto)).Invoke(null, new object[2]
			{
				LDB.recipes,
				list
			});
		}

		public static void AddModel(ModelProto model)
		{
			AddModel(new List<Proto>(1) { (Proto)(object)model });
		}

		public static void AddModel(List<Proto> modelList)
		{
			typeof(LDBTool).GetMethod("AddProtosToSet", AccessTools.all)?.MakeGenericMethod(typeof(ModelProto)).Invoke(null, new object[2]
			{
				LDB.models,
				modelList
			});
		}

		public static void AddTech(TechProto tech)
		{
			AddTech(new List<Proto>(1) { (Proto)(object)tech });
		}

		public static void AddTech(List<Proto> techList)
		{
			typeof(LDBTool).GetMethod("AddProtosToSet", AccessTools.all)?.MakeGenericMethod(typeof(TechProto)).Invoke(null, new object[2]
			{
				LDB.techs,
				techList
			});
		}
	}
	public static class FormatUtils
	{
		public static string FormatP(this float value)
		{
			int i = 3;
			StringBuilder stringBuilder = new StringBuilder("0.###");
			for (; i < 10; i++)
			{
				if ((double)value * Math.Pow(10.0, i) >= 1.0)
				{
					return value.ToString(stringBuilder.Append("%").ToString());
				}
				stringBuilder.Append("#");
			}
			return "0%";
		}
	}
	public class RecipeHelper
	{
		private int currID = 1010;

		private readonly List<int> recipeIDList = new List<int>();

		public static int maxRowCount;

		public static int maxColumnCount;

		private int tab;

		private int row;

		private int column;

		private readonly int firstEmptyGridIndex;

		private Dictionary<RecipeProto, int> gridIndexDic = new Dictionary<RecipeProto, int>();

		public RecipeHelper(int firstPage)
		{
			RecipeProto[] dataArray = ((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray;
			foreach (RecipeProto val in dataArray)
			{
				if (val != null && val.GridIndex > 0)
				{
					recipeIDList.Add(((Proto)val).ID);
				}
			}
			tab = firstPage + 1;
			row = 6;
			column = 7;
			firstEmptyGridIndex = tab * 1000 + row * 100 + column + 1;
			if (GenesisBook.Enable)
			{
				maxRowCount = 7;
				maxColumnCount = 17;
			}
			else
			{
				maxRowCount = 8;
				maxColumnCount = 14;
			}
			dataArray = ((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray;
			foreach (RecipeProto val2 in dataArray)
			{
				if (val2 != null && val2.GridIndex > 0)
				{
					gridIndexDic.Add(val2, val2.GridIndex);
				}
			}
		}

		public int GetUnusedRecipeID()
		{
			while (((ProtoSet<RecipeProto>)(object)LDB.recipes).Select(currID) != null || recipeIDList.Contains(currID))
			{
				currID++;
			}
			recipeIDList.Add(currID);
			return currID;
		}

		public void ModifyGridIndex(RecipeProto r, int tab, int rowColumn)
		{
			ModifyGridIndex(r, tab * 1000 + rowColumn);
		}

		public void ModifyGridIndex(RecipeProto r, int gridIndex)
		{
			if (gridIndex == r.GridIndex)
			{
				return;
			}
			if (gridIndexDic.ContainsValue(gridIndex))
			{
				gridIndex = -1;
			}
			if (gridIndex <= 0)
			{
				column++;
				if (column > maxColumnCount)
				{
					column = 1;
					row++;
				}
				int num = tab * 1000 + row * 100 + column;
				if (row > maxRowCount)
				{
					FractionateEverything.LogWarning($"配方{((Proto)r).name}图标超出显示范围,当前GridIndex={num}");
				}
				gridIndexDic[r] = num;
				r.GridIndex = num;
				return;
			}
			if (gridIndexDic.ContainsKey(r))
			{
				int num2 = gridIndexDic[r];
				gridIndexDic.Remove(r);
				if (num2 / 1000 == tab && num2 >= firstEmptyGridIndex)
				{
					Dictionary<RecipeProto, int> dictionary = new Dictionary<RecipeProto, int>();
					foreach (KeyValuePair<RecipeProto, int> item in gridIndexDic)
					{
						if (item.Value / 1000 == tab && item.Value > num2)
						{
							int num3 = item.Value % 1000 / 100;
							if (item.Value % 1000 % 100 >= 2)
							{
								item.Key.GridIndex = item.Value - 1;
							}
							else
							{
								item.Key.GridIndex = tab * 1000 + (num3 - 1) * 100 + maxColumnCount;
							}
							dictionary.Add(item.Key, item.Key.GridIndex);
						}
						else
						{
							dictionary.Add(item.Key, item.Value);
						}
					}
					gridIndexDic = dictionary;
					column--;
					if (column <= 0)
					{
						row--;
						column = maxColumnCount;
					}
				}
			}
			gridIndexDic.Add(r, gridIndex);
			r.GridIndex = gridIndex;
		}
	}
	public static class ProtoID
	{
		internal const int I伊卡洛斯 = 0;

		internal const int I行星基地 = 1;

		internal const int I巨构星际组装厂 = 2;

		internal const int I铁矿 = 1001;

		internal const int I铜矿 = 1002;

		internal const int I硅石 = 1003;

		internal const int I钛石 = 1004;

		internal const int I石矿 = 1005;

		internal const int I煤矿 = 1006;

		internal const int I木材 = 1030;

		internal const int I植物燃料 = 1031;

		internal const int I可燃冰 = 1011;

		internal const int I金伯利矿石 = 1012;

		internal const int I分形硅石 = 1013;

		internal const int I光栅石 = 1014;

		internal const int I刺笋结晶 = 1015;

		internal const int I单极磁石 = 1016;

		internal const int I铁块 = 1101;

		internal const int I铜块 = 1104;

		internal const int I高纯硅块 = 1105;

		internal const int I钛块 = 1106;

		internal const int I石材 = 1108;

		internal const int I高能石墨 = 1109;

		internal const int I钢材 = 1103;

		internal const int I钛合金 = 1107;

		internal const int I玻璃 = 1110;

		internal const int I钛化玻璃 = 1119;

		internal const int I棱镜 = 1111;

		internal const int I金刚石 = 1112;

		internal const int I晶格硅 = 1113;

		internal const int I齿轮 = 1201;

		internal const int I磁铁 = 1102;

		internal const int I磁线圈_GB铜线圈 = 1202;

		internal const int I电动机 = 1203;

		internal const int I电磁涡轮 = 1204;

		internal const int I超级磁场环 = 1205;

		internal const int I粒子容器 = 1206;

		internal const int I奇异物质 = 1127;

		internal const int I电路板 = 1301;

		internal const int I处理器 = 1303;

		internal const int I量子芯片 = 1305;

		internal const int I微晶元件 = 1302;

		internal const int I位面过滤器 = 1304;

		internal const int I粒子宽带 = 1402;

		internal const int I电浆激发器 = 1401;

		internal const int I光子合并器 = 1404;

		internal const int I太阳帆 = 1501;

		internal const int I = 1000;

		internal const int I原油 = 1007;

		internal const int I精炼油_GB焦油 = 1114;

		internal const int I硫酸 = 1116;

		internal const int I = 1120;

		internal const int I重氢 = 1121;

		internal const int I反物质 = 1122;

		internal const int I临界光子 = 1208;

		internal const int I液氢燃料棒 = 1801;

		internal const int I氘核燃料棒 = 1802;

		internal const int I反物质燃料棒 = 1803;

		internal const int I奇异湮灭燃料棒 = 1804;

		internal const int I塑料_GB聚丙烯 = 1115;

		internal const int I石墨烯 = 1123;

		internal const int I碳纳米管 = 1124;

		internal const int I有机晶体 = 1117;

		internal const int I钛晶石 = 1118;

		internal const int I卡西米尔晶体 = 1126;

		internal const int I燃烧单元 = 1128;

		internal const int I爆破单元 = 1129;

		internal const int I晶石爆破单元 = 1130;

		internal const int I引力透镜 = 1209;

		internal const int I空间翘曲器 = 1210;

		internal const int I湮灭约束球 = 1403;

		internal const int I动力引擎 = 1407;

		internal const int I推进器 = 1405;

		internal const int I加力推进器 = 1406;

		internal const int I配送运输机 = 5003;

		internal const int I物流运输机 = 5001;

		internal const int I星际物流运输船 = 5002;

		internal const int I框架材料 = 1125;

		internal const int I戴森球组件 = 1502;

		internal const int I小型运载火箭 = 1503;

		internal const int I地基 = 1131;

		internal const int I增产剂MkI = 1141;

		internal const int I增产剂MkII = 1142;

		internal const int I增产剂MkIII_GB增产剂 = 1143;

		internal const int I机枪弹箱 = 1601;

		internal const int I钛化弹箱 = 1602;

		internal const int I超合金弹箱 = 1603;

		internal const int I炮弹组 = 1604;

		internal const int I高爆炮弹组 = 1605;

		internal const int I晶石炮弹组 = 1606;

		internal const int I等离子胶囊 = 1607;

		internal const int I反物质胶囊 = 1608;

		internal const int I导弹组 = 1609;

		internal const int I超音速导弹组 = 1610;

		internal const int I引力导弹组 = 1611;

		internal const int I干扰胶囊 = 1612;

		internal const int I压制胶囊 = 1613;

		internal const int I原型机 = 5101;

		internal const int I精准无人机 = 5102;

		internal const int I攻击无人机 = 5103;

		internal const int I护卫舰 = 5111;

		internal const int I驱逐舰 = 5112;

		internal const int I黑雾矩阵 = 5201;

		internal const int I硅基神经元 = 5202;

		internal const int I物质重组器 = 5203;

		internal const int I负熵奇点 = 5204;

		internal const int I核心素 = 5205;

		internal const int I能量碎片 = 5206;

		internal const int I传送带 = 2001;

		internal const int I高速传送带 = 2002;

		internal const int I极速传送带 = 2003;

		internal const int I分拣器 = 2011;

		internal const int I高速分拣器 = 2012;

		internal const int I极速分拣器 = 2013;

		internal const int I集装分拣器 = 2014;

		internal const int I四向分流器 = 2020;

		internal const int I自动集装机 = 2040;

		internal const int I流速监测器 = 2030;

		internal const int I喷涂机 = 2313;

		internal const int I物流配送器 = 2107;

		internal const int I小型储物仓 = 2101;

		internal const int I大型储物仓 = 2102;

		internal const int I储液罐 = 2106;

		internal const int I制造台MkI_GB基础制造台 = 2303;

		internal const int I制造台MkII_GB标准制造单元 = 2304;

		internal const int I制造台MkIII_GB高精度装配线 = 2305;

		internal const int I重组式制造台_GB物质重组工厂 = 2318;

		internal const int I电力感应塔 = 2201;

		internal const int I无线输电塔 = 2202;

		internal const int I卫星配电站 = 2212;

		internal const int I风力涡轮机 = 2203;

		internal const int I火力发电厂 = 2204;

		internal const int I微型聚变发电站_GB裂变能源发电站 = 2211;

		internal const int I地热发电站 = 2213;

		internal const int I采矿机 = 2301;

		internal const int I大型采矿机 = 2316;

		internal const int I抽水站 = 2306;

		internal const int I电弧熔炉 = 2302;

		internal const int I位面熔炉 = 2315;

		internal const int I负熵熔炉 = 2319;

		internal const int I原油萃取站 = 2307;

		internal const int I原油精炼厂 = 2308;

		internal const int I化工厂 = 2309;

		internal const int I量子化工厂_GB先进化学反应釜 = 2317;

		internal const int I分馏塔 = 2314;

		internal const int I太阳能板 = 2205;

		internal const int I蓄电器 = 2206;

		internal const int I蓄电器满 = 2207;

		internal const int I电磁轨道弹射器 = 2311;

		internal const int I射线接收站 = 2208;

		internal const int I垂直发射井 = 2312;

		internal const int I能量枢纽 = 2209;

		internal const int I微型粒子对撞机 = 2310;

		internal const int I人造恒星_GB人造恒星MKI = 2210;

		internal const int I行星内物流运输站 = 2103;

		internal const int I星际物流运输站 = 2104;

		internal const int I轨道采集器 = 2105;

		internal const int I矩阵研究站 = 2901;

		internal const int I自演化研究站 = 2902;

		internal const int I高斯机枪塔 = 3001;

		internal const int I高频激光塔_GB高频激光塔MKI = 3002;

		internal const int I聚爆加农炮_GB聚爆加农炮MKI = 3003;

		internal const int I磁化电浆炮 = 3004;

		internal const int I导弹防御塔 = 3005;

		internal const int I干扰塔 = 3006;

		internal const int I信号塔 = 3007;

		internal const int I行星护盾发生器 = 3008;

		internal const int I战场分析基站 = 3009;

		internal const int I近程电浆塔 = 3010;

		internal const int I电磁矩阵 = 6001;

		internal const int I能量矩阵 = 6002;

		internal const int I结构矩阵 = 6003;

		internal const int I信息矩阵 = 6004;

		internal const int I引力矩阵 = 6005;

		internal const int I宇宙矩阵 = 6006;

		internal const int I沙土 = 1099;

		internal const int IMS引力发生装置 = 9480;

		internal const int IMS位面约束环 = 9481;

		internal const int IMS引力钻头 = 9482;

		internal const int IMS隧穿激发装置 = 9483;

		internal const int IMS谐振盘 = 9484;

		internal const int IMS光子探针 = 9485;

		internal const int IMS量子计算机 = 9486;

		internal const int IMS星际组装厂组件 = 9487;

		internal const int IMS物质解压器运载火箭 = 9488;

		internal const int IMS科学枢纽运载火箭 = 9489;

		internal const int IMS谐振发射器运载火箭 = 9490;

		internal const int IMS星际组装厂运载火箭 = 9491;

		internal const int IMS晶体重构器运载火箭 = 9492;

		internal const int IMS多功能集成组件 = 9500;

		internal const int IMS力场发生器 = 9503;

		internal const int IMS复合态晶体 = 9504;

		internal const int IMS电磁力抑制器 = 9505;

		internal const int IMS胶子发生器 = 9506;

		internal const int IMS强力过载装置 = 9507;

		internal const int IMS导流框架 = 9508;

		internal const int IMS恒星炮组件 = 9509;

		internal const int IMS恒星炮运载火箭 = 9510;

		internal const int IVD水滴 = 9511;

		internal const int IMS铁金属重构装置 = 9493;

		internal const int IMS铜金属重构装置 = 9494;

		internal const int IMS高纯硅重构装置 = 9495;

		internal const int IMS钛金属重构装置 = 9496;

		internal const int IMS单极磁石重构装置 = 9497;

		internal const int IMS晶体接收器 = 9498;

		internal const int IMS组件集成装置 = 9499;

		internal const int IMS石墨提炼装置 = 9501;

		internal const int IMS光栅晶体接收器 = 9502;

		internal const int IMS物资交换物流站 = 9512;

		internal const int IVD水滴额外伤害 = 8035;

		internal const int IVD星河卫士勋章 = 9513;

		internal const int IGB钨矿 = 6201;

		internal const int IGB铝矿 = 6202;

		internal const int IGB铝块 = 6203;

		internal const int IGB铝合金 = 6204;

		internal const int IGB二氧化碳 = 6206;

		internal const int IGB硫矿 = 6207;

		internal const int IGB混凝土 = 6208;

		internal const int IGB四氢双环戊二烯JP10 = 6212;

		internal const int IGB四氢双环戊二烯燃料棒 = 6216;

		internal const int IGB煤油燃料棒 = 6217;

		internal const int IGB = 6220;

		internal const int IGB同位素温差发电机 = 6221;

		internal const int IGB放射性矿物 = 6222;

		internal const int IGB铀矿 = 6225;

		internal const int IGB钚矿 = 6226;

		internal const int IGB含铀核燃料 = 6227;

		internal const int IGB含钚核燃料 = 6228;

		internal const int IGB量子储液罐 = 6229;

		internal const int IGB矿物处理厂 = 6230;

		internal const int IGB量子储物仓 = 6231;

		internal const int IGB = 6234;

		internal const int IGB氦三 = 6235;

		internal const int IGB钚燃料棒 = 6241;

		internal const int IGB铀燃料棒 = 6242;

		internal const int IGBMOX燃料棒 = 6243;

		internal const int IGB氦三燃料棒 = 6244;

		internal const int IGB氘氦混合燃料棒 = 6245;

		internal const int IGB石粉 = 6251;

		internal const int IGB铁矿粉 = 6252;

		internal const int IGB铜矿粉 = 6253;

		internal const int IGB硅矿粉 = 6254;

		internal const int IGB钛矿粉 = 6255;

		internal const int IGB煤矿粉 = 6256;

		internal const int IGB天穹装配厂 = 6257;

		internal const int IGB物质裂解塔 = 6258;

		internal const int IGB埃克森美孚化工厂 = 6259;

		internal const int IGB工业先锋精密加工中心 = 6260;

		internal const int IGB人造恒星MKII = 6261;

		internal const int IGB氦闪约束器 = 6263;

		internal const int IGB物质分解设施 = 6264;

		internal const int IGB苍穹粒子加速器 = 6265;

		internal const int IGB聚束液体汲取设施 = 6266;

		internal const int IGB大气采集站 = 6267;

		internal const int IGB三元精金 = 6271;

		internal const int IGB铝矿粉 = 6273;

		internal const int IGB硫粉 = 6277;

		internal const int IGB通量矩阵 = 6278;

		internal const int IGB空间矩阵 = 6279;

		internal const int IGB宇宙矩阵粗坯 = 6280;

		internal const int IGB钨矿粉 = 6281;

		internal const int IGB基础机械组件 = 6501;

		internal const int IGB先进机械组件 = 6502;

		internal const int IGB尖端机械组件 = 6503;

		internal const int IGB超级机械组件 = 6504;

		internal const int IGB创世之书 = 6506;

		internal const int IGB虚空之书 = 6507;

		internal const int IGB起源之书 = 6508;

		internal const int IGB空燃料棒 = 6509;

		internal const int IGB开发者日志01 = 6511;

		internal const int IGB开发者日志02 = 6512;

		internal const int IGB开发者日志03 = 6513;

		internal const int IGB开发者日志04 = 6514;

		internal const int IGB开发者日志05 = 6515;

		internal const int IGB开发者日志06 = 6516;

		internal const int IGB开发者日志07 = 6517;

		internal const int IGB开发者日志08 = 6518;

		internal const int IGB开发者日志09 = 6519;

		internal const int IGB开发者日志10 = 6520;

		internal const int IGB开发者日志11 = 6521;

		internal const int IGB电力节约 = 6522;

		internal const int IGB上传扩容 = 6523;

		internal const int IGB燃料回收 = 6524;

		internal const int IGB风力扩容 = 6525;

		internal const int IGB光伏扩容 = 6526;

		internal const int IGB热聚增效 = 6527;

		internal const int IGB资源采掘 = 6528;

		internal const int IGB裂变增效 = 6529;

		internal const int IGB先进推进 = 6530;

		internal const int IGB特征向量模拟 = 6531;

		internal const int IGB中继信号干扰 = 6532;

		internal const int IGB神经元重编程 = 6533;

		internal const int IGB异常代码分析 = 6534;

		internal const int IGB = 7002;

		internal const int IGB = 7006;

		internal const int IGB丙烯 = 7009;

		internal const int IGB盐酸 = 7014;

		internal const int IGB三氯化铁 = 7015;

		internal const int IGB硝酸 = 7017;

		internal const int IGB海水 = 7018;

		internal const int IGB = 7019;

		internal const int IGB氢氧化钠 = 7020;

		internal const int IGB氯化钠 = 7101;

		internal const int IGB塑料基板 = 7501;

		internal const int IGB光学基板 = 7504;

		internal const int IGB钢芯弹箱 = 7607;

		internal const int IGB钨芯弹箱 = 7608;

		internal const int IGB三元弹箱 = 7609;

		internal const int IGB核子爆破单元 = 7610;

		internal const int IGB反物质湮灭单元 = 7611;

		internal const int IGB微型核弹组 = 7612;

		internal const int IGB反物质炮弹组 = 7613;

		internal const int IGB反物质导弹组 = 7615;

		internal const int IGB湮灭弹箱 = 7616;

		internal const int IGB聚爆加农炮MKII = 7617;

		internal const int IGB高频激光塔MKII = 7618;

		internal const int IGB钨块 = 7705;

		internal const int IGB钨强化玻璃 = 7706;

		internal const int IGB钨合金 = 7707;

		internal const int IGB聚苯硫醚PPS = 7708;

		internal const int IGB聚酰亚胺PI = 7709;

		internal const int IGB光学处理器 = 7803;

		internal const int IGB光学信息传输纤维 = 7804;

		internal const int IGB量子计算主机 = 7805;

		internal const int IGB超越X1型光学主机 = 7806;

		internal const int IFE自然资源分馏塔 = 2321;

		internal const int IFE升级分馏塔 = 2322;

		internal const int IFE降级分馏塔 = 2323;

		internal const int IFE垃圾回收分馏塔 = 2324;

		internal const int IFE点数聚集分馏塔 = 2325;

		internal const int IFE增产分馏塔 = 2326;

		internal const int M = 494;

		internal const int M燃烧单元 = 489;

		internal const int M爆破单元 = 490;

		internal const int M晶石爆破单元_GB反物质湮灭单元 = 491;

		internal const int M配送运输机 = 372;

		internal const int M物流运输机 = 47;

		internal const int M星际物流运输船 = 48;

		internal const int M小型运载火箭 = 75;

		internal const int M炮弹组 = 486;

		internal const int M高爆炮弹组 = 487;

		internal const int M晶石炮弹组_GB微型核弹组 = 488;

		internal const int M导弹组 = 432;

		internal const int M超音速导弹组 = 433;

		internal const int M引力导弹组 = 434;

		internal const int M干扰胶囊 = 492;

		internal const int M压制胶囊 = 493;

		internal const int M原型机 = 448;

		internal const int M精准无人机 = 449;

		internal const int M攻击无人机 = 450;

		internal const int M护卫舰 = 451;

		internal const int M驱逐舰 = 452;

		internal const int M传送带 = 35;

		internal const int M高速传送带 = 36;

		internal const int M极速传送带 = 37;

		internal const int M分拣器 = 41;

		internal const int M高速分拣器 = 42;

		internal const int M极速分拣器 = 43;

		internal const int M集装分拣器 = 483;

		internal const int M四向分流器 = 38;

		internal const int M自动集装机 = 257;

		internal const int M流速监测器 = 208;

		internal const int M喷涂机 = 120;

		internal const int M物流配送器 = 371;

		internal const int M小型储物仓 = 51;

		internal const int M大型储物仓 = 52;

		internal const int M储液罐 = 121;

		internal const int M制造台MkI_GB基础制造台 = 65;

		internal const int M制造台MkII_GB标准制造单元 = 66;

		internal const int M制造台MkIII_GB高精度装配线 = 67;

		internal const int M重组式制造台_GB物质重组工厂 = 456;

		internal const int M电力感应塔 = 44;

		internal const int M无线输电塔 = 71;

		internal const int M卫星配电站 = 68;

		internal const int M风力涡轮机 = 53;

		internal const int M火力发电厂 = 54;

		internal const int M微型聚变发电站_GB裂变能源发电站 = 118;

		internal const int M地热发电站 = 255;

		internal const int M采矿机 = 57;

		internal const int M大型采矿机 = 256;

		internal const int M抽水站 = 60;

		internal const int M电弧熔炉 = 62;

		internal const int M位面熔炉 = 194;

		internal const int M负熵熔炉 = 457;

		internal const int M原油萃取站 = 61;

		internal const int M原油精炼厂 = 63;

		internal const int M化工厂 = 64;

		internal const int M量子化工厂_GB先进化学反应釜 = 376;

		internal const int M分馏塔 = 119;

		internal const int M太阳能板 = 55;

		internal const int M蓄电器 = 46;

		internal const int M蓄电器满 = 46;

		internal const int M电磁轨道弹射器 = 72;

		internal const int M射线接收站 = 73;

		internal const int M垂直发射井 = 74;

		internal const int M能量枢纽 = 45;

		internal const int M微型粒子对撞机 = 69;

		internal const int M人造恒星_GB人造恒星MKI = 56;

		internal const int M行星内物流运输站 = 49;

		internal const int M星际物流运输站 = 50;

		internal const int M轨道采集器 = 117;

		internal const int M矩阵研究站 = 70;

		internal const int M自演化研究站 = 455;

		internal const int M高斯机枪塔 = 374;

		internal const int M高频激光塔_GB高频激光塔MKI = 373;

		internal const int M聚爆加农炮_GB聚爆加农炮MKI = 375;

		internal const int M磁化电浆炮 = 408;

		internal const int M导弹防御塔 = 407;

		internal const int M干扰塔 = 422;

		internal const int M信号塔 = 403;

		internal const int M行星护盾发生器 = 402;

		internal const int M战场分析基站 = 453;

		internal const int M近程电浆塔 = 482;

		internal const int MMS铁金属重构装置 = 73;

		internal const int MMS铜金属重构装置 = 73;

		internal const int MMS高纯硅重构装置 = 73;

		internal const int MMS钛金属重构装置 = 73;

		internal const int MMS单极磁石重构装置 = 73;

		internal const int MMS晶体接收器 = 73;

		internal const int MMS组件集成装置 = 73;

		internal const int MMS石墨提炼装置 = 73;

		internal const int MMS光栅晶体接收器 = 73;

		internal const int MMS物资交换物流站 = 50;

		internal const int MGB量子储液罐 = 801;

		internal const int MGB矿物处理厂 = 802;

		internal const int MGB天穹装配厂 = 803;

		internal const int MGB物质裂解塔 = 804;

		internal const int MGB埃克森美孚化工厂 = 805;

		internal const int MGB工业先锋精密加工中心 = 806;

		internal const int MGB人造恒星MKII = 807;

		internal const int MGB聚束液体汲取设施 = 808;

		internal const int MGB同位素温差发电机 = 809;

		internal const int MGB物质分解设施 = 810;

		internal const int MGB苍穹粒子加速器 = 811;

		internal const int MGB大气采集站 = 812;

		internal const int MGB反物质导弹组 = 813;

		internal const int MGB量子储物仓 = 814;

		internal const int MGB聚爆加农炮MKII = 815;

		internal const int MGB高频激光塔MKII = 816;

		internal const int MGB核子爆破单元 = 817;

		internal const int MGB反物质炮弹组 = 818;

		internal const int MFE自然资源分馏塔 = 531;

		internal const int MFE升级分馏塔 = 532;

		internal const int MFE降级分馏塔 = 533;

		internal const int MFE垃圾回收分馏塔 = 534;

		internal const int MFE点数聚集分馏塔 = 535;

		internal const int MFE增产分馏塔 = 536;

		internal const int R铁块 = 1;

		internal const int R磁铁_GB铜线圈 = 2;

		internal const int R铜块 = 3;

		internal const int R石材 = 4;

		internal const int R齿轮 = 5;

		internal const int R磁线圈_GB电路板 = 6;

		internal const int R风力涡轮机 = 7;

		internal const int R电力感应塔 = 8;

		internal const int R电磁矩阵 = 9;

		internal const int R矩阵研究站 = 10;

		internal const int R棱镜 = 11;

		internal const int R电浆激发器 = 12;

		internal const int R无线输电塔 = 13;

		internal const int R原油萃取站 = 14;

		internal const int R原油精炼厂 = 15;

		internal const int R等离子精炼 = 16;

		internal const int R高能石墨 = 17;

		internal const int R能量矩阵 = 18;

		internal const int R液氢燃料棒 = 19;

		internal const int R推进器 = 20;

		internal const int R加力推进器 = 21;

		internal const int R化工厂 = 22;

		internal const int R塑料_GB聚丙烯 = 23;

		internal const int R硫酸 = 24;

		internal const int R有机晶体_GB铝块 = 25;

		internal const int R钛晶石_GB铝合金 = 26;

		internal const int R结构矩阵 = 27;

		internal const int R卡西米尔晶体 = 28;

		internal const int R卡西米尔晶体高效 = 29;

		internal const int R钛化玻璃 = 30;

		internal const int R石墨烯 = 31;

		internal const int R石墨烯高效 = 32;

		internal const int R碳纳米管 = 33;

		internal const int R硅石_硅石筛选 = 34;

		internal const int R碳纳米管高效 = 35;

		internal const int R粒子宽带 = 36;

		internal const int R晶格硅 = 37;

		internal const int R位面过滤器 = 38;

		internal const int R微型粒子对撞机 = 39;

		internal const int R重氢 = 40;

		internal const int R氘核燃料棒 = 41;

		internal const int R湮灭约束球 = 42;

		internal const int R人造恒星_GB人造恒星MKI = 43;

		internal const int R反物质燃料棒 = 44;

		internal const int R制造台MkI_GB基础制造台 = 45;

		internal const int R制造台MkII_GB标准制造单元 = 46;

		internal const int R制造台MkIII_GB高精度装配线 = 47;

		internal const int R采矿机 = 48;

		internal const int R抽水站 = 49;

		internal const int R电路板_玻璃 = 50;

		internal const int R处理器 = 51;

		internal const int R量子芯片 = 52;

		internal const int R微晶元件 = 53;

		internal const int R有机晶体原始_GB埃克森美孚化工厂 = 54;

		internal const int R信息矩阵 = 55;

		internal const int R电弧熔炉 = 56;

		internal const int R玻璃_GB三元精金 = 57;

		internal const int RX射线裂解 = 58;

		internal const int R高纯硅块 = 59;

		internal const int R金刚石 = 60;

		internal const int R金刚石高效 = 61;

		internal const int R晶格硅高效 = 62;

		internal const int R钢材 = 63;

		internal const int R火力发电厂 = 64;

		internal const int R钛块 = 65;

		internal const int R钛合金 = 66;

		internal const int R太阳能板 = 67;

		internal const int R光子合并器 = 68;

		internal const int R光子合并器高效 = 69;

		internal const int R太阳帆 = 70;

		internal const int R电磁轨道弹射器 = 71;

		internal const int R射线接收站 = 72;

		internal const int R卫星配电站 = 73;

		internal const int R质能储存 = 74;

		internal const int R宇宙矩阵 = 75;

		internal const int R蓄电器 = 76;

		internal const int R能量枢纽 = 77;

		internal const int R空间翘曲器 = 78;

		internal const int R空间翘曲器高级 = 79;

		internal const int R框架材料 = 80;

		internal const int R戴森球组件 = 81;

		internal const int R垂直发射井 = 82;

		internal const int R小型运载火箭 = 83;

		internal const int R传送带 = 84;

		internal const int R分拣器 = 85;

		internal const int R小型储物仓 = 86;

		internal const int R四向分流器 = 87;

		internal const int R高速分拣器 = 88;

		internal const int R高速传送带 = 89;

		internal const int R极速分拣器 = 90;

		internal const int R大型储物仓 = 91;

		internal const int R极速传送带 = 92;

		internal const int R行星内物流运输站 = 93;

		internal const int R物流运输机 = 94;

		internal const int R星际物流运输站 = 95;

		internal const int R星际物流运输船 = 96;

		internal const int R电动机 = 97;

		internal const int R电磁涡轮 = 98;

		internal const int R粒子容器 = 99;

		internal const int R粒子容器高效 = 100;

		internal const int R引力透镜 = 101;

		internal const int R引力矩阵 = 102;

		internal const int R超级磁场环 = 103;

		internal const int R奇异物质 = 104;

		internal const int R增产剂MkI_GB氦三 = 106;

		internal const int R增产剂MkII_GB氦原子提取 = 107;

		internal const int R增产剂MkIII_GB增产剂 = 108;

		internal const int R喷涂机 = 109;

		internal const int R分馏塔_GB人造恒星MKII = 110;

		internal const int R轨道采集器 = 111;

		internal const int R地基 = 112;

		internal const int R微型聚变发电站_GB裂变能源发电站 = 113;

		internal const int R储液罐 = 114;

		internal const int R重氢分馏_GB氦闪约束器 = 115;

		internal const int R位面熔炉 = 116;

		internal const int R流速监测器 = 117;

		internal const int R地热发电站 = 118;

		internal const int R大型采矿机 = 119;

		internal const int R自动集装机 = 120;

		internal const int R重整精炼_GB铝矿粉 = 121;

		internal const int R物流配送器 = 122;

		internal const int R配送运输机 = 123;

		internal const int R量子化工厂_GB先进化学反应釜 = 124;

		internal const int R高斯机枪塔 = 125;

		internal const int R高频激光塔_GB高频激光塔MKI = 126;

		internal const int R聚爆加农炮_GB聚爆加农炮MKI = 127;

		internal const int R磁化电浆炮 = 128;

		internal const int R导弹防御塔 = 129;

		internal const int R干扰塔 = 130;

		internal const int R信号塔 = 131;

		internal const int R行星护盾发生器 = 132;

		internal const int R燃烧单元 = 133;

		internal const int R爆破单元 = 134;

		internal const int R晶石爆破单元_GB核子爆破单元 = 135;

		internal const int R机枪弹箱 = 136;

		internal const int R钛化弹箱 = 137;

		internal const int R超合金弹箱 = 138;

		internal const int R炮弹组 = 139;

		internal const int R高爆炮弹组 = 140;

		internal const int R晶石炮弹组_GB微型核弹组 = 141;

		internal const int R等离子胶囊 = 142;

		internal const int R反物质胶囊 = 143;

		internal const int R导弹组 = 144;

		internal const int R超音速导弹组 = 145;

		internal const int R引力导弹组 = 146;

		internal const int R原型机 = 147;

		internal const int R精准无人机 = 148;

		internal const int R攻击无人机 = 149;

		internal const int R护卫舰 = 150;

		internal const int R驱逐舰 = 151;

		internal const int R动力引擎 = 105;

		internal const int R战场分析基站 = 152;

		internal const int R自演化研究站 = 153;

		internal const int R重组式制造台_GB物质重组工厂 = 154;

		internal const int R负熵熔炉 = 155;

		internal const int R奇异湮灭燃料棒 = 156;

		internal const int R近程电浆塔 = 157;

		internal const int R干扰胶囊 = 158;

		internal const int R压制胶囊 = 159;

		internal const int R集装分拣器 = 160;

		internal const int RMS引力发生装置 = 530;

		internal const int RMS位面约束环 = 531;

		internal const int RMS引力钻头 = 532;

		internal const int RMS隧穿激发装置 = 533;

		internal const int RMS谐振盘 = 534;

		internal const int RMS光子探针 = 535;

		internal const int RMS量子计算机 = 536;

		internal const int RMS星际组装厂组件 = 537;

		internal const int RMS多功能集成组件 = 550;

		internal const int RMS物质解压器运载火箭 = 538;

		internal const int RMS科学枢纽运载火箭 = 539;

		internal const int RMS谐振发射器运载火箭 = 540;

		internal const int RMS星际组装厂运载火箭 = 541;

		internal const int RMS晶体重构器运载火箭 = 542;

		internal const int RMS力场发生器Recipe = 565;

		internal const int RMS复合态晶体Recipe = 566;

		internal const int RMS电磁力抑制器Recipe = 567;

		internal const int RMS胶子发生器Recipe = 568;

		internal const int RMS强力过载装置Recipe = 569;

		internal const int RMS导流框架Recipe = 570;

		internal const int RMS恒星炮组件Recipe = 571;

		internal const int RMS恒星炮运载火箭Recipe = 572;

		internal const int RMS水滴gmRecipe = 573;

		internal const int RMS制造台快速组装 = 554;

		internal const int RMS传送带快速组装 = 551;

		internal const int RMS化工厂快速组装 = 556;

		internal const int RMS对撞机快速组装 = 558;

		internal const int RMS星际物流快速组装 = 562;

		internal const int RMS研究站快速组装 = 559;

		internal const int RMS行星内物流快速组装 = 561;

		internal const int RMS配电站快速组装 = 553;

		internal const int RMS人造恒星快速组装 = 560;

		internal const int RMS精炼厂快速组装 = 557;

		internal const int RMS位面熔炉快速组装 = 555;

		internal const int RMS分拣器快速组装 = 552;

		internal const int RMS铁金属重构装置 = 543;

		internal const int RMS铜金属重构装置 = 544;

		internal const int RMS高纯硅重构装置 = 545;

		internal const int RMS钛金属重构装置 = 546;

		internal const int RMS单极磁石重构装置 = 547;

		internal const int RMS晶体接收器 = 548;

		internal const int RMS组件集成装置 = 549;

		internal const int RMS石墨提炼装置 = 563;

		internal const int RMS光栅晶体接收器 = 564;

		internal const int RMS物资交换物流站 = 575;

		internal const int RVD星河卫士奖章Recipe = 382;

		internal const int RGB放射性矿物处理 = 401;

		internal const int RGB铝矿精炼 = 402;

		internal const int RGB钨矿精炼 = 404;

		internal const int RGB钨矿粉 = 405;

		internal const int RGB含铀核燃料 = 406;

		internal const int RGB含钚核燃料 = 407;

		internal const int RGB铀燃料棒 = 408;

		internal const int RGB钚燃料棒 = 409;

		internal const int RGBMOX燃料棒 = 410;

		internal const int RGB铁矿精炼 = 411;

		internal const int RGB铜矿精炼 = 412;

		internal const int RGB硅矿精炼 = 413;

		internal const int RGB钛矿精炼 = 414;

		internal const int RGB混凝土 = 415;

		internal const int RGB天穹装配厂 = 416;

		internal const int RGB苍穹粒子加速器 = 417;

		internal const int RGB聚束液体汲取设施 = 418;

		internal const int RGB大气采集站 = 419;

		internal const int RGB石矿精炼 = 420;

		internal const int RGB煤矿精炼 = 421;

		internal const int RGB工业先锋精密加工中心 = 422;

		internal const int RGB物质分解设施 = 423;

		internal const int RGB物质回收 = 429;

		internal const int RGB焦油裂化 = 501;

		internal const int RGB二氧化碳 = 506;

		internal const int RGB催化重整 = 509;

		internal const int RGB四氢双环戊二烯JP10 = 512;

		internal const int RGB四氢双环戊二烯燃料棒 = 515;

		internal const int RGB煤油燃料棒 = 516;

		internal const int RGB处理器高效 = 519;

		internal const int RGB量子储液罐 = 522;

		internal const int RGB矿物处理厂 = 523;

		internal const int RGB量子储物仓 = 524;

		internal const int RGB铁矿粉 = 531;

		internal const int RGB铜矿粉 = 532;

		internal const int RGB硅矿粉 = 533;

		internal const int RGB钛矿粉 = 534;

		internal const int RGB石粉 = 535;

		internal const int RGB煤矿粉 = 536;

		internal const int RGB硫粉 = 537;

		internal const int RGB通量矩阵 = 539;

		internal const int RGB空间矩阵 = 540;

		internal const int RGB质能储存高效 = 541;

		internal const int RGB物质裂解塔 = 542;

		internal const int RGB宇宙矩阵粗坯 = 544;

		internal const int RGB活性纤维重组 = 550;

		internal const int RGB超越X1型光学主机 = 569;

		internal const int RGB氘氦混合燃料棒 = 624;

		internal const int RGB氦三燃料棒 = 625;

		internal const int RGB基础机械组件 = 641;

		internal const int RGB先进机械组件 = 642;

		internal const int RGB尖端机械组件 = 643;

		internal const int RGB空燃料棒 = 644;

		internal const int RGB水电解 = 702;

		internal const int RGB盐水电解 = 703;

		internal const int RGB钛晶石高效 = 709;

		internal const int RGB合成氨 = 710;

		internal const int RGB煤炭干馏 = 712;

		internal const int RGB焦油分馏 = 713;

		internal const int RGB钛晶石 = 714;

		internal const int RGB三氯化铁 = 716;

		internal const int RGB氨氧化 = 717;

		internal const int RGB羰基合成 = 720;

		internal const int RGB塑料基板 = 751;

		internal const int RGB同位素温差发电机 = 752;

		internal const int RGB光学基板 = 754;

		internal const int RGB聚苯硫醚PPS = 771;

		internal const int RGB聚酰亚胺PI = 772;

		internal const int RGB钨矿筛选 = 773;

		internal const int RGB钨块 = 774;

		internal const int RGB钨强化玻璃 = 775;

		internal const int RGB钨合金 = 776;

		internal const int RGB钢芯弹箱 = 781;

		internal const int RGB钨芯弹箱 = 782;

		internal const int RGB三元弹箱 = 783;

		internal const int RGB反物质湮灭单元 = 785;

		internal const int RGB反物质炮弹组 = 787;

		internal const int RGB反物质导弹组 = 789;

		internal const int RGB湮灭弹箱 = 790;

		internal const int RGB聚爆加农炮MKII = 791;

		internal const int RGB高频激光塔MKII = 792;

		internal const int RGB光学处理器 = 793;

		internal const int RGB光学信息传输纤维 = 794;

		internal const int RGB量子计算主机 = 795;

		internal const int RGB海水淡化 = 801;

		internal const int RFE自然资源分馏塔 = 1001;

		internal const int RFE升级分馏塔 = 1002;

		internal const int RFE降级分馏塔 = 1003;

		internal const int RFE垃圾回收分馏塔 = 1004;

		internal const int RFE点数聚集分馏塔 = 1005;

		internal const int RFE增产分馏塔 = 1006;

		internal const int T戴森球计划 = 1;

		internal const int T电磁学 = 1001;

		internal const int T电磁矩阵 = 1002;

		internal const int T高效电浆控制 = 1101;

		internal const int T等离子萃取精炼 = 1102;

		internal const int TX射线裂解 = 1103;

		internal const int T重整精炼_GB先进有机合成技术 = 1104;

		internal const int T能量矩阵 = 1111;

		internal const int T氢燃料棒_GB气体冷凝 = 1112;

		internal const int T推进器 = 1113;

		internal const int T加力推进器 = 1114;

		internal const int T流体储存封装 = 1120;

		internal const int T基础化工 = 1121;

		internal const int T高分子化工 = 1122;

		internal const int T高强度晶体 = 1123;

		internal const int T结构矩阵 = 1124;

		internal const int T卡西米尔晶体 = 1125;

		internal const int T高强度玻璃 = 1126;

		internal const int T应用型超导体 = 1131;

		internal const int T高强度材料 = 1132;

		internal const int T粒子可控 = 1133;

		internal const int T重氢分馏_GB强相互作用力材料 = 1134;

		internal const int T波函数干扰 = 1141;

		internal const int T微型粒子对撞机_GB粒子对撞机 = 1142;

		internal const int T奇异物质 = 1143;

		internal const int T人造恒星_质能转换利用 = 1144;

		internal const int T可控湮灭反应 = 1145;

		internal const int T增产剂MkI_GB物品增产 = 1151;

		internal const int T增产剂MkII_GB虫洞航行 = 1152;

		internal const int T增产剂MkIII_GB人造恒星MKI = 1153;

		internal const int T基础制造 = 1201;

		internal const int T高速制造_GB标准制造单元 = 1202;

		internal const int T量子打印_GB高精度加工 = 1203;

		internal const int T处理器 = 1302;

		internal const int T量子芯片 = 1303;

		internal const int T光子聚束采矿 = 1304;

		internal const int T亚微观量子纠缠_GB化学反应釜压力容器 = 1305;

		internal const int T半导体材料 = 1311;

		internal const int T信息矩阵 = 1312;

		internal const int T自动化冶金 = 1401;

		internal const int T冶炼提纯 = 1402;

		internal const int T晶体冶炼 = 1403;

		internal const int T钢材冶炼 = 1411;

		internal const int T火力发电 = 1412;

		internal const int T钛矿冶炼 = 1413;

		internal const int T高强度钛合金 = 1414;

		internal const int T移山填海工程_GB工业生产 = 1415;

		internal const int T微型核聚变发电_GB裂变发电站 = 1416;

		internal const int T位面冶金 = 1417;

		internal const int T太阳能收集 = 1501;

		internal const int T光子变频 = 1502;

		internal const int T太阳帆轨道系统 = 1503;

		internal const int T射线接收站 = 1504;

		internal const int T行星电离层利用 = 1505;

		internal const int T狄拉克逆变机制 = 1506;

		internal const int T宇宙矩阵 = 1507;

		internal const int T任务完成 = 1508;

		internal const int T能量储存 = 1511;

		internal const int T星际电力运输 = 1512;

		internal const int T地热开采 = 1513;

		internal const int T高强度轻质结构 = 1521;

		internal const int T垂直发射井 = 1522;

		internal const int T戴森球应力系统 = 1523;

		internal const int T基础物流系统 = 1601;

		internal const int T改良物流系统 = 1602;

		internal const int T高效物流系统 = 1603;

		internal const int T行星物流系统 = 1604;

		internal const int T星际物流系统 = 1605;

		internal const int T气态行星开采 = 1606;

		internal const int T集装物流系统_GB物品仓储 = 1607;

		internal const int T配送物流系统 = 1608;

		internal const int T电磁驱动 = 1701;

		internal const int T磁悬浮 = 1702;

		internal const int T粒子磁力阱 = 1703;

		internal const int T引力波折射 = 1704;

		internal const int T引力矩阵 = 1705;

		internal const int T超级磁场发生器 = 1711;

		internal const int T卫星配电系统 = 1712;

		internal const int T武器系统 = 1801;

		internal const int T燃烧单元 = 1802;

		internal const int T爆破单元 = 1803;

		internal const int T晶石爆破单元_GB核能爆破单元 = 1804;

		internal const int T动力引擎 = 1805;

		internal const int T导弹防御塔 = 1806;

		internal const int T聚爆加农炮 = 1807;

		internal const int T信号塔 = 1808;

		internal const int T行星防御系统 = 1809;

		internal const int T干扰塔 = 1810;

		internal const int T磁化电浆炮 = 1811;

		internal const int T钛化弹箱_GB钢芯穿甲弹 = 1812;

		internal const int T超合金弹箱_GB钛金强化弹壳 = 1813;

		internal const int T高爆炮弹组 = 1814;

		internal const int T超音速导弹组 = 1815;

		internal const int T晶石炮弹组_GB微型核弹 = 1816;

		internal const int T引力导弹组 = 1817;

		internal const int T反物质胶囊 = 1818;

		internal const int T原型机 = 1819;

		internal const int T精准无人机 = 1820;

		internal const int T攻击无人机 = 1821;

		internal const int T护卫舰 = 1822;

		internal const int T驱逐舰 = 1823;

		internal const int T压制胶囊 = 1824;

		internal const int T战场分析基站 = 1826;

		internal const int T数字模拟计算 = 1901;

		internal const int T物质重组 = 1902;

		internal const int T负熵递归 = 1903;

		internal const int T高密度可控湮灭 = 1904;

		internal const int T机甲核心 = 2101;

		internal const int T机械骨骼 = 2201;

		internal const int T机舱容量 = 2301;

		internal const int T通讯控制 = 2401;

		internal const int T能量回路 = 2501;

		internal const int T无人机引擎 = 2601;

		internal const int T批量建造 = 2701;

		internal const int T能量护盾 = 2801;

		internal const int T驱动引擎 = 2901;

		internal const int T自动标记重建 = 2951;

		internal const int T太阳帆寿命 = 3101;

		internal const int T射线传输效率 = 3201;

		internal const int T分拣器货物叠加 = 3301;

		internal const int T分拣器货物集装 = 3306;

		internal const int T集装分拣器改良 = 3311;

		internal const int T配送范围 = 4001;

		internal const int T运输船引擎 = 3401;

		internal const int T运输机舱扩容 = 3501;

		internal const int T运输站集装物流 = 3801;

		internal const int T矿物利用 = 3601;

		internal const int T垂直建造 = 3701;

		internal const int T研究速度 = 3901;

		internal const int T宇宙探索 = 4101;

		internal const int T动能武器伤害 = 5001;

		internal const int T能量武器伤害 = 5101;

		internal const int T爆破武器伤害 = 5201;

		internal const int T战斗无人机伤害 = 5301;

		internal const int T战斗无人机射速 = 5401;

		internal const int T战斗无人机耐久 = 5601;

		internal const int T行星护盾 = 5701;

		internal const int T地面编队扩容 = 5801;

		internal const int T太空编队扩容 = 5901;

		internal const int T结构强化 = 6001;

		internal const int TVD电磁武器效果 = 6101;

		internal const int TMS尼科尔戴森光束 = 1918;

		internal const int TVD玻色子操控 = 1999;

		internal const int TVD并入COSMO架构 = 1998;

		internal const int TGB科学理论 = 1900;

		internal const int TGB钨强化玻璃 = 1911;

		internal const int TGB焦油精炼 = 1915;

		internal const int TGB放射性矿物提炼 = 1916;

		internal const int TGB裂变能源燃料棒 = 1919;

		internal const int TGB同位素温差发电 = 1920;

		internal const int TGB聚变燃料提取 = 1921;

		internal const int TGB聚变能源燃料棒 = 1922;

		internal const int TGB巨型建筑天穹装配厂 = 1923;

		internal const int TGB巨型建筑物质裂解塔 = 1924;

		internal const int TGB巨型建筑行星级化学反应釜 = 1925;

		internal const int TGB巨型建筑精密结构组装厂 = 1926;

		internal const int TGB巨型建筑巨型粒子对撞机 = 1927;

		internal const int TGB化学能燃料棒 = 1928;

		internal const int TGB矿物处理 = 1929;

		internal const int TGB先进化工 = 1930;

		internal const int TGB巨型建筑物质分解设施 = 1931;

		internal const int TGB化工厂 = 1932;

		internal const int TGB巨型建筑工程学 = 1934;

		internal const int TGB行星协调中心 = 1936;

		internal const int TGB基础机械组件 = 1941;

		internal const int TGB先进机械组件 = 1942;

		internal const int TGB尖端机械组件 = 1943;

		internal const int TGB钨强化金属 = 1944;

		internal const int TGB家园世界虚拟技术革新 = 1947;

		internal const int TGB家园世界光学信息传输技术 = 1948;

		internal const int TGB超级量子计算机 = 1949;

		internal const int TGB家园世界光学计算机 = 1950;

		internal const int TGB反物质湮灭单元 = 1952;

		internal const int TGB湮灭战斗部 = 1954;

		internal const int TGB超重型穿甲弹 = 1955;

		internal const int TGB强互作用力弹药 = 1956;

		internal const int TGB小型化湮灭反应 = 1957;

		internal const int TGB反物质飞弹 = 1959;

		internal const int TGB行星协调中心黑雾数据库 = 1960;

		internal const int TGB虚数空间存储 = 1962;

		internal const int TGB集装物流系统 = 1963;

		internal const int TFE自然资源分馏 = 1621;

		internal const int TFE升降级分馏 = 1622;

		internal const int TFE垃圾回收 = 1623;

		internal const int TFE增产点数聚集 = 1159;

		internal const int TFE增产分馏 = 1908;

		internal const int TFE分馏流动输出集装 = 3807;

		internal const int TFE分馏产物输出集装 = 3804;

		internal const int TFE分馏永动 = 3808;
	}
	public static class TranslationUtils
	{
		private struct ModStr
		{
			public string key;

			public string enTrans;

			public string cnTrans;
		}

		private static readonly List<ModStr> modStringList = new List<ModStr>();

		public static string AddOrangeLabel(this string s)
		{
			return "<color=\"#FD965ECC\">" + s + "</color>";
		}

		public static string AddRedLabel(this string s)
		{
			return "<color=\"#FF5D4CB7\">" + s + "</color>";
		}

		public static string AddBlueLabel(this string s)
		{
			return "<color=\"#61D8FFB8\">" + s + "</color>";
		}

		public static void Register(string key, string enTrans, string cnTrans = null)
		{
			LocalizationModule.RegisterTranslation(key, enTrans, cnTrans ?? key, enTrans);
		}

		public static void Edit(string key, string enTrans, string cnTrans = null)
		{
			LocalizationModule.EditTranslation(key, enTrans, cnTrans ?? key, enTrans);
		}

		public static void RegisterOrEditAsync(string key, string enTrans, string cnTrans = null)
		{
			ModStr modStr = default(ModStr);
			modStr.key = key;
			modStr.enTrans = enTrans;
			modStr.cnTrans = cnTrans ?? key;
			ModStr item = modStr;
			foreach (ModStr modString in modStringList)
			{
				if (modString.key == key)
				{
					modStringList.Remove(modString);
					break;
				}
			}
			modStringList.Add(item);
		}

		public static void RegisterOrEditImmediately(string key, string enTrans, string cnTrans = null)
		{
			RegisterOrEditAsync(key, enTrans, cnTrans);
			LoadLanguagePostfixAfterCommonApi();
		}

		public static void LoadLanguagePostfixAfterCommonApi()
		{
			try
			{
				if (modStringList.Count == 0 || Localization.strings == null || Localization.CurrentLanguageIndex >= Localization.strings.Length || Localization.strings[Localization.CurrentLanguageIndex] == null || Localization.currentStrings == null || Localization.floats == null || Localization.CurrentLanguageIndex >= Localization.floats.Length || Localization.floats[Localization.CurrentLanguageIndex] == null || Localization.currentFloats == null)
				{
					return;
				}
				string[] array = Localization.strings[Localization.CurrentLanguageIndex];
				List<string> list = new List<string>(array.Length);
				list.AddRange(array);
				List<string> list2 = list;
				float[] array2 = Localization.floats[Localization.CurrentLanguageIndex];
				List<float> list3 = new List<float>(array2.Length);
				list3.AddRange(array2);
				List<float> list4 = list3;
				bool flag = Localization.CurrentLanguageLCID == 2052;
				foreach (ModStr modString in modStringList)
				{
					if (!Localization.namesIndexer.TryGetValue(modString.key, out var value))
					{
						value = Localization.namesIndexer.Count;
						Localization.namesIndexer.Add(modString.key, value);
					}
					while (list2.Count <= value)
					{
						list2.Add(Localization.namesIndexer.ElementAt(list2.Count).Key);
						list4.Add(0f);
					}
					list2[value] = (flag ? modString.cnTrans : modString.enTrans);
				}
				Localization.strings[Localization.CurrentLanguageIndex] = list2.ToArray();
				Localization.currentStrings = Localization.strings[Localization.CurrentLanguageIndex];
				Localization.floats[Localization.CurrentLanguageIndex] = list4.ToArray();
				Localization.currentFloats = Localization.floats[Localization.CurrentLanguageIndex];
				FractionateEverything.LogInfo($"Modify translations finish, currentStrings.len={Localization.currentStrings.Length}");
			}
			catch (Exception ex)
			{
				FractionateEverything.LogError("LoadLanguagePostfixAfterCommonApi Error: " + ex);
			}
		}
	}
}
namespace FractionateEverything.Main
{
	public static class FractionateRecipes
	{
		private static readonly Dictionary<int, float> defaultNumRatioCommonVein = new Dictionary<int, float> { { 2, 0.05f } };

		private static readonly Dictionary<int, float> defaultNumRatioRealVein = new Dictionary<int, float> { { 2, 0.025f } };

		private static readonly Dictionary<int, float> defaultNumRatioUpgrade = new Dictionary<int, float>
		{
			{ 1, 0.04f },
			{ -1, 0.01f }
		};

		private static readonly Dictionary<int, float> defaultNumRatioDowngrade = new Dictionary<int, float> { { 2, 0.02f } };

		private static readonly Dictionary<int, float> noResultDic = new Dictionary<int, float> { { 1, 0f } };

		private static readonly List<int> itemNaturalResourceList = new List<int>();

		private static readonly Dictionary<int, Dictionary<int, float>> numRatioNaturalResourceDic = new Dictionary<int, Dictionary<int, float>>();

		private static readonly Dictionary<int, int> itemUpgradeDic = new Dictionary<int, int>();

		private static readonly Dictionary<int, Dictionary<int, float>> numRatioUpgradeDic = new Dictionary<int, Dictionary<int, float>>();

		private static readonly Dictionary<int, int> itemDowngradeDic = new Dictionary<int, int>();

		private static readonly Dictionary<int, Dictionary<int, float>> numRatioDowngradeDic = new Dictionary<int, Dictionary<int, float>>();

		private static RecipeHelper helper;

		private static readonly List<RecipeProto> recipeList = new List<RecipeProto>();

		private static List<RecipeProto> fuelRodRecipeList = new List<RecipeProto>();

		private static List<RecipeProto> matrixRecipeList = new List<RecipeProto>();

		private static List<int> fuelRodGridIndexList = new List<int>();

		private static List<int> matrixGridIndexList = new List<int>();

		public static int GetItemNaturalResource(int itemID)
		{
			if (!itemNaturalResourceList.Contains(itemID))
			{
				return 0;
			}
			return itemID;
		}

		public static Dictionary<int, float> GetNumRatioNaturalResource(int itemID)
		{
			if (!numRatioNaturalResourceDic.TryGetValue(itemID, out var value))
			{
				return noResultDic;
			}
			return value;
		}

		public static int GetItemUpgrade(int itemID)
		{
			if (!itemUpgradeDic.TryGetValue(itemID, out var value))
			{
				return 0;
			}
			return value;
		}

		public static Dictionary<int, float> GetNumRatioUpgrade(int itemID)
		{
			if (!numRatioUpgradeDic.TryGetValue(itemID, out var value))
			{
				return noResultDic;
			}
			return value;
		}

		public static int GetItemDowngrade(int itemID)
		{
			if (!itemDowngradeDic.TryGetValue(itemID, out var value))
			{
				return 0;
			}
			return value;
		}

		public static Dictionary<int, float> GetNumRatioDowngrade(int itemID)
		{
			if (!numRatioDowngradeDic.TryGetValue(itemID, out var value))
			{
				return noResultDic;
			}
			return value;
		}

		public static void AddFracRecipes()
		{
			//IL_1272: Unknown result type (might be due to invalid IL or missing references)
			//IL_1278: Invalid comparison between Unknown and I4
			FractionateEverything.LogInfo("Begin to add fractionate recipes...");
			helper = new RecipeHelper(FractionateEverything.tab分馏1);
			if (!GenesisBook.Enable)
			{
				AddFracRecipe(1001, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 101);
				AddFracRecipe(1002, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 102);
				AddFracRecipe(1003, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 103, 1402);
				AddFracRecipe(1004, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 104, 1413);
				AddFracRecipe(1005, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 105);
				AddFracRecipe(1006, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 106);
				AddFracRecipe(1000, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 201, 1120);
				AddFracRecipe(1007, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 202, 1102);
				AddFracRecipe(1116, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 203);
				AddFracRecipe(1120, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 204);
				AddFracRecipe(1121, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 205);
				AddFracRecipe(1011, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 208, 1131);
				AddFracRecipe(1012, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 306, 1403);
				AddFracRecipe(1013, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 303, 1133);
				AddFracRecipe(1014, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 605, 1125);
				AddFracRecipe(1015, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 508, 1132);
				AddFracRecipe(1016, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 606, 1703);
				AddFracRecipe(1117, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 309, 1122);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5101, 5102, 5103 }));
				if (!TheyComeFromVoid.Enable)
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 5111, 5112 }));
				}
				else
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5111, 5112, 9511 }))[1].Modify(MoreMegaStructure.tab巨构, 112);
				}
				List<RecipeProto> list = AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 5206, 5201, 5203, 5202, 5204, 5205 }));
				list[0].Modify(FractionateEverything.tab分馏1, 807);
				list[1].Modify(FractionateEverything.tab分馏1, 808);
				list[2].Modify(FractionateEverything.tab分馏1, 809);
				list[3].Modify(FractionateEverything.tab分馏1, 810);
				list[4].Modify(FractionateEverything.tab分馏1, 811);
				matrixRecipeList = AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 6001, 6002, 6003, 6004, 6005 }));
				matrixGridIndexList = matrixRecipeList.Select((RecipeProto r) => r.GridIndex).ToList();
				foreach (RecipeProto matrixRecipe in matrixRecipeList)
				{
					matrixRecipe.ModifyIconAndDesc();
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 1141, 1142, 1143 }));
				if (!MoreMegaStructure.Enable)
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2107, 2103, 2104, 2105 }));
				}
				else
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 2107, 2103, 2104, 9512, 2105 }))[2].Modify(MoreMegaStructure.tab巨构, 410);
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5003, 5001, 5002 }));
				fuelRodRecipeList = AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 1801, 1802, 1803, 1804 }));
				fuelRodGridIndexList = fuelRodRecipeList.Select((RecipeProto r) => r.GridIndex).ToList();
				foreach (RecipeProto fuelRodRecipe in fuelRodRecipeList)
				{
					fuelRodRecipe.ModifyIconAndDesc();
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 1601, 1602, 1603 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 1604, 1605, 1606 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 1609, 1610, 1611 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 1607, 1608 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 1612, 1613 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2201, 2202, 2212 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 2203, 2205, 2206, 2207, 2209 }))[2].Modify(FractionateEverything.tab分馏2, 113);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2204, 2213, 2211, 2210 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2001, 2002, 2003 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2030, 2020, 2313, 2040 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2101, 2106, 2102 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2011, 2012, 2013, 2014 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2301, 2316 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2306, 2307, 2308 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2309, 2317 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2314, 2310 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2302, 2315, 2319 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2303, 2304, 2305, 2318 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2901, 2902 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2311, 2208, 2312 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 3001, 3005, 3003 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 3002, 3004, 3010 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 3009, 3007, 3006, 3008 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 2321, 2322, 2323, 2324, 2325, 2326 }));
			}
			else
			{
				TranslationUtils.RegisterOrEditAsync("左键点击:更换生产设备", "Left click: Change machine\nRight click: Assembler or Fractionator", "左键点击:更换生产设备\n右键点击:常规设备或分馏塔");
				AddFracRecipe(1001, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 101);
				AddFracRecipe(1002, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 102);
				AddFracRecipe(6202, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 103);
				AddFracRecipe(1003, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 104, 1402);
				AddFracRecipe(1004, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 105, 1413);
				AddFracRecipe(6201, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 106, 1413);
				AddFracRecipe(1006, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 107, 1402);
				AddFracRecipe(1005, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 108);
				AddFracRecipe(6207, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 109, 1929);
				AddFracRecipe(1000, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 201);
				AddFracRecipe(1007, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 202, 1915);
				AddFracRecipe(1116, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 203);
				AddFracRecipe(7002, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 204);
				AddFracRecipe(1120, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 205);
				AddFracRecipe(1121, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 206, 1142);
				AddFracRecipe(6234, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 207);
				AddFracRecipe(6220, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 208, 1112);
				AddFracRecipe(7019, defaultNumRatioCommonVein).Modify(FractionateEverything.tab分馏1, 209);
				AddFracRecipe(6222, defaultNumRatioCommonVein).Modify(GenesisBook.tab精炼, 302, 1916);
				AddFracRecipe(6225, defaultNumRatioCommonVein).Modify(GenesisBook.tab精炼, 305, 1916);
				AddFracRecipe(6226, defaultNumRatioCommonVein).Modify(GenesisBook.tab精炼, 306, 1916);
				AddFracRecipe(1012, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 504, 1403);
				AddFracRecipe(1013, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 505, 1133);
				AddFracRecipe(1011, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 506, 1131);
				AddFracRecipe(1015, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 507, 1132);
				AddFracRecipe(1117, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 508, 1122);
				AddFracRecipe(1014, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 510, 1125);
				AddFracRecipe(1016, defaultNumRatioRealVein).Modify(FractionateEverything.tab分馏1, 511, 1703);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5003, 5001, 5002 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 5206, 5201, 5203, 5202, 5204, 5205 })).Modify(GenesisBook.tab防御, 317, addColumn: false);
				matrixRecipeList = AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 6001, 6002, 6003, 6004, 6005 }));
				matrixGridIndexList = matrixRecipeList.Select((RecipeProto r) => r.GridIndex).ToList();
				foreach (RecipeProto matrixRecipe2 in matrixRecipeList)
				{
					matrixRecipe2.ModifyIconAndDesc();
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2201, 2202, 2212 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 2203, 2205, 6221, 2206, 2207, 2209 }))[3].Modify(FractionateEverything.tab分馏2, 114);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 2204, 2213, 2211, 2210, 6261 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2001, 2002, 2003 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 2020, 2030, 6267, 2313, 2040 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2101, 2102, 6231 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2106, 6229 }));
				if (!MoreMegaStructure.Enable)
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2107, 2103, 2104, 2105 }));
				}
				else
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[5] { 2107, 2103, 2104, 9512, 2105 }))[2].Modify(MoreMegaStructure.tab巨构, 410);
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2011, 2012, 2013, 2014 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2301, 2316 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2306, 6266 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2307, 2308 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2309, 2317 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2302, 6230, 2315, 2319 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 2303, 2304, 2305, 2318 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 2901, 2902 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 2311, 2208, 2312 }));
				AddFracChain(new <>z__ReadOnlySingleElementList<int>(2310));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 6258, 6257, 6259, 6264, 6260, 6265 }));
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 2321, 2322, 2323, 2324, 2325, 2326 }));
				fuelRodRecipeList = AddFracChain(new <>z__ReadOnlyArray<int>(new int[12]
				{
					6509, 1801, 6217, 6216, 6242, 6241, 6243, 1802, 6244, 6245,
					1803, 1804
				})).Modify(GenesisBook.tab精炼, 601);
				fuelRodGridIndexList = fuelRodRecipeList.Select((RecipeProto r) => r.GridIndex).ToList();
				foreach (RecipeProto fuelRodRecipe2 in fuelRodRecipeList)
				{
					fuelRodRecipe2.ModifyIconAndDesc();
				}
				AddFracChain(new <>z__ReadOnlySingleElementList<int>(1143)).Modify(GenesisBook.tab化工, 506);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5101, 5102, 5103 })).Modify(GenesisBook.tab防御, 202);
				if (!TheyComeFromVoid.Enable)
				{
					AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 5111, 5112 })).Modify(GenesisBook.tab防御, 205);
				}
				else
				{
					List<RecipeProto> list2 = AddFracChain(new <>z__ReadOnlyArray<int>(new int[3] { 5111, 5112, 9511 }));
					list2[0].Modify(GenesisBook.tab防御, 205);
					list2[1].Modify(MoreMegaStructure.tab巨构, 112);
				}
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 3002, 7618, 3010, 3004 })).Modify(GenesisBook.tab防御, 207);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 3009, 3007, 3006, 3008 })).Modify(GenesisBook.tab防御, 211);
				AddFracChain(new <>z__ReadOnlySingleElementList<int>(3001)).Modify(GenesisBook.tab防御, 302);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[6] { 1601, 7607, 1603, 7608, 7609, 7616 })).Modify(GenesisBook.tab防御, 309);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 1128, 1129, 7610, 7611 })).Modify(GenesisBook.tab防御, 409);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 3003, 7617 })).Modify(GenesisBook.tab防御, 502, addColumn: false);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 1604, 1605, 7612, 7613 })).Modify(GenesisBook.tab防御, 509);
				AddFracChain(new <>z__ReadOnlySingleElementList<int>(3005)).Modify(GenesisBook.tab防御, 602);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[4] { 1609, 1610, 1611, 7615 })).Modify(GenesisBook.tab防御, 609);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 1612, 1613 })).Modify(GenesisBook.tab防御, 709);
				AddFracChain(new <>z__ReadOnlyArray<int>(new int[2] { 1607, 1608 })).Modify(GenesisBook.tab防御, 711);
			}
			TranslationUtils.LoadLanguagePostfixAfterCommonApi();
			AddProtoUtils.AddRecipe(recipeList);
			for (int i = 0; i < ((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray.Length; i++)
			{
				if ((int)((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray[i].Type == 8)
				{
					((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray[i].Preload(i);
				}
			}
			FractionateEverything.LogInfo("Finish to add fractionate recipes.");
		}

		private static RecipeProto AddFracRecipe(int itemID, Dictionary<int, float> fracNumRatioDic)
		{
			return AddFracRecipe(itemID, itemID, fracNumRatioDic, null);
		}

		private static List<RecipeProto> AddFracChain(IReadOnlyList<int> itemChain)
		{
			if (itemChain.Count == 1)
			{
				int stackSize = ((ProtoSet<ItemProto>)(object)LDB.items).Select(itemChain[0]).StackSize;
				Dictionary<int, float> dictionary = new Dictionary<int, float>(defaultNumRatioDowngrade);
				dictionary[2] *= 1f / 160f * (float)stackSize;
				Dictionary<int, float> dictionary2 = new Dictionary<int, float>(defaultNumRatioDowngrade);
				dictionary2[2] *= 1f / 160f * (float)stackSize;
				return new List<RecipeProto>(1) { AddFracRecipe(itemChain[0], itemChain[0], dictionary, dictionary2) };
			}
			List<RecipeProto> list = new List<RecipeProto>();
			for (int i = 0; i < itemChain.Count - 1; i++)
			{
				int stackSize2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(itemChain[i + 1]).StackSize;
				Dictionary<int, float> dictionary3 = new Dictionary<int, float>(defaultNumRatioUpgrade);
				dictionary3[1] *= 0.0125f * (float)stackSize2;
				int stackSize3 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(itemChain[i]).StackSize;
				Dictionary<int, float> dictionary4 = new Dictionary<int, float>(defaultNumRatioDowngrade);
				dictionary4[2] *= 0.0125f * (float)stackSize3;
				list.Add(AddFracRecipe(itemChain[i], itemChain[i + 1], dictionary3, dictionary4));
			}
			return list;
		}

		private static RecipeProto AddFracRecipe(int inputItemID, int outputItemID, Dictionary<int, float> ratioUpgrade, Dictionary<int, float> ratioDowngrade)
		{
			//IL_07ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d5: Expected O, but got Unknown
			//IL_07d8: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				int unusedRecipeID = helper.GetUnusedRecipeID();
				ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).Select(inputItemID);
				ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(outputItemID);
				string text = ((Proto)val).Name + "-" + ((Proto)val2).Name + "分馏";
				string key = "R" + ((Proto)val).Name + "-" + ((Proto)val2).Name + "分馏";
				string key2 = "R" + ((Proto)val).Name + "-" + ((Proto)val2).Name + "损毁分馏";
				if (ratioDowngrade == null)
				{
					TranslationUtils.RegisterOrEditAsync(text, ((Proto)val2).name + " Fractionation", ((Proto)val2).name + "分馏");
					string text2 = "Fractionate " + ((Proto)val).name + " into multiple.";
					string text3 = "将" + ((Proto)val).name + "分馏为多个。";
					foreach (KeyValuePair<int, float> item in ratioUpgrade.Where((KeyValuePair<int, float> p) => p.Key > 0))
					{
						text2 = text2 + "\n" + item.Value.FormatP().AddOrangeLabel() + " fractionate " + item.Key.ToString().AddOrangeLabel() + " product" + ((item.Key > 1) ? "s" : "");
						text3 = text3 + "\n" + item.Value.FormatP().AddOrangeLabel() + "分馏出" + item.Key.ToString().AddOrangeLabel() + "个产物";
					}
					TranslationUtils.RegisterOrEditAsync(key, text2, text3);
					TranslationUtils.RegisterOrEditAsync(key2, text2, text3);
				}
				else
				{
					TranslationUtils.RegisterOrEditAsync(text, ((Proto)val).name + "-" + ((Proto)val2).name + " Fractionation", ((Proto)val).name + "-" + ((Proto)val2).name + "分馏");
					string text4 = "Fractionate " + ((Proto)val).name + " upgrade to " + ((Proto)val2).name + ".";
					string text5 = "将" + ((Proto)val).name + "升级分馏为" + ((Proto)val2).name + "。";
					foreach (KeyValuePair<int, float> item2 in ratioUpgrade.Where((KeyValuePair<int, float> p) => p.Key > 0))
					{
						text4 = text4 + "\n" + item2.Value.FormatP().AddOrangeLabel() + " fractionate " + item2.Key.ToString().AddOrangeLabel() + " product" + ((item2.Key > 1) ? "s" : "");
						text5 = text5 + "\n" + item2.Value.FormatP().AddOrangeLabel() + "分馏出" + item2.Key.ToString().AddOrangeLabel() + "个产物";
					}
					string text6 = text4;
					string text7 = text5;
					if (ratioUpgrade.TryGetValue(-1, out var value))
					{
						text6 = text6 + "\n" + "WARNING:".AddRedLabel() + " There is a probability of " + value.FormatP().AddRedLabel() + " that an input item will be destroyed at each fractionation!";
						text7 = text7 + "\n" + "警告:".AddOrangeLabel() + "每次分馏时,有" + value.FormatP().AddRedLabel() + "概率导致原料损毁!";
					}
					text4 = text4 + "\n————————————————\nFractionate " + ((Proto)val2).name + " downgrade to " + ((Proto)val).name + ".";
					text5 = text5 + "\n————————————————\n将" + ((Proto)val2).name + "降级分馏为" + ((Proto)val).name + "。";
					text6 = text6 + "\n————————————————\nFractionate " + ((Proto)val2).name + " downgrade to " + ((Proto)val).name + ".";
					text7 = text7 + "\n————————————————\n将" + ((Proto)val2).name + "降级分馏为" + ((Proto)val).name + "。";
					foreach (KeyValuePair<int, float> item3 in ratioDowngrade.Where((KeyValuePair<int, float> p) => p.Key > 0))
					{
						text4 = text4 + "\n" + item3.Value.FormatP().AddOrangeLabel() + " fractionate " + item3.Key.ToString().AddOrangeLabel() + " product" + ((item3.Key > 1) ? "s" : "");
						text5 = text5 + "\n" + item3.Value.FormatP().AddOrangeLabel() + "分馏出" + item3.Key.ToString().AddOrangeLabel() + "个产物";
						text6 = text6 + "\n" + item3.Value.FormatP().AddOrangeLabel() + " fractionate " + item3.Key.ToString().AddOrangeLabel() + " product" + ((item3.Key > 1) ? "s" : "");
						text7 = text7 + "\n" + item3.Value.FormatP().AddOrangeLabel() + "分馏出" + item3.Key.ToString().AddOrangeLabel() + "个产物";
					}
					TranslationUtils.RegisterOrEditAsync(key, text4, text5);
					TranslationUtils.RegisterOrEditAsync(key2, text6, text7);
				}
				int gridIndex = ((val2.recipes.Count != 0) ? (val2.recipes[0].GridIndex + (FractionateEverything.tab分馏1 - 1) * 1000) : 0);
				TechProto val3 = val2.preTech;
				if (val3 == null)
				{
					val3 = ((ProtoSet<TechProto>)(object)LDB.techs).Select(1);
				}
				RecipeProto val4 = new RecipeProto();
				val4.Type = (ERecipeType)8;
				((Proto)val4).ID = unusedRecipeID;
				((Proto)val4).SID = "";
				val4.Handcraft = false;
				val4.Explicit = true;
				val4.TimeSpend = 60;
				val4.Items = new int[1] { inputItemID };
				val4.ItemCounts = new int[1] { 100 };
				val4.Results = new int[1] { outputItemID };
				val4.ResultCounts = new int[1] { 1 };
				((Proto)val4).Name = text;
				val4.GridIndex = gridIndex;
				val4.preTech = val3;
				RecipeProto val5 = val4;
				val5.ModifyIconAndDesc();
				helper.ModifyGridIndex(val5, gridIndex);
				recipeList.Add(val5);
				val2.recipes.Add(val5);
				if (ratioDowngrade == null)
				{
					itemNaturalResourceList.Add(inputItemID);
					numRatioNaturalResourceDic.Add(inputItemID, ratioUpgrade);
				}
				else
				{
					itemUpgradeDic.Add(inputItemID, outputItemID);
					numRatioUpgradeDic.Add(inputItemID, ratioUpgrade);
					itemDowngradeDic.Add(outputItemID, inputItemID);
					numRatioDowngradeDic.Add(outputItemID, ratioDowngrade);
				}
				return val5;
			}
			catch (Exception ex)
			{
				FractionateEverything.LogError(ex.ToString());
				return null;
			}
		}

		private static List<RecipeProto> Modify(this List<RecipeProto> recipes, int tab, int rowColumn, bool addColumn = true)
		{
			List<ItemProto> list = recipes.Select((RecipeProto r) => ((ProtoSet<ItemProto>)(object)LDB.items).Select(r.Results[0])).ToList();
			list.Sort((ItemProto i1, ItemProto i2) => i1.GridIndex.CompareTo(i2.GridIndex));
			foreach (RecipeProto recipe in recipes)
			{
				int num = list.IndexOf(((ProtoSet<ItemProto>)(object)LDB.items).Select(recipe.Results[0]));
				helper.ModifyGridIndex(recipe, tab, rowColumn + (addColumn ? num : (num * 100)));
			}
			return recipes;
		}

		private static RecipeProto Modify(this RecipeProto r, int tab, int rowColumn, int techID = 0)
		{
			helper.ModifyGridIndex(r, tab, rowColumn);
			TechProto preTech;
			if ((preTech = ((ProtoSet<TechProto>)(object)LDB.techs).Select(techID)) != null)
			{
				r.preTech = preTech;
			}
			return r;
		}

		public static RecipeProto ModifyIconAndDesc(this RecipeProto r)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			try
			{
				if ((int)r.Type != 8)
				{
					return r;
				}
				ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).Select(r.Items[0]);
				string text = null;
				if ((Object)(object)val.iconSprite != (Object)null)
				{
					text = ((Object)val.iconSprite).name;
				}
				else if (val.IconPath != null && val.IconPath.Contains("/"))
				{
					text = val.IconPath.Substring(val.IconPath.LastIndexOf("/") + 1);
				}
				ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(r.Results[0]);
				string text2 = null;
				if ((Object)(object)val2.iconSprite != (Object)null)
				{
					text2 = ((Object)val2.iconSprite).name;
				}
				else if (val2.IconPath != null && val2.IconPath.Contains("/"))
				{
					text2 = val2.IconPath.Substring(val2.IconPath.LastIndexOf("/") + 1);
				}
				r.Description = "R" + ((Proto)val).Name + "-" + ((Proto)val2).Name + (FractionateEverything.enableDestroy ? "损毁分馏" : "分馏");
				if (text != null && text2 != null)
				{
					string text3 = $"Assets/fracicons/{text}-{text2}-formula-v{FractionateEverything.iconVersion}";
					r.IconPath = (((Object)(object)Resources.Load<Sprite>(text3) != (Object)null) ? text3 : val2.IconPath);
				}
				else
				{
					r.IconPath = "";
				}
				if (fuelRodRecipeList.Contains(r))
				{
					if (FractionateEverything.enableFuelRodFrac)
					{
						r.GridIndex = fuelRodGridIndexList[fuelRodRecipeList.IndexOf(r)];
						if (!itemUpgradeDic.ContainsKey(r.Items[0]))
						{
							itemUpgradeDic.Add(r.Items[0], r.Results[0]);
						}
						if (!numRatioUpgradeDic.ContainsKey(r.Items[0]))
						{
							numRatioUpgradeDic.Add(r.Items[0], defaultNumRatioUpgrade);
						}
						if (!itemDowngradeDic.ContainsKey(r.Results[0]))
						{
							itemDowngradeDic.Add(r.Results[0], r.Items[0]);
						}
						if (!numRatioDowngradeDic.ContainsKey(r.Results[0]))
						{
							numRatioDowngradeDic.Add(r.Results[0], defaultNumRatioDowngrade);
						}
					}
					else
					{
						r.GridIndex = 0;
						if (itemUpgradeDic.ContainsKey(r.Items[0]))
						{
							itemUpgradeDic.Remove(r.Items[0]);
						}
						if (numRatioUpgradeDic.ContainsKey(r.Items[0]))
						{
							numRatioUpgradeDic.Remove(r.Items[0]);
						}
						if (itemDowngradeDic.ContainsKey(r.Results[0]))
						{
							itemDowngradeDic.Remove(r.Results[0]);
						}
						if (numRatioDowngradeDic.ContainsKey(r.Results[0]))
						{
							numRatioDowngradeDic.Remove(r.Results[0]);
						}
					}
				}
				if (matrixRecipeList.Contains(r))
				{
					if (FractionateEverything.enableMatrixFrac)
					{
						r.GridIndex = matrixGridIndexList[matrixRecipeList.IndexOf(r)];
						if (!itemUpgradeDic.ContainsKey(r.Items[0]))
						{
							itemUpgradeDic.Add(r.Items[0], r.Results[0]);
						}
						if (!numRatioUpgradeDic.ContainsKey(r.Items[0]))
						{
							numRatioUpgradeDic.Add(r.Items[0], defaultNumRatioUpgrade);
						}
						if (!itemDowngradeDic.ContainsKey(r.Results[0]))
						{
							itemDowngradeDic.Add(r.Results[0], r.Items[0]);
						}
						if (!numRatioDowngradeDic.ContainsKey(r.Results[0]))
						{
							numRatioDowngradeDic.Add(r.Results[0], defaultNumRatioDowngrade);
						}
					}
					else
					{
						r.GridIndex = 0;
						if (itemUpgradeDic.ContainsKey(r.Items[0]))
						{
							itemUpgradeDic.Remove(r.Items[0]);
						}
						if (numRatioUpgradeDic.ContainsKey(r.Items[0]))
						{
							numRatioUpgradeDic.Remove(r.Items[0]);
						}
						if (itemDowngradeDic.ContainsKey(r.Results[0]))
						{
							itemDowngradeDic.Remove(r.Results[0]);
						}
						if (numRatioDowngradeDic.ContainsKey(r.Results[0]))
						{
							numRatioDowngradeDic.Remove(r.Results[0]);
						}
					}
				}
				return r;
			}
			catch (Exception ex)
			{
				FractionateEverything.LogError("ModifyIconAndDesc " + ((Proto)r).Name + " error: " + ex);
				return r;
			}
		}
	}
	internal struct BuildingInfo
	{
		public int recipeID;

		public int itemID;
	}
	public static class FractionatorBuildings
	{
		private static readonly ModelProto FractionatorModel = ((ProtoSet<ModelProto>)(object)LDB.models).Select(119);

		public static readonly PrefabDesc FractionatorPrefabDesc = FractionatorModel.prefabDesc;

		private static readonly List<BuildingInfo> buildingInfoList = new List<BuildingInfo>();

		public static void CreateAndPreAddNewFractionators()
		{
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_039a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or miss