Decompiled source of ValheimArmory v1.32.0

plugins/ValheimArmory.dll

Decompiled 3 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using SimpleJson;
using UnityEngine;
using ValheimArmory.Common;
using ValheimArmory.common;
using ValheimArmory.patches;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ValheimArmory")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ValheimArmory")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("1.32.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.32.0.0")]
namespace ValheimArmory
{
	internal static class ConfigFileWatcher
	{
		private class WatchEntry
		{
			internal DateTime LastWriteUTC;

			internal long FileLength;

			internal Action<string> Callback;
		}

		internal class ConfigFileWatcherBehaviour : MonoBehaviour
		{
			private float nextPollTime;

			public void Update()
			{
				if (!(Time.unscaledTime < nextPollTime))
				{
					nextPollTime = Time.unscaledTime + PollInterval();
					Poll();
				}
			}

			private static float PollInterval()
			{
				if (ValConfig.ConfigPollIntervalSeconds == null)
				{
					return 30f;
				}
				return ValConfig.ConfigPollIntervalSeconds.Value;
			}

			private static void Poll()
			{
				if (WatchedFiles.Count == 0)
				{
					return;
				}
				string[] array = WatchedFiles.Keys.ToArray();
				foreach (string text in array)
				{
					if (!WatchedFiles.TryGetValue(text, out var value) || !File.Exists(text))
					{
						continue;
					}
					FileInfo fileInfo = new FileInfo(text);
					DateTime lastWriteTimeUtc = fileInfo.LastWriteTimeUtc;
					long length = fileInfo.Length;
					if (!(lastWriteTimeUtc == value.LastWriteUTC) || length != value.FileLength)
					{
						value.LastWriteUTC = lastWriteTimeUtc;
						value.FileLength = length;
						try
						{
							value.Callback?.Invoke(text);
						}
						catch (Exception ex)
						{
							Logger.LogWarning("ConfigFileWatcher callback for " + text + " threw: " + ex.Message);
						}
					}
				}
			}
		}

		private const float FallbackPollSeconds = 30f;

		private static readonly Dictionary<string, WatchEntry> WatchedFiles = new Dictionary<string, WatchEntry>(StringComparer.OrdinalIgnoreCase);

		private static ConfigFileWatcherBehaviour watchProcess;

