Decompiled source of SeedBed v1.2.4
SeedBed.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using PieceManager; using SeedBed.Functions; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Callbacks; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("SeedBed")] [assembly: AssemblyDescription("https://valheim.thunderstore.io/package/blacks7ar/SeedBed/")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("blacks7ar")] [assembly: AssemblyProduct("SeedBed")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("05457574-B66F-4250-8F0C-1959276A6407")] [assembly: AssemblyFileVersion("1.2.4")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.4.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 SeedBed { [BepInPlugin("blacks7ar.SeedBed", "SeedBed", "1.2.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public struct ItemConversions { [YamlMember(Alias = "From", ApplyNamingConventions = false)] public string m_from { get; set; } [YamlMember(Alias = "To", ApplyNamingConventions = false)] public string m_to { get; set; } [YamlMember(Alias = "SeedAmount", ApplyNamingConventions = false)] public int m_seedAmount { get; set; } [YamlMember(Alias = "ProducedItems", ApplyNamingConventions = false)] public int m_producedItems { get; set; } public ItemConversions() { m_from = ""; m_to = ""; m_seedAmount = 0; m_producedItems = 0; } } [HarmonyPatch] private static class Patches { [HarmonyPriority(600)] [HarmonyPostfix] [HarmonyPatch(typeof(ZNetScene), "Awake")] private static void Awake_Postfix(ZNetScene __instance) { GetResourcesFromZNetScene(__instance); SetupPrefabs.SetCollector(__instance); } } private const string modGUID = "blacks7ar.SeedBed"; public const string modName = "SeedBed"; public const string modAuthor = "blacks7ar"; public const string modVersion = "1.2.4"; public const string modLink = "https://valheim.thunderstore.io/package/blacks7ar/SeedBed/"; public static string ymlFileName = "blacks7ar.SeedBed.yml"; private static string ymlFullPath; private static readonly Harmony _harmony; private static readonly ConfigSync _configSync; private static ConfigEntry<Toggle> _serverConfigLocked; public static ConfigEntry<float> _germinationDuration; public static ConfigEntry<float> _harvestDelay; public static ConfigEntry<float> _expAmountFarming; public static ConfigEntry<float> _expAmountHerbalist; public static List<ItemConversions> _itemConversions; private static readonly CustomSyncedValue<string> _ItemConversionsSyncedValue; public static bool _hasFarmingMod; public static bool _hasHerbalistMod; public static readonly IDictionary<string, GameObject> _ResourceDB; public static readonly HashSet<string> _herbalPlants; public static readonly HashSet<string> _notAllowedItems; private ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool synchronizedConfig = true) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (synchronizedConfig ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); _configSync.AddConfigEntry<T>(val2).SynchronizedConfig = synchronizedConfig; return val2; } private static void YmlDataWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ymlFileName); fileSystemWatcher.Changed += YmlDataChanged; fileSystemWatcher.Created += YmlDataChanged; fileSystemWatcher.Renamed += YmlDataChanged; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private static void YmlDataChanged(object sender, FileSystemEventArgs e) { if (!File.Exists(ymlFullPath)) { return; } try { Logging.LogDebug("YmlDataWatcher called.."); _ItemConversionsSyncedValue.AssignLocalValue(File.ReadAllText(ymlFullPath)); } catch { Logging.LogError("There was an issue loading your " + ymlFileName); Logging.LogError("Please check your entries for spelling and format!"); } } public void Awake() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown Localizer.Load(); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; _serverConfigLocked = config("1- ServerSync", "Lock Configuration", Toggle.On, new ConfigDescription("If On, the configuration is locked and can be changed by server admins only.", (AcceptableValueBase)null, Array.Empty<object>())); _configSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); _germinationDuration = config("2- General", "Germination Duration", 4000f, new ConfigDescription("How many seconds would it take to finished germination.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(60f, 5000f), Array.Empty<object>())); _harvestDelay = config("2- General", "Harvest Delay", 1.5f, new ConfigDescription("Delay in seconds before the produced items spawns.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 3f), Array.Empty<object>())); _hasFarmingMod = Helper.CheckFarmingMod(); if (_hasFarmingMod) { _expAmountFarming = config("3- Farming", "Exp Amount", 1f, new ConfigDescription("Exp amount given to Farming skill when harvesting from seedbed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 1f), Array.Empty<object>())); } _hasHerbalistMod = Helper.CheckHerbalistMod(); if (_hasHerbalistMod) { _expAmountHerbalist = config("4- Herbalist", "Exp Amount", 1f, new ConfigDescription("Exp amount given to Herbalist skill when harvesting herbal plants from the seedbed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), Array.Empty<object>())); } Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; ((BaseUnityPlugin)this).Config.Save(); if (!File.Exists(ymlFullPath)) { CreateItemConversionYml(); Logging.LogWarning("File not found - " + ymlFileName + "!"); Logging.LogWarning("Creating a new one.."); } _ItemConversionsSyncedValue.ValueChanged += ItemConversionsSyncedValueOnValueChanged; _ItemConversionsSyncedValue.AssignLocalValue(File.ReadAllText(ymlFullPath)); SetupPrefabs.Init(); YmlDataWatcher(); } public static void ItemConversionsSyncedValueOnValueChanged() { Logging.LogDebug("ItemConversionsSyncedValueOnChanged called.."); try { _itemConversions.Clear(); _itemConversions = new DeserializerBuilder().Build().Deserialize<List<ItemConversions>>(_ItemConversionsSyncedValue.Value); } catch (Exception arg) { Logging.LogError($"Failed to deserializer {ymlFileName}: {arg}"); } } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private static void GetResourcesFromZNetScene(ZNetScene zNetScene) { if (!Helper.ZNetSceneAwake()) { return; } _ResourceDB.Clear(); foreach (GameObject prefab in zNetScene.m_prefabs) { if (!Object.op_Implicit((Object)(object)prefab.GetComponent<Pickable>()) || ((Object)prefab).name.ToLower().EndsWith("_wild") || ((Object)prefab).name.ToLower().Contains("dvergerthing") || ((Object)prefab).name.ToLower().Contains("_wild_")) { continue; } Pickable component = prefab.GetComponent<Pickable>(); if ((Object)(object)component.m_itemPrefab == (Object)null) { continue; } string name = component.m_itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_name; if (_notAllowedItems.Contains(name)) { continue; } string key = name; if (!(name == "$item_carrot")) { switch (name) { case "$item_onion": case "$item_turnip": case "$bca_chilipepper": case "$bca_tomato": break; default: goto IL_0115; } } bool flag = true; goto IL_0118; IL_0115: flag = false; goto IL_0118; IL_0118: if (flag) { key = name + "seeds"; } else { switch (name) { case "$item_carrotseeds": case "$item_onionseeds": case "$item_turnipseeds": flag = true; break; default: flag = false; break; } if (flag) { key = name.Replace("seeds", ""); } } if (!_ResourceDB.ContainsKey(key)) { _ResourceDB.Add(key, prefab); } if (((Object)prefab).name.ToLower().StartsWith("bca_") && ((Object)prefab).name.ToLower().EndsWith("plant") && !_ResourceDB.ContainsKey(name)) { _ResourceDB.Add(name, prefab); } } } private static void CreateItemConversionYml() { List<ItemConversions> graph = new List<ItemConversions> { new ItemConversions { m_from = "Barley", m_to = "Barley", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "CarrotSeeds", m_to = "Carrot", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Dandelion", m_to = "Dandelion", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Fiddleheadfern", m_to = "Fiddleheadfern", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Flax", m_to = "Flax", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Mushroom", m_to = "Mushroom", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "MushroomMagecap", m_to = "MushroomMagecap", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "MushroomYellow", m_to = "MushroomYellow", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "MushroomJotunPuffs", m_to = "MushroomJotunPuffs", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "OnionSeeds", m_to = "Onion", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Carrot", m_to = "CarrotSeeds", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Onion", m_to = "OnionSeeds", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Turnip", m_to = "TurnipSeeds", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "MushroomSmokePuff", m_to = "MushroomSmokePuff", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Thistle", m_to = "Thistle", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "TurnipSeeds", m_to = "Turnip", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Blueberries", m_to = "Blueberries", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Cloudberry", m_to = "Cloudberry", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Raspberry", m_to = "Raspberry", m_seedAmount = 5, m_producedItems = 15 }, new ItemConversions { m_from = "Vineberry", m_to = "Vineberry", m_seedAmount = 5, m_producedItems = 15 } }; string contents = new SerializerBuilder().Build().Serialize(graph); File.WriteAllText(ymlFullPath, contents); } static Plugin() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ymlFullPath = configPath + directorySeparatorChar + ymlFileName; _harmony = new Harmony("blacks7ar.SeedBed"); _configSync = new ConfigSync("blacks7ar.SeedBed") { DisplayName = "SeedBed", CurrentVersion = "1.2.4", MinimumRequiredVersion = "1.2.4" }; _itemConversions = new List<ItemConversions>(); _ItemConversionsSyncedValue = new CustomSyncedValue<string>(_configSync, "Item Conversions", ""); _ResourceDB = new Dictionary<string, GameObject>(); _herbalPlants = new HashSet<string> { "$bh_boswellia", "$bh_chamomile", "$bh_chicory", "$bh_daisy", "$bh_echinacea", "$bh_lavender", "$item_dandelion", "$item_thistle" }; _notAllowedItems = new HashSet<string> { "$item_grausten", "$item_blackcore", "$item_ironore", "$item_wood", "$item_charredskull", "$item_dragonegg", "$item_lantern", "$item_coins", "$item_dvergrtankard", "$item_fishingrod", "$item_flint", "$item_bonefragments", "$item_wolfhairbundle", "$item_entrails", "$item_moltencore", "$item_crystal", "$item_obsidian", "$item_pot_shard_green", "$item_royaljelly", "$item_stone", "$item_sulfurstone", "$item_surtlingcore", "$item_Dyrnwyn_hilt", "$item_Dyrnwyn_blade", "$item_tar", "$item_tinore", "$item_voltureegg", "$item_Dyrnwyn_tip", "$item_goblintotem", "$item_wisp" }; } } } namespace SeedBed.Functions { public class Germination : MonoBehaviour, Hoverable, Interactable { private class ItemConversion { public ItemDrop m_from; public ItemDrop m_to; public int m_seedAmount = 5; public int m_producedItems = 15; } private enum Status { Empty, Germinating, Ready } public string m_name = "Seed Bed"; public float m_germinationDuration = 2400f; public GameObject m_sapling; public GameObject m_grown; public GameObject m_saplingT5x5; public GameObject m_grownT5x5; public GameObject m_saplingT3x1; public GameObject m_grownT3x1; public GameObject m_saplingVine; public GameObject m_grownVine; public GameObject m_saplingVineWall; public GameObject m_GrownVineWall; public EffectList m_addEffects = new EffectList(); public EffectList m_harvestEffects = new EffectList(); public EffectList m_spawnEffects = new EffectList(); public Switch m_addSwitch; public Switch m_harvestSwitch; public float m_harvestDelay = 1.5f; public Transform m_spawnPoint; private List<ItemConversion> m_conversion = new List<ItemConversion>(); public ZNetView m_nview; public string m_delayedTapItem = ""; public void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); SetTransforms(); SetConversion(); if (!((Object)(object)m_nview == (Object)null) && m_nview.GetZDO() != null) { DisableGameObject(); ReapplyVisuals(); m_nview.Register<string>("RPC_AddItem", (Action<long, string>)RPC_AddItem); m_nview.Register("RPC_Tap", (Action<long>)RPC_Tap); ((MonoBehaviour)this).InvokeRepeating("SlowUpdate", (GetStatus() == Status.Germinating) ? 2f : 0f, 2f); WearNTear component = ((Component)this).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); } } } public void DisableGameObject() { m_sapling.SetActive(false); m_grown.SetActive(false); } public void SetTransforms() { if (!((Object)(object)m_nview == (Object)null) && m_nview.GetZDO() != null) { m_sapling = ((Component)((Component)this).transform.Find("_sapling")).gameObject; m_grown = ((Component)((Component)this).transform.Find("_grown")).gameObject; m_saplingT5x5 = ((Component)m_sapling.transform.Find("_sapling5x5")).gameObject; m_grownT5x5 = ((Component)m_grown.transform.Find("_grown5x5")).gameObject; m_saplingT3x1 = ((Component)m_sapling.transform.Find("_sapling3x1")).gameObject; m_grownT3x1 = ((Component)m_grown.transform.Find("_grown3x1")).gameObject; m_saplingVine = ((Component)m_sapling.transform.Find("_saplingvine")).gameObject; m_saplingVineWall = ((Component)m_sapling.transform.Find("deco")).gameObject; m_grownVine = ((Component)m_grown.transform.Find("_grownvine")).gameObject; m_GrownVineWall = ((Component)m_grown.transform.Find("deco")).gameObject; m_addSwitch = ((Component)((Component)this).transform.Find("add_seeds")).GetComponent<Switch>(); m_harvestSwitch = ((Component)((Component)this).transform.Find("collect_produce")).GetComponent<Switch>(); m_spawnPoint = ((Component)this).transform.Find("spawnpoint"); } } public void SetConversion() { foreach (List<ItemConversion> item in from conversion in Plugin._itemConversions.Where(delegate(Plugin.ItemConversions data) { ObjectDB instance5 = ObjectDB.instance; Plugin.ItemConversions itemConversions3 = data; if ((Object)(object)instance5.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions3.m_from)) != (Object)null) { ObjectDB instance6 = ObjectDB.instance; itemConversions3 = data; return (Object)(object)instance6.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions3.m_to)) != (Object)null; } return false; }).Where(delegate(Plugin.ItemConversions data) { ObjectDB instance3 = ObjectDB.instance; Plugin.ItemConversions itemConversions2 = data; if (Object.op_Implicit((Object)(object)instance3.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions2.m_from)).GetComponent<ItemDrop>())) { ObjectDB instance4 = ObjectDB.instance; itemConversions2 = data; return Object.op_Implicit((Object)(object)instance4.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions2.m_to)).GetComponent<ItemDrop>()); } return false; }).Select(delegate(Plugin.ItemConversions data) { List<ItemConversion> list = new List<ItemConversion>(); ItemConversion itemConversion = new ItemConversion(); ObjectDB instance = ObjectDB.instance; Plugin.ItemConversions itemConversions = data; itemConversion.m_from = instance.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions.m_from)).GetComponent<ItemDrop>(); ObjectDB instance2 = ObjectDB.instance; itemConversions = data; itemConversion.m_to = instance2.GetItemPrefab(StringExtensionMethods.GetStableHashCode(itemConversions.m_to)).GetComponent<ItemDrop>(); itemConversions = data; itemConversion.m_seedAmount = itemConversions.m_seedAmount; itemConversions = data; itemConversion.m_producedItems = itemConversions.m_producedItems; list.Add(itemConversion); return list; }) from item in conversion where !m_conversion.Contains(item) select conversion) { m_conversion.AddRange(item); } Logging.LogDebug("Added " + m_conversion.Count + " items to conversion list from " + Plugin._itemConversions.Count + " items in " + Plugin.ymlFileName + " file."); } public void DropAllItems() { Status status = GetStatus(); string content = GetContent(); if (string.IsNullOrEmpty(content)) { return; } if (status == Status.Ready) { ItemConversion itemConversion = GetItemConversion(content); if (itemConversion != null) { for (int i = 0; i < itemConversion.m_producedItems; i++) { drop(itemConversion.m_to); } } } else { ItemConversion itemConversion2 = GetItemConversion(content); if (itemConversion2 != null) { for (int j = 0; j < itemConversion2.m_seedAmount; j++) { drop(itemConversion2.m_from); } } } m_nview.GetZDO().Set(ZDOVars.s_content, ""); m_nview.GetZDO().Set(ZDOVars.s_startTime, 0, false); void drop(ItemDrop item) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position + Vector3.up + Random.insideUnitSphere * 0.3f; Quaternion val2 = Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f); ItemDrop.OnCreateNew(Object.Instantiate<GameObject>(((Component)item).gameObject, val, val2)); } } public void OnDestroyed() { m_nview.IsOwner(); DropAllItems(); } public string GetHoverName() { return m_name; } public string GetHoverText() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, false, false)) { return Localization.instance.Localize(m_name + "\n$bsb_noaccess"); } switch (GetStatus()) { case Status.Ready: { string contentName2 = GetContentName(); return Localization.instance.Localize(m_name + "\n( " + contentName2 + ", $bsb_germentation_ready )\n[<color=yellow><b>$KEY_Use</b></color>] $bsb_seedbed_harvest"); } case Status.Germinating: { string contentName = GetContentName(); return Localization.instance.Localize(m_name + " <color=orange><b>" + TimeLeft(this) + "</b></color>\n( " + contentName + ", $bsb_seedbed_germinating )"); } case Status.Empty: return Localization.instance.Localize(m_name + " ( $bsb_seedbed_empty )\n[<color=yellow><b>$KEY_Use</b></color>] $bsb_seedbed_add"); default: return m_name; } } public bool Interact(Humanoid user, bool hold, bool alt) { //IL_000b: 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_0137: Unknown result type (might be due to invalid IL or missing references) if (hold) { return false; } if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false)) { return false; } switch (GetStatus()) { case Status.Empty: { ItemData val = FindPlantableSeed(user.GetInventory()); if (val == null) { ((Character)user).Message((MessageType)2, "$bsb_notenoughseeds", 0, (Sprite)null); return false; } ItemConversion itemConversion2 = GetItemConversion(((Object)val.m_dropPrefab).name); AddItem(user, val, itemConversion2.m_seedAmount); return true; } case Status.Ready: m_nview.InvokeRPC("RPC_Tap", Array.Empty<object>()); if (Plugin._hasFarmingMod) { ((Character)user).GetSkills().m_skillData.TryGetValue((SkillType)Mathf.Abs(StringExtensionMethods.GetStableHashCode("Farming")), out var value); if (value != null) { ((Character)user).RaiseSkill(value.m_info.m_skill, Plugin._expAmountFarming.Value); } } if (Plugin._hasHerbalistMod) { ItemConversion itemConversion = GetItemConversion(m_delayedTapItem); if (Plugin._herbalPlants.Contains(itemConversion.m_to.m_itemData.m_shared.m_name)) { ((Character)user).GetSkills().m_skillData.TryGetValue((SkillType)Mathf.Abs(StringExtensionMethods.GetStableHashCode("Herbalist")), out var value2); if (value2 != null) { ((Character)user).RaiseSkill(value2.m_info.m_skill, Plugin._expAmountHerbalist.Value); } } } return true; default: return false; } } public bool UseItem(Humanoid user, ItemData item) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false)) { return false; } ItemConversion itemConversion = GetItemConversion(((Object)item.m_dropPrefab).name); if (itemConversion == null) { return false; } if (item.m_stack < itemConversion.m_seedAmount) { ((Character)user).Message((MessageType)2, "$bsb_notenoughseeds", 0, (Sprite)null); return false; } if (!AddItem(user, item, itemConversion.m_seedAmount)) { return false; } return true; } public void ReapplyVisuals() { string fromName = GetFromName(); SetVisuals(fromName); } public void SlowUpdate() { switch (GetStatus()) { case Status.Empty: DisableGameObject(); break; case Status.Germinating: m_sapling.SetActive(true); m_grown.SetActive(false); break; case Status.Ready: m_sapling.SetActive(false); m_grown.SetActive(true); break; } } private Status GetStatus() { if (string.IsNullOrEmpty(GetContent())) { return Status.Empty; } if (GetGerminationTime() > (double)m_germinationDuration) { return Status.Ready; } return Status.Germinating; } private bool AddItem(Humanoid user, ItemData item, int amount) { if (GetStatus() != 0) { return false; } if (!IsItemAllowed(item)) { return false; } if (!user.GetInventory().RemoveItem(item, amount)) { return false; } m_nview.InvokeRPC("RPC_AddItem", new object[1] { ((Object)item.m_dropPrefab).name }); SetVisuals(item.m_shared.m_name); return true; } public void ResetVisuals() { for (int i = 0; i < m_saplingT5x5.transform.childCount; i++) { GameObject gameObject = ((Component)m_saplingT5x5.transform.GetChild(i)).gameObject; for (int j = 0; j < gameObject.transform.childCount; j++) { Object.Destroy((Object)(object)((Component)gameObject.transform.GetChild(j)).gameObject); } } for (int k = 0; k < m_grownT5x5.transform.childCount; k++) { GameObject gameObject2 = ((Component)m_grownT5x5.transform.GetChild(k)).gameObject; for (int l = 0; l < gameObject2.transform.childCount; l++) { Object.Destroy((Object)(object)((Component)gameObject2.transform.GetChild(l)).gameObject); } } for (int m = 0; m < m_saplingT3x1.transform.childCount; m++) { GameObject gameObject3 = ((Component)m_saplingT3x1.transform.GetChild(m)).gameObject; for (int n = 0; n < gameObject3.transform.childCount; n++) { Object.Destroy((Object)(object)((Component)gameObject3.transform.GetChild(n)).gameObject); } } for (int num = 0; num < m_grownT3x1.transform.childCount; num++) { GameObject gameObject4 = ((Component)m_grownT3x1.transform.GetChild(num)).gameObject; for (int num2 = 0; num2 < gameObject4.transform.childCount; num2++) { Object.Destroy((Object)(object)((Component)gameObject4.transform.GetChild(num2)).gameObject); } } for (int num3 = 0; num3 < m_saplingVine.transform.childCount; num3++) { GameObject gameObject5 = ((Component)m_saplingVine.transform.GetChild(num3)).gameObject; for (int num4 = 0; num4 < gameObject5.transform.childCount; num4++) { Object.Destroy((Object)(object)((Component)gameObject5.transform.GetChild(num4)).gameObject); } } for (int num5 = 0; num5 < m_grownVine.transform.childCount; num5++) { GameObject gameObject6 = ((Component)m_grownVine.transform.GetChild(num5)).gameObject; for (int num6 = 0; num6 < gameObject6.transform.childCount; num6++) { Object.Destroy((Object)(object)((Component)gameObject6.transform.GetChild(num6)).gameObject); } } } public void SetVisuals(string itemName) { //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0411: Unknown result type (might be due to invalid IL or missing references) //IL_0509: Unknown result type (might be due to invalid IL or missing references) //IL_0528: Unknown result type (might be due to invalid IL or missing references) //IL_06b8: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Unknown result type (might be due to invalid IL or missing references) //IL_05c0: Unknown result type (might be due to invalid IL or missing references) foreach (string key in Plugin._ResourceDB.Keys) { if (itemName != key) { continue; } string text = ((Object)Plugin._ResourceDB[key]).name.ToLower(); if (text.Contains("pickable_")) { for (int i = 0; i < Plugin._ResourceDB[key].transform.childCount; i++) { GameObject gameObject = ((Component)Plugin._ResourceDB[key].transform.GetChild(i)).gameObject; for (int j = 0; j < m_saplingT5x5.transform.childCount; j++) { GameObject val = Object.Instantiate<GameObject>(gameObject, m_saplingT5x5.transform.GetChild(j)); ((Object)val).name = ((Object)Plugin._ResourceDB[key]).name; val.transform.SetParent(m_saplingT5x5.transform.GetChild(j)); val.transform.localPosition = new Vector3(0f, 0f, 0f); m_saplingT5x5.ChangeColor(new Color(0f, 1f, 0.45f)); m_saplingVineWall.SetActive(false); for (int k = 0; k < val.transform.childCount; k++) { ((Component)val.transform.GetChild(k)).gameObject.RemoveComponent(typeof(ParticleSystem)); ((Component)val.transform.GetChild(k)).gameObject.RemoveComponent(typeof(Light)); ((Component)val.transform.GetChild(k)).gameObject.RemoveComponent(typeof(LightLod)); } val.RemoveComponent(typeof(Light)); val.RemoveComponent(typeof(ParticleSystem)); val.RemoveComponent(typeof(LightLod)); } for (int l = 0; l < m_grownT5x5.transform.childCount; l++) { GameObject obj = Object.Instantiate<GameObject>(gameObject, m_grownT5x5.transform.GetChild(l)); ((Object)obj).name = ((Object)Plugin._ResourceDB[key]).name; obj.transform.SetParent(m_grownT5x5.transform.GetChild(l)); obj.transform.localPosition = new Vector3(0f, 0f, 0f); m_GrownVineWall.SetActive(false); } } } else if (text.Contains("blueberrybush") || text.Contains("raspberrybush") || text.EndsWith("plant")) { for (int m = 0; m < Plugin._ResourceDB[key].transform.childCount; m++) { GameObject gameObject2 = ((Component)Plugin._ResourceDB[key].transform.GetChild(m)).gameObject; for (int n = 0; n < m_saplingT3x1.transform.childCount; n++) { GameObject obj2 = Object.Instantiate<GameObject>(gameObject2, m_saplingT3x1.transform.GetChild(n)); ((Object)obj2).name = ((Object)Plugin._ResourceDB[key]).name; obj2.transform.SetParent(m_saplingT3x1.transform.GetChild(n)); obj2.transform.localPosition = new Vector3(0f, 0f, 0f); m_saplingT3x1.ChangeColor(new Color(0f, 1f, 0.45f)); m_saplingVineWall.SetActive(false); } for (int num = 0; num < m_grownT3x1.transform.childCount; num++) { GameObject obj3 = Object.Instantiate<GameObject>(gameObject2, m_grownT3x1.transform.GetChild(num)); ((Object)obj3).name = ((Object)Plugin._ResourceDB[key]).name; obj3.transform.SetParent(m_grownT3x1.transform.GetChild(num)); obj3.transform.localPosition = new Vector3(0f, 0f, 0f); m_GrownVineWall.SetActive(false); } } } else if (text.Contains("cloudberrybush")) { for (int num2 = 0; num2 < Plugin._ResourceDB[key].transform.childCount; num2++) { GameObject gameObject3 = ((Component)Plugin._ResourceDB[key].transform.GetChild(num2)).gameObject; for (int num3 = 0; num3 < m_saplingT5x5.transform.childCount; num3++) { GameObject obj4 = Object.Instantiate<GameObject>(gameObject3, m_saplingT5x5.transform.GetChild(num3)); ((Object)obj4).name = ((Object)Plugin._ResourceDB[key]).name; obj4.transform.SetParent(m_saplingT5x5.transform.GetChild(num3)); obj4.transform.localPosition = new Vector3(0f, 0f, 0f); m_saplingT5x5.ChangeColor(new Color(0f, 1f, 0.45f)); m_saplingVineWall.SetActive(false); } for (int num4 = 0; num4 < m_grownT5x5.transform.childCount; num4++) { GameObject obj5 = Object.Instantiate<GameObject>(gameObject3, m_grownT5x5.transform.GetChild(num4)); ((Object)obj5).name = ((Object)Plugin._ResourceDB[key]).name; obj5.transform.SetParent(m_grownT5x5.transform.GetChild(num4)); obj5.transform.localPosition = new Vector3(0f, 0f, 0f); m_GrownVineWall.SetActive(false); } } } else { if (!text.Contains("vineash")) { continue; } for (int num5 = 0; num5 < Plugin._ResourceDB[key].transform.childCount; num5++) { GameObject gameObject4 = ((Component)Plugin._ResourceDB[key].transform.GetChild(num5)).gameObject; for (int num6 = 0; num6 < m_saplingVine.transform.childCount; num6++) { GameObject obj6 = Object.Instantiate<GameObject>(gameObject4, m_saplingVine.transform.GetChild(num6)); ((Object)obj6).name = ((Object)Plugin._ResourceDB[key]).name; obj6.transform.SetParent(m_saplingVine.transform.GetChild(num6)); obj6.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); m_saplingVine.ChangeColor(new Color(0f, 1f, 0.45f)); } for (int num7 = 0; num7 < m_grownVine.transform.childCount; num7++) { GameObject obj7 = Object.Instantiate<GameObject>(gameObject4, m_grownVine.transform.GetChild(num7)); ((Object)obj7).name = ((Object)Plugin._ResourceDB[key]).name; obj7.transform.SetParent(m_grownVine.transform.GetChild(num7)); } } m_saplingVineWall.SetActive(true); m_GrownVineWall.SetActive(true); } } } public void RPC_AddItem(long sender, string name) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (m_nview.IsOwner() && GetStatus() == Status.Empty) { if (!IsItemAllowed(name)) { ZLog.DevLog((object)"Item not allowed"); return; } m_addEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); m_nview.GetZDO().Set(ZDOVars.s_content, name); m_nview.GetZDO().Set(ZDOVars.s_startTime, ZNet.instance.GetTime().Ticks); } } public void RPC_Tap(long sender) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (m_nview.IsOwner() && GetStatus() == Status.Ready) { m_delayedTapItem = GetContent(); ((MonoBehaviour)this).Invoke("DelayedTap", m_harvestDelay); m_harvestEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); m_nview.GetZDO().Set(ZDOVars.s_content, ""); m_nview.GetZDO().Set(ZDOVars.s_startTime, 0, false); ResetVisuals(); } } public void DelayedTap() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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) m_spawnEffects.Create(((Component)this).transform.position, Quaternion.identity, (Transform)null, 1f, -1); ItemConversion itemConversion = GetItemConversion(m_delayedTapItem); if (itemConversion != null) { for (int i = 0; i < itemConversion.m_producedItems; i++) { Vector3 val = m_spawnPoint.position + Vector3.up * 0.3f; ItemDrop.OnCreateNew(Object.Instantiate<ItemDrop>(itemConversion.m_to, val, Quaternion.identity)); } } } public void ResetGerminationTimer() { if (GetStatus() == Status.Germinating) { m_nview.GetZDO().Set(ZDOVars.s_startTime, ZNet.instance.GetTime().Ticks); } } private double GetGerminationTime() { DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong(ZDOVars.s_startTime, 0L)); if (dateTime.Ticks == 0L) { return -1.0; } return (ZNet.instance.GetTime() - dateTime).TotalSeconds; } private string GetFromName() { string content = GetContent(); if (string.IsNullOrEmpty(content)) { return ""; } ItemConversion itemConversion = GetItemConversion(content); if (itemConversion == null) { return "Invalid"; } return itemConversion.m_from.m_itemData.m_shared.m_name; } private string GetContentName() { string content = GetContent(); if (string.IsNullOrEmpty(content)) { return ""; } ItemConversion itemConversion = GetItemConversion(content); if (itemConversion == null) { return "Invalid"; } return itemConversion.m_to.m_itemData.m_shared.m_name; } private string GetContent() { if (m_nview.GetZDO() != null) { return m_nview.GetZDO().GetString(ZDOVars.s_content, ""); } return ""; } private bool IsItemAllowed(ItemData item) { return IsItemAllowed(((Object)item.m_dropPrefab).name); } private bool IsItemAllowed(string itemName) { return m_conversion.Any((ItemConversion item) => ((Object)((Component)item.m_from).gameObject).name == itemName); } private ItemData FindPlantableSeed(Inventory inventory) { return (from item2 in m_conversion let item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name, -1, false) where item != null where item.m_stack >= item2.m_seedAmount select item).FirstOrDefault(); } private ItemConversion GetItemConversion(string itemName) { return m_conversion.FirstOrDefault((ItemConversion item) => ((Object)((Component)item.m_from).gameObject).name == itemName); } private static string TimeLeft(Germination germination) { double num = (double)germination.m_germinationDuration - germination.GetGerminationTime(); float num2 = Mathf.FloorToInt((float)((int)num / 60)); float num3 = Mathf.FloorToInt((float)((int)num % 60)); return $"({num2:00}:{num3:00})"; } } public class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] public string Category; [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer; } public static class Helper { public static bool ZNetSceneAwake() { if ((Object)(object)ZNetScene.instance != (Object)null && ZNetScene.instance.m_prefabs.Count != 0) { return (Object)(object)ZNetScene.instance.GetPrefab("piece_workbench") != (Object)null; } return false; } public static bool CheckFarmingMod() { if (!Chainloader.PluginInfos.ContainsKey("org.bepinex.plugins.farming")) { return false; } Logging.LogInfo("Farming mod detected! Applying patch.."); return true; } public static bool CheckHerbalistMod() { if (!Chainloader.PluginInfos.ContainsKey("blacks7ar.Herbalist")) { return false; } Logging.LogInfo("Herbalist mod detected! Applying patch.."); return true; } public static void ChangeColor(this GameObject gameObject, Color color) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)gameObject == (Object)null) { return; } Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>(true); if (componentsInChildren == null || componentsInChildren.Length == 0) { return; } for (int i = 0; i < componentsInChildren.Length; i++) { Material material = componentsInChildren[i].material; if (!((Object)(object)material == (Object)null)) { material.SetColor("_Color", color); } } } public static void RemoveComponent(this GameObject gameObject, Type type) { Component component = gameObject.GetComponent(type); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } if ((Object)(object)gameObject.GetComponentInChildren(type) != (Object)null) { Object.Destroy((Object)(object)component); } } } public static class Logging { private static readonly ManualLogSource SBLogger = Logger.CreateLogSource("SeedBed"); public static void LogDebug(string debug) { SBLogger.LogDebug((object)debug); } public static void LogInfo(string info) { SBLogger.LogInfo((object)info); } public static void LogWarning(string warning) { SBLogger.LogWarning((object)warning); } public static void LogError(string error) { SBLogger.LogError((object)error); } } public static class SetupPrefabs { private static AssetBundle _seedBundle; public static void Init() { _seedBundle = PiecePrefabManager.RegisterAssetBundle("seedbedbundle"); BuildPiece buildPiece = new BuildPiece(_seedBundle, "BSB_SeedBed"); buildPiece.Crafting.Set(CraftingTable.Workbench); buildPiece.Category.Set("CollectorSeries"); buildPiece.RequiredItems.Add("YmirRemains", 5, recover: true); buildPiece.RequiredItems.Add("BronzeNails", 8, recover: true); buildPiece.RequiredItems.Add("Wood", 18, recover: true); buildPiece.SpecialProperties = new SpecialProperties { AdminOnly = false, NoConfig = false }; ShaderReplacer.Replace(buildPiece.Prefab); if (!Object.op_Implicit((Object)(object)buildPiece.Prefab.GetComponent<Germination>())) { buildPiece.Prefab.AddComponent<Germination>(); } PiecePrefabManager.RegisterPrefab(_seedBundle, "bsb_sfx_build_hammer_wood"); PiecePrefabManager.RegisterPrefab(_seedBundle, "bsb_sfx_wood_destroyed"); PiecePrefabManager.RegisterPrefab(_seedBundle, "bsb_vfx_Place_workbench"); PiecePrefabManager.RegisterPrefab(_seedBundle, "bsb_vfx_SawDust"); } public static void SetCollector(ZNetScene zNetScene) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Expected O, but got Unknown if (Helper.ZNetSceneAwake()) { Germination component = _seedBundle.LoadAsset<GameObject>("BSB_SeedBed").GetComponent<Germination>(); component.m_name = "$bsb_seedbed"; Plugin._germinationDuration.SettingChanged += delegate { component.m_germinationDuration = Plugin._germinationDuration.Value; }; component.m_germinationDuration = Plugin._germinationDuration.Value; component.m_addEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = zNetScene.GetPrefab("sfx_fermenter_add"), m_enabled = true, m_variant = -1 }, new EffectData { m_prefab = zNetScene.GetPrefab("vfx_fermenter_add"), m_enabled = true, m_variant = -1 } }; component.m_harvestEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1] { new EffectData { m_prefab = zNetScene.GetPrefab("sfx_pickable_pick"), m_enabled = true, m_variant = -1 } }; component.m_spawnEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[2] { new EffectData { m_prefab = zNetScene.GetPrefab("sfx_lootspawn"), m_enabled = true, m_variant = -1 }, new EffectData { m_prefab = zNetScene.GetPrefab("vfx_lootspawn"), m_enabled = true, m_variant = -1 } }; Plugin._harvestDelay.SettingChanged += delegate { component.m_harvestDelay = Plugin._harvestDelay.Value; }; component.m_harvestDelay = Plugin._harvestDelay.Value; } } } public static class ShaderReplacer { private static readonly List<GameObject> GOToSwap; static ShaderReplacer() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown GOToSwap = new List<GameObject>(); new Harmony("blacks7ar.utilities.ShaderReplacer").Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(ShaderReplacer), "ReplaceShaderPatch", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void Replace(GameObject gameObject) { GOToSwap.Add(gameObject); } [HarmonyPriority(700)] private static void ReplaceShaderPatch() { foreach (Material item in from gameObject in GOToSwap select gameObject.GetComponentsInChildren<Renderer>(true) into renderers from renderer in renderers where (Object)(object)renderer != (Object)null from material in renderer.sharedMaterials where (Object)(object)material != (Object)null select material) { Shader[] array = Resources.FindObjectsOfTypeAll<Shader>(); foreach (Shader val in array) { if (((Object)item.shader).name == ((Object)val).name) { item.shader = val; } } } } } public enum Toggle { On, Off } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<b89b921d-8954-4084-bd4d-1feb826a594e>Embedded] internal sealed class <b89b921d-8954-4084-bd4d-1feb826a594e>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<b89b921d-8954-4084-bd4d-1feb826a594e>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [<b89b921d-8954-4084-bd4d-1feb826a594e>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [CompilerGenerated] internal sealed class <bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContextAttribute : Attribute { public readonly byte Flag; public <bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace LocalizationManager { [<f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(0)] [PublicAPI] [<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(1)] internal class Localizer { private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors; private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts; private static readonly ConditionalWeakTable<Localization, string> localizationLanguage; private static readonly List<WeakReference<Localization>> localizationObjects; [<f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(2)] private static BaseUnityPlugin _plugin; private static readonly List<string> fileExtensions; private static BaseUnityPlugin plugin { get { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } private static void UpdatePlaceholderText(Localization localization, string key) { localizationLanguage.TryGetValue(localization, out var value); string text = loadedTexts[value][key]; if (PlaceholderProcessors.TryGetValue(key, out var value2)) { text = value2.Aggregate(text, [<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(0)] (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value())); } localization.AddWord(key, text); } public static void AddPlaceholder<T>(string key, string placeholder, ConfigEntry<T> config, [<f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(new byte[] { 2, 1, 1 })] Func<T, string> convertConfigValue = null) { if (convertConfigValue == null) { convertConfigValue = [<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(0)] [return: <f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(1)] (T val) => val.ToString(); } if (!PlaceholderProcessors.ContainsKey(key)) { PlaceholderProcessors[key] = new Dictionary<string, Func<string>>(); } config.SettingChanged += [<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(0)] (object _, EventArgs _) => { UpdatePlaceholder(); }; if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage())) { UpdatePlaceholder(); } void UpdatePlaceholder() { PlaceholderProcessors[key][placeholder] = () => convertConfigValue(config.Value); UpdatePlaceholderText(Localization.instance, key); } } public static void AddText(string key, string text) { List<WeakReference<Localization>> list = new List<WeakReference<Localization>>(); foreach (WeakReference<Localization> localizationObject in localizationObjects) { if (localizationObject.TryGetTarget(out var target)) { Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)]; if (!target.m_translations.ContainsKey(key)) { dictionary[key] = text; target.AddWord(key, text); } } else { list.Add(localizationObject); } } foreach (WeakReference<Localization> item in list) { localizationObjects.Remove(item); } } public static void Load() { LoadLocalization(Localization.instance, Localization.instance.GetSelectedLanguage()); } private static void LoadLocalization(Localization __instance, string language) { if (!localizationLanguage.Remove(__instance)) { localizationObjects.Add(new WeakReference<Localization>(__instance)); } localizationLanguage.Add(__instance, language); Dictionary<string, string> dictionary = new Dictionary<string, string>(); foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories) where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0 select f) { string text = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' })[1]; if (dictionary.ContainsKey(text)) { Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped.")); } else { dictionary[text] = item; } } byte[] array = LoadTranslationFromAssembly("English"); if (array == null) { throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml."); } Dictionary<string, string> dictionary2 = new <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(Encoding.UTF8.GetString(array)); if (dictionary2 == null) { throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty."); } string text2 = null; if (language != "English") { if (dictionary.ContainsKey(language)) { text2 = File.ReadAllText(dictionary[language]); } else { byte[] array2 = LoadTranslationFromAssembly(language); if (array2 != null) { text2 = Encoding.UTF8.GetString(array2); } } } if (text2 == null && dictionary.ContainsKey("English")) { text2 = File.ReadAllText(dictionary["English"]); } if (text2 != null) { foreach (KeyValuePair<string, string> item2 in new <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>()) { dictionary2[item2.Key] = item2.Value; } } loadedTexts[language] = dictionary2; foreach (KeyValuePair<string, string> item3 in dictionary2) { UpdatePlaceholderText(__instance, item3.Key); } } static Localizer() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>(); loadedTexts = new Dictionary<string, Dictionary<string, string>>(); localizationLanguage = new ConditionalWeakTable<Localization, string>(); localizationObjects = new List<WeakReference<Localization>>(); fileExtensions = new List<string> { ".json", ".yml" }; new Harmony("org.bepinex.helpers.LocalizationManager").Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } [return: <f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(2)] private static byte[] LoadTranslationFromAssembly(string language) { foreach (string fileExtension in fileExtensions) { byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension); if (array != null) { return array; } } return null; } [<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(2)] public static byte[] ReadEmbeddedFileBytes([<f6f8ff5f-fa45-43ba-9489-b740a9e7c98b>Nullable(1)] string resourceFileName, Assembly containingAssembly = null) { using MemoryStream memoryStream = new MemoryStream(); if ((object)containingAssembly == null) { containingAssembly = Assembly.GetCallingAssembly(); } string text = containingAssembly.GetManifestResourceNames().FirstOrDefault([<bb5e3e5e-5c47-485a-88ef-ea5afd7f01c7>NullableContext(0)] (string str) => str.EndsWith(resourceFileName, StringComparison.Ordinal)); if (text != null) { containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream); } return (memoryStream.Length == 0L) ? null : memoryStream.ToArray(); } } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>AllowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>DisallowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>DoesNotReturnAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>DoesNotReturnIfAttribute : Attribute { public bool ParameterValue { get; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DoesNotReturnIfAttribute(bool parameterValue) { ParameterValue = parameterValue; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>MaybeNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>MaybeNullWhenAttribute : Attribute { public bool ReturnValue { get; } public <c1115aee-2ebb-4910-9809-e81b758f145c>MaybeNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>NotNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>NotNullIfNotNullAttribute : Attribute { public string ParameterName { get; } public <c1115aee-2ebb-4910-9809-e81b758f145c>NotNullIfNotNullAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>NotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public <c1115aee-2ebb-4910-9809-e81b758f145c>NotNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } } namespace System.Collections.Generic { internal static class DeconstructionExtensions { public static void Deconstruct<TKey, TValue>(this KeyValuePair<TKey, TValue> pair, out TKey key, out TValue value) { key = pair.Key; value = pair.Value; } } } namespace YamlDotNet { internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>CultureInfoAdapter : CultureInfo { private readonly IFormatProvider provider; public <c1115aee-2ebb-4910-9809-e81b758f145c>CultureInfoAdapter(CultureInfo baseCulture, IFormatProvider provider) : base(baseCulture.LCID) { this.provider = provider; } public override object? GetFormat(Type? formatType) { return provider.GetFormat(formatType); } } internal static class <c1115aee-2ebb-4910-9809-e81b758f145c>ReflectionExtensions { private static readonly FieldInfo? RemoteStackTraceField = typeof(Exception).GetField("_remoteStackTraceString", BindingFlags.Instance | BindingFlags.NonPublic); public static Type? BaseType(this Type type) { return type.BaseType; } public static bool IsValueType(this Type type) { return type.IsValueType; } public static bool IsGenericType(this Type type) { return type.IsGenericType; } public static bool IsGenericTypeDefinition(this Type type) { return type.IsGenericTypeDefinition; } public static bool IsInterface(this Type type) { return type.IsInterface; } public static bool IsEnum(this Type type) { return type.IsEnum; } public static bool IsDbNull(this object value) { return value is DBNull; } public static bool HasDefaultConstructor(this Type type) { if (!type.IsValueType) { return type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null) != null; } return true; } public static TypeCode GetTypeCode(this Type type) { return Type.GetTypeCode(type); } public static PropertyInfo? GetPublicProperty(this Type type, string name) { return type.GetProperty(name); } public static FieldInfo? GetPublicStaticField(this Type type, string name) { return type.GetField(name, BindingFlags.Static | BindingFlags.Public); } public static IEnumerable<PropertyInfo> GetProperties(this Type type, bool includeNonPublic) { BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public; if (includeNonPublic) { bindingFlags |= BindingFlags.NonPublic; } if (!type.IsInterface) { return type.GetProperties(bindingFlags); } return new Type[1] { type }.Concat(type.GetInterfaces()).SelectMany((Type i) => i.GetProperties(bindingFlags)); } public static IEnumerable<PropertyInfo> GetPublicProperties(this Type type) { return GetProperties(type, includeNonPublic: false); } public static IEnumerable<FieldInfo> GetPublicFields(this Type type) { return type.GetFields(BindingFlags.Instance | BindingFlags.Public); } public static IEnumerable<MethodInfo> GetPublicStaticMethods(this Type type) { return type.GetMethods(BindingFlags.Static | BindingFlags.Public); } public static MethodInfo GetPrivateStaticMethod(this Type type, string name) { return type.GetMethod(name, BindingFlags.Static | BindingFlags.NonPublic) ?? throw new MissingMethodException("Expected to find a method named '" + name + "' in '" + type.FullName + "'."); } public static MethodInfo? GetPublicStaticMethod(this Type type, string name, params Type[] parameterTypes) { return type.GetMethod(name, BindingFlags.Static | BindingFlags.Public, null, parameterTypes, null); } public static MethodInfo? GetPublicInstanceMethod(this Type type, string name) { return type.GetMethod(name, BindingFlags.Instance | BindingFlags.Public); } public static Exception Unwrap(this TargetInvocationException ex) { Exception innerException = ex.InnerException; if (innerException == null) { return ex; } if (RemoteStackTraceField != null) { RemoteStackTraceField.SetValue(innerException, innerException.StackTrace + "\r\n"); } return innerException; } public static bool IsInstanceOf(this Type type, object o) { return type.IsInstanceOfType(o); } public static Attribute[] GetAllCustomAttributes<TAttribute>(this PropertyInfo property) { return Attribute.GetCustomAttributes(property, typeof(TAttribute)); } } internal static class <c1115aee-2ebb-4910-9809-e81b758f145c>PropertyInfoExtensions { public static object? ReadValue(this PropertyInfo property, object target) { return property.GetValue(target, null); } } internal static class <c1115aee-2ebb-4910-9809-e81b758f145c>StandardRegexOptions { public const RegexOptions Compiled = RegexOptions.Compiled; } } namespace YamlDotNet.Serialization { internal abstract class <c1115aee-2ebb-4910-9809-e81b758f145c>BuilderSkeleton<TBuilder> where TBuilder : <c1115aee-2ebb-4910-9809-e81b758f145c>BuilderSkeleton<TBuilder> { internal <c1115aee-2ebb-4910-9809-e81b758f145c>INamingConvention namingConvention = <c1115aee-2ebb-4910-9809-e81b758f145c>NullNamingConvention.Instance; internal <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeResolver typeResolver; internal readonly <c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributeOverrides overrides; internal readonly <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> typeConverterFactories; internal readonly <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector> typeInspectorFactories; private bool ignoreFields; private bool includeNonPublicProperties; protected abstract TBuilder Self { get; } internal <c1115aee-2ebb-4910-9809-e81b758f145c>BuilderSkeleton(<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeResolver typeResolver) { overrides = new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributeOverrides(); typeConverterFactories = new <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> { { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>GuidConverter), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>GuidConverter(jsonCompatible: false) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>SystemTypeConverter), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>SystemTypeConverter() } }; typeInspectorFactories = new <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector>(); this.typeResolver = typeResolver ?? throw new ArgumentNullException("typeResolver"); } internal <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector BuildTypeInspector() { <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector2 = new <c1115aee-2ebb-4910-9809-e81b758f145c>ReadablePropertiesTypeInspector(typeResolver, includeNonPublicProperties); if (!ignoreFields) { <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector2 = new <c1115aee-2ebb-4910-9809-e81b758f145c>CompositeTypeInspector(new <c1115aee-2ebb-4910-9809-e81b758f145c>ReadableFieldsTypeInspector(typeResolver), <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector2); } return typeInspectorFactories.BuildComponentChain(<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector2); } public TBuilder IgnoreFields() { ignoreFields = true; return Self; } public TBuilder IncludeNonPublicProperties() { includeNonPublicProperties = true; return Self; } public TBuilder WithNamingConvention(<c1115aee-2ebb-4910-9809-e81b758f145c>INamingConvention namingConvention) { this.namingConvention = namingConvention ?? throw new ArgumentNullException("namingConvention"); return Self; } public TBuilder WithTypeResolver(<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeResolver typeResolver) { this.typeResolver = typeResolver ?? throw new ArgumentNullException("typeResolver"); return Self; } public abstract TBuilder WithTagMapping(<c1115aee-2ebb-4910-9809-e81b758f145c>TagName tag, Type type); public TBuilder WithAttributeOverride<TClass>(Expression<Func<TClass, object>> propertyAccessor, Attribute attribute) { overrides.Add(propertyAccessor, attribute); return Self; } public TBuilder WithAttributeOverride(Type type, string member, Attribute attribute) { overrides.Add(type, member, attribute); return Self; } public TBuilder WithTypeConverter(<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter typeConverter) { return WithTypeConverter(typeConverter, delegate(<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> w) { w.OnTop(); }); } public TBuilder WithTypeConverter(<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter typeConverter, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter>> where) { <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter typeConverter2 = typeConverter; if (typeConverter2 == null) { throw new ArgumentNullException("typeConverter"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeConverterFactories.CreateRegistrationLocationSelector(typeConverter2.GetType(), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => typeConverter2)); return Self; } public TBuilder WithTypeConverter<TYamlTypeConverter>(<c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter, <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> typeConverterFactory, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>ITrackingRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter>> where) where TYamlTypeConverter : <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter { <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter, <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> typeConverterFactory2 = typeConverterFactory; if (typeConverterFactory2 == null) { throw new ArgumentNullException("typeConverterFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeConverterFactories.CreateTrackingRegistrationLocationSelector(typeof(TYamlTypeConverter), (<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter wrapped, <c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => typeConverterFactory2(wrapped))); return Self; } public TBuilder WithoutTypeConverter<TYamlTypeConverter>() where TYamlTypeConverter : <c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter { return WithoutTypeConverter(typeof(TYamlTypeConverter)); } public TBuilder WithoutTypeConverter(Type converterType) { if (converterType == null) { throw new ArgumentNullException("converterType"); } typeConverterFactories.Remove(converterType); return Self; } public TBuilder WithTypeInspector<TTypeInspector>(Func<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, TTypeInspector> typeInspectorFactory) where TTypeInspector : <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector { return WithTypeInspector(typeInspectorFactory, delegate(<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector> w) { w.OnTop(); }); } public TBuilder WithTypeInspector<TTypeInspector>(Func<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, TTypeInspector> typeInspectorFactory, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector>> where) where TTypeInspector : <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector { Func<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, TTypeInspector> typeInspectorFactory2 = typeInspectorFactory; if (typeInspectorFactory2 == null) { throw new ArgumentNullException("typeInspectorFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeInspectorFactories.CreateRegistrationLocationSelector(typeof(TTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => typeInspectorFactory2(inner))); return Self; } public TBuilder WithTypeInspector<TTypeInspector>(<c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, TTypeInspector> typeInspectorFactory, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>ITrackingRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector>> where) where TTypeInspector : <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector { <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector, TTypeInspector> typeInspectorFactory2 = typeInspectorFactory; if (typeInspectorFactory2 == null) { throw new ArgumentNullException("typeInspectorFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeInspectorFactories.CreateTrackingRegistrationLocationSelector(typeof(TTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector wrapped, <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => typeInspectorFactory2(wrapped, inner))); return Self; } public TBuilder WithoutTypeInspector<TTypeInspector>() where TTypeInspector : <c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector { return WithoutTypeInspector(typeof(TTypeInspector)); } public TBuilder WithoutTypeInspector(Type inspectorType) { if (inspectorType == null) { throw new ArgumentNullException("inspectorType"); } typeInspectorFactories.Remove(inspectorType); return Self; } protected IEnumerable<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> BuildTypeConverters() { return typeConverterFactories.BuildComponentList(); } } internal delegate TComponent <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<TComponentBase, TComponent>(TComponentBase wrapped) where TComponent : TComponentBase; internal delegate TComponent <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<TArgument, TComponentBase, TComponent>(TComponentBase wrapped, TArgument argument) where TComponent : TComponentBase; [Flags] internal enum <c1115aee-2ebb-4910-9809-e81b758f145c>DefaultValuesHandling { Preserve = 0, OmitNull = 1, OmitDefaults = 2, OmitEmptyCollections = 4 } internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer : <c1115aee-2ebb-4910-9809-e81b758f145c>IDeserializer { private readonly <c1115aee-2ebb-4910-9809-e81b758f145c>IValueDeserializer valueDeserializer; public <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer() : this(new <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder().BuildValueDeserializer()) { } private <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer(<c1115aee-2ebb-4910-9809-e81b758f145c>IValueDeserializer valueDeserializer) { this.valueDeserializer = valueDeserializer ?? throw new ArgumentNullException("valueDeserializer"); } public static <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer FromValueDeserializer(<c1115aee-2ebb-4910-9809-e81b758f145c>IValueDeserializer valueDeserializer) { return new <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer(valueDeserializer); } public T Deserialize<T>(string input) { using StringReader input2 = new StringReader(input); return Deserialize<T>(input2); } public T Deserialize<T>(TextReader input) { return Deserialize<T>(new <c1115aee-2ebb-4910-9809-e81b758f145c>Parser(input)); } public object? Deserialize(TextReader input) { return Deserialize(input, typeof(object)); } public object? Deserialize(string input, Type type) { using StringReader input2 = new StringReader(input); return Deserialize(input2, type); } public object? Deserialize(TextReader input, Type type) { return Deserialize(new <c1115aee-2ebb-4910-9809-e81b758f145c>Parser(input), type); } public T Deserialize<T>(<c1115aee-2ebb-4910-9809-e81b758f145c>IParser parser) { return (T)Deserialize(parser, typeof(T)); } public object? Deserialize(<c1115aee-2ebb-4910-9809-e81b758f145c>IParser parser) { return Deserialize(parser, typeof(object)); } public object? Deserialize(<c1115aee-2ebb-4910-9809-e81b758f145c>IParser parser, Type type) { if (parser == null) { throw new ArgumentNullException("parser"); } if (type == null) { throw new ArgumentNullException("type"); } YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>StreamStart @event; bool flag = parser.TryConsume<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>StreamStart>(out @event); YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>DocumentStart event2; bool flag2 = parser.TryConsume<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>DocumentStart>(out event2); object result = null; if (!parser.Accept<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>DocumentEnd>(out var _) && !parser.Accept<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>StreamEnd>(out var _)) { using <c1115aee-2ebb-4910-9809-e81b758f145c>SerializerState <c1115aee-2ebb-4910-9809-e81b758f145c>SerializerState = new <c1115aee-2ebb-4910-9809-e81b758f145c>SerializerState(); result = valueDeserializer.DeserializeValue(parser, type, <c1115aee-2ebb-4910-9809-e81b758f145c>SerializerState, valueDeserializer); <c1115aee-2ebb-4910-9809-e81b758f145c>SerializerState.OnDeserialization(); } if (flag2) { parser.Consume<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>DocumentEnd>(); } if (flag) { parser.Consume<YamlDotNet.Core.Events.<c1115aee-2ebb-4910-9809-e81b758f145c>StreamEnd>(); } return result; } } internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder : <c1115aee-2ebb-4910-9809-e81b758f145c>BuilderSkeleton<<c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder> { private Lazy<<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectFactory> objectFactory; private readonly <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer> nodeDeserializerFactories; private readonly <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver> nodeTypeResolverFactories; private readonly Dictionary<<c1115aee-2ebb-4910-9809-e81b758f145c>TagName, Type> tagMappings; private readonly Dictionary<Type, Type> typeMappings; private bool ignoreUnmatched; protected override <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder Self => this; public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder() : base((<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeResolver)new <c1115aee-2ebb-4910-9809-e81b758f145c>StaticTypeResolver()) { typeMappings = new Dictionary<Type, Type>(); objectFactory = new Lazy<<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectFactory>(() => new <c1115aee-2ebb-4910-9809-e81b758f145c>DefaultObjectFactory(typeMappings), isThreadSafe: true); tagMappings = new Dictionary<<c1115aee-2ebb-4910-9809-e81b758f145c>TagName, Type> { { <c1115aee-2ebb-4910-9809-e81b758f145c>FailsafeSchema.Tags.Map, typeof(Dictionary<object, object>) }, { <c1115aee-2ebb-4910-9809-e81b758f145c>FailsafeSchema.Tags.Str, typeof(string) }, { <c1115aee-2ebb-4910-9809-e81b758f145c>JsonSchema.Tags.Bool, typeof(bool) }, { <c1115aee-2ebb-4910-9809-e81b758f145c>JsonSchema.Tags.Float, typeof(double) }, { <c1115aee-2ebb-4910-9809-e81b758f145c>JsonSchema.Tags.Int, typeof(int) }, { <c1115aee-2ebb-4910-9809-e81b758f145c>DefaultSchema.Tags.Timestamp, typeof(DateTime) } }; typeInspectorFactories.Add(typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>CachedTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => new <c1115aee-2ebb-4910-9809-e81b758f145c>CachedTypeInspector(inner)); typeInspectorFactories.Add(typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>NamingConventionTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => (!(namingConvention is <c1115aee-2ebb-4910-9809-e81b758f145c>NullNamingConvention)) ? new <c1115aee-2ebb-4910-9809-e81b758f145c>NamingConventionTypeInspector(inner, namingConvention) : inner); typeInspectorFactories.Add(typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributesTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributesTypeInspector(inner)); typeInspectorFactories.Add(typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributeOverridesInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => (overrides == null) ? inner : new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlAttributeOverridesInspector(inner, overrides.Clone())); typeInspectorFactories.Add(typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>ReadableAndWritablePropertiesTypeInspector), (<c1115aee-2ebb-4910-9809-e81b758f145c>ITypeInspector inner) => new <c1115aee-2ebb-4910-9809-e81b758f145c>ReadableAndWritablePropertiesTypeInspector(inner)); nodeDeserializerFactories = new <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer> { { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlConvertibleNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlConvertibleNodeDeserializer(objectFactory.Value) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlSerializableNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlSerializableNodeDeserializer(objectFactory.Value) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>TypeConverterNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>TypeConverterNodeDeserializer(BuildTypeConverters()) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>NullNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>NullNodeDeserializer() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>ScalarNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>ScalarNodeDeserializer() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>ArrayNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>ArrayNodeDeserializer() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>DictionaryNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>DictionaryNodeDeserializer(objectFactory.Value) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>CollectionNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>CollectionNodeDeserializer(objectFactory.Value) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>EnumerableNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>EnumerableNodeDeserializer() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>ObjectNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>ObjectNodeDeserializer(objectFactory.Value, BuildTypeInspector(), ignoreUnmatched) } }; nodeTypeResolverFactories = new <c1115aee-2ebb-4910-9809-e81b758f145c>LazyComponentRegistrationList<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing, <c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver> { { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>MappingNodeTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>MappingNodeTypeResolver(typeMappings) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlConvertibleTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlConvertibleTypeResolver() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>YamlSerializableTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>YamlSerializableTypeResolver() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>TagNodeTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>TagNodeTypeResolver(tagMappings) }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>PreventUnknownTagsNodeTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>PreventUnknownTagsNodeTypeResolver() }, { typeof(<c1115aee-2ebb-4910-9809-e81b758f145c>DefaultContainersNodeTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => new <c1115aee-2ebb-4910-9809-e81b758f145c>DefaultContainersNodeTypeResolver() } }; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithObjectFactory(<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectFactory objectFactory) { <c1115aee-2ebb-4910-9809-e81b758f145c>IObjectFactory objectFactory2 = objectFactory; if (objectFactory2 == null) { throw new ArgumentNullException("objectFactory"); } this.objectFactory = new Lazy<<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectFactory>(() => objectFactory2, isThreadSafe: true); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithObjectFactory(Func<Type, object> objectFactory) { if (objectFactory == null) { throw new ArgumentNullException("objectFactory"); } return WithObjectFactory(new <c1115aee-2ebb-4910-9809-e81b758f145c>LambdaObjectFactory(objectFactory)); } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeDeserializer(<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer nodeDeserializer) { return WithNodeDeserializer(nodeDeserializer, delegate(<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer> w) { w.OnTop(); }); } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeDeserializer(<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer nodeDeserializer, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer>> where) { <c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer nodeDeserializer2 = nodeDeserializer; if (nodeDeserializer2 == null) { throw new ArgumentNullException("nodeDeserializer"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeDeserializerFactories.CreateRegistrationLocationSelector(nodeDeserializer2.GetType(), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => nodeDeserializer2)); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeDeserializer<TNodeDeserializer>(<c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer, TNodeDeserializer> nodeDeserializerFactory, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>ITrackingRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer>> where) where TNodeDeserializer : <c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer { <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer, TNodeDeserializer> nodeDeserializerFactory2 = nodeDeserializerFactory; if (nodeDeserializerFactory2 == null) { throw new ArgumentNullException("nodeDeserializerFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeDeserializerFactories.CreateTrackingRegistrationLocationSelector(typeof(TNodeDeserializer), (<c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer wrapped, <c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => nodeDeserializerFactory2(wrapped))); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithoutNodeDeserializer<TNodeDeserializer>() where TNodeDeserializer : <c1115aee-2ebb-4910-9809-e81b758f145c>INodeDeserializer { return WithoutNodeDeserializer(typeof(TNodeDeserializer)); } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithoutNodeDeserializer(Type nodeDeserializerType) { if (nodeDeserializerType == null) { throw new ArgumentNullException("nodeDeserializerType"); } nodeDeserializerFactories.Remove(nodeDeserializerType); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeTypeResolver(<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver nodeTypeResolver) { return WithNodeTypeResolver(nodeTypeResolver, delegate(<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver> w) { w.OnTop(); }); } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeTypeResolver(<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver nodeTypeResolver, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>IRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver>> where) { <c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver nodeTypeResolver2 = nodeTypeResolver; if (nodeTypeResolver2 == null) { throw new ArgumentNullException("nodeTypeResolver"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeTypeResolverFactories.CreateRegistrationLocationSelector(nodeTypeResolver2.GetType(), (<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => nodeTypeResolver2)); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithNodeTypeResolver<TNodeTypeResolver>(<c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver, TNodeTypeResolver> nodeTypeResolverFactory, Action<<c1115aee-2ebb-4910-9809-e81b758f145c>ITrackingRegistrationLocationSelectionSyntax<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver>> where) where TNodeTypeResolver : <c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver { <c1115aee-2ebb-4910-9809-e81b758f145c>WrapperFactory<<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver, TNodeTypeResolver> nodeTypeResolverFactory2 = nodeTypeResolverFactory; if (nodeTypeResolverFactory2 == null) { throw new ArgumentNullException("nodeTypeResolverFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeTypeResolverFactories.CreateTrackingRegistrationLocationSelector(typeof(TNodeTypeResolver), (<c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver wrapped, <c1115aee-2ebb-4910-9809-e81b758f145c>Nothing _) => nodeTypeResolverFactory2(wrapped))); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithoutNodeTypeResolver<TNodeTypeResolver>() where TNodeTypeResolver : <c1115aee-2ebb-4910-9809-e81b758f145c>INodeTypeResolver { return WithoutNodeTypeResolver(typeof(TNodeTypeResolver)); } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithoutNodeTypeResolver(Type nodeTypeResolverType) { if (nodeTypeResolverType == null) { throw new ArgumentNullException("nodeTypeResolverType"); } nodeTypeResolverFactories.Remove(nodeTypeResolverType); return this; } public override <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithTagMapping(<c1115aee-2ebb-4910-9809-e81b758f145c>TagName tag, Type type) { if (tag.IsEmpty) { throw new ArgumentException("Non-specific tags cannot be maped"); } if (type == null) { throw new ArgumentNullException("type"); } if (tagMappings.TryGetValue(tag, out Type value)) { throw new ArgumentException($"Type already has a registered type '{value.FullName}' for tag '{tag}'", "tag"); } tagMappings.Add(tag, type); return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithTypeMapping<TInterface, TConcrete>() where TConcrete : TInterface { Type typeFromHandle = typeof(TInterface); Type typeFromHandle2 = typeof(TConcrete); if (!typeFromHandle.IsAssignableFrom(typeFromHandle2)) { throw new InvalidOperationException("The type '" + typeFromHandle2.Name + "' does not implement interface '" + typeFromHandle.Name + "'."); } if (typeMappings.ContainsKey(typeFromHandle)) { typeMappings[typeFromHandle] = typeFromHandle2; } else { typeMappings.Add(typeFromHandle, typeFromHandle2); } return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder WithoutTagMapping(<c1115aee-2ebb-4910-9809-e81b758f145c>TagName tag) { if (tag.IsEmpty) { throw new ArgumentException("Non-specific tags cannot be maped"); } if (!tagMappings.Remove(tag)) { throw new KeyNotFoundException($"Tag '{tag}' is not registered"); } return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>DeserializerBuilder IgnoreUnmatchedProperties() { ignoreUnmatched = true; return this; } public <c1115aee-2ebb-4910-9809-e81b758f145c>IDeserializer Build() { return <c1115aee-2ebb-4910-9809-e81b758f145c>Deserializer.FromValueDeserializer(BuildValueDeserializer()); } public <c1115aee-2ebb-4910-9809-e81b758f145c>IValueDeserializer BuildValueDeserializer() { return new <c1115aee-2ebb-4910-9809-e81b758f145c>AliasValueDeserializer(new <c1115aee-2ebb-4910-9809-e81b758f145c>NodeValueDeserializer(nodeDeserializerFactories.BuildComponentList(), nodeTypeResolverFactories.BuildComponentList())); } } internal sealed class <c1115aee-2ebb-4910-9809-e81b758f145c>EmissionPhaseObjectGraphVisitorArgs { private readonly IEnumerable<<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectGraphVisitor<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing>> preProcessingPhaseVisitors; public <c1115aee-2ebb-4910-9809-e81b758f145c>IObjectGraphVisitor<<c1115aee-2ebb-4910-9809-e81b758f145c>IEmitter> InnerVisitor { get; private set; } public <c1115aee-2ebb-4910-9809-e81b758f145c>IEventEmitter EventEmitter { get; private set; } public <c1115aee-2ebb-4910-9809-e81b758f145c>ObjectSerializer NestedObjectSerializer { get; private set; } public IEnumerable<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> TypeConverters { get; private set; } public <c1115aee-2ebb-4910-9809-e81b758f145c>EmissionPhaseObjectGraphVisitorArgs(<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectGraphVisitor<<c1115aee-2ebb-4910-9809-e81b758f145c>IEmitter> innerVisitor, <c1115aee-2ebb-4910-9809-e81b758f145c>IEventEmitter eventEmitter, IEnumerable<<c1115aee-2ebb-4910-9809-e81b758f145c>IObjectGraphVisitor<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing>> preProcessingPhaseVisitors, IEnumerable<<c1115aee-2ebb-4910-9809-e81b758f145c>IYamlTypeConverter> typeConverters, <c1115aee-2ebb-4910-9809-e81b758f145c>ObjectSerializer nestedObjectSerializer) { InnerVisitor = innerVisitor ?? throw new ArgumentNullException("innerVisitor"); EventEmitter = eventEmitter ?? throw new ArgumentNullException("eventEmitter"); this.preProcessingPhaseVisitors = preProcessingPhaseVisitors ?? throw new ArgumentNullException("preProcessingPhaseVisitors"); TypeConverters = typeConverters ?? throw new ArgumentNullException("typeConverters"); NestedObjectSerializer = nestedObjectSerializer ?? throw new ArgumentNullException("nestedObjectSerializer"); } public T GetPreProcessingPhaseObjectGraphVisitor<T>() where T : <c1115aee-2ebb-4910-9809-e81b758f145c>IObjectGraphVisitor<<c1115aee-2ebb-4910-9809-e81b758f145c>Nothing