Decompiled source of Magic Supremacy v2.0.9

plugins/Magic_Supremacy.dll

Decompiled 2 weeks ago
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.Cryptography;
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 ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using PieceManager;
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.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("Magic_Supremacy")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Magic_Supremacy")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")]
[assembly: AssemblyFileVersion("2.0.9")]
[assembly: AssemblyCompany("Dreanegade")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.9.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded]
	internal sealed class <98c5c92b-6880-4410-a4aa-d6d95da9d3f2>EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	[CompilerGenerated]
	[<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded]
	internal sealed class <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	[<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded]
	[CompilerGenerated]
	internal sealed class <3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public <3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace SharedTools
{
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	public static class ZDOCleanup
	{
		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
		[HarmonyPatch(typeof(ZNetScene), "Awake")]
		public static class ZDOCleanupPatch
		{
			private static void Postfix(ZNetScene __instance)
			{
				((MonoBehaviour)__instance).StartCoroutine(DelayedCleanup());
			}

			private static IEnumerator DelayedCleanup()
			{
				yield return (object)new WaitForSeconds(1f);
				RunCleanup();
			}
		}

		private static readonly string[] _oldProjectilePrefabs = new string[3] { "projectile_stormcaller_staff_sphere_DO", "projectile_frostcaller_staff_shard_DO", "projectile_lightcaller_staff_sphere_DO" };

		public static void RunCleanup()
		{
			if ((Object)(object)ZNetScene.instance == (Object)null || ZDOMan.instance == null)
			{
				return;
			}
			int num = 0;
			int num2 = 0;
			foreach (ZDO item in ZDOMan.instance.m_objectsByID.Values.ToList())
			{
				GameObject prefab = ZNetScene.instance.GetPrefab(item.m_prefab);
				if ((Object)(object)prefab == (Object)null)
				{
					ZDOMan.instance.DestroyZDO(item);
					num2++;
				}
				else if (_oldProjectilePrefabs.Contains(((Object)prefab).name))
				{
					ZDOMan.instance.DestroyZDO(item);
					num++;
				}
			}
			if (num > 0 || num2 > 0)
			{
				ZLog.Log((object)$"ZDOCleanup: Cleaned {num} old projectiles and {num2} orphan ZDO(s).");
			}
			else
			{
				ZLog.Log((object)"ZDOCleanup: No old or orphan ZDOs found.");
			}
		}
	}
}
namespace Magic_Supremacy
{
	[BepInPlugin("Dreanegade.Magic_Supremacy", "Magic_Supremacy", "2.0.9")]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	public class Magic_SupremacyPlugin : BaseUnityPlugin
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)]
		public enum Toggle
		{
			On = 1,
			Off = 0
		}

		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)]
		private class ConfigurationManagerAttributes
		{
			[UsedImplicitly]
			public int? Order;

			[UsedImplicitly]
			public bool? Browsable;

			[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
			[UsedImplicitly]
			public string Category;

			[UsedImplicitly]
			[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(new byte[] { 2, 1 })]
			public Action<ConfigEntryBase> CustomDrawer;
		}

		internal const string ModName = "Magic_Supremacy";

		internal const string ModVersion = "2.0.9";

		internal const string Author = "Dreanegade";

		private const string ModGUID = "Dreanegade.Magic_Supremacy";

		private static string ConfigFileName = "Dreanegade.Magic_Supremacy.cfg";

		private static string ConfigFileFullPath;

		internal static string ConnectionError;

		private readonly Harmony _harmony = new Harmony("Dreanegade.Magic_Supremacy");

		public static readonly ManualLogSource Magic_SupremacyLogger;

		private static readonly ConfigSync ConfigSync;

		private static ConfigEntry<Toggle> _serverConfigLocked;

		private static ConfigEntry<Toggle> _recipeIsActiveConfig;

		public void Awake()
		{
			Localizer.Load();
			_serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only.");
			ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
			AssetBundle assets = PrefabManager.RegisterAssetBundle("magic_supremacy");
			BuildPiece.ConfigurationEnabled = true;
			PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_heal_start_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_lightcaller_staff_heal_swirl_DO");
			PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_sun_start_DO");
			PrefabManager.RegisterPrefab(assets, "aoe_lightcaller_staff_sun_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_lightcaller_staff_sun_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_lightcaller_staff_sphere_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_lightcaller_staff_sphere_fire_DO");
			PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_sphere_hit_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_deathcaller_staff_poison_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_deathcaller_staff_poison_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_deathcaller_staff_blaster_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_deathcaller_staff_blaster_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_frostcaller_staff_shard_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_frostcaller_staff_shotgun_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_ice_shotgun_fire");
			PrefabManager.RegisterPrefab(assets, "fx_frostcaller_staff_shard_hit_DO");
			PrefabManager.RegisterPrefab(assets, "fx_frostcaller_bow_shot_DO");
			PrefabManager.RegisterPrefab(assets, "aoe_firecaller_staff_ring_DO");
			PrefabManager.RegisterPrefab(assets, "fx_firecaller_staff_ring_summon_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_ring_metal_hit_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_shard_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_shard_fire_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_shard_knife_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_blaster_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_blaster_shot_DO");
			PrefabManager.RegisterPrefab(assets, "fx_firecallercaller_staff_blaster_hit_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_thrower_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_thrower_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_stormcaller_staff_shock_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_stormcaller_staff_shock_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_stormcaller_staff_sphere_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_stormcaller_staff_sphere_DO");
			PrefabManager.RegisterPrefab(assets, "fx_stormcaller_staff_sphere_hit_DO");
			PrefabManager.RegisterPrefab(assets, "aoe_totemcaller_staff_buff_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_totemcaller_staff_buff_head_DO");
			PrefabManager.RegisterPrefab(assets, "fx_totemcaller_staff_buff_start_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_staff_buff_wave_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_staff_buff_DO");
			PrefabManager.RegisterPrefab(assets, "aoe_totemcaller_staff_pull_DO");
			PrefabManager.RegisterPrefab(assets, "fx_totemcaller_staff_pull_start_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_staff_pull_wave_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_staff_pull_DO");
			PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_boomerang_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_totemcaller_boomerang_hit_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_boomerang_fire_DO");
			PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_feather_start_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_windcaller_staff_feather_back_DO");
			PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_shield_start_DO");
			PrefabManager.RegisterPrefab(assets, "vfx_windcaller_staff_shield_sphere_DO");
			PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_shield_hit_DO");
			PrefabManager.RegisterPrefab(assets, "sfx_windcaller_staff_shield_break_DO");
			BuildPiece buildPiece = new BuildPiece("magic_supremacy", "MagicWeaverDO");
			buildPiece.RequiredItems.Add("Bronze", 6, recover: true);
			buildPiece.RequiredItems.Add("CrystalRoseheartDO", 1, recover: true);
			buildPiece.RequiredItems.Add("DimEitrRemnantDO", 1, recover: true);
			buildPiece.RequiredItems.Add("Dandelion", 10, recover: true);
			buildPiece.Category.Set("Distant Origins");
			buildPiece.Crafting.Set(PieceManager.CraftingTable.Forge);
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece2 = new BuildPiece("magic_supremacy", "EssenceCauldronDO");
			buildPiece2.RequiredItems.Add("Bronze", 6, recover: true);
			buildPiece2.RequiredItems.Add("Ruby", 2, recover: true);
			buildPiece2.RequiredItems.Add("DimEitrDO", 2, recover: true);
			buildPiece2.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece3 = new BuildPiece("magic_supremacy", "MagicWeaverExt1DO");
			buildPiece3.RequiredItems.Add("SpiritLightDO", 3, recover: true);
			buildPiece3.RequiredItems.Add("Bronze", 5, recover: true);
			buildPiece3.RequiredItems.Add("DimEitrDO", 2, recover: true);
			buildPiece3.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece4 = new BuildPiece("magic_supremacy", "MagicWeaverExt2DO");
			buildPiece4.RequiredItems.Add("SpiritDeathDO", 3, recover: true);
			buildPiece4.RequiredItems.Add("Iron", 5, recover: true);
			buildPiece4.RequiredItems.Add("DimEitrDO", 4, recover: true);
			buildPiece4.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece5 = new BuildPiece("magic_supremacy", "MagicWeaverExt3DO");
			buildPiece5.RequiredItems.Add("SpiritFrostDO", 3, recover: true);
			buildPiece5.RequiredItems.Add("Silver", 5, recover: true);
			buildPiece5.RequiredItems.Add("DimEitrDO", 6, recover: true);
			buildPiece5.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece6 = new BuildPiece("magic_supremacy", "MagicWeaverExt4DO");
			buildPiece6.RequiredItems.Add("SpiritFireDO", 3, recover: true);
			buildPiece6.RequiredItems.Add("BlackMetal", 5, recover: true);
			buildPiece6.RequiredItems.Add("DimEitrDO", 8, recover: true);
			buildPiece6.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece7 = new BuildPiece("magic_supremacy", "MagicWeaverExt5DO");
			buildPiece7.RequiredItems.Add("SpiritStormDO", 3, recover: true);
			buildPiece7.RequiredItems.Add("Iron", 10, recover: true);
			buildPiece7.RequiredItems.Add("Eitr", 8, recover: true);
			buildPiece7.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece8 = new BuildPiece("magic_supremacy", "MagicWeaverExt1aDO");
			buildPiece8.RequiredItems.Add("SpiritAncestorsDO", 3, recover: true);
			buildPiece8.RequiredItems.Add("Bronze", 5, recover: true);
			buildPiece8.RequiredItems.Add("DimEitrDO", 2, recover: true);
			buildPiece8.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			BuildPiece buildPiece9 = new BuildPiece("magic_supremacy", "MagicWeaverExt3aDO");
			buildPiece9.RequiredItems.Add("SpiritWindDO", 3, recover: true);
			buildPiece9.RequiredItems.Add("Silver", 5, recover: true);
			buildPiece9.RequiredItems.Add("DimEitrDO", 6, recover: true);
			buildPiece9.Category.Set("Distant Origins");
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			Item item = new Item("magic_supremacy", "SpiritLightDO");
			item.DropsFrom.Add("Neck", 0.05f, 1, 1);
			item.DropsFrom.Add("Boar", 0.05f, 1, 1);
			item.DropsFrom.Add("Deer", 0.05f, 1, 2);
			item.DropsFrom.Add("Greyling", 0.05f, 1, 1);
			item.DropsFrom.Add("Eikthyr", 1f, 4, 8);
			item.DropsFrom.Add("Greydwarf", 0.1f, 1, 2);
			item.DropsFrom.Add("Greydwarf_Elite", 0.3f, 1, 3);
			item.DropsFrom.Add("Greydwarf_Shaman", 0.3f, 1, 3);
			item.DropsFrom.Add("Troll", 0.4f, 1, 5);
			item.DropsFrom.Add("gd_king", 1f, 4, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Light", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item2 = new Item("magic_supremacy", "SpiritDeathDO");
			item2.DropsFrom.Add("Draugr", 0.1f, 1, 2);
			item2.DropsFrom.Add("Draugr_Ranged", 0.1f, 1, 2);
			item2.DropsFrom.Add("Draugr_Elite", 0.3f, 2, 3);
			item2.DropsFrom.Add("Blob", 0.15f, 1, 1);
			item2.DropsFrom.Add("BlobElite", 0.2f, 1, 2);
			item2.DropsFrom.Add("Leech", 0.05f, 1, 1);
			item2.DropsFrom.Add("Wraith", 0.4f, 1, 3);
			item2.DropsFrom.Add("Abomination", 0.5f, 1, 5);
			item2.DropsFrom.Add("Bonemass", 1f, 5, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Death", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item2.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item3 = new Item("magic_supremacy", "SpiritFrostDO");
			item3.DropsFrom.Add("Bat", 0.05f, 1, 1);
			item3.DropsFrom.Add("Wolf", 0.1f, 1, 2);
			item3.DropsFrom.Add("Hatchling", 0.2f, 1, 2);
			item3.DropsFrom.Add("Fenring", 0.3f, 1, 3);
			item3.DropsFrom.Add("Fenring_Cultist", 0.3f, 1, 3);
			item3.DropsFrom.Add("Ulv", 0.3f, 1, 3);
			item3.DropsFrom.Add("StoneGolem", 0.5f, 1, 5);
			item3.DropsFrom.Add("Dragon", 1f, 5, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Frost", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item3.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item4 = new Item("magic_supremacy", "SpiritFireDO");
			item4.DropsFrom.Add("Lox", 0.15f, 1, 2);
			item4.DropsFrom.Add("Deathsquito", 0.1f, 1, 2);
			item4.DropsFrom.Add("Goblin", 0.1f, 1, 2);
			item4.DropsFrom.Add("GoblinArcher", 0.1f, 1, 2);
			item4.DropsFrom.Add("GoblinBrute", 0.3f, 2, 3);
			item4.DropsFrom.Add("GoblinShaman", 0.3f, 2, 3);
			item4.DropsFrom.Add("BlobTar", 0.25f, 1, 3);
			item4.DropsFrom.Add("Yagluth", 1f, 5, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Fire", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item4.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item5 = new Item("magic_supremacy", "SpiritStormDO");
			item5.DropsFrom.Add("Tick", 0.1f, 1, 1);
			item5.DropsFrom.Add("Seeker", 0.15f, 1, 1);
			item5.DropsFrom.Add("Seeker_Brood", 0.1f, 1, 1);
			item5.DropsFrom.Add("SeekerBrute", 0.3f, 1, 2);
			item5.DropsFrom.Add("Gjall", 0.6f, 2, 6);
			item5.DropsFrom.Add("SeekerQueen", 1f, 5, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Storm", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item5.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item6 = new Item("magic_supremacy", "SpiritAncestorsDO");
			item6.DropsFrom.Add("Neck", 0.05f, 1, 1);
			item6.DropsFrom.Add("Boar", 0.05f, 1, 1);
			item6.DropsFrom.Add("Deer", 0.05f, 1, 2);
			item6.DropsFrom.Add("Greyling", 0.05f, 1, 1);
			item6.DropsFrom.Add("Eikthyr", 1f, 4, 8);
			item6.DropsFrom.Add("Greydwarf", 0.1f, 1, 2);
			item6.DropsFrom.Add("Greydwarf_Elite", 0.3f, 1, 3);
			item6.DropsFrom.Add("Greydwarf_Shaman", 0.3f, 1, 3);
			item6.DropsFrom.Add("Troll", 0.6f, 1, 5);
			item6.DropsFrom.Add("gd_king", 1f, 4, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Ancestors", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item6.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item7 = new Item("magic_supremacy", "SpiritWindDO");
			item7.DropsFrom.Add("Bat", 0.05f, 1, 1);
			item7.DropsFrom.Add("Wolf", 0.1f, 1, 2);
			item7.DropsFrom.Add("Hatchling", 0.2f, 1, 2);
			item7.DropsFrom.Add("Fenring", 0.3f, 1, 3);
			item7.DropsFrom.Add("Fenring_Cultist", 0.3f, 1, 3);
			item7.DropsFrom.Add("Ulv", 0.3f, 1, 3);
			item7.DropsFrom.Add("StoneGolem", 0.5f, 1, 5);
			item7.DropsFrom.Add("Dragon", 1f, 5, 8);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Spirit of Wind", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item7.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item8 = new Item("magic_supremacy", "DimEitrDO");
			item8.Crafting.Add("MagicWeaverDO", 1);
			item8.RequiredItems.Add("DimEitrRemnantDO", 1);
			item8.RequiredItems.Add("SurtlingCore", 1);
			item8.RequiredItems.Add("GreydwarfEye", 3);
			item8.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Dim Eitr", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item8.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item9 = new Item("magic_supremacy", "DimEitrRemnantDO");
			item9.DropsFrom.Add("Greyling", 0.05f, 1, 2);
			item9.DropsFrom.Add("Boar", 0.05f, 1, 2);
			item9.DropsFrom.Add("Deer", 0.05f, 1, 1);
			item9.DropsFrom.Add("Neck", 0.07f, 1, 2);
			item9.DropsFrom.Add("Skeleton", 0.05f, 1, 2);
			item9.DropsFrom.Add("Skeleton_Poison", 0.4f, 1, 4);
			item9.DropsFrom.Add("Ghost", 0.1f, 1, 3);
			item9.DropsFrom.Add("Greydwarf", 0.05f, 1, 2);
			item9.DropsFrom.Add("Greydwarf_Elite", 0.15f, 1, 3);
			item9.DropsFrom.Add("Greydwarf_Shaman", 0.15f, 1, 3);
			item9.DropsFrom.Add("Troll", 0.25f, 1, 3);
			item9.DropsFrom.Add("Leech", 0.05f, 1, 1);
			item9.DropsFrom.Add("Blob", 0.08f, 1, 1);
			item9.DropsFrom.Add("BlobElite", 0.1f, 1, 2);
			item9.DropsFrom.Add("Draugr", 0.07f, 1, 1);
			item9.DropsFrom.Add("Draugr_Ranged", 0.07f, 1, 1);
			item9.DropsFrom.Add("Draugr_Elite", 0.15f, 1, 2);
			item9.DropsFrom.Add("Surtling", 0.02f, 1, 1);
			item9.DropsFrom.Add("Wraith", 0.2f, 1, 2);
			item9.DropsFrom.Add("Abomination", 0.4f, 2, 4);
			item9.DropsFrom.Add("Bat", 0.03f, 1, 1);
			item9.DropsFrom.Add("Wolf", 0.09f, 1, 2);
			item9.DropsFrom.Add("Hatchling", 0.11f, 1, 1);
			item9.DropsFrom.Add("Fenring", 0.15f, 1, 2);
			item9.DropsFrom.Add("Fenring_Cultist", 0.2f, 1, 2);
			item9.DropsFrom.Add("Ulv", 0.2f, 1, 2);
			item9.DropsFrom.Add("StoneGolem", 0.4f, 3, 5);
			item9.DropsFrom.Add("Lox", 0.12f, 1, 2);
			item9.DropsFrom.Add("Deathsquito", 0.06f, 1, 2);
			item9.DropsFrom.Add("Goblin", 0.07f, 1, 2);
			item9.DropsFrom.Add("GoblinArcher", 0.08f, 1, 2);
			item9.DropsFrom.Add("GoblinBrute", 0.25f, 2, 3);
			item9.DropsFrom.Add("GoblinShaman", 0.25f, 2, 3);
			item9.DropsFrom.Add("BlobTar", 0.15f, 1, 3);
			item9.DropsFrom.Add("Skeleton_Hildir", 1f, 2, 4);
			item9.DropsFrom.Add("Fenring_Cultist_Hildir", 1f, 3, 5);
			item9.DropsFrom.Add("GoblinBruteBros", 1f, 3, 7);
			item9.DropsFrom.Add("GoblinBrute_Hildir", 1f, 3, 7);
			item9.DropsFrom.Add("GoblinShaman_Hildir", 1f, 3, 7);
			item9.DropsFrom.Add("Eikthyr", 0.6f, 2, 5);
			item9.DropsFrom.Add("gd_king", 0.7f, 3, 6);
			item9.DropsFrom.Add("Bonemass", 0.8f, 4, 7);
			item9.DropsFrom.Add("Dragon", 0.9f, 5, 8);
			item9.DropsFrom.Add("Yagluth", 1f, 6, 10);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Dim Eitr Remnant", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item9.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item10 = new Item("magic_supremacy", "CrystalRoseheartDO");
			item10.DropsFrom.Add("Eikthyr", 1f, 1, 1);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Roseheart Crystal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item10.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item11 = new Item("magic_supremacy", "PageArcaneDO");
			item11.Trade.RequiredGlobalKey = "defeated_eikthyr";
			item11.Trade.Trader = Trader.Haldor;
			item11.Trade.Price = 100u;
			item11.CraftAmount = 1;
			item11.DropsFrom.Add("Greyling", 0.001f, 1, 2);
			item11.DropsFrom.Add("Boar", 0.01f, 1, 2);
			item11.DropsFrom.Add("Deer", 0.01f, 1, 2);
			item11.DropsFrom.Add("Neck", 0.01f, 1, 2);
			item11.DropsFrom.Add("Skeleton", 0.005f, 1, 2);
			item11.DropsFrom.Add("Skeleton_Poison", 0.02f, 1, 2);
			item11.DropsFrom.Add("Ghost", 0.02f, 1, 2);
			item11.DropsFrom.Add("Greydwarf", 0.005f, 1, 2);
			item11.DropsFrom.Add("Greydwarf_Elite", 0.005f, 1, 2);
			item11.DropsFrom.Add("Greydwarf_Shaman", 0.005f, 1, 2);
			item11.DropsFrom.Add("Troll", 0.08f, 1, 2);
			item11.DropsFrom.Add("Leech", 0.01f, 1, 2);
			item11.DropsFrom.Add("Blob", 0.01f, 1, 2);
			item11.DropsFrom.Add("BlobElite", 0.03f, 1, 2);
			item11.DropsFrom.Add("Draugr", 0.001f, 1, 2);
			item11.DropsFrom.Add("Draugr_Ranged", 0.001f, 1, 2);
			item11.DropsFrom.Add("Draugr_Elite", 0.01f, 1, 2);
			item11.DropsFrom.Add("Surtling", 0.001f, 1, 2);
			item11.DropsFrom.Add("Wraith", 0.03f, 1, 2);
			item11.DropsFrom.Add("Abomination", 0.1f, 1, 2);
			item11.DropsFrom.Add("Bat", 0.001f, 1, 2);
			item11.DropsFrom.Add("Wolf", 0.015f, 1, 2);
			item11.DropsFrom.Add("Hatchling", 0.02f, 1, 2);
			item11.DropsFrom.Add("Fenring", 0.03f, 1, 2);
			item11.DropsFrom.Add("Fenring_Cultist", 0.04f, 1, 2);
			item11.DropsFrom.Add("Ulv", 0.04f, 1, 2);
			item11.DropsFrom.Add("StoneGolem", 0.1f, 1, 2);
			item11.DropsFrom.Add("Lox", 0.03f, 1, 2);
			item11.DropsFrom.Add("Deathsquito", 0.01f, 1, 2);
			item11.DropsFrom.Add("Goblin", 0.01f, 1, 2);
			item11.DropsFrom.Add("GoblinArcher", 0.01f, 1, 2);
			item11.DropsFrom.Add("GoblinBrute", 0.05f, 1, 2);
			item11.DropsFrom.Add("GoblinShaman", 0.1f, 1, 2);
			item11.DropsFrom.Add("BlobTar", 0.03f, 1, 2);
			item11.DropsFrom.Add("Tick", 0.01f, 1, 2);
			item11.DropsFrom.Add("Seeker", 0.03f, 1, 2);
			item11.DropsFrom.Add("Seeker_Brood", 0.005f, 1, 2);
			item11.DropsFrom.Add("SeekerBrute", 0.1f, 1, 2);
			item11.DropsFrom.Add("Gjall", 0.2f, 1, 2);
			item11.DropsFrom.Add("Volture", 0.01f, 1, 2);
			item11.DropsFrom.Add("BlobLava", 0.01f, 1, 2);
			item11.DropsFrom.Add("Charred_Twitcher", 0.02f, 1, 2);
			item11.DropsFrom.Add("Charred_Melee", 0.02f, 1, 2);
			item11.DropsFrom.Add("Charred_Archer", 0.02f, 1, 2);
			item11.DropsFrom.Add("Charred_Mage", 0.1f, 1, 2);
			item11.DropsFrom.Add("Asksvin", 0.02f, 1, 2);
			item11.DropsFrom.Add("BonemawSerpent", 0.15f, 1, 2);
			item11.DropsFrom.Add("Morgen", 0.1f, 1, 2);
			item11.DropsFrom.Add("FallenValkyrie", 0.15f, 1, 2);
			item11.DropsFrom.Add("Skeleton_Hildir", 0.2f, 1, 3);
			item11.DropsFrom.Add("Fenring_Cultist_Hildir", 0.2f, 1, 3);
			item11.DropsFrom.Add("GoblinBruteBros", 0.2f, 1, 3);
			item11.DropsFrom.Add("GoblinBrute_Hildir", 0.2f, 1, 3);
			item11.DropsFrom.Add("GoblinShaman_Hildir", 0.2f, 1, 3);
			item11.DropsFrom.Add("Eikthyr", 0.15f, 1, 3);
			item11.DropsFrom.Add("gd_king", 0.2f, 1, 3);
			item11.DropsFrom.Add("Bonemass", 0.2f, 1, 3);
			item11.DropsFrom.Add("Dragon", 0.3f, 1, 4);
			item11.DropsFrom.Add("GoblinKing", 0.3f, 1, 4);
			item11.DropsFrom.Add("SeekerQueen", 0.4f, 1, 5);
			item11.DropsFrom.Add("Fader", 0.4f, 1, 5);
			MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Arcane Page", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item11.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item12 = new Item("magic_supremacy", "FoodEitrBlackForestDessertDO");
			item12.Crafting.Add("EssenceCauldronDO", 1);
			item12.RequiredItems.Add("Blueberries", 5);
			item12.RequiredItems.Add("Honey", 3);
			item12.RequiredItems.Add("Carrot", 4);
			item12.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Black Forest Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item12.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item13 = new Item("magic_supremacy", "FoodEitrBlackForestDrinkDO");
			item13.Crafting.Add("EssenceCauldronDO", 1);
			item13.RequiredItems.Add("Blueberries", 4);
			item13.RequiredItems.Add("Thistle", 3);
			item13.RequiredItems.Add("MushroomYellow", 4);
			item13.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Black Forest Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item13.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item14 = new Item("magic_supremacy", "FoodEitrSwampDessertDO");
			item14.Crafting.Add("EssenceCauldronDO", 1);
			item14.RequiredItems.Add("Ooze", 4);
			item14.RequiredItems.Add("Honey", 5);
			item14.RequiredItems.Add("Turnip", 4);
			item14.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Swamp Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item14.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item15 = new Item("magic_supremacy", "FoodEitrSwampDrinkDO");
			item15.Crafting.Add("EssenceCauldronDO", 1);
			item15.RequiredItems.Add("Ooze", 5);
			item15.RequiredItems.Add("Guck", 3);
			item15.RequiredItems.Add("Entrails", 7);
			item15.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Swamp Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item15.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item16 = new Item("magic_supremacy", "FoodEitrMountainDessertDO");
			item16.Crafting.Add("EssenceCauldronDO", 1);
			item16.RequiredItems.Add("FreezeGland", 3);
			item16.RequiredItems.Add("Honey", 5);
			item16.RequiredItems.Add("Onion", 3);
			item16.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Mountain Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item16.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item17 = new Item("magic_supremacy", "FoodEitrMountainDrinkDO");
			item17.Crafting.Add("EssenceCauldronDO", 1);
			item17.RequiredItems.Add("FreezeGland", 2);
			item17.RequiredItems.Add("Crystal", 3);
			item17.RequiredItems.Add("GreydwarfEye", 3);
			item17.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Mountain Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item17.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item18 = new Item("magic_supremacy", "FoodEitrPlainsDessertDO");
			item18.Crafting.Add("EssenceCauldronDO", 1);
			item18.RequiredItems.Add("Cloudberry", 10);
			item18.RequiredItems.Add("Honey", 5);
			item18.RequiredItems.Add("BarleyFlour", 3);
			item18.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Plains Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item18.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item19 = new Item("magic_supremacy", "FoodEitrPlainsDrinkDO");
			item19.Crafting.Add("EssenceCauldronDO", 1);
			item19.RequiredItems.Add("Cloudberry", 12);
			item19.RequiredItems.Add("Tar", 3);
			item19.RequiredItems.Add("Flax", 8);
			item19.CraftAmount = 2;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Food Eitr Plains Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item19.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item20 = new Item("magic_supremacy", "PotionEitrBlackForestDO");
			item20.Crafting.Add("EssenceCauldronDO", 1);
			item20.RequiredItems.Add("SpiritLightDO", 2);
			item20.RequiredItems.Add("Honey", 10);
			item20.RequiredItems.Add("MushroomYellow", 10);
			item20.RequiredItems.Add("GreydwarfEye", 3);
			item20.CraftAmount = 6;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Potion Eitr Black Forest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item20.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item21 = new Item("magic_supremacy", "PotionEitrSwampDO");
			item21.Crafting.Add("EssenceCauldronDO", 1);
			item21.RequiredItems.Add("SpiritDeathDO", 2);
			item21.RequiredItems.Add("Honey", 10);
			item21.RequiredItems.Add("Guck", 5);
			item21.RequiredItems.Add("Thistle", 5);
			item21.CraftAmount = 6;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Potion Eitr Swamp", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item21.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item22 = new Item("magic_supremacy", "PotionEitrMountainDO");
			item22.Crafting.Add("EssenceCauldronDO", 1);
			item22.RequiredItems.Add("SpiritFrostDO", 2);
			item22.RequiredItems.Add("Honey", 10);
			item22.RequiredItems.Add("Crystal", 5);
			item22.RequiredItems.Add("WolfFang", 1);
			item22.CraftAmount = 6;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Potion Eitr Mountain", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item22.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item23 = new Item("magic_supremacy", "PotionEitrPlainsDO");
			item23.Crafting.Add("EssenceCauldronDO", 1);
			item23.RequiredItems.Add("SpiritFireDO", 2);
			item23.RequiredItems.Add("Honey", 10);
			item23.RequiredItems.Add("Tar", 5);
			item23.RequiredItems.Add("Needle", 2);
			item23.CraftAmount = 6;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Potion Eitr Plains", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item23.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item24 = new Item("magic_supremacy", "ArmorLightcallerChestDO");
			item24.Crafting.Add("MagicWeaverDO", 1);
			item24.RequiredItems.Add("Bronze", 4);
			item24.RequiredItems.Add("SpiritLightDO", 6);
			item24.RequiredItems.Add("DimEitrDO", 4);
			item24.RequiredItems.Add("TrollHide", 6);
			item24.RequiredUpgradeItems.Add("SpiritLightDO", 3);
			item24.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item24.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Lightcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item24.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item25 = new Item("magic_supremacy", "ArmorLightcallerLegsDO");
			item25.Crafting.Add("MagicWeaverDO", 1);
			item25.RequiredItems.Add("Bronze", 5);
			item25.RequiredItems.Add("SpiritLightDO", 6);
			item25.RequiredItems.Add("DimEitrDO", 4);
			item25.RequiredItems.Add("TrollHide", 6);
			item25.RequiredUpgradeItems.Add("SpiritLightDO", 3);
			item25.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item25.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Lightcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item25.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item26 = new Item("magic_supremacy", "ArmorLightcallerHelmetDO");
			item26.Crafting.Add("MagicWeaverDO", 1);
			item26.RequiredItems.Add("Bronze", 5);
			item26.RequiredItems.Add("SpiritLightDO", 6);
			item26.RequiredItems.Add("DimEitrDO", 4);
			item26.RequiredItems.Add("TrollHide", 6);
			item26.RequiredUpgradeItems.Add("SpiritLightDO", 3);
			item26.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item26.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Lightcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item26.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item27 = new Item("magic_supremacy", "ArmorLightcallerCapeDO");
			item27.Crafting.Add("MagicWeaverDO", 1);
			item27.RequiredItems.Add("Bronze", 6);
			item27.RequiredItems.Add("SpiritLightDO", 6);
			item27.RequiredItems.Add("DimEitrDO", 4);
			item27.RequiredUpgradeItems.Add("SpiritLightDO", 3);
			item27.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item27.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Lightcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item27.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item28 = new Item("magic_supremacy", "ArmorLightcallerBeltDO");
			item28.Crafting.Add("MagicWeaverDO", 1);
			item28.RequiredItems.Add("PageArcaneDO", 10);
			item28.RequiredItems.Add("SpiritLightDO", 4);
			item28.RequiredItems.Add("DimEitrDO", 4);
			item28.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item28.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Lightcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item28.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item29 = new Item("magic_supremacy", "ArmorDeathcallerChestDO");
			item29.Crafting.Add("MagicWeaverDO", 2);
			item29.RequiredItems.Add("Iron", 6);
			item29.RequiredItems.Add("SpiritDeathDO", 6);
			item29.RequiredItems.Add("DimEitrDO", 4);
			item29.RequiredItems.Add("Chain", 1);
			item29.RequiredUpgradeItems.Add("SpiritDeathDO", 3);
			item29.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item29.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item29.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Deathcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item29.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item30 = new Item("magic_supremacy", "ArmorDeathcallerLegsDO");
			item30.Crafting.Add("MagicWeaverDO", 2);
			item30.RequiredItems.Add("Iron", 6);
			item30.RequiredItems.Add("SpiritDeathDO", 6);
			item30.RequiredItems.Add("DimEitrDO", 4);
			item30.RequiredItems.Add("Chain", 1);
			item30.RequiredUpgradeItems.Add("SpiritDeathDO", 3);
			item30.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item30.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item30.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Deathcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item30.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item31 = new Item("magic_supremacy", "ArmorDeathcallerHelmetDO");
			item31.Crafting.Add("MagicWeaverDO", 2);
			item31.RequiredItems.Add("Iron", 6);
			item31.RequiredItems.Add("SpiritDeathDO", 6);
			item31.RequiredItems.Add("DimEitrDO", 4);
			item31.RequiredItems.Add("Chain", 1);
			item31.RequiredUpgradeItems.Add("SpiritDeathDO", 3);
			item31.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item31.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item31.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Deathcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item31.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item32 = new Item("magic_supremacy", "ArmorDeathcallerCapeDO");
			item32.Crafting.Add("MagicWeaverDO", 2);
			item32.RequiredItems.Add("Iron", 6);
			item32.RequiredItems.Add("SpiritDeathDO", 6);
			item32.RequiredItems.Add("DimEitrDO", 4);
			item32.RequiredUpgradeItems.Add("SpiritDeathDO", 3);
			item32.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item32.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item32.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Deathcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item32.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item33 = new Item("magic_supremacy", "ArmorDeathcallerBeltDO");
			item33.Crafting.Add("MagicWeaverDO", 2);
			item33.RequiredItems.Add("PageArcaneDO", 10);
			item33.RequiredItems.Add("SpiritDeathDO", 6);
			item33.RequiredItems.Add("DimEitrDO", 4);
			item33.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item33.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Deathcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item33.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item34 = new Item("magic_supremacy", "ArmorFrostcallerChestDO");
			item34.Crafting.Add("MagicWeaverDO", 3);
			item34.RequiredItems.Add("Silver", 8);
			item34.RequiredItems.Add("SpiritFrostDO", 6);
			item34.RequiredItems.Add("DimEitrDO", 4);
			item34.RequiredItems.Add("WolfHairBundle", 5);
			item34.RequiredUpgradeItems.Add("SpiritFrostDO", 3);
			item34.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item34.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item34.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Frostcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item34.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item35 = new Item("magic_supremacy", "ArmorFrostcallerLegsDO");
			item35.Crafting.Add("MagicWeaverDO", 3);
			item35.RequiredItems.Add("Silver", 8);
			item35.RequiredItems.Add("SpiritFrostDO", 6);
			item35.RequiredItems.Add("DimEitrDO", 4);
			item35.RequiredItems.Add("WolfHairBundle", 5);
			item35.RequiredUpgradeItems.Add("SpiritFrostDO", 3);
			item35.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item35.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item35.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Frostcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item35.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item36 = new Item("magic_supremacy", "ArmorFrostcallerHelmetDO");
			item36.Crafting.Add("MagicWeaverDO", 3);
			item36.RequiredItems.Add("Silver", 8);
			item36.RequiredItems.Add("SpiritFrostDO", 6);
			item36.RequiredItems.Add("DimEitrDO", 4);
			item36.RequiredItems.Add("WolfHairBundle", 5);
			item36.RequiredUpgradeItems.Add("SpiritFrostDO", 3);
			item36.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item36.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item36.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Frostcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item36.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item37 = new Item("magic_supremacy", "ArmorFrostcallerCapeDO");
			item37.Crafting.Add("MagicWeaverDO", 3);
			item37.RequiredItems.Add("Crystal", 10);
			item37.RequiredItems.Add("SpiritFrostDO", 6);
			item37.RequiredItems.Add("DimEitrDO", 4);
			item37.RequiredUpgradeItems.Add("SpiritFrostDO", 3);
			item37.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item37.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item37.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Frostcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item37.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item38 = new Item("magic_supremacy", "ArmorFrostcallerBeltDO");
			item38.Crafting.Add("MagicWeaverDO", 3);
			item38.RequiredItems.Add("PageArcaneDO", 10);
			item38.RequiredItems.Add("SpiritFrostDO", 6);
			item38.RequiredItems.Add("DimEitrDO", 4);
			item38.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item38.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Frostcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item38.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item39 = new Item("magic_supremacy", "ArmorFirecallerChestDO");
			item39.Crafting.Add("MagicWeaverDO", 5);
			item39.RequiredItems.Add("BlackMetal", 10);
			item39.RequiredItems.Add("SpiritFireDO", 8);
			item39.RequiredItems.Add("DimEitrDO", 4);
			item39.RequiredItems.Add("LinenThread", 20);
			item39.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item39.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item39.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item39.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Firecaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item39.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item40 = new Item("magic_supremacy", "ArmorFirecallerLegsDO");
			item40.Crafting.Add("MagicWeaverDO", 5);
			item40.RequiredItems.Add("BlackMetal", 10);
			item40.RequiredItems.Add("SpiritFireDO", 8);
			item40.RequiredItems.Add("DimEitrDO", 4);
			item40.RequiredItems.Add("LinenThread", 20);
			item40.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item40.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item40.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item40.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Firecaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item40.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item41 = new Item("magic_supremacy", "ArmorFirecallerHelmetDO");
			item41.Crafting.Add("MagicWeaverDO", 5);
			item41.RequiredItems.Add("BlackMetal", 10);
			item41.RequiredItems.Add("SpiritFireDO", 8);
			item41.RequiredItems.Add("DimEitrDO", 4);
			item41.RequiredItems.Add("LinenThread", 20);
			item41.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item41.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item41.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item41.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Firecaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item41.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item42 = new Item("magic_supremacy", "ArmorFirecallerCapeDO");
			item42.Crafting.Add("MagicWeaverDO", 5);
			item42.RequiredItems.Add("BlackMetal", 10);
			item42.RequiredItems.Add("SpiritFireDO", 8);
			item42.RequiredItems.Add("DimEitrDO", 4);
			item42.RequiredItems.Add("Tar", 10);
			item42.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item42.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item42.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item42.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Firecaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item42.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item43 = new Item("magic_supremacy", "ArmorFirecallerBeltDO");
			item43.Crafting.Add("MagicWeaverDO", 5);
			item43.RequiredItems.Add("PageArcaneDO", 10);
			item43.RequiredItems.Add("SpiritFireDO", 6);
			item43.RequiredItems.Add("DimEitrDO", 4);
			item43.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item43.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Firecaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item43.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item44 = new Item("magic_supremacy", "ArmorStormcallerChestDO");
			item44.Crafting.Add("MagicWeaverDO", 6);
			item44.RequiredItems.Add("Carapace", 10);
			item44.RequiredItems.Add("SpiritStormDO", 8);
			item44.RequiredItems.Add("Eitr", 6);
			item44.RequiredItems.Add("Mandible", 1);
			item44.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item44.RequiredUpgradeItems.Add("Eitr", 3);
			item44.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item44.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Stormcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item44.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item45 = new Item("magic_supremacy", "ArmorStormcallerLegsDO");
			item45.Crafting.Add("MagicWeaverDO", 6);
			item45.RequiredItems.Add("Carapace", 10);
			item45.RequiredItems.Add("SpiritStormDO", 8);
			item45.RequiredItems.Add("Eitr", 6);
			item45.RequiredItems.Add("Mandible", 1);
			item45.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item45.RequiredUpgradeItems.Add("Eitr", 3);
			item45.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item45.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Stormcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item45.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item46 = new Item("magic_supremacy", "ArmorStormcallerHelmetDO");
			item46.Crafting.Add("MagicWeaverDO", 6);
			item46.RequiredItems.Add("Carapace", 10);
			item46.RequiredItems.Add("SpiritStormDO", 8);
			item46.RequiredItems.Add("Eitr", 6);
			item46.RequiredItems.Add("Mandible", 2);
			item46.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item46.RequiredUpgradeItems.Add("Eitr", 3);
			item46.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item46.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Stormcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item46.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item47 = new Item("magic_supremacy", "ArmorStormcallerCapeDO");
			item47.Crafting.Add("MagicWeaverDO", 6);
			item47.RequiredItems.Add("Carapace", 10);
			item47.RequiredItems.Add("SpiritStormDO", 8);
			item47.RequiredItems.Add("Eitr", 6);
			item47.RequiredItems.Add("Mandible", 1);
			item47.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item47.RequiredUpgradeItems.Add("Eitr", 3);
			item47.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item47.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Stormcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item47.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item48 = new Item("magic_supremacy", "ArmorStormcallerBeltDO");
			item48.Crafting.Add("MagicWeaverDO", 6);
			item48.RequiredItems.Add("PageArcaneDO", 10);
			item48.RequiredItems.Add("SpiritStormDO", 6);
			item48.RequiredItems.Add("Eitr", 6);
			item48.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item48.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Stormcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item48.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item49 = new Item("magic_supremacy", "ArmorTotemcallerChestDO");
			item49.Crafting.Add("MagicWeaverDO", 1);
			item49.RequiredItems.Add("RoundLog", 6);
			item49.RequiredItems.Add("SpiritAncestorsDO", 4);
			item49.RequiredItems.Add("DimEitrDO", 2);
			item49.RequiredItems.Add("LeatherScraps", 4);
			item49.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1);
			item49.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item49.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item49.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Totemcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item49.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item50 = new Item("magic_supremacy", "ArmorTotemcallerLegsDO");
			item50.Crafting.Add("MagicWeaverDO", 1);
			item50.RequiredItems.Add("RoundLog", 6);
			item50.RequiredItems.Add("SpiritAncestorsDO", 4);
			item50.RequiredItems.Add("DimEitrDO", 2);
			item50.RequiredItems.Add("LeatherScraps", 4);
			item50.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1);
			item50.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item50.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item50.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Totemcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item50.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item51 = new Item("magic_supremacy", "ArmorTotemcallerHelmetDO");
			item51.Crafting.Add("MagicWeaverDO", 1);
			item51.RequiredItems.Add("RoundLog", 6);
			item51.RequiredItems.Add("SpiritAncestorsDO", 4);
			item51.RequiredItems.Add("DimEitrDO", 2);
			item51.RequiredItems.Add("LeatherScraps", 4);
			item51.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1);
			item51.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item51.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item51.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Totemcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item51.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item52 = new Item("magic_supremacy", "ArmorTotemcallerCapeDO");
			item52.Crafting.Add("MagicWeaverDO", 1);
			item52.RequiredItems.Add("Dandelion", 8);
			item52.RequiredItems.Add("SpiritAncestorsDO", 4);
			item52.RequiredItems.Add("DimEitrDO", 2);
			item52.RequiredItems.Add("LeatherScraps", 4);
			item52.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1);
			item52.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item52.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item52.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Totemcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item52.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item53 = new Item("magic_supremacy", "ArmorTotemcallerBeltDO");
			item53.Crafting.Add("MagicWeaverDO", 1);
			item53.RequiredItems.Add("AncientSeed", 10);
			item53.RequiredItems.Add("SpiritAncestorsDO", 4);
			item53.RequiredItems.Add("DimEitrDO", 2);
			item53.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item53.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Totemcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item53.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item54 = new Item("magic_supremacy", "ArmorWindcallerChestDO");
			item54.Crafting.Add("MagicWeaverDO", 3);
			item54.RequiredItems.Add("JuteRed", 6);
			item54.RequiredItems.Add("SpiritWindDO", 6);
			item54.RequiredItems.Add("DimEitrDO", 4);
			item54.RequiredItems.Add("WolfPelt", 5);
			item54.RequiredUpgradeItems.Add("SpiritWindDO", 3);
			item54.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item54.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item54.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Windcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item54.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item55 = new Item("magic_supremacy", "ArmorWindcallerLegsDO");
			item55.Crafting.Add("MagicWeaverDO", 3);
			item55.RequiredItems.Add("JuteRed", 6);
			item55.RequiredItems.Add("SpiritWindDO", 6);
			item55.RequiredItems.Add("DimEitrDO", 4);
			item55.RequiredItems.Add("WolfPelt", 5);
			item55.RequiredUpgradeItems.Add("SpiritWindDO", 3);
			item55.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item55.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item55.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Windcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item55.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item56 = new Item("magic_supremacy", "ArmorWindcallerHelmetDO");
			item56.Crafting.Add("MagicWeaverDO", 3);
			item56.RequiredItems.Add("JuteRed", 6);
			item56.RequiredItems.Add("SpiritWindDO", 6);
			item56.RequiredItems.Add("DimEitrDO", 4);
			item56.RequiredItems.Add("WolfPelt", 5);
			item56.RequiredUpgradeItems.Add("SpiritWindDO", 3);
			item56.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item56.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item56.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Windcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item56.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item57 = new Item("magic_supremacy", "ArmorWindcallerCapeDO");
			item57.Crafting.Add("MagicWeaverDO", 3);
			item57.RequiredItems.Add("Crystal", 4);
			item57.RequiredItems.Add("SpiritWindDO", 6);
			item57.RequiredItems.Add("DimEitrDO", 4);
			item57.RequiredItems.Add("WolfFang", 1);
			item57.RequiredUpgradeItems.Add("SpiritWindDO", 3);
			item57.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item57.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item57.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Windcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item57.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item58 = new Item("magic_supremacy", "ArmorWindcallerBeltDO");
			item58.Crafting.Add("MagicWeaverDO", 3);
			item58.RequiredItems.Add("DragonTear", 8);
			item58.RequiredItems.Add("SpiritWindDO", 6);
			item58.RequiredItems.Add("DimEitrDO", 4);
			item58.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item58.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Windcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item58.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item59 = new Item("magic_supremacy", "StaffLightcallerLightDO");
			item59.Crafting.Add("MagicWeaverDO", 1);
			item59.RequiredItems.Add("TrophyDeer", 3);
			item59.RequiredItems.Add("SpiritLightDO", 8);
			item59.RequiredItems.Add("DimEitrDO", 4);
			item59.RequiredItems.Add("Bronze", 4);
			item59.RequiredUpgradeItems.Add("SpiritLightDO", 4);
			item59.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item59.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item59.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Lightcaller Daystar", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item59.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item60 = new Item("magic_supremacy", "StaffLightcallerHealDO");
			item60.Crafting.Add("MagicWeaverDO", 1);
			item60.RequiredItems.Add("TrophyGreydwarfShaman", 1);
			item60.RequiredItems.Add("SpiritLightDO", 8);
			item60.RequiredItems.Add("DimEitrDO", 4);
			item60.RequiredItems.Add("Bronze", 4);
			item60.RequiredUpgradeItems.Add("SpiritLightDO", 4);
			item60.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item60.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item60.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Lightcaller Candle of Vital Light", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item60.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item61 = new Item("magic_supremacy", "StaffLightcallerSphereDO");
			item61.Crafting.Add("MagicWeaverDO", 1);
			item61.RequiredItems.Add("TrophyGreydwarfBrute", 1);
			item61.RequiredItems.Add("SpiritLightDO", 8);
			item61.RequiredItems.Add("DimEitrDO", 4);
			item61.RequiredItems.Add("Bronze", 4);
			item61.RequiredUpgradeItems.Add("SpiritLightDO", 4);
			item61.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item61.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item61.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Lightcaller Luminaris", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item61.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item62 = new Item("magic_supremacy", "StaffDeathcallerPoisonDO");
			item62.Crafting.Add("MagicWeaverDO", 2);
			item62.RequiredItems.Add("TrophyLeech", 3);
			item62.RequiredItems.Add("SpiritDeathDO", 8);
			item62.RequiredItems.Add("DimEitrDO", 4);
			item62.RequiredItems.Add("WitheredBone", 2);
			item62.RequiredUpgradeItems.Add("SpiritDeathDO", 4);
			item62.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item62.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item62.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Deathcaller Carrion Breath", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item62.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item63 = new Item("magic_supremacy", "StaffDeathcallerBlasterDO");
			item63.Crafting.Add("MagicWeaverDO", 2);
			item63.RequiredItems.Add("TrophyDraugrElite", 1);
			item63.RequiredItems.Add("SpiritDeathDO", 8);
			item63.RequiredItems.Add("DimEitrDO", 4);
			item63.RequiredItems.Add("WitheredBone", 2);
			item63.RequiredUpgradeItems.Add("SpiritDeathDO", 4);
			item63.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item63.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item63.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Deathcaller Graveblight", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item63.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item64 = new Item("magic_supremacy", "BowFrostcallerIceDO");
			item64.Crafting.Add("MagicWeaverDO", 3);
			item64.RequiredItems.Add("TrophyHatchling", 3);
			item64.RequiredItems.Add("SpiritFrostDO", 8);
			item64.RequiredItems.Add("DimEitrDO", 4);
			item64.RequiredItems.Add("Crystal", 10);
			item64.RequiredUpgradeItems.Add("SpiritFrostDO", 4);
			item64.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item64.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item64.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Bow Frostcaller Crystaldraw", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item64.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item65 = new Item("magic_supremacy", "StaffFrostcallerShotgunDO");
			item65.Crafting.Add("MagicWeaverDO", 3);
			item65.RequiredItems.Add("TrophySGolem", 1);
			item65.RequiredItems.Add("SpiritFrostDO", 8);
			item65.RequiredItems.Add("DimEitrDO", 4);
			item65.RequiredItems.Add("Silver", 8);
			item65.RequiredUpgradeItems.Add("SpiritFrostDO", 4);
			item65.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item65.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item65.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Frostcaller Frostspike", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item65.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item66 = new Item("magic_supremacy", "StaffFirecallerThrowerDO");
			item66.Crafting.Add("MagicWeaverDO", 5);
			item66.RequiredItems.Add("TrophyGrowth", 1);
			item66.RequiredItems.Add("SpiritFireDO", 8);
			item66.RequiredItems.Add("DimEitrDO", 4);
			item66.RequiredItems.Add("BlackMetal", 10);
			item66.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item66.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item66.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item66.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Firecaller Flamebreath", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item66.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item67 = new Item("magic_supremacy", "StaffFirecallerShardsDO");
			item67.Crafting.Add("MagicWeaverDO", 5);
			item67.RequiredItems.Add("TrophyDeathsquito", 3);
			item67.RequiredItems.Add("SpiritFireDO", 8);
			item67.RequiredItems.Add("DimEitrDO", 4);
			item67.RequiredItems.Add("Tar", 10);
			item67.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item67.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item67.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item67.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Firecaller Ember Shards", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item67.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item68 = new Item("magic_supremacy", "StaffFirecallerBlasterDO");
			item68.Crafting.Add("MagicWeaverDO", 5);
			item68.RequiredItems.Add("TrophyGoblinBrute", 1);
			item68.RequiredItems.Add("SpiritFireDO", 8);
			item68.RequiredItems.Add("DimEitrDO", 4);
			item68.RequiredItems.Add("BlackMetal", 10);
			item68.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item68.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item68.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item68.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Firecaller Blazing Ray", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item68.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item69 = new Item("magic_supremacy", "StaffFirecallerRingDO");
			item69.Crafting.Add("MagicWeaverDO", 5);
			item69.RequiredItems.Add("TrophyGoblinShaman", 1);
			item69.RequiredItems.Add("SpiritFireDO", 8);
			item69.RequiredItems.Add("DimEitrDO", 4);
			item69.RequiredItems.Add("BlackMetal", 10);
			item69.RequiredUpgradeItems.Add("SpiritFireDO", 4);
			item69.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item69.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item69.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Firecaller Orbit of Embers", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item69.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item70 = new Item("magic_supremacy", "StaffStormcallerSphereDO");
			item70.Crafting.Add("MagicWeaverDO", 6);
			item70.RequiredItems.Add("TrophyGjall", 1);
			item70.RequiredItems.Add("SpiritStormDO", 8);
			item70.RequiredItems.Add("Eitr", 6);
			item70.RequiredItems.Add("Iron", 10);
			item70.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item70.RequiredUpgradeItems.Add("Eitr", 3);
			item70.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item70.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Stormcaller Tempest Eye", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item70.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item71 = new Item("magic_supremacy", "StaffStormcallerShockerDO");
			item71.Crafting.Add("MagicWeaverDO", 6);
			item71.RequiredItems.Add("TrophySeekerBrute", 1);
			item71.RequiredItems.Add("SpiritStormDO", 8);
			item71.RequiredItems.Add("Eitr", 6);
			item71.RequiredItems.Add("Iron", 10);
			item71.RequiredUpgradeItems.Add("SpiritStormDO", 4);
			item71.RequiredUpgradeItems.Add("Eitr", 3);
			item71.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item71.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Stormcaller Thundersurge", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item71.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item72 = new Item("magic_supremacy", "StaffTotemcallerPullDO");
			item72.Crafting.Add("MagicWeaverDO", 1);
			item72.RequiredItems.Add("TrophyFrostTroll", 1);
			item72.RequiredItems.Add("SpiritAncestorsDO", 8);
			item72.RequiredItems.Add("DimEitrDO", 4);
			item72.RequiredItems.Add("RoundLog", 8);
			item72.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4);
			item72.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item72.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item72.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Totemcaller Earthquake Totem", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item72.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item73 = new Item("magic_supremacy", "StaffTotemcallerBuffDO");
			item73.Crafting.Add("MagicWeaverDO", 1);
			item73.RequiredItems.Add("TrophySkeleton", 3);
			item73.RequiredItems.Add("SpiritAncestorsDO", 8);
			item73.RequiredItems.Add("DimEitrDO", 4);
			item73.RequiredItems.Add("RoundLog", 8);
			item73.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4);
			item73.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item73.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item73.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Totemcaller Wardkeeper Totem", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item73.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item74 = new Item("magic_supremacy", "StaffTotemcallerBoomerangDO");
			item74.Crafting.Add("MagicWeaverDO", 1);
			item74.RequiredItems.Add("TrophyGreydwarf", 3);
			item74.RequiredItems.Add("SpiritAncestorsDO", 8);
			item74.RequiredItems.Add("DimEitrDO", 4);
			item74.RequiredItems.Add("RoundLog", 8);
			item74.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4);
			item74.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item74.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item74.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Totemcaller Boomerang", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item74.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item75 = new Item("magic_supremacy", "StaffWindcallerFeatherDO");
			item75.Crafting.Add("MagicWeaverDO", 3);
			item75.RequiredItems.Add("TrophyFenring", 1);
			item75.RequiredItems.Add("SpiritWindDO", 8);
			item75.RequiredItems.Add("DimEitrDO", 4);
			item75.RequiredItems.Add("Feathers", 8);
			item75.RequiredUpgradeItems.Add("SpiritWindDO", 4);
			item75.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item75.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item75.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Windcaller Windplume", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item75.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Item item76 = new Item("magic_supremacy", "StaffWindcallerShieldDO");
			item76.Crafting.Add("MagicWeaverDO", 3);
			item76.RequiredItems.Add("TrophyCultist", 1);
			item76.RequiredItems.Add("SpiritWindDO", 8);
			item76.RequiredItems.Add("DimEitrDO", 4);
			item76.RequiredItems.Add("Silver", 10);
			item76.RequiredUpgradeItems.Add("SpiritWindDO", 4);
			item76.RequiredUpgradeItems.Add("DimEitrDO", 2);
			item76.CraftAmount = 1;
			MaterialReplacer.RegisterGameObjectForShaderSwap(item76.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
			_recipeIsActiveConfig = config("Staff Windcaller Windguard", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
			item76.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
			SetupWatcher();
		}

		private void OnDestroy()
		{
			((BaseUnityPlugin)this).Config.Save();
		}

		private void SetupWatcher()
		{
			FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName);
			fileSystemWatcher.Changed += ReadConfigValues;
			fileSystemWatcher.Created += ReadConfigValues;
			fileSystemWatcher.Renamed += ReadConfigValues;
			fileSystemWatcher.IncludeSubdirectories = true;
			fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject;
			fileSystemWatcher.EnableRaisingEvents = true;
		}

		private void ReadConfigValues(object sender, FileSystemEventArgs e)
		{
			if (!File.Exists(ConfigFileFullPath))
			{
				return;
			}
			try
			{
				Magic_SupremacyLogger.LogDebug((object)"ReadConfigValues called");
				((BaseUnityPlugin)this).Config.Reload();
			}
			catch
			{
				Magic_SupremacyLogger.LogError((object)("There was an issue loading your " + ConfigFileName));
				Magic_SupremacyLogger.LogError((object)"Please check your config entries for spelling and format!");
			}
		}

		private ConfigEntry<T> config<[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = 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 + (synchronizedSetting ? " [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 = synchronizedSetting;
			return val2;
		}

		private ConfigEntry<T> config<[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting);
		}

		static Magic_SupremacyPlugin()
		{
			string configPath = Paths.ConfigPath;
			char directorySeparatorChar = Path.DirectorySeparatorChar;
			ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName;
			ConnectionError = "";
			Magic_SupremacyLogger = Logger.CreateLogSource("Magic_Supremacy");
			ConfigSync = new ConfigSync("Dreanegade.Magic_Supremacy")
			{
				DisplayName = "Magic_Supremacy",
				CurrentVersion = "2.0.9",
				MinimumRequiredVersion = "2.0.9"
			};
			_serverConfigLocked = null;
			_recipeIsActiveConfig = null;
		}
	}
	public static class KeyboardExtensions
	{
		public static bool IsKeyDown(this KeyboardShortcut shortcut)
		{
			//IL_0002: 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)
			if ((int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey))
			{
				return ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
			}
			return false;
		}

		public static bool IsKeyHeld(this KeyboardShortcut shortcut)
		{
			//IL_0002: 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)
			if ((int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey))
			{
				return ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(ZNet), "OnNewConnection")]
	public static class RegisterAndCheckVersion
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			Magic_SupremacyPlugin.Magic_SupremacyLogger.LogDebug((object)"Registering version RPC handler");
			peer.m_rpc.Register<ZPackage>("Magic_Supremacy_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_Magic_Supremacy_Version);
			Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)"Invoking version check");
			ZPackage val = new ZPackage();
			val.Write("2.0.9");
			peer.m_rpc.Invoke("Magic_Supremacy_VersionCheck", new object[1] { val });
		}
	}
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	public static class VerifyClient
	{
		private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance)
		{
			if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc))
			{
				return true;
			}
			Magic_SupremacyPlugin.Magic_SupremacyLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting"));
			rpc.Invoke("Error", new object[1] { 3 });
			return false;
		}

		private static void Postfix(ZNet __instance)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "Magic_SupremacyRequestAdminSync", new object[1] { (object)new ZPackage() });
		}
	}
	[HarmonyPatch(typeof(FejdStartup), "ShowConnectError")]
	public class ShowConnectionError
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
		private static void Postfix(FejdStartup __instance)
		{
			if (__instance.m_connectionFailedPanel.activeSelf)
			{
				__instance.m_connectionFailedError.fontSizeMax = 25f;
				__instance.m_connectionFailedError.fontSizeMin = 15f;
				TMP_Text connectionFailedError = __instance.m_connectionFailedError;
				connectionFailedError.text = connectionFailedError.text + "\n" + Magic_SupremacyPlugin.ConnectionError;
			}
		}
	}
	[HarmonyPatch(typeof(ZNet), "Disconnect")]
	public static class RemoveDisconnectedPeerFromVerified
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			if (__instance.IsServer())
			{
				Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list"));
				RpcHandlers.ValidatedPeers.Remove(peer.m_rpc);
			}
		}
	}
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	public static class RpcHandlers
	{
		public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>();

		public static void RPC_Magic_Supremacy_Version(ZRpc rpc, ZPackage pkg)
		{
			string text = pkg.ReadString();
			Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Version check, local: 2.0.9,  remote: " + text));
			if (text != "2.0.9")
			{
				Magic_SupremacyPlugin.ConnectionError = "Magic_Supremacy Installed: 2.0.9\n Needed: " + text;
				if (ZNet.instance.IsServer())
				{
					Magic_SupremacyPlugin.Magic_SupremacyLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."));
					rpc.Invoke("Error", new object[1] { 3 });
				}
			}
			else if (!ZNet.instance.IsServer())
			{
				Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)"Received same version from server!");
			}
			else
			{
				Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list"));
				ValidatedPeers.Add(rpc);
			}
		}

		public static string ComputeHashForMod()
		{
			using SHA256 sHA = SHA256.Create();
			byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location));
			StringBuilder stringBuilder = new StringBuilder();
			byte[] array2 = array;
			foreach (byte b in array2)
			{
				stringBuilder.Append(b.ToString("X2"));
			}
			return stringBuilder.ToString();
		}
	}
}
namespace StationLevelFix
{
	[HarmonyPatch(typeof(CraftingStation), "GetLevel")]
	public static class UnlimitedStationLevel
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
		private static void Postfix(CraftingStation __instance, ref int __result)
		{
		}
	}
	[HarmonyPatch(typeof(InventoryGui), "CanRepair")]
	public static class UnlimitedRepairFix
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
		private static void Postfix(ItemData item, ref bool __result)
		{
			if (!__result && (Object)(object)Player.m_localPlayer != (Object)null)
			{
				CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation();
				if ((Object)(object)currentCraftingStation != (Object)null && currentCraftingStation.GetLevel(true) > 4)
				{
					__result = true;
				}
			}
		}
	}
}
namespace PieceManager
{
	[PublicAPI]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	public static class MaterialReplacer
	{
		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)]
		public enum ShaderType
		{
			PieceShader,
			VegetationShader,
			RockShader,
			RugShader,
			GrassShader,
			CustomCreature,
			UseUnityShader
		}

		private static readonly Dictionary<GameObject, bool> ObjectToSwap;

		private static readonly Dictionary<string, Material> OriginalMaterials;

		private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace;

		private static readonly HashSet<Shader> CachedShaders;

		private static bool hasRun;

		static MaterialReplacer()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			CachedShaders = new HashSet<Shader>();
			hasRun = false;
			OriginalMaterials = new Dictionary<string, Material>();
			ObjectToSwap = new Dictionary<GameObject, bool>();
			ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>();
			new Harmony("org.bepinex.helpers.PieceManager").Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}

		public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type)
		{
			if (!ObjectsForShaderReplace.ContainsKey(go))
			{
				ObjectsForShaderReplace.Add(go, type);
			}
		}

		public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false)
		{
			if (!ObjectToSwap.ContainsKey(go))
			{
				ObjectToSwap.Add(go, isJotunnMock);
			}
		}

		private static void GetAllMaterials()
		{
			Material[] array = Resources.FindObjectsOfTypeAll<Material>();
			foreach (Material val in array)
			{
				OriginalMaterials[((Object)val).name] = val;
			}
		}

		[HarmonyPriority(700)]
		private static void ReplaceAllMaterialsWithOriginal()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Invalid comparison between Unknown and I4
			if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun)
			{
				return;
			}
			if (OriginalMaterials.Count == 0)
			{
				GetAllMaterials();
			}
			foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap)
			{
				GameObject key = item.Key;
				bool value = item.Value;
				ProcessGameObjectMaterials(key, value);
			}
			AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>();
			foreach (AssetBundle val in array)
			{
				IEnumerable<Shader> enumerable3;
				try
				{
					IEnumerable<Shader> enumerable2;
					if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val))
					{
						IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>();
						enumerable2 = enumerable;
					}
					else
					{
						enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>)
							where (Object)(object)shader != (Object)null
							select shader;
					}
					enumerable3 = enumerable2;
				}
				catch (Exception)
				{
					continue;
				}
				if (enumerable3 == null)
				{
					continue;
				}
				foreach (Shader item2 in enumerable3)
				{
					CachedShaders.Add(item2);
				}
			}
			foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace)
			{
				GameObject key2 = item3.Key;
				ShaderType value2 = item3.Value;
				ProcessGameObjectShaders(key2, value2);
			}
			hasRun = true;
		}

		private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock)
		{
			Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer obj in componentsInChildren)
			{
				Material[] sharedMaterials = obj.sharedMaterials.Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray();
				obj.sharedMaterials = sharedMaterials;
			}
		}

		private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock)
		{
			string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_");
			if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal))
			{
				return originalMaterial;
			}
			string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, "");
			if (OriginalMaterials.TryGetValue(text2, out var value))
			{
				return value;
			}
			Debug.LogWarning((object)("No suitable material found to replace: " + text2));
			return originalMaterial;
		}

		private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType)
		{
			Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true);
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				Material[] sharedMaterials = componentsInChildren[i].sharedMaterials;
				foreach (Material val in sharedMaterials)
				{
					if ((Object)(object)val != (Object)null)
					{
						val.shader = GetShaderForType(val.shader, shaderType, ((Object)val.shader).name);
					}
				}
			}
		}

		private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName)
		{
			return (Shader)(shaderType switch
			{
				ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), 
				ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), 
				ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), 
				ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), 
				ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), 
				ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), 
				ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), 
				_ => FindShaderWithName(orig, "Standard"), 
			});
		}

		public static Shader FindShaderWithName(Shader origShader, string name)
		{
			foreach (Shader cachedShader in CachedShaders)
			{
				if (((Object)cachedShader).name == name)
				{
					return cachedShader;
				}
			}
			return origShader;
		}
	}
	[PublicAPI]
	public enum CraftingTable
	{
		None,
		[InternalName("piece_workbench")]
		Workbench,
		[InternalName("piece_cauldron")]
		Cauldron,
		[InternalName("forge")]
		Forge,
		[InternalName("piece_artisanstation")]
		ArtisanTable,
		[InternalName("piece_stonecutter")]
		StoneCutter,
		[InternalName("piece_magetable")]
		MageTable,
		[InternalName("blackforge")]
		BlackForge,
		[InternalName("piece_preptable")]
		FoodPreparationTable,
		[InternalName("piece_MeadCauldron")]
		MeadKetill,
		Custom
	}
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	public class InternalName : Attribute
	{
		public readonly string internalName;

		public InternalName(string internalName)
		{
			this.internalName = internalName;
		}
	}
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[PublicAPI]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	public class ExtensionList
	{
		public readonly List<ExtensionConfig> ExtensionStations = new List<ExtensionConfig>();

		public void Set(CraftingTable table, int maxStationDistance = 5)
		{
			ExtensionStations.Add(new ExtensionConfig
			{
				Table = table,
				maxStationDistance = maxStationDistance
			});
		}

		public void Set(string customTable, int maxStationDistance = 5)
		{
			ExtensionStations.Add(new ExtensionConfig
			{
				Table = CraftingTable.Custom,
				custom = customTable,
				maxStationDistance = maxStationDistance
			});
		}
	}
	public struct ExtensionConfig
	{
		public CraftingTable Table;

		public float maxStationDistance;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		public string custom;
	}
	[PublicAPI]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	public class CraftingStationList
	{
		public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>();

		public void Set(CraftingTable table)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = table
			});
		}

		public void Set(string customTable)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = CraftingTable.Custom,
				custom = customTable
			});
		}
	}
	public struct CraftingStationConfig
	{
		public CraftingTable Table;

		public int level;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		public string custom;
	}
	[PublicAPI]
	public enum BuildPieceCategory
	{
		Misc = 0,
		Crafting = 1,
		BuildingWorkbench = 2,
		BuildingStonecutter = 3,
		Furniture = 4,
		All = 100,
		Custom = 99
	}
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[PublicAPI]
	public class RequiredResourcesList
	{
		public readonly List<Requirement> Requirements = new List<Requirement>();

		public void Add(string item, int amount, bool recover)
		{
			Requirements.Add(new Requirement
			{
				itemName = item,
				amount = amount,
				recover = recover
			});
		}
	}
	public struct Requirement
	{
		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(1)]
		public string itemName;

		public int amount;

		public bool recover;
	}
	public struct SpecialProperties
	{
		[Description("Admins should be the only ones that can build this piece.")]
		public bool AdminOnly;

		[Description("Turns off generating a config for this build piece.")]
		public bool NoConfig;
	}
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	[PublicAPI]
	public class BuildingPieceCategory
	{
		public BuildPieceCategory Category;

		public string custom = "";

		public void Set(BuildPieceCategory category)
		{
			Category = category;
		}

		public void Set(string customCategory)
		{
			Category = BuildPieceCategory.Custom;
			custom = customCategory;
		}
	}
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[PublicAPI]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	public class PieceTool
	{
		public readonly HashSet<string> Tools = new HashSet<string>();

		public void Add(string tool)
		{
			Tools.Add(tool);
		}
	}
	[PublicAPI]
	[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)]
	[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
	public class BuildPiece
	{
		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
		internal class PieceConfig
		{
			public ConfigEntry<string> craft;

			public ConfigEntry<BuildPieceCategory> category;

			public ConfigEntry<string> customCategory;

			public ConfigEntry<string> tools;

			public ConfigEntry<CraftingTable> extensionTable;

			public ConfigEntry<string> customExtentionTable;

			public ConfigEntry<float> maxStationDistance;

			public ConfigEntry<CraftingTable> table;

			public ConfigEntry<string> customTable;
		}

		[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)]
		private class ConfigurationManagerAttributes
		{
			[UsedImplicitly]
			public int? Order;

			[UsedImplicitly]
			public bool? Browsable;

			[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
			[UsedImplicitly]
			public string Category;

			[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(new byte[] { 2, 1 })]
			[UsedImplicitly]
			public Action<ConfigEntryBase> CustomDrawer;
		}

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)]
		private class SerializedRequirements
		{
			public readonly List<Requirement> Reqs;

			public SerializedRequirements(List<Requirement> reqs)
			{
				Reqs = reqs;
			}

			public SerializedRequirements(string reqs)
			{
				Reqs = reqs.Split(new char[1] { ',' }).Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (string r) =>
				{
					string[] array = r.Split(new char[1] { ':' });
					Requirement result = default(Requirement);
					result.itemName = array[0];
					result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2);
					bool result3 = default(bool);
					result.recover = array.Length <= 2 || !bool.TryParse(array[2], out result3) || result3;
					return result;
				}).ToList();
			}

			public override string ToString()
			{
				return string.Join(",", Reqs.Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}"));
			}

			[return: <7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
			public static ItemDrop fetchByName(ObjectDB objectDB, string name)
			{
				GameObject itemPrefab = objectDB.GetItemPrefab(name);
				ItemDrop obj = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null);
				if ((Object)(object)obj == (Object)null)
				{
					Debug.LogWarning((object)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist."));
				}
				return obj;
			}

			public static Requirement[] toPieceReqs(SerializedRequirements craft)
			{
				return craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) =>
				{
					//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_001d: 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_0031: Expected O, but got Unknown
					ItemDrop val = ResItem(r);
					return (val != null) ? new Requirement
					{
						m_amount = r.amount,
						m_resItem = val,
						m_recover = r.recover
					} : ((Requirement)null);
				})).Values.Where([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement v) => v != null).ToArray();
				[<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(2)]
				static ItemDrop ResItem(Requirement r)
				{
					return fetchByName(ObjectDB.instance, r.itemName);
				}
			}
		}

		internal static readonly List<BuildPiece> registeredPieces = new List<BuildPiece>();

		private static readonly Dictionary<Piece, BuildPiece> pieceMap = new Dictionary<Piece, BuildPiece>();

		internal static Dictionary<BuildPiece, PieceConfig> pieceConfigs = new Dictionary<BuildPiece, PieceConfig>();

		internal List<Conversion> Conversions = new List<Conversion>();

		internal List<ItemConversion> conversions = new List<ItemConversion>();

		[Description("Disables generation of the configs for your pieces. This is global, this turns it off for all pieces in your mod.")]
		public static bool ConfigurationEnabled = true;

		public readonly GameObject Prefab;

		[Description("Specifies the resources needed to craft the piece.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the building piece should need.")]
		public readonly RequiredResourcesList RequiredItems = new RequiredResourcesList();

		[Description("Sets the category for the building piece.")]
		public readonly BuildingPieceCategory Category = new BuildingPieceCategory();

		[Description("Specifies the tool needed to build your piece.\nUse .Add to add a tool.")]
		public readonly PieceTool Tool = new PieceTool();

		[Description("Specifies the crafting station needed to build your piece.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.")]
		public CraftingStationList Crafting = new CraftingStationList();

		[Description("Makes this piece a station extension")]
		public ExtensionList Extension = new ExtensionList();

		[Description("Change the extended/special properties of your build piece.")]
		public SpecialProperties SpecialProperties;

		[Description("Specifies a config entry which toggles whether a recipe is active.")]
		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		public ConfigEntryBase RecipeIsActive;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		private LocalizeKey _name;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		private LocalizeKey _description;

		internal string[] activeTools;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		private static object configManager;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		private static Localization _english;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		internal static BaseUnityPlugin _plugin = null;

		private static bool hasConfigSync = true;

		[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)]
		private static object _configSync;

		public LocalizeKey Name
		{
			get
			{
				LocalizeKey name = _name;
				if (name != null)
				{
					return name;
				}
				Piece component = Prefab.GetComponent<Piece>();
				if (component.m_name.StartsWith("$"))
				{
					_name = new LocalizeKey(component.m_name);
				}
				else
				{
					string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_");
					_name = new LocalizeKey