Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of More Ore Deposits v1.3.5
More Ore Deposits.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using Configuration; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("More Ore Deposits")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("More Ore Deposits")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace MoreOreDeposits { public class OreDropConfig { private Action<object, EventArgs> _action; public string OreName { get; set; } public ConfigEntry<int> DropMin { get; set; } public ConfigEntry<int> DropMax { get; set; } private static bool ValidateConfigEntry<T>(ConfigEntry<T> entry) { try { T value = (T)Convert.ChangeType(((ConfigEntryBase)entry).BoxedValue, typeof(T)); entry.Value = value; return true; } catch { entry.Value = default(T); return false; } } public static OreDropConfig GetFromProps(BaseUnityPlugin instance, string oreName, int defaultMin, int defaultMax) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown OreDropConfig config = new OreDropConfig(); config.OreName = oreName; config.DropMin = instance.Config.Bind<int>("Server config", oreName + " Drop Min", defaultMin, new ConfigDescription("Minimum amount of " + oreName + " dropped from " + oreName + " deposits", (AcceptableValueBase)null, Array.Empty<object>())); config.DropMax = instance.Config.Bind<int>("Server config", oreName + " Drop Max", defaultMax, new ConfigDescription("Maximum amount of " + oreName + " dropped from " + oreName + " deposits", (AcceptableValueBase)null, Array.Empty<object>())); config.DropMin.SettingChanged += delegate { ValidateConfigEntry<int>(config.DropMin); }; config.DropMax.SettingChanged += delegate { ValidateConfigEntry<int>(config.DropMax); }; return config; } private void OnSettingChanged(object sender, EventArgs e) { if (_action != null) { _action(sender, e); } } public void AddSettingsChangedHandler(Action<object, EventArgs> action) { _action = action; DropMin.SettingChanged += OnSettingChanged; DropMax.SettingChanged += OnSettingChanged; } public void RemoveSettingsChangedHandler() { DropMin.SettingChanged -= OnSettingChanged; DropMax.SettingChanged -= OnSettingChanged; _action = null; } } [BepInPlugin("com.bepinex.MoreOreDeposits", "More Ore Deposits", "1.3.5")] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class MoreOreDeposits : BaseUnityPlugin, IPlugin { public const string PluginGUID = "com.bepinex.MoreOreDeposits"; public const string PluginName = "More Ore Deposits"; public const string PluginVersion = "1.3.5"; public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); private bool settingsUpdated; private OreDropConfig goldOreConfig; private OreDropConfig ironOreConfig; private OreDropConfig silverOreConfig; private OreDropConfig blackmetalOreConfig; private OreDropConfig coalOreConfig; private AssetBundle goldAssetBundle; private GameObject goldDepositPrefab; private GameObject goldOrePrefab; private AssetBundle ironAssetBundle; private GameObject ironDepositPrefab; private AssetBundle silverAssetBundle; private GameObject silverDepositPrefab; private AssetBundle blackmetalAssetBundle; private GameObject blackmetalDepositPrefab; private AssetBundle coalAssetBundle; private GameObject coalDepositPrefab; private AssetBundle translationBundle; private VegetationConfig goldDepositConfig = new VegetationConfig { Biome = (Biome)8, BlockCheck = true, Min = 0f, Max = 2f, GroundOffset = -0.3f, ScaleMin = 295f, ScaleMax = 296f, MinAltitude = 0f }; private VegetationConfig ironDepositConfig = new VegetationConfig { Biome = (Biome)2, BlockCheck = true, Min = 0f, Max = 2f, GroundOffset = -0.3f, ScaleMin = 295f, ScaleMax = 296f, MinAltitude = 0f }; private VegetationConfig silverDepositConfig = new VegetationConfig { Biome = (Biome)4, BlockCheck = true, Min = 0f, Max = 1f, GroundOffset = -1.3f, ScaleMin = 295f, ScaleMax = 296f, MaxAltitude = 100f }; private VegetationConfig blackmetalDepositConfig = new VegetationConfig { Biome = (Biome)16, BlockCheck = true, Min = 0f, Max = 2f, GroundOffset = -0.3f, ScaleMin = 295f, ScaleMax = 296f, MinAltitude = 0f }; private VegetationConfig coalDepositConfig = new VegetationConfig { Biome = (Biome)2, BlockCheck = true, Min = 0f, Max = 2f, GroundOffset = -0.3f, ScaleMin = 300f, ScaleMax = 300f, MinAltitude = 0f }; ConfigFile IPlugin.Config => ((BaseUnityPlugin)this).Config; private void Awake() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) Logger.LogInfo((object)"More Ore Deposits has Loaded"); PrefabManager.OnVanillaPrefabsAvailable += OnPrefabsAvailable; new Harmony("com.bepinex.MoreOreDeposits").PatchAll(); SynchronizationManager.OnConfigurationSynchronized += OnConfigurationSynchronized; ((BaseUnityPlugin)this).Config.ConfigReloaded += OnConfigReloaded; new ConfigWatcher(this); InitializeOreConfigs(); } private void OnPrefabsAvailable() { LoadAssets(); CreateGoldOre(); AddVegetation(); AddlocalizationsEnglish(); JSONS(); PrefabManager.OnVanillaPrefabsAvailable -= OnPrefabsAvailable; } private void AddlocalizationsEnglish() { Localization = LocalizationManager.Instance.GetLocalization(); CustomLocalization localization = Localization; string text = "English"; localization.AddTranslation(ref text, new Dictionary<string, string> { { "GoldOre_warp", "Gold ore" }, { "GoldOre_desc_warp", "Unrefined gold. Use a smelter to refine into gold coins." }, { "GoldDeposit_warp", "Gold" }, { "IronDeposit_warp", "Iron" }, { "SilverDepositSmall_warp", "Silver" }, { "BlackmetalDeposit_warp", "Blackmetal" }, { "CoalDeposit_warp", "Coal rock" } }); } private void JSONS() { if (!((Object)(object)translationBundle == (Object)null)) { TextAsset[] array = translationBundle.LoadAllAssets<TextAsset>(); foreach (TextAsset val in array) { string text = ((Object)val).name.Replace("_MoreOreDeposits", ""); Localization.AddJsonFile(text, val.text); } } } private void InitializeOreConfigs() { goldOreConfig = OreDropConfig.GetFromProps((BaseUnityPlugin)(object)this, "GoldOre", 1, 2); ironOreConfig = OreDropConfig.GetFromProps((BaseUnityPlugin)(object)this, "IronScrap", 2, 3); silverOreConfig = OreDropConfig.GetFromProps((BaseUnityPlugin)(object)this, "SilverOre", 1, 2); blackmetalOreConfig = OreDropConfig.GetFromProps((BaseUnityPlugin)(object)this, "BlackMetalScrap", 2, 3); coalOreConfig = OreDropConfig.GetFromProps((BaseUnityPlugin)(object)this, "Coal", 2, 3); goldOreConfig.AddSettingsChangedHandler(OnSettingsChanged); ironOreConfig.AddSettingsChangedHandler(OnSettingsChanged); silverOreConfig.AddSettingsChangedHandler(OnSettingsChanged); blackmetalOreConfig.AddSettingsChangedHandler(OnSettingsChanged); coalOreConfig.AddSettingsChangedHandler(OnSettingsChanged); } private void UpdateFeatures() { settingsUpdated = false; ConfigureDropOnDestroyed(goldDepositPrefab, goldOreConfig); ConfigureDropOnDestroyed(ironDepositPrefab, ironOreConfig); ConfigureDropOnDestroyed(silverDepositPrefab, silverOreConfig); ConfigureDropOnDestroyed(blackmetalDepositPrefab, blackmetalOreConfig); ConfigureDropOnDestroyed(coalDepositPrefab, coalOreConfig); } private void OnSettingsChanged(object sender, EventArgs e) { settingsUpdated = true; } private void OnConfigReloaded(object sender, EventArgs e) { if (settingsUpdated) { UpdateFeatures(); } } private void OnConfigurationSynchronized(object sender, ConfigurationSynchronizationEventArgs e) { UpdateFeatures(); } private DropData getDropDataFromEntry(OreDropConfig entry) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) DropData result = default(DropData); result.m_item = PrefabManager.Instance.GetPrefab(entry.OreName); result.m_stackMin = entry.DropMin.Value; result.m_stackMax = entry.DropMax.Value; result.m_weight = 1f; return result; } private void LoadAssets() { goldAssetBundle = AssetUtils.LoadAssetBundleFromResources("gold_bundle"); AssetBundle obj = goldAssetBundle; goldDepositPrefab = ((obj != null) ? obj.LoadAsset<GameObject>("MineRock_gold") : null); AssetBundle obj2 = goldAssetBundle; goldOrePrefab = ((obj2 != null) ? obj2.LoadAsset<GameObject>("GoldOre") : null); ironAssetBundle = AssetUtils.LoadAssetBundleFromResources("iron_bundle"); AssetBundle obj3 = ironAssetBundle; ironDepositPrefab = ((obj3 != null) ? obj3.LoadAsset<GameObject>("MineRock_iron") : null); silverAssetBundle = AssetUtils.LoadAssetBundleFromResources("silver_bundle"); AssetBundle obj4 = silverAssetBundle; silverDepositPrefab = ((obj4 != null) ? obj4.LoadAsset<GameObject>("MineRock_silver_small") : null); blackmetalAssetBundle = AssetUtils.LoadAssetBundleFromResources("blackmetal_bundle"); AssetBundle obj5 = blackmetalAssetBundle; blackmetalDepositPrefab = ((obj5 != null) ? obj5.LoadAsset<GameObject>("MineRock_blackmetal") : null); coalAssetBundle = AssetUtils.LoadAssetBundleFromResources("coal_bundle"); AssetBundle obj6 = coalAssetBundle; coalDepositPrefab = ((obj6 != null) ? obj6.LoadAsset<GameObject>("MineRock_coal") : null); translationBundle = AssetUtils.LoadAssetBundleFromResources("translations_bundle"); LogResourceNamesAndCheckErrors(); } private void LogResourceNamesAndCheckErrors() { string[] manifestResourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); Logger.LogInfo((object)("Embedded resources: " + string.Join(", ", manifestResourceNames))); CheckAssetBundle(goldAssetBundle, "gold"); CheckAssetBundle(ironAssetBundle, "iron"); CheckAssetBundle(silverAssetBundle, "silver"); CheckAssetBundle(blackmetalAssetBundle, "blackmetal"); CheckAssetBundle(coalAssetBundle, "coal"); } private void CheckAssetBundle(AssetBundle bundle, string bundleName) { if ((Object)(object)bundle == (Object)null) { Logger.LogError((object)("Failed to load the " + bundleName + " asset bundle.")); } } private void CreateGoldOre() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown CustomItem val = new CustomItem(goldOrePrefab, false); ItemManager.Instance.AddItem(val); SmelterConversionConfig val2 = new SmelterConversionConfig(); ((ConversionConfig)val2).FromItem = "GoldOre"; ((ConversionConfig)val2).ToItem = "Coins"; ((ConversionConfig)val2).Station = Smelters.Smelter; ItemManager.Instance.AddItemConversion(new CustomItemConversion((ConversionConfig)(object)val2)); ConfigureGoldOreAutoPickup("GoldOre"); } private void ConfigureGoldOreAutoPickup(string itemName) { GameObject prefab = PrefabManager.Instance.GetPrefab(itemName); if ((Object)(object)prefab == (Object)null) { Debug.LogError((object)("Prefab '" + itemName + "' not found.")); return; } ItemDrop component = prefab.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { Debug.LogError((object)("ItemDrop component not found on prefab '" + itemName + "'.")); } else { component.m_autoPickup = true; } } private void AddVegetation() { //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Expected O, but got Unknown //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Expected O, but got Unknown //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Expected O, but got Unknown if ((Object)(object)goldDepositPrefab == (Object)null || (Object)(object)ironDepositPrefab == (Object)null || (Object)(object)silverDepositPrefab == (Object)null || (Object)(object)blackmetalDepositPrefab == (Object)null || (Object)(object)coalDepositPrefab == (Object)null) { Logger.LogError((object)"One or more deposit prefabs are not loaded."); return; } ConfigureDestructible(goldDepositPrefab, 0, 30f); ConfigureDestructible(ironDepositPrefab, 1, 30f); ConfigureDestructible(silverDepositPrefab, 2, 30f); ConfigureDestructible(blackmetalDepositPrefab, 2, 30f); ConfigureDestructible(coalDepositPrefab, 0, 30f); ConfigureDropOnDestroyed(goldDepositPrefab, goldOreConfig); ConfigureDropOnDestroyed(ironDepositPrefab, ironOreConfig); ConfigureDropOnDestroyed(silverDepositPrefab, silverOreConfig); ConfigureDropOnDestroyed(blackmetalDepositPrefab, blackmetalOreConfig); ConfigureDropOnDestroyed(coalDepositPrefab, coalOreConfig); ConfigureHoverText(goldDepositPrefab, "$GoldDeposit_warp"); ConfigureHoverText(ironDepositPrefab, "$IronDeposit_warp"); ConfigureHoverText(silverDepositPrefab, "$SilverDepositSmall_warp"); ConfigureHoverText(blackmetalDepositPrefab, "$BlackmetalDeposit_warp"); ConfigureHoverText(coalDepositPrefab, "$CoalDeposit_warp"); ConfigureBeacon(silverDepositPrefab); CustomVegetation val = new CustomVegetation(goldDepositPrefab, false, goldDepositConfig); CustomVegetation val2 = new CustomVegetation(ironDepositPrefab, false, ironDepositConfig); CustomVegetation val3 = new CustomVegetation(silverDepositPrefab, false, silverDepositConfig); CustomVegetation val4 = new CustomVegetation(blackmetalDepositPrefab, false, blackmetalDepositConfig); CustomVegetation val5 = new CustomVegetation(coalDepositPrefab, false, coalDepositConfig); ZoneManager.Instance.AddCustomVegetation(val); ZoneManager.Instance.AddCustomVegetation(val2); ZoneManager.Instance.AddCustomVegetation(val3); ZoneManager.Instance.AddCustomVegetation(val4); ZoneManager.Instance.AddCustomVegetation(val5); } private void ConfigureDestructible(GameObject prefab, int minToolTier, float health) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) Destructible val = prefab.GetComponent<Destructible>() ?? prefab.AddComponent<Destructible>(); val.m_minToolTier = minToolTier; val.m_health = health; GameObject prefab2 = Cache.GetPrefab<GameObject>("vfx_RockDestroyed"); GameObject prefab3 = Cache.GetPrefab<GameObject>("sfx_rock_destroyed"); GameObject prefab4 = Cache.GetPrefab<GameObject>("vfx_RockHit"); GameObject prefab5 = Cache.GetPrefab<GameObject>("sfx_rock_hit"); val.m_destroyedEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = prefab2 }, new EffectData { m_prefab = prefab3 } }; val.m_hitEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = prefab4 }, new EffectData { m_prefab = prefab5 } }; val.m_damages.m_blunt = (DamageModifier)3; val.m_damages.m_slash = (DamageModifier)3; val.m_damages.m_pierce = (DamageModifier)3; val.m_damages.m_chop = (DamageModifier)3; val.m_damages.m_pickaxe = (DamageModifier)0; val.m_damages.m_fire = (DamageModifier)3; val.m_damages.m_frost = (DamageModifier)3; val.m_damages.m_lightning = (DamageModifier)3; val.m_damages.m_poison = (DamageModifier)3; val.m_damages.m_spirit = (DamageModifier)3; } private void ConfigureDropOnDestroyed(GameObject prefab, OreDropConfig oreConfig) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) (prefab.GetComponent<DropOnDestroyed>() ?? prefab.AddComponent<DropOnDestroyed>()).m_dropWhenDestroyed.m_drops = new List<DropData> { getDropDataFromEntry(oreConfig) }; } private void ConfigureBeacon(GameObject prefab) { prefab.AddComponent<Beacon>().m_range = 30f; } private void ConfigureHoverText(GameObject prefab, string hoverText) { if ((Object)(object)prefab == (Object)null) { Logger.LogError((object)"Prefab is null. Cannot add HoverText."); return; } HoverText val = prefab.GetComponent<HoverText>(); if ((Object)(object)val == (Object)null) { val = prefab.AddComponent<HoverText>(); } val.m_text = hoverText; } } [HarmonyPatch(typeof(Smelter), "Spawn")] public static class SmelterProduceMore { public static void Prefix(Smelter __instance, string ore, ref int stack) { if (Object.op_Implicit((Object)(object)__instance) && ore == "GoldOre") { stack *= 20; } } } } namespace Configuration { public class AcceptableValueConfigNote : AcceptableValueBase { public virtual string Note { get; } public AcceptableValueConfigNote(string note) : base(typeof(string)) { if (string.IsNullOrEmpty(note)) { throw new ArgumentException("A string with atleast 1 character is needed", "Note"); } Note = note; } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return !string.IsNullOrEmpty(value as string); } public override string ToDescriptionString() { return "# Note: " + Note; } } public static class ConfigHelper { public static ConfigurationManagerAttributes GetAdminOnlyFlag() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown return new ConfigurationManagerAttributes { IsAdminOnly = true }; } public static ConfigurationManagerAttributes GetTags(Action<ConfigEntryBase> action) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown return new ConfigurationManagerAttributes { CustomDrawer = action }; } public static ConfigurationManagerAttributes GetTags() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown return new ConfigurationManagerAttributes(); } public static ConfigEntry<T> Config<T>(this IPlugin instance, string group, string name, T value, ConfigDescription description) { return instance.Config.Bind<T>(group, name, value, description); } public static ConfigEntry<T> Config<T>(this IPlugin instance, string group, string name, T value, string description) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return instance.Config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, new object[1] { GetAdminOnlyFlag() })); } } public static class RequirementsEntry { public static RequirementConfig[] Deserialize(string reqs) { return ((IEnumerable<string>)reqs.Split(new char[1] { ',' })).Select((Func<string, RequirementConfig>)delegate(string r) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown string[] array = r.Split(new char[1] { ':' }); int result; int result2; return new RequirementConfig { Item = array[0], Amount = ((array.Length <= 1 || !int.TryParse(array[1], out result)) ? 1 : result), AmountPerLevel = ((array.Length > 2 && int.TryParse(array[2], out result2)) ? result2 : 0), Recover = true }; }).ToArray(); } public static string Serialize(RequirementConfig[] reqs) { return string.Join(",", reqs.Select((RequirementConfig r) => (r.AmountPerLevel <= 0) ? $"{r.Item}:{r.Amount}" : $"{r.Item}:{r.Amount}:{r.AmountPerLevel}")); } } public static class SharedDrawers { private static BaseUnityPlugin configManager; private static BaseUnityPlugin GetConfigManager() { if ((Object)(object)configManager == (Object)null && Chainloader.PluginInfos.TryGetValue("com.bepis.bepinex.configurationmanager", out var value) && Object.op_Implicit((Object)(object)value.Instance)) { configManager = value.Instance; } return configManager; } public static int GetRightColumnWidth() { int result = 130; BaseUnityPlugin val = GetConfigManager(); if ((Object)(object)val != (Object)null) { PropertyInfo propertyInfo = ((object)val)?.GetType().GetProperty("RightColumnWidth", BindingFlags.Instance | BindingFlags.NonPublic); if (propertyInfo != null) { result = (int)propertyInfo.GetValue(val); } } return result; } public static void ReloadConfigDisplay() { BaseUnityPlugin val = GetConfigManager(); if ((Object)(object)val != (Object)null) { ((object)val).GetType().GetMethod("BuildSettingList").Invoke(val, Array.Empty<object>()); } } public static Action<ConfigEntryBase> DrawReqConfigTable(bool hasUpgrades = false) { return delegate(ConfigEntryBase cfg) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Expected O, but got Unknown //IL_0125: 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_013f: Expected O, but got Unknown //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Expected O, but got Unknown //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Expected O, but got Unknown List<RequirementConfig> list = new List<RequirementConfig>(); bool flag = false; int rightColumnWidth = GetRightColumnWidth(); GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); foreach (RequirementConfig item in RequirementsEntry.Deserialize((string)cfg.BoxedValue).ToList()) { GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); string text = GUILayout.TextField(item.Item, new GUIStyle(GUI.skin.textField) { fixedWidth = rightColumnWidth - 33 - (hasUpgrades ? 37 : 0) - 21 - 21 - 12 }, Array.Empty<GUILayoutOption>()); string text2 = (string.IsNullOrEmpty(text) ? item.Item : text); flag = flag || text2 != item.Item; int num = item.Amount; if (int.TryParse(GUILayout.TextField(num.ToString(), new GUIStyle(GUI.skin.textField) { fixedWidth = 33f }, Array.Empty<GUILayoutOption>()), out var result) && result != num) { num = result; flag = true; } int num2 = item.AmountPerLevel; if (hasUpgrades && int.TryParse(GUILayout.TextField(num2.ToString(), new GUIStyle(GUI.skin.textField) { fixedWidth = 33f }, Array.Empty<GUILayoutOption>()), out var result2) && result2 != num2) { num2 = result2; flag = true; } if (GUILayout.Button("x", new GUIStyle(GUI.skin.button) { fixedWidth = 21f }, Array.Empty<GUILayoutOption>())) { flag = true; } else { list.Add(new RequirementConfig { Item = text2, Amount = num, AmountPerLevel = num2 }); } if (GUILayout.Button("+", new GUIStyle(GUI.skin.button) { fixedWidth = 21f }, Array.Empty<GUILayoutOption>())) { flag = true; list.Add(new RequirementConfig { Item = "<Prefab Name>", Amount = 1 }); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); if (flag) { cfg.BoxedValue = RequirementsEntry.Serialize(list.ToArray()); } }; } } public interface IPlugin { ConfigFile Config { get; } } public class ConfigWatcher { private BaseUnityPlugin configurationManager; private IPlugin plugin; public ConfigWatcher(IPlugin plugin) { if (plugin == null) { throw new ArgumentNullException("plugin"); } this.plugin = plugin; CheckForConfigManager(); } private void InitializeConfigWatcher() { string fileName = Path.GetFileName(plugin.Config.ConfigFilePath); FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Path.GetDirectoryName(plugin.Config.ConfigFilePath), fileName); fileSystemWatcher.Changed += OnConfigFileChangedCreatedOrRenamed; fileSystemWatcher.Created += OnConfigFileChangedCreatedOrRenamed; fileSystemWatcher.Renamed += OnConfigFileChangedCreatedOrRenamed; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; Logger.LogDebug((object)"File system config watcher initialized."); } private void CheckForConfigManager() { PluginInfo value; if (GUIManager.IsHeadless()) { InitializeConfigWatcher(); } else if (Chainloader.PluginInfos.TryGetValue("com.bepis.bepinex.configurationmanager", out value) && Object.op_Implicit((Object)(object)value.Instance)) { configurationManager = value.Instance; Logger.LogDebug((object)"Configuration manager found, hooking DisplayingWindowChanged"); EventInfo @event = ((object)configurationManager).GetType().GetEvent("DisplayingWindowChanged"); if (@event != null) { Action<object, object> action = OnConfigManagerDisplayingWindowChanged; Delegate handler = Delegate.CreateDelegate(@event.EventHandlerType, action.Target, action.Method); @event.AddEventHandler(configurationManager, handler); } } else { InitializeConfigWatcher(); } } private void OnConfigFileChangedCreatedOrRenamed(object sender, FileSystemEventArgs e) { string configFilePath = plugin.Config.ConfigFilePath; if (!File.Exists(configFilePath)) { return; } try { plugin.Config.SaveOnConfigSet = false; plugin.Config.Reload(); plugin.Config.SaveOnConfigSet = true; } catch { Logger.LogError((object)("There was an issue with your " + Path.GetFileName(configFilePath) + " file.")); Logger.LogError((object)"Please check the format and spelling."); } } private void OnConfigManagerDisplayingWindowChanged(object sender, object e) { if (!(bool)((object)configurationManager).GetType().GetProperty("DisplayingWindow").GetValue(configurationManager, null)) { plugin.Config.SaveOnConfigSet = false; plugin.Config.Reload(); plugin.Config.SaveOnConfigSet = true; } } } }