		internal static void Initialize()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)watchProcess != (Object)null))
			{
				GameObject val = new GameObject("ValheimArmory_ConfigFileWatcher");
				Object.DontDestroyOnLoad((Object)val);
				((Object)val).hideFlags = (HideFlags)61;
				watchProcess = val.AddComponent<ConfigFileWatcherBehaviour>();
				Logger.LogDebug("ConfigFileWatcher initialized.");
			}
		}

		internal static void Register(string fullPath, Action<string> onChanged)
		{
			if (!string.IsNullOrEmpty(fullPath))
			{
				DateTime lastWriteUTC = DateTime.MinValue;
				long fileLength = 0L;
				if (File.Exists(fullPath))
				{
					FileInfo fileInfo = new FileInfo(fullPath);
					lastWriteUTC = fileInfo.LastWriteTimeUtc;
					fileLength = fileInfo.Length;
				}
				WatchedFiles[fullPath] = new WatchEntry
				{
					LastWriteUTC = lastWriteUTC,
					FileLength = fileLength,
					Callback = onChanged
				};
				Logger.LogDebug("ConfigFileWatcher watching " + fullPath);
			}
		}

		internal static void RefreshStamp(string fullPath)
		{
			if (string.IsNullOrEmpty(fullPath) || !WatchedFiles.TryGetValue(fullPath, out var value))
			{
				return;
			}
			try
			{
				FileInfo fileInfo = new FileInfo(fullPath);
				value.LastWriteUTC = fileInfo.LastWriteTimeUtc;
				value.FileLength = fileInfo.Length;
			}
			catch (Exception)
			{
				value.LastWriteUTC = DateTime.MinValue;
				value.FileLength = 0L;
			}
		}
	}
	internal static class Logger
	{
		public static LogLevel Level = (LogLevel)16;

		public static void enableDebugLogging(object sender, EventArgs e)
		{
			toggleDebug();
		}

		public static void toggleDebug()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			if (ValConfig.EnableDebugMode.Value)
			{
				Level = (LogLevel)32;
			}
			else
			{
				Level = (LogLevel)16;
			}
		}

		public static void LogDebug(string message)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)Level >= 32)
			{
				ValheimArmory.Log.LogInfo((object)message);
			}
		}

		public static void LogInfo(string message)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)Level >= 16)
			{
				ValheimArmory.Log.LogInfo((object)message);
			}
		}

		public static void LogWarning(string message)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Invalid comparison between Unknown and I4
			if ((int)Level >= 4)
			{
				ValheimArmory.Log.LogWarning((object)message);
			}
		}

		public static void LogError(string message)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Invalid comparison between Unknown and I4
			if ((int)Level >= 2)
			{
				ValheimArmory.Log.LogError((object)message);
			}
		}
	}
	internal class ValConfig
	{
		public static ConfigFile cfg;

		public static ConfigEntry<bool> EnableDebugMode;

		public static ConfigEntry<bool> LoadPrefabsOnServer;

		public static ConfigEntry<float> HybridWeaponBloodMagicSkillIncrease;

		public static ConfigEntry<bool> VanillaHammersHavePrimaryAttack;

		public static ConfigEntry<bool> ModHammersHavePrimaryAttack;

		public static ConfigEntry<float> StagbreakerPrimaryAttackStamina;

		public static ConfigEntry<float> IronSledgePrimaryAttackStamina;

		public static ConfigEntry<float> DemolisherPrimaryAttackStamina;

		public static ConfigEntry<bool> VanillaAbyssalKnifeBluntDamageConvert;

		public static ConfigEntry<bool> EnableVanillaSpear;

		public static ConfigEntry<bool> EnableVanillaFlintAxe;

		public static ConfigEntry<float> AbyssalKnifeBlunt;

		public static ConfigEntry<float> AbyssalKnifeBluntPerLevel;

		public static ConfigEntry<float> BloodHungerRegen;

		public static ConfigEntry<float> QueenHealthRegen;

		public static ConfigEntry<float> QueenEitrRegen;

		public static ConfigEntry<int> InMemoryModificationsPerTick;

		public static ConfigEntry<float> ConfigApplyDelay;

		public static ConfigEntry<float> ConfigPollIntervalSeconds;

		private const float SaveDelaySeconds = 1f;

		private static bool savePending;

		public ValConfig(ConfigFile Config)
		{
			cfg = Config;
			cfg.SaveOnConfigSet = false;
			CreateConfigValues(Config);
			Logger.toggleDebug();
		}

		internal static void EnableDeferredSave()
		{
			cfg.SaveOnConfigSet = false;
			cfg.SettingChanged += delegate
			{
				savePending = true;
				ConfigChangeDebouncer.Schedule(cfg, SavePending, 1f);
			};
		}

		internal static void SavePending()
		{
			if (!savePending)
			{
				return;
			}
			savePending = false;
			try
			{
				Save();
			}
			catch (IOException ex)
			{
				savePending = true;
				Logger.LogWarning("Could not write the config file, will retry: " + ex.Message);
			}
		}

		internal static void Save()
		{
			cfg.Save();
			ConfigFileWatcher.RefreshStamp(cfg.ConfigFilePath);
		}

		internal static void OnChangeDebounced<T>(ConfigEntry<T> entry, EventHandler handler)
		{
			entry.SettingChanged += delegate(object sender, EventArgs args)
			{
				ConfigChangeDebouncer.Schedule(handler, delegate
				{
					handler(sender, args);
				});
			};
		}

		private void CreateConfigValues(ConfigFile Config)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			EnableDebugMode = Config.Bind<bool>("Client config", "EnableDebugMode", false, new ConfigDescription("Enables Debug logging for Valheim Armory.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdvanced = true
			} }));
			EnableDebugMode.SettingChanged += Logger.enableDebugLogging;
			LoadPrefabsOnServer = Config.Bind<bool>("Server config", "LoadPrefabsOnServer", false, new ConfigDescription("Registers Valheim Armory's item prefabs on a dedicated server. Off by default since the server neither renders nor modifies them; enable it when another server side mod has to resolve Valheim Armory items (spawn/loot tables, admin spawn commands). Takes effect on server restart.", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdvanced = true
			} }));
			HybridWeaponBloodMagicSkillIncrease = BindServerConfig("Blood Magic Hybrid Weapons", "HybridWeaponBloodMagicSkillIncrease", 1f, "How much experiance should one usage of a blood magic hybrid weapon provide?", advanced: true, 0f, 4f);
			VanillaHammersHavePrimaryAttack = BindServerConfig("Vanilla Weapons", "VanillaHammersHavePrimaryAttack", value: true, "Enables a primary swing for vanilla sledges. Moves the slam to a secondary attack.");
			ModHammersHavePrimaryAttack = BindServerConfig("Vanilla Weapons", "ModHammersHavePrimaryAttack", value: true, "Enables a primary swing for mod weapons, disabling makes mod added hammers like vanilla sledges.");
			StagbreakerPrimaryAttackStamina = BindServerConfig("Vanilla Weapons", "StagbreakerPrimaryAttackStamina", 6f, "Stamina cost of the basic attack when enabled for the stagbreaker.", advanced: true, 1f, 30f);
			OnChangeDebounced<float>(StagbreakerPrimaryAttackStamina, WeaponModifier.OnConfigStagbreakerValueChanged);
			IronSledgePrimaryAttackStamina = BindServerConfig("Vanilla Weapons", "IronSledgePrimaryAttackStamina", 10f, "Stamina cost of the basic attack when enabled for the iron sledge.", advanced: true, 1f, 30f);
			OnChangeDebounced<float>(IronSledgePrimaryAttackStamina, WeaponModifier.OnConfigIronSledgeValueChanged);
			DemolisherPrimaryAttackStamina = BindServerConfig("Vanilla Weapons", "DemolisherPrimaryAttackStamina", 14f, "Stamina cost of the basic attack when enabled for the demolisher.", advanced: true, 1f, 30f);
			OnChangeDebounced<float>(DemolisherPrimaryAttackStamina, WeaponModifier.OnConfigDemolisherValueChanged);
			VanillaAbyssalKnifeBluntDamageConvert = BindServerConfig("Vanilla Weapons", "VanillaAbyssalKnifeBluntDamageConvert", value: true, "Removes slash damage from the abyssal knife and adds blunt damage instead.");
			AbyssalKnifeBlunt = BindServerConfig("Vanilla Weapons", "AbyssalKnifeBlunt", 20f, "Blunt damage for the abyssal knife", advanced: true, 0f, 40f);
			AbyssalKnifeBluntPerLevel = BindServerConfig("Vanilla Weapons", "AbyssalKnifeBluntPerLevel", 1f, "Blunt damage per level for the abyssal knife", advanced: true, 0f, 10f);
			OnChangeDebounced<float>(AbyssalKnifeBlunt, WeaponModifier.OnConfigAbyssalKnifeValueChanged);
			OnChangeDebounced<float>(AbyssalKnifeBluntPerLevel, WeaponModifier.OnConfigAbyssalKnifeValueChanged);
			EnableVanillaSpear = BindServerConfig("Vanilla Weapons", "VanillaFlintSpearCraftable", value: false, "Disables or enables crafting of the vanilla spear, to be used in conjuction with the VA flint spear.");
			EnableVanillaSpear.SettingChanged += WeaponModifier.OnConfigChangeModifyVanillaFlintSpear;
			EnableVanillaFlintAxe = BindServerConfig("Vanilla Weapons", "VanillaFlintAxeCraftable", value: false, "Disables or enables crafting of the vanilla flint axe, to be used in conuction with the VA flint axe.");
			EnableVanillaFlintAxe.SettingChanged += WeaponModifier.OnConfigChangeModifyVanillaFlintAxe;
			BloodHungerRegen = BindServerConfig("Status Effects", "BloodHungerRegen", 2f, "How strong the hp regen effect for blood weapons is (2 is 200% regen).", advanced: true, 0f, 5f);
			OnChangeDebounced<float>(BloodHungerRegen, StatusModifiers.OnConfigBloodChanged);
			QueenHealthRegen = BindServerConfig("Status Effects", "QueenHealthRegen", 1.3f, "How strong the hp regen effect for the queen is (1 is 100% additional regen).", advanced: true, 0f, 5f);
			OnChangeDebounced<float>(QueenHealthRegen, StatusModifiers.OnConfigQueenHealthRegenChanged);
			QueenEitrRegen = BindServerConfig("Status Effects", "QueenEitrRegen", 2.5f, "How strong the eitr regen effect for the queen is (2 is 200% additional regen).", advanced: true, 0f, 5f);
			OnChangeDebounced<float>(QueenEitrRegen, StatusModifiers.OnConfigQueenHealthRegenChanged);
			InMemoryModificationsPerTick = BindServerConfig("General", "InMemoryModificationsPerTick", 10, "How many modifications should be processed per tick.", advanced: true, 1, 100);
			ConfigApplyDelay = BindServerConfig("Config", "Config Apply Delay", 1f, "Delay in seconds before a changed config entry is applied in-game. Coalesces a burst of rapid edits (typing, file reloads, server sync) into a single apply. Set to 0 to apply instantly.", advanced: true, 0f, 10f);
			ConfigPollIntervalSeconds = BindServerConfig("Config", "Config Poll Interval", 30f, "Seconds between checks for edits to this mod's config file while a world is running. Lower reacts faster to a hand edit, higher does less disk work.", advanced: true, 1f, 300f);
		}

		internal static void SetupMainFileWatcher()
		{
			ConfigFileWatcher.Register(cfg.ConfigFilePath, OnMainConfigFileChanged);
			ConfigFileWatcher.Initialize();
		}

		private static void OnMainConfigFileChanged(string _)
		{
			if (!((Object)(object)ZNet.instance == (Object)null) && ZNet.instance.IsServer())
			{
				Logger.LogInfo("Configuration file has been changed, reloading settings.");
				cfg.Reload();
			}
		}

		public static ConfigEntry<bool> BindServerConfig(string catagory, string key, bool value, string description, bool advanced = false)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			return cfg.Bind<bool>(catagory, key, value, new ConfigDescription(description, (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true,
				IsAdvanced = advanced
			} }));
		}

		public static ConfigEntry<int> BindServerConfig(string catagory, string key, int value, string description, bool advanced = false, int valmin = 0, int valmax = 150)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Expected O, but got Unknown
			return cfg.Bind<int>(catagory, key, value, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<int>(valmin, valmax), new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true,
				IsAdvanced = advanced
			} }));
		}

		public static ConfigEntry<float> BindServerConfig(string catagory, string key, float value, string description, bool advanced = false, float valmin = 0f, float valmax = 150f)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Expected O, but got Unknown
			return cfg.Bind<float>(catagory, key, value, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<float>(valmin, valmax), new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true,
				IsAdvanced = advanced
			} }));
		}

		public static ConfigEntry<string> BindServerConfig(string catagory, string key, string value, string description, bool advanced = false, AcceptableValueList<string> allowed_values = null)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			return cfg.Bind<string>(catagory, key, value, new ConfigDescription(description, (AcceptableValueBase)(object)allowed_values, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true,
				IsAdvanced = advanced
			} }));
		}
	}
	[BepInPlugin("MidnightsFX.ValheimArmory", "ValheimArmory", "1.32.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	internal class ValheimArmory : BaseUnityPlugin
	{
		public const string PluginGUID = "MidnightsFX.ValheimArmory";

		public const string PluginName = "ValheimArmory";

		public const string PluginVersion = "1.32.0";

		internal static AssetBundle EmbeddedResourceBundle;

		private CustomLocalization Localization;

		public static ManualLogSource Log;

		public void Awake()
		{
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			new ValConfig(((BaseUnityPlugin)this).Config);
			Log = ((BaseUnityPlugin)this).Logger;
			LoadAssets();
			new ValheimArmoryItems();
			PrefabManager.OnVanillaPrefabsAvailable += WeaponModifier.SetupEffects;
			PrefabManager.OnVanillaPrefabsAvailable += WeaponModifier.ModifyVanillaHammersToWarhammers;
			PrefabManager.OnVanillaPrefabsAvailable += WeaponModifier.ModifyVanillaKnife;
			MinimapManager.OnVanillaMapDataLoaded += WeaponModifier.ToggleVanillaFlintAxe;
			MinimapManager.OnVanillaMapDataLoaded += WeaponModifier.ToggleVanillaFlintSpear;
			PrefabManager.OnPrefabsRegistered += StatusModifiers.SyncStatusEffectsToConfig;
			ValConfig.OnChangeDebounced<bool>(ValConfig.VanillaHammersHavePrimaryAttack, WeaponModifier.OnConfigChangeModifyHammers);
			ValConfig.OnChangeDebounced<bool>(ValConfig.ModHammersHavePrimaryAttack, WeaponModifier.OnConfigChangeModifyModHammers);
			ValConfig.OnChangeDebounced<bool>(ValConfig.VanillaAbyssalKnifeBluntDamageConvert, WeaponModifier.OnConfigChangeModifyVanillaKnife);
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			new Harmony("MidnightsFX.ValheimArmory").PatchAll(executingAssembly);
			ValConfig.EnableDeferredSave();
			ValConfig.SetupMainFileWatcher();
			AddLocalizations();
		}

		public void OnDestroy()
		{
			ValConfig.SavePending();
		}

		private void AddLocalizations()
		{
			Localization = LocalizationManager.Instance.GetLocalization();
			Directory.CreateDirectory(Path.Combine(Paths.ConfigPath, "ValheimArmory", "localizations"));
			string[] manifestResourceNames = typeof(ValheimArmory).Assembly.GetManifestResourceNames();
			foreach (string text in manifestResourceNames)
			{
				if (!text.Contains("localizations"))
				{
					continue;
				}
				string text2 = Regex.Replace(ReadEmbeddedResourceFile(text), "\\/\\/.*", "");
				Dictionary<string, string> internal_localization = SimpleJson.DeserializeObject<Dictionary<string, string>>(text2);
				string[] array = text.Split(new char[1] { '.' });
				string path = Path.Combine(Paths.ConfigPath, "ValheimArmory", "localizations", array[2] + ".json");
				if (File.Exists(path))
				{
					string text3 = File.ReadAllText(path);
					try
					{
						Dictionary<string, string> cached_localization = SimpleJson.DeserializeObject<Dictionary<string, string>>(text3);
						cached_localization = UpdateLocalizationWithMissingKeys(internal_localization, cached_localization);
						File.WriteAllText(path, SimpleJson.SerializeObject((object)cached_localization));
						string text4 = File.ReadAllText(path);
						Localization.AddJsonFile(array[2], text4);
					}
					catch
					{
						((BaseUnityPlugin)this).Logger.LogWarning((object)"Failed to update on-disk localization, it will be overwritten.");
						File.WriteAllText(path, text2);
						Localization.AddJsonFile(array[2], text2);
					}
				}
				else
				{
					File.WriteAllText(path, text2);
					Localization.AddJsonFile(array[2], text2);
				}
				((BaseUnityPlugin)this).Logger.LogDebug((object)("Added localization: '" + array[2] + "'"));
			}
		}

		private Dictionary<string, string> UpdateLocalizationWithMissingKeys(Dictionary<string, string> internal_localization, Dictionary<string, string> cached_localization)
		{
			if (internal_localization.Keys != cached_localization.Keys)
			{
				List<string> list = cached_localization.Keys.ToList();
				foreach (KeyValuePair<string, string> item in internal_localization)
				{
					list.Remove(item.Key);
					if (!cached_localization.ContainsKey(item.Key))
					{
						((BaseUnityPlugin)this).Logger.LogDebug((object)("Adding missing localization key " + item.Key));
						cached_localization.Add(item.Key, item.Value);
					}
				}
				if (list.Count > 0)
				{
					((BaseUnityPlugin)this).Logger.LogDebug((object)("Removing extra keys " + string.Join(",", list) + "."));
					foreach (string item2 in list)
					{
						cached_localization.Remove(item2);
					}
				}
			}
			return cached_localization;
		}

		private void LoadAssets()
		{
			if (ValConfig.EnableDebugMode.Value)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)("Embedded resources: " + string.Join(",", typeof(ValheimArmory).Assembly.GetManifestResourceNames())));
			}
			EmbeddedResourceBundle = AssetUtils.LoadAssetBundleFromResources("ValheimArmory.AssetsEmbedded.vabundle", typeof(ValheimArmory).Assembly);
			if (ValConfig.EnableDebugMode.Value)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)("Asset Names: " + string.Join(",", EmbeddedResourceBundle.GetAllAssetNames())));
			}
		}

		private void UnloadAssets()
		{
			EmbeddedResourceBundle.Unload(false);
		}

		private string ReadEmbeddedResourceFile(string filename)
		{
			using Stream stream = typeof(ValheimArmory).Assembly.GetManifestResourceStream(filename);
			using StreamReader streamReader = new StreamReader(stream);
			return streamReader.ReadToEnd();
		}
	}
	internal class ValheimArmoryItems
	{
		private AssetBundle EmbeddedResourceBundle = ValheimArmory.EmbeddedResourceBundle;

		private JotunBatchLoader Loader;

		public ValheimArmoryItems()
		{
			Loader = new JotunBatchLoader();
			LoadArrows();
			LoadBows();
			LoadSwords();
			LoadAxes();
			LoadHammers();
			LoadAtgeirs();
			LoadDaggers();
			LoadShields();
			LoadSpears();
			LoadMaces();
			LoadFists();
			LoadMagic();
			LoadPickaxes();
			LoadNonCraftables();
			Loader.BatchSetup(EmbeddedResourceBundle);
		}

		private void LoadArrows()
		{
			Logger.LogInfo("Loading Arrows");
			ItemDefinition itemDefinition = new ItemDefinition();
			itemDefinition.Name = "Black Metal Arrow";
			itemDefinition.Category = ItemCategory.Arrows;
			itemDefinition.Prefab = "VAArrowGreenMetal";
			itemDefinition.Icon = "arrow_greenmetal";
			itemDefinition.CraftedAt = "forge";
			itemDefinition.CraftAmount = 20;
			itemDefinition.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.blunt,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "BlackMetal",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition);
			ItemDefinition itemDefinition2 = new ItemDefinition();
			itemDefinition2.Name = "Bone Arrow";
			itemDefinition2.Category = ItemCategory.Arrows;
			itemDefinition2.Prefab = "VAArrowBone";
			itemDefinition2.Icon = "bone_arrow";
			itemDefinition2.CraftedAt = "piece_workbench";
			itemDefinition2.CraftAmount = 20;
			itemDefinition2.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 32f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition2.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "BoneFragments",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition2);
			ItemDefinition itemDefinition3 = new ItemDefinition();
			itemDefinition3.Name = "Surtling Fire Arrow";
			itemDefinition3.Category = ItemCategory.Arrows;
			itemDefinition3.Prefab = "VAarrow_surtling_fire";
			itemDefinition3.Icon = "surtlingcore_arrow";
			itemDefinition3.CraftedAt = "piece_workbench";
			itemDefinition3.CraftAmount = 20;
			itemDefinition3.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.fire,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition3.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Obsidian",
						Amount = 4,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "SurtlingCore",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition3);
			ItemDefinition itemDefinition4 = new ItemDefinition();
			itemDefinition4.Name = "Ancient Wood Arrow";
			itemDefinition4.Category = ItemCategory.Arrows;
			itemDefinition4.Prefab = "VAArrowAncient";
			itemDefinition4.Icon = "ancient_arrow";
			itemDefinition4.CraftedAt = "piece_workbench";
			itemDefinition4.CraftAmount = 20;
			itemDefinition4.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 37f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition4.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition4);
			ItemDefinition itemDefinition5 = new ItemDefinition();
			itemDefinition5.Name = "Chitin Arrow";
			itemDefinition5.Category = ItemCategory.Arrows;
			itemDefinition5.Prefab = "VAChitinArrow";
			itemDefinition5.Icon = "arrow_chitin";
			itemDefinition5.CraftedAt = "piece_workbench";
			itemDefinition5.CraftAmount = 20;
			itemDefinition5.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.blunt,
					new ItemStatConfig
					{
						Default_value = 35f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition5.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Chitin",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition5);
			ItemDefinition itemDefinition6 = new ItemDefinition();
			itemDefinition6.Name = "Wood Bolt";
			itemDefinition6.Category = ItemCategory.Arrows;
			itemDefinition6.Prefab = "VABoltWood";
			itemDefinition6.Icon = "bolt_wood";
			itemDefinition6.CraftedAt = "piece_workbench";
			itemDefinition6.CraftAmount = 20;
			itemDefinition6.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 22f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition6.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition6);
			ItemDefinition itemDefinition7 = new ItemDefinition();
			itemDefinition7.Name = "Corewood Bolt";
			itemDefinition7.Category = ItemCategory.Arrows;
			itemDefinition7.Prefab = "VABoltCoreWood";
			itemDefinition7.Icon = "bolt_corewood";
			itemDefinition7.CraftedAt = "piece_workbench";
			itemDefinition7.CraftAmount = 20;
			itemDefinition7.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 37f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition7.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "RoundLog",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition7);
			ItemDefinition itemDefinition8 = new ItemDefinition();
			itemDefinition8.Name = "Bronze Bolt";
			itemDefinition8.Category = ItemCategory.Arrows;
			itemDefinition8.Prefab = "VAbolt_bronze";
			itemDefinition8.Icon = "bronze_bolt";
			itemDefinition8.CraftedAt = "forge";
			itemDefinition8.CraftAmount = 20;
			itemDefinition8.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 32f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition8.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition8);
			ItemDefinition itemDefinition9 = new ItemDefinition();
			itemDefinition9.Name = "Poison Bolt";
			itemDefinition9.Category = ItemCategory.Arrows;
			itemDefinition9.Prefab = "VAbolt_poison";
			itemDefinition9.Icon = "poison_bolt";
			itemDefinition9.CraftedAt = "forge";
			itemDefinition9.CraftAmount = 20;
			itemDefinition9.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.poison,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition9.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Ooze",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition9);
			ItemDefinition itemDefinition10 = new ItemDefinition();
			itemDefinition10.Name = "Obsidian Bolt";
			itemDefinition10.Category = ItemCategory.Arrows;
			itemDefinition10.Prefab = "VAObsidianBolt";
			itemDefinition10.Icon = "obsidian_bolt";
			itemDefinition10.CraftedAt = "piece_workbench";
			itemDefinition10.CraftAmount = 20;
			itemDefinition10.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 52f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition10.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Obsidian",
						Amount = 4,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition10);
			ItemDefinition itemDefinition11 = new ItemDefinition();
			itemDefinition11.Name = "Frost Bolt";
			itemDefinition11.Category = ItemCategory.Arrows;
			itemDefinition11.Prefab = "VAbolt_frost";
			itemDefinition11.Icon = "ice_bolt";
			itemDefinition11.CraftedAt = "forge";
			itemDefinition11.CraftAmount = 20;
			itemDefinition11.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.frost,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition11.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "FreezeGland",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition11);
			ItemDefinition itemDefinition12 = new ItemDefinition();
			itemDefinition12.Name = "Surtling Core Bolt";
			itemDefinition12.Category = ItemCategory.Arrows;
			itemDefinition12.Prefab = "VASurtlingBolt";
			itemDefinition12.Icon = "surtling_bolt";
			itemDefinition12.CraftedAt = "forge";
			itemDefinition12.CraftAmount = 20;
			itemDefinition12.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.fire,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition12.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "SurtlingCore",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition12);
			ItemDefinition itemDefinition13 = new ItemDefinition();
			itemDefinition13.Name = "Needle Bolt";
			itemDefinition13.Category = ItemCategory.Arrows;
			itemDefinition13.Prefab = "VABoltNeedle";
			itemDefinition13.Icon = "needle_bolt";
			itemDefinition13.CraftedAt = "piece_workbench";
			itemDefinition13.CraftAmount = 20;
			itemDefinition13.ModifableStats = new Dictionary<ItemStat, ItemStatConfig> { 
			{
				ItemStat.pierce,
				new ItemStatConfig
				{
					Default_value = 56f,
					Min = 0f,
					Max = 200f
				}
			} };
			itemDefinition13.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Needle",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition13);
			ItemDefinition itemDefinition14 = new ItemDefinition();
			itemDefinition14.Name = "Fire Bolt";
			itemDefinition14.Category = ItemCategory.Arrows;
			itemDefinition14.Prefab = "VAFireBolt";
			itemDefinition14.Icon = "surtling_bolt";
			itemDefinition14.CraftedAt = "piece_workbench";
			itemDefinition14.CraftAmount = 20;
			itemDefinition14.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 22f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.fire,
					new ItemStatConfig
					{
						Default_value = 34f,
						Min = 0f,
						Max = 200f
					}
				}
			};
			itemDefinition14.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Resin",
						Amount = 8,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Feathers",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition14);
		}

		private void LoadBows()
		{
			Logger.LogInfo("Loading Bows");
			ItemDefinition itemDefinition = new ItemDefinition();
			itemDefinition.Name = "Blackmetal Bow";
			itemDefinition.Category = ItemCategory.Bows;
			itemDefinition.Prefab = "VABlackmetal_bow";
			itemDefinition.Icon = "blackmetal_bow";
			itemDefinition.CraftedAt = "forge";
			itemDefinition.UpgraderResource = "Upgrader4Weapon";
			itemDefinition.CraftAmount = 1;
			itemDefinition.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 62f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.draw_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 500f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.bow_draw_speed,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0.01f,
						Max = 2f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.projectile_accuracy_max,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 100f
					}
				}
			};
			itemDefinition.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 15,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "BlackMetal",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "LinenThread",
						Amount = 5,
						UpgradeCost = 5
					}
				}
			};
			Loader.AddDefinition(itemDefinition);
			ItemDefinition itemDefinition2 = new ItemDefinition();
			itemDefinition2.Name = "Carapace Blood Bow";
			itemDefinition2.Category = ItemCategory.Bows;
			itemDefinition2.Prefab = "VAHeavy_Blood_Bone_Bow";
			itemDefinition2.Icon = "blood_bone_bow_heavy";
			itemDefinition2.CraftedAt = "piece_magetable";
			itemDefinition2.UpgraderResource = "Upgrader5Weapon";
			itemDefinition2.CraftAmount = 1;
			itemDefinition2.HybridSkills = new List<SkillType> { (SkillType)10 };
			itemDefinition2.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 92f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 24f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.spirit_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.draw_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.primary_attack_flat_health_cost,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.primary_attack_percent_health_cost,
					new ItemStatConfig
					{
						Default_value = 0f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 500f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.bow_draw_speed,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0.01f,
						Max = 2f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.projectile_accuracy_max,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 100f
					}
				}
			};
			itemDefinition2.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "YggdrasilWood",
						Amount = 14,
						UpgradeCost = 7
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 10,
						UpgradeCost = 6
					},
					new RecipeIngredient
					{
						Prefab = "Carapace",
						Amount = 24,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "TrophyTick",
						Amount = 2,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Eitr",
						Amount = 0,
						UpgradeCost = 10
					}
				}
			};
			Loader.AddDefinition(itemDefinition2);
			ItemDefinition itemDefinition3 = new ItemDefinition();
			itemDefinition3.Name = "Blood Bone Bow";
			itemDefinition3.Category = ItemCategory.Bows;
			itemDefinition3.Prefab = "VABlood_bone_bow";
			itemDefinition3.Icon = "bone_bow";
			itemDefinition3.CraftedAt = "forge";
			itemDefinition3.UpgraderResource = "Upgrader3Weapon";
			itemDefinition3.CraftAmount = 1;
			itemDefinition3.HybridSkills = new List<SkillType> { (SkillType)10 };
			itemDefinition3.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 18f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.spirit_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.draw_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.primary_attack_flat_health_cost,
					new ItemStatConfig
					{
						Default_value = 8f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.primary_attack_percent_health_cost,
					new ItemStatConfig
					{
						Default_value = 0f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 500f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.bow_draw_speed,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0.01f,
						Max = 2f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.projectile_accuracy_max,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 100f
					}
				}
			};
			itemDefinition3.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "BoneFragments",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "TrophyUlv",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition3);
			ItemDefinition itemDefinition4 = new ItemDefinition();
			itemDefinition4.Name = "Bronze Arbelist";
			itemDefinition4.Category = ItemCategory.Bows;
			itemDefinition4.Prefab = "VAArbalistBronze";
			itemDefinition4.Icon = "bronze_crossbow_upright";
			itemDefinition4.CraftedAt = "forge";
			itemDefinition4.UpgraderResource = "Upgrader3Weapon";
			itemDefinition4.CraftAmount = 1;
			itemDefinition4.Craftable = false;
			itemDefinition4.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 140f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition4.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "JuteRed",
						Amount = 5,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 2,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition4);
			ItemDefinition itemDefinition5 = new ItemDefinition();
			itemDefinition5.Name = "Iron Crossbow";
			itemDefinition5.Category = ItemCategory.Bows;
			itemDefinition5.Prefab = "VACrossbowIron";
			itemDefinition5.Icon = "iron_crossbow";
			itemDefinition5.CraftedAt = "forge";
			itemDefinition5.UpgraderResource = "Upgrader2Weapon";
			itemDefinition5.CraftAmount = 1;
			itemDefinition5.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 120f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition5.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 5,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 10,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "IronNails",
						Amount = 2,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition5);
			ItemDefinition itemDefinition6 = new ItemDefinition();
			itemDefinition6.Name = "Silver Crossbow";
			itemDefinition6.Category = ItemCategory.Bows;
			itemDefinition6.Prefab = "VACrossbowSilver";
			itemDefinition6.Icon = "silver_crossbow";
			itemDefinition6.CraftedAt = "forge";
			itemDefinition6.UpgraderResource = "Upgrader3Weapon";
			itemDefinition6.CraftAmount = 1;
			itemDefinition6.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 140f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.poison,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition6.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Guck",
						Amount = 5,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 12,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "IronNails",
						Amount = 2,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition6);
			ItemDefinition itemDefinition7 = new ItemDefinition();
			itemDefinition7.Name = "Blackmetal Crossbow";
			itemDefinition7.Category = ItemCategory.Bows;
			itemDefinition7.Prefab = "VACrossbowBlackmetal";
			itemDefinition7.Icon = "blackmetal_crossbow";
			itemDefinition7.CraftedAt = "forge";
			itemDefinition7.UpgraderResource = "Upgrader4Weapon";
			itemDefinition7.CraftAmount = 1;
			itemDefinition7.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 180f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition7.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 16,
						UpgradeCost = 8
					},
					new RecipeIngredient
					{
						Prefab = "BlackMetal",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "LinenThread",
						Amount = 6,
						UpgradeCost = 4
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 4,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition7);
			ItemDefinition itemDefinition8 = new ItemDefinition();
			itemDefinition8.Name = "Eikthyrs Bow";
			itemDefinition8.Category = ItemCategory.Bows;
			itemDefinition8.Prefab = "VAAntler_Bow";
			itemDefinition8.Icon = "antler_bow";
			itemDefinition8.CraftedAt = "piece_workbench";
			itemDefinition8.UpgraderResource = "Upgrader1Weapon";
			itemDefinition8.CraftAmount = 1;
			itemDefinition8.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 26f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.lightning,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.lightning_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.draw_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.bow_draw_speed,
					new ItemStatConfig
					{
						Default_value = 2.5f,
						Min = 0.01f,
						Max = 2.5f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 45f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.projectile_accuracy_max,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 100f
					}
				}
			};
			itemDefinition8.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 15,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Resin",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "HardAntler",
						Amount = 3,
						UpgradeCost = 3
					},
					new RecipeIngredient
					{
						Prefab = "TrophyEikthyr",
						Amount = 1,
						UpgradeCost = 1
					}
				}
			};
			Loader.AddDefinition(itemDefinition8);
			ItemDefinition itemDefinition9 = new ItemDefinition();
			itemDefinition9.Name = "Bronze Crossbow";
			itemDefinition9.Category = ItemCategory.Bows;
			itemDefinition9.Prefab = "VACrossbowBronze";
			itemDefinition9.Icon = "bronze_crossbow2";
			itemDefinition9.CraftedAt = "forge";
			itemDefinition9.UpgraderResource = "Upgrader1Weapon";
			itemDefinition9.CraftAmount = 1;
			itemDefinition9.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 80f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 150f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition9.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "RoundLog",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 4,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "DeerHide",
						Amount = 2,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition9);
			ItemDefinition itemDefinition10 = new ItemDefinition();
			itemDefinition10.Name = "Wood Crossbow";
			itemDefinition10.Category = ItemCategory.Bows;
			itemDefinition10.Prefab = "VACrossbowWood";
			itemDefinition10.Icon = "woodCrossbow";
			itemDefinition10.CraftedAt = "piece_workbench";
			itemDefinition10.UpgraderResource = "Upgrader0Weapon";
			itemDefinition10.CraftAmount = 1;
			itemDefinition10.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 150f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 7f,
						Min = 0.01f,
						Max = 10f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition10.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Wood",
						Amount = 30,
						UpgradeCost = 15
					},
					new RecipeIngredient
					{
						Prefab = "Resin",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "DeerHide",
						Amount = 2,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition10);
			ItemDefinition itemDefinition11 = new ItemDefinition();
			itemDefinition11.Name = "Elders Reach";
			itemDefinition11.Category = ItemCategory.Bows;
			itemDefinition11.Prefab = "VACrossbowElder";
			itemDefinition11.Icon = "elder_crossbow";
			itemDefinition11.CraftedAt = "forge";
			itemDefinition11.UpgraderResource = "Upgrader2Weapon";
			itemDefinition11.CraftAmount = 1;
			itemDefinition11.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 80f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 7f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.spirit_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 150f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition11.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 4,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "RoundLog",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "CryptKey",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophyTheElder",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition11);
			ItemDefinition itemDefinition12 = new ItemDefinition();
			itemDefinition12.Name = "Moder Crossbow";
			itemDefinition12.Category = ItemCategory.Bows;
			itemDefinition12.Prefab = "VACrossbowModer";
			itemDefinition12.Icon = "moder_crossbow";
			itemDefinition12.CraftedAt = "forge";
			itemDefinition12.UpgraderResource = "Upgrader4Weapon";
			itemDefinition12.CraftAmount = 1;
			itemDefinition12.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 150f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.frost,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.frost_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.crossbow_reload_speed,
					new ItemStatConfig
					{
						Default_value = 3.5f,
						Min = 0.01f,
						Max = 3.5f
					}
				},
				{
					ItemStat.crossbow_reload_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 300f
					}
				}
			};
			itemDefinition12.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Obsidian",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "DragonTear",
						Amount = 10,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophyDragonQueen",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 0,
						UpgradeCost = 6
					}
				}
			};
			Loader.AddDefinition(itemDefinition12);
			ItemDefinition itemDefinition13 = new ItemDefinition();
			itemDefinition13.Name = "Queens Greatbow";
			itemDefinition13.Category = ItemCategory.Bows;
			itemDefinition13.Prefab = "VAQueen_bow";
			itemDefinition13.Icon = "queen_bow";
			itemDefinition13.CraftedAt = "blackforge";
			itemDefinition13.UpgraderResource = "Upgrader6Weapon";
			itemDefinition13.CraftAmount = 1;
			itemDefinition13.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 72f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.poison,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.poison_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.lightning,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 99f
					}
				},
				{
					ItemStat.lightning_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.draw_stamina_drain,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.bow_draw_speed,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0.01f,
						Max = 3f
					}
				},
				{
					ItemStat.projectile_velocity,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.projectile_accuracy_max,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 100f
					}
				}
			};
			itemDefinition13.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "YggdrasilWood",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Eitr",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "JuteBlue",
						Amount = 4,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophySeekerQueen",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Carapace",
						Amount = 0,
						UpgradeCost = 4
					}
				}
			};
			Loader.AddDefinition(itemDefinition13);
		}

		private void LoadSwords()
		{
			Logger.LogInfo("Loading Swords");
			ItemDefinition itemDefinition = new ItemDefinition();
			itemDefinition.Name = "Faders Sword";
			itemDefinition.Category = ItemCategory.Swords;
			itemDefinition.Prefab = "VASwordFader";
			itemDefinition.Icon = "fader_sword";
			itemDefinition.CraftedAt = "blackforge";
			itemDefinition.UpgraderResource = "Upgrader7Weapon";
			itemDefinition.CraftAmount = 1;
			itemDefinition.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 145f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.fire,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.fire_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.poison,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.poison_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 18f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FlametalNew",
						Amount = 30,
						UpgradeCost = 30
					},
					new RecipeIngredient
					{
						Prefab = "CharredBone",
						Amount = 30,
						UpgradeCost = 30
					},
					new RecipeIngredient
					{
						Prefab = "TrophyFader",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "FaderDrop",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition);
			ItemDefinition itemDefinition2 = new ItemDefinition();
			itemDefinition2.Name = "Faders Greatsword";
			itemDefinition2.Category = ItemCategory.Swords;
			itemDefinition2.Prefab = "VAGreatswordFader";
			itemDefinition2.Icon = "fader_greatsword";
			itemDefinition2.CraftedAt = "blackforge";
			itemDefinition2.UpgraderResource = "Upgrader7Weapon";
			itemDefinition2.CraftAmount = 1;
			itemDefinition2.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 180f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 3f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.fire,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.fire_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.poison,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.poison_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 60f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 18f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition2.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FlametalNew",
						Amount = 40,
						UpgradeCost = 20
					},
					new RecipeIngredient
					{
						Prefab = "CharredBone",
						Amount = 20,
						UpgradeCost = 20
					},
					new RecipeIngredient
					{
						Prefab = "TrophyFader",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "FaderDrop",
						Amount = 1,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition2);
			ItemDefinition itemDefinition3 = new ItemDefinition();
			itemDefinition3.Name = "Blackmetal Greatsword";
			itemDefinition3.Category = ItemCategory.Swords;
			itemDefinition3.Prefab = "VABlackmetal_greatsword";
			itemDefinition3.Icon = "blackmetal_greatsword";
			itemDefinition3.CraftedAt = "forge";
			itemDefinition3.UpgraderResource = "Upgrader4Weapon";
			itemDefinition3.CraftAmount = 1;
			itemDefinition3.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 125f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 52f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 18f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 36f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition3.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "BlackMetal",
						Amount = 30,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "LinenThread",
						Amount = 10,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 6,
						UpgradeCost = 3
					}
				}
			};
			Loader.AddDefinition(itemDefinition3);
			ItemDefinition itemDefinition4 = new ItemDefinition();
			itemDefinition4.Name = "Abyssal Sword";
			itemDefinition4.Category = ItemCategory.Swords;
			itemDefinition4.Prefab = "VASwordChitin";
			itemDefinition4.Icon = "chitin_sword";
			itemDefinition4.CraftedAt = "piece_workbench";
			itemDefinition4.UpgraderResource = "Upgrader3Weapon";
			itemDefinition4.CraftAmount = 1;
			itemDefinition4.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.blunt,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.blunt_per_level,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 18f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 10f,
						Min = 1f,
						Max = 30f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition4.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 2,
						UpgradeCost = 1
					},
					new RecipeIngredient
					{
						Prefab = "Chitin",
						Amount = 30,
						UpgradeCost = 15
					},
					new RecipeIngredient
					{
						Prefab = "DeerHide",
						Amount = 2,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition4);
			ItemDefinition itemDefinition5 = new ItemDefinition();
			itemDefinition5.Name = "Eikthyrs Sword";
			itemDefinition5.Category = ItemCategory.Swords;
			itemDefinition5.Prefab = "VAAntler_Sword";
			itemDefinition5.Icon = "antler_sword";
			itemDefinition5.CraftedAt = "piece_workbench";
			itemDefinition5.UpgraderResource = "Upgrader1Weapon";
			itemDefinition5.CraftAmount = 1;
			itemDefinition5.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 16f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.blunt,
					new ItemStatConfig
					{
						Default_value = 8f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.blunt_per_level,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.lightning,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.lightning_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 8f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 8f,
						Min = 1f,
						Max = 30f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 16f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition5.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "FineWood",
						Amount = 3,
						UpgradeCost = 1
					},
					new RecipeIngredient
					{
						Prefab = "Resin",
						Amount = 16,
						UpgradeCost = 8
					},
					new RecipeIngredient
					{
						Prefab = "HardAntler",
						Amount = 3,
						UpgradeCost = 3
					},
					new RecipeIngredient
					{
						Prefab = "TrophyEikthyr",
						Amount = 1,
						UpgradeCost = 1
					}
				}
			};
			Loader.AddDefinition(itemDefinition5);
			ItemDefinition itemDefinition6 = new ItemDefinition();
			itemDefinition6.Name = "Elders Balance";
			itemDefinition6.Category = ItemCategory.Swords;
			itemDefinition6.Prefab = "VAVine_Sword";
			itemDefinition6.Icon = "vine_sword";
			itemDefinition6.CraftedAt = "forge";
			itemDefinition6.UpgraderResource = "Upgrader2Weapon";
			itemDefinition6.CraftAmount = 1;
			itemDefinition6.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 10f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.spirit_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 8f,
						Min = 1f,
						Max = 30f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 16f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition6.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 2,
						UpgradeCost = 1
					},
					new RecipeIngredient
					{
						Prefab = "Stone",
						Amount = 16,
						UpgradeCost = 8
					},
					new RecipeIngredient
					{
						Prefab = "CryptKey",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophyTheElder",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "RoundLog",
						Amount = 0,
						UpgradeCost = 4
					}
				}
			};
			Loader.AddDefinition(itemDefinition6);
			ItemDefinition itemDefinition7 = new ItemDefinition();
			itemDefinition7.Name = "Moders Grasp";
			itemDefinition7.Category = ItemCategory.Swords;
			itemDefinition7.Prefab = "VASwordModer";
			itemDefinition7.Icon = "moder_sword";
			itemDefinition7.CraftedAt = "forge";
			itemDefinition7.UpgraderResource = "Upgrader4Weapon";
			itemDefinition7.CraftAmount = 1;
			itemDefinition7.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 35f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.frost,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.frost_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 20f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 1f,
						Max = 30f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 24f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition7.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 4,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "Obsidian",
						Amount = 30,
						UpgradeCost = 15
					},
					new RecipeIngredient
					{
						Prefab = "DragonTear",
						Amount = 10,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophyDragonQueen",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 0,
						UpgradeCost = 2
					},
					new RecipeIngredient
					{
						Prefab = "JuteRed",
						Amount = 0,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition7);
			ItemDefinition itemDefinition8 = new ItemDefinition();
			itemDefinition8.Name = "Moders Greatsword";
			itemDefinition8.Category = ItemCategory.Swords;
			itemDefinition8.Prefab = "VAModer_greatsword";
			itemDefinition8.Icon = "moder_greatsword";
			itemDefinition8.CraftedAt = "forge";
			itemDefinition8.UpgraderResource = "Upgrader4Weapon";
			itemDefinition8.CraftAmount = 1;
			itemDefinition8.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 2f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.pierce,
					new ItemStatConfig
					{
						Default_value = 40f,
						Min = 0f,
						Max = 90f
					}
				},
				{
					ItemStat.pierce_per_level,
					new ItemStatConfig
					{
						Default_value = 4f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.frost,
					new ItemStatConfig
					{
						Default_value = 25f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.frost_per_level,
					new ItemStatConfig
					{
						Default_value = 1f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 48f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 17f,
						Min = 1f,
						Max = 30f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 34f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition8.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "Crystal",
						Amount = 25,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "Obsidian",
						Amount = 15,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "DragonTear",
						Amount = 10,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "TrophyDragonQueen",
						Amount = 1,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Silver",
						Amount = 0,
						UpgradeCost = 4
					},
					new RecipeIngredient
					{
						Prefab = "JuteRed",
						Amount = 0,
						UpgradeCost = 2
					}
				}
			};
			Loader.AddDefinition(itemDefinition8);
			ItemDefinition itemDefinition9 = new ItemDefinition();
			itemDefinition9.Name = "Bronze Greatsword";
			itemDefinition9.Category = ItemCategory.Swords;
			itemDefinition9.Prefab = "VAbronze_greatsword";
			itemDefinition9.Icon = "bronze_greatsword_reforged";
			itemDefinition9.CraftedAt = "forge";
			itemDefinition9.UpgraderResource = "Upgrader1Weapon";
			itemDefinition9.CraftAmount = 1;
			itemDefinition9.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 200f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 160f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 16f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 12f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 24f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition9.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "RoundLog",
						Amount = 4,
						UpgradeCost = 0
					},
					new RecipeIngredient
					{
						Prefab = "Bronze",
						Amount = 20,
						UpgradeCost = 10
					},
					new RecipeIngredient
					{
						Prefab = "DeerHide",
						Amount = 3,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition9);
			ItemDefinition itemDefinition10 = new ItemDefinition();
			itemDefinition10.Name = "Iron Greatsword";
			itemDefinition10.Category = ItemCategory.Swords;
			itemDefinition10.Prefab = "VAiron_greatsword";
			itemDefinition10.Icon = "iron_greatsword_reforged";
			itemDefinition10.CraftedAt = "forge";
			itemDefinition10.UpgraderResource = "Upgrader2Weapon";
			itemDefinition10.CraftAmount = 1;
			itemDefinition10.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 75f,
						Min = 0f,
						Max = 250f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.attack_force,
					new ItemStatConfig
					{
						Default_value = 55f,
						Min = 0f,
						Max = 160f
					}
				},
				{
					ItemStat.block_armor,
					new ItemStatConfig
					{
						Default_value = 28f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.block_force,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.durability,
					new ItemStatConfig
					{
						Default_value = 200f,
						Min = 0f,
						Max = 400f
					}
				},
				{
					ItemStat.durability_per_level,
					new ItemStatConfig
					{
						Default_value = 50f,
						Min = 0f,
						Max = 150f
					}
				},
				{
					ItemStat.primary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 14f,
						Min = 1f,
						Max = 50f
					}
				},
				{
					ItemStat.secondary_attack_stamina,
					new ItemStatConfig
					{
						Default_value = 28f,
						Min = 1f,
						Max = 50f
					}
				}
			};
			itemDefinition10.Recipe = new RecipeDefinition
			{
				RecipeItems = new List<RecipeIngredient>
				{
					new RecipeIngredient
					{
						Prefab = "ElderBark",
						Amount = 15,
						UpgradeCost = 5
					},
					new RecipeIngredient
					{
						Prefab = "Iron",
						Amount = 30,
						UpgradeCost = 15
					},
					new RecipeIngredient
					{
						Prefab = "LeatherScraps",
						Amount = 4,
						UpgradeCost = 0
					}
				}
			};
			Loader.AddDefinition(itemDefinition10);
			ItemDefinition itemDefinition11 = new ItemDefinition();
			itemDefinition11.Name = "Silver Greatsword";
			itemDefinition11.Category = ItemCategory.Swords;
			itemDefinition11.Prefab = "VAsilver_greatsword";
			itemDefinition11.Icon = "silver_greatsword_reforged";
			itemDefinition11.CraftedAt = "forge";
			itemDefinition11.UpgraderResource = "Upgrader3Weapon";
			itemDefinition11.CraftAmount = 1;
			itemDefinition11.ModifableStats = new Dictionary<ItemStat, ItemStatConfig>
			{
				{
					ItemStat.slash,
					new ItemStatConfig
					{
						Default_value = 100f,
						Min = 0f,
						Max = 300f
					}
				},
				{
					ItemStat.slash_per_level,
					new ItemStatConfig
					{
						Default_value = 6f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.spirit,
					new ItemStatConfig
					{
						Default_value = 30f,
						Min = 0f,
						Max = 120f
					}
				},
				{
					ItemStat.spirit_per_level,
					new ItemStatConfig
					{
						Default_value = 5f,
						Min = 0f,
						Max = 50f
					}
				},
				{
					ItemStat.at