using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using PieceManager;
using ServerSync;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Hunter_Legacy")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Hunter_Legacy")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")]
[assembly: AssemblyFileVersion("1.0.7")]
[assembly: AssemblyCompany("Dreanegade")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.7.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[<6204d626-5fba-49d4-9168-5aaa2607961e>Embedded]
internal sealed class <6204d626-5fba-49d4-9168-5aaa2607961e>EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[<6204d626-5fba-49d4-9168-5aaa2607961e>Embedded]
internal sealed class <7e6708aa-7554-4d90-a2a0-c39b8c1343b6>IsReadOnlyAttribute : Attribute
{
}
[CompilerGenerated]
[<6204d626-5fba-49d4-9168-5aaa2607961e>Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class <0989fef8-d62b-49fe-82ce-23a7b0fca8e5>NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public <0989fef8-d62b-49fe-82ce-23a7b0fca8e5>NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public <0989fef8-d62b-49fe-82ce-23a7b0fca8e5>NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[<6204d626-5fba-49d4-9168-5aaa2607961e>Embedded]
[CompilerGenerated]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class <a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContextAttribute : Attribute
{
public readonly byte Flag;
public <a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[HarmonyPatch(typeof(ArcheryTarget), "Start")]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
public static class ArcheryTargetCustomProjectile
{
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
public class BoltPair
{
public string itemDropName;
public string projectileName;
public BoltPair(string item, string proj)
{
itemDropName = item;
projectileName = proj;
}
}
private static readonly List<BoltPair> CustomBolts = new List<BoltPair>
{
new BoltPair("BoltFlintDO", "projectile_bolt_flint_DO"),
new BoltPair("BoltStoneDO", "projectile_bolt_stone_DO"),
new BoltPair("BoltBoneDO", "projectile_bolt_bone_DO"),
new BoltPair("BoltObsidianDO", "projectile_bolt_obsidian_DO"),
new BoltPair("BoltCrystalDO", "projectile_bolt_crystal_DO"),
new BoltPair("BoltMarbleDO", "projectile_bolt_marble_DO"),
new BoltPair("PelletStoneDO", "projectile_pellet_stone_DO"),
new BoltPair("PelletObsidianDO", "projectile_pellet_obsidian_DO"),
new BoltPair("PelletMarbleDO", "projectile_pellet_marble_DO"),
new BoltPair("PelletGraustenDO", "projectile_pellet_grausten_DO")
};
private static void Postfix(ArcheryTarget __instance)
{
if ((Object)(object)ZNetScene.instance == (Object)null)
{
Debug.LogError((object)"ArcheryTargetCustomProjectile: ZNetScene is null! Cannot register custom bolts.");
return;
}
foreach (BoltPair customBolt in CustomBolts)
{
string itemDropName = customBolt.itemDropName;
string projectileName = customBolt.projectileName;
GameObject prefab = ZNetScene.instance.GetPrefab(itemDropName);
if ((Object)(object)prefab == (Object)null)
{
Debug.LogWarning((object)("ArcheryTargetCustomProjectile: ItemDrop '" + itemDropName + "' not found."));
continue;
}
ItemDrop component = prefab.GetComponent<ItemDrop>();
if ((Object)(object)component == (Object)null)
{
Debug.LogWarning((object)("ArcheryTargetCustomProjectile: '" + itemDropName + "' has no ItemDrop component."));
continue;
}
GameObject prefab2 = ZNetScene.instance.GetPrefab(projectileName);
if ((Object)(object)prefab2 == (Object)null)
{
Debug.LogWarning((object)("ArcheryTargetCustomProjectile: Projectile '" + projectileName + "' not found."));
continue;
}
if ((Object)(object)component.m_itemData.m_shared.m_attack.m_attackProjectile == (Object)null || ((Object)component.m_itemData.m_shared.m_attack.m_attackProjectile).name != projectileName)
{
component.m_itemData.m_shared.m_attack.m_attackProjectile = prefab2;
Debug.Log((object)("ArcheryTargetCustomProjectile: Assigned projectile '" + projectileName + "' to ItemDrop '" + itemDropName + "'."));
}
if (!__instance.m_returnAmmo.Contains(component))
{
__instance.m_returnAmmo.Add(component);
Debug.Log((object)("ArcheryTargetCustomProjectile: Added '" + itemDropName + "' to ArcheryTarget return ammo."));
}
}
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class SAP_Log
{
private static readonly ManualLogSource _log = Logger.CreateLogSource("SlingshotAmmoPatch");
public static void Info(string s)
{
_log.LogInfo((object)s);
}
public static void Err(string s)
{
_log.LogError((object)s);
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class SAP_Util
{
private static readonly BindingFlags InstAll = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
private static readonly FieldInfo FI_weapon = typeof(Attack).GetField("m_weapon", InstAll);
private static readonly FieldInfo FI_character = typeof(Attack).GetField("m_character", InstAll);
private static readonly FieldInfo FI_ammoItem = typeof(Attack).GetField("m_ammoItem", InstAll);
private static readonly FieldInfo FI_lastUsedAmmo = typeof(Attack).GetField("m_lastUsedAmmo", InstAll);
public static ItemData GetWeapon(Attack atk)
{
if (atk == null || FI_weapon == null)
{
return null;
}
try
{
object? value = FI_weapon.GetValue(atk);
return (ItemData)((value is ItemData) ? value : null);
}
catch
{
return null;
}
}
public static Humanoid GetCharacter(Attack atk)
{
if (atk == null || FI_character == null)
{
return null;
}
try
{
object? value = FI_character.GetValue(atk);
return (Humanoid)((value is Humanoid) ? value : null);
}
catch
{
return null;
}
}
public static ItemData GetAmmoItem(Attack atk)
{
if (atk == null)
{
return null;
}
ItemData val = null;
if (FI_ammoItem != null)
{
try
{
object? value = FI_ammoItem.GetValue(atk);
val = (ItemData)((value is ItemData) ? value : null);
}
catch
{
}
}
if (val == null && FI_lastUsedAmmo != null)
{
try
{
object? value2 = FI_lastUsedAmmo.GetValue(atk);
val = (ItemData)((value2 is ItemData) ? value2 : null);
}
catch
{
}
}
return val;
}
public static string GetPrefabName(ItemData item)
{
if (item == null)
{
return null;
}
if ((Object)(object)item.m_dropPrefab != (Object)null)
{
return ((Object)item.m_dropPrefab).name;
}
try
{
ObjectDB instance = ObjectDB.instance;
if ((Object)(object)instance != (Object)null)
{
foreach (GameObject item2 in instance.m_items)
{
if (Object.op_Implicit((Object)(object)item2) && item2.GetComponent<ItemDrop>()?.m_itemData?.m_shared == item.m_shared)
{
return ((Object)item2).name;
}
}
}
}
catch
{
}
return null;
}
}
[HarmonyPatch(typeof(Attack), "OnAttackTrigger")]
internal static class SAP_Attack_OnAttackTrigger_Patch
{
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
private static void Postfix(Attack __instance)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
try
{
if (__instance == null || (int)__instance.m_attackType != 2)
{
return;
}
int projectiles = __instance.m_projectiles;
if (projectiles <= 1)
{
return;
}
ItemData weapon = SAP_Util.GetWeapon(__instance);
if (weapon == null || weapon.m_shared == null || string.IsNullOrEmpty(weapon.m_shared.m_ammoType) || !SSU_Whitelist.Match(SAP_Util.GetPrefabName(weapon)))
{
return;
}
Humanoid character = SAP_Util.GetCharacter(__instance);
Player val = (Player)(object)((character is Player) ? character : null);
if ((Object)(object)val == (Object)null)
{
return;
}
ItemData ammoItem = SAP_Util.GetAmmoItem(__instance);
if (ammoItem == null)
{
return;
}
int num = projectiles - 1;
if (num > 0)
{
Inventory inventory = ((Humanoid)val).GetInventory();
if (inventory != null)
{
inventory.RemoveItem(ammoItem, num);
}
}
}
catch (Exception ex)
{
SAP_Log.Err("SlingshotAmmoPatch.OnAttackTrigger error: " + ex.GetType().Name + ": " + ex.Message);
}
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class SSU_Log
{
private static readonly ManualLogSource _log = Logger.CreateLogSource("SlingshotSecondaryUnlock");
public static void Info(string s)
{
_log.LogInfo((object)s);
}
public static void Err(string s)
{
_log.LogError((object)s);
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class SSU_Whitelist
{
private static readonly string[] _names;
internal static readonly HashSet<string> Names;
internal static readonly HashSet<int> NameHashes;
static SSU_Whitelist()
{
_names = new string[7] { "SlingshotWoodDO", "SlingshotCorewoodDO", "SlingshotIronDO", "SlingshotSilverDO", "SlingshotBlackmetalDO", "SlingshotCompositeMistlandsDO", "SlingshotCompositeAshlandsDO" };
Names = new HashSet<string>(StringComparer.Ordinal);
NameHashes = new HashSet<int>();
string[] names = _names;
foreach (string text in names)
{
Names.Add(text);
NameHashes.Add(StringExtensionMethods.GetStableHashCode(text));
}
}
public static bool Match(string prefabName)
{
if (string.IsNullOrEmpty(prefabName))
{
return false;
}
if (Names.Contains(prefabName))
{
return true;
}
return NameHashes.Contains(StringExtensionMethods.GetStableHashCode(prefabName));
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class SSU_State
{
private static readonly Dictionary<int, bool> _secondaryDrawActive = new Dictionary<int, bool>();
private static int Key(Player p)
{
if (!Object.op_Implicit((Object)(object)p))
{
return 0;
}
return ((Object)p).GetInstanceID();
}
public static bool IsSecondaryDrawActive(Player p)
{
int key = Key(p);
bool value;
return _secondaryDrawActive.TryGetValue(key, out value) && value;
}
public static void SetSecondaryDrawActive(Player p, bool active)
{
int key = Key(p);
if (active)
{
_secondaryDrawActive[key] = true;
}
else
{
_secondaryDrawActive.Remove(key);
}
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class SSU_Util
{
private static readonly BindingFlags InstAll = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
private static readonly MethodInfo MI_UpdateWeaponLoading = typeof(Player).GetMethod("UpdateWeaponLoading", InstAll, null, new Type[2]
{
typeof(ItemData),
typeof(float)
}, null);
private static readonly MethodInfo MI_UpdateAttackBowDraw = typeof(Player).GetMethod("UpdateAttackBowDraw", InstAll, null, new Type[2]
{
typeof(ItemData),
typeof(float)
}, null);
private static readonly MethodInfo MI_InPlaceMode = typeof(Player).GetMethod("InPlaceMode", InstAll, null, Type.EmptyTypes, null);
public static string GetPrefabName(ItemData item)
{
if (item == null)
{
return null;
}
if ((Object)(object)item.m_dropPrefab != (Object)null)
{
return ((Object)item.m_dropPrefab).name;
}
try
{
ObjectDB instance = ObjectDB.instance;
if ((Object)(object)instance != (Object)null)
{
foreach (GameObject item2 in instance.m_items)
{
if (Object.op_Implicit((Object)(object)item2) && item2.GetComponent<ItemDrop>()?.m_itemData?.m_shared == item.m_shared)
{
return ((Object)item2).name;
}
}
}
}
catch
{
}
return null;
}
private static FieldInfo FindField(Type t, string name)
{
while (t != null)
{
FieldInfo field = t.GetField(name, InstAll);
if (field != null)
{
return field;
}
t = t.BaseType;
}
return null;
}
public static T GetField<[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(2)] T>(object obj, string name)
{
if (obj == null)
{
return default(T);
}
FieldInfo fieldInfo = FindField(obj.GetType(), name);
if (fieldInfo == null)
{
return default(T);
}
object value = fieldInfo.GetValue(obj);
if (value is T)
{
return (T)value;
}
try
{
return (T)Convert.ChangeType(value, typeof(T));
}
catch
{
return default(T);
}
}
public static void SetField(object obj, string name, object value)
{
if (obj != null)
{
FieldInfo fieldInfo = FindField(obj.GetType(), name);
if (!(fieldInfo == null))
{
fieldInfo.SetValue(obj, value);
}
}
}
private static bool CallBoolNoArgs(object obj, MethodInfo mi)
{
if (obj == null || mi == null)
{
return false;
}
try
{
object obj2 = mi.Invoke(obj, Array.Empty<object>());
bool flag = default(bool);
int num;
if (obj2 is bool)
{
flag = (bool)obj2;
num = 1;
}
else
{
num = 0;
}
return (byte)((uint)num & (flag ? 1u : 0u)) != 0;
}
catch
{
return false;
}
}
public static bool InPlaceMode(Player p)
{
return CallBoolNoArgs(p, MI_InPlaceMode);
}
public static void CallUpdateWeaponLoading(Player p, ItemData weapon, float dt)
{
if ((Object)(object)p == (Object)null || MI_UpdateWeaponLoading == null)
{
return;
}
try
{
MI_UpdateWeaponLoading.Invoke(p, new object[2] { weapon, dt });
}
catch
{
}
}
public static void CallUpdateAttackBowDraw(Player p, ItemData weapon, float dt)
{
if ((Object)(object)p == (Object)null || MI_UpdateAttackBowDraw == null)
{
return;
}
try
{
MI_UpdateAttackBowDraw.Invoke(p, new object[2] { weapon, dt });
}
catch
{
}
}
public static void HandleLoopingAbort(Player p)
{
object field = GetField<object>(p, "m_currentAttack");
if (field == null || !GetField<bool>(field, "m_loopingAttack"))
{
return;
}
bool field2 = GetField<bool>(p, "m_currentAttackIsSecondary");
bool field3 = GetField<bool>(p, "m_attackHold");
bool field4 = GetField<bool>(p, "m_secondaryAttackHold");
if (field2 ? field4 : field3)
{
return;
}
MethodInfo method = field.GetType().GetMethod("Abort", InstAll, null, Type.EmptyTypes, null);
if (method == null)
{
return;
}
try
{
method.Invoke(field, Array.Empty<object>());
}
catch
{
}
}
public static void HandleSlingshotAttackInput(Player p, float dt)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Invalid comparison between Unknown and I4
if ((Object)(object)p == (Object)null)
{
return;
}
ItemData currentWeapon = ((Humanoid)p).GetCurrentWeapon();
if (currentWeapon == null || currentWeapon.m_shared == null || (int)currentWeapon.m_shared.m_itemType != 4 || !currentWeapon.m_shared.m_attack.m_bowDraw || !SSU_Whitelist.Match(GetPrefabName(currentWeapon)) || InPlaceMode(p))
{
return;
}
CallUpdateWeaponLoading(p, currentWeapon, dt);
bool field = GetField<bool>(p, "m_secondaryAttackHold");
bool field2 = GetField<bool>(p, "m_attackHold");
bool flag = currentWeapon.m_shared.m_secondaryAttack != null;
bool flag2;
if (SSU_State.IsSecondaryDrawActive(p))
{
flag2 = true;
}
else
{
flag2 = flag && field && !field2;
if (flag2)
{
SSU_State.SetSecondaryDrawActive(p, active: true);
}
}
if (flag2)
{
SharedData shared = currentWeapon.m_shared;
Attack attack = shared.m_attack;
Attack secondaryAttack = shared.m_secondaryAttack;
if (secondaryAttack == null)
{
CallUpdateAttackBowDraw(p, currentWeapon, dt);
}
else
{
bool field3 = GetField<bool>(p, "m_attackHold");
try
{
shared.m_attack = secondaryAttack;
SetField(p, "m_attackHold", field);
CallUpdateAttackBowDraw(p, currentWeapon, dt);
}
finally
{
shared.m_attack = attack;
SetField(p, "m_attackHold", field3);
}
float field4 = GetField<float>(p, "m_attackDrawTime");
if (!field && field4 <= 0f)
{
SSU_State.SetSecondaryDrawActive(p, active: false);
}
}
}
else
{
CallUpdateAttackBowDraw(p, currentWeapon, dt);
}
HandleLoopingAbort(p);
}
}
[HarmonyPatch(typeof(Player), "PlayerAttackInput")]
internal static class SSU_PlayerAttackInput_Patch
{
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
private static bool Prefix(Player __instance, float dt)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Invalid comparison between Unknown and I4
try
{
if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer)
{
return true;
}
ItemData currentWeapon = ((Humanoid)__instance).GetCurrentWeapon();
if (currentWeapon == null || currentWeapon.m_shared == null)
{
return true;
}
if ((int)currentWeapon.m_shared.m_itemType != 4)
{
return true;
}
if (!SSU_Whitelist.Match(SSU_Util.GetPrefabName(currentWeapon)))
{
return true;
}
SSU_Util.HandleSlingshotAttackInput(__instance, dt);
return false;
}
catch (Exception ex)
{
SSU_Log.Err("SlingshotSecondaryUnlock.PlayerAttackInput error: " + ex.GetType().Name + ": " + ex.Message);
return true;
}
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class BSU_Log
{
private static readonly ManualLogSource _log = Logger.CreateLogSource("BowSecondaryUnlock");
public static void Info(string s)
{
_log.LogInfo((object)s);
}
public static void Err(string s)
{
_log.LogError((object)s);
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class BSU_Whitelist
{
private static readonly string[] _names;
internal static readonly HashSet<string> Names;
internal static readonly HashSet<int> NameHashes;
static BSU_Whitelist()
{
_names = new string[3] { "BowEvoCoreAshlandsLightningDO", "BowEvoCoreAshlandsBloodDO", "BowEvoCoreAshlandsNatureDO" };
Names = new HashSet<string>(StringComparer.Ordinal);
NameHashes = new HashSet<int>();
string[] names = _names;
foreach (string text in names)
{
Names.Add(text);
NameHashes.Add(StringExtensionMethods.GetStableHashCode(text));
}
}
public static bool Match(string prefabName)
{
if (string.IsNullOrEmpty(prefabName))
{
return false;
}
if (Names.Contains(prefabName))
{
return true;
}
return NameHashes.Contains(StringExtensionMethods.GetStableHashCode(prefabName));
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class BSU_RateLimiter
{
private static readonly Dictionary<string, float> _lastStart = new Dictionary<string, float>();
private static readonly Dictionary<string, float> _lockUntil = new Dictionary<string, float>();
private static string Key(Humanoid h, string prefab)
{
return string.Format("{0}:{1}", Object.op_Implicit((Object)(object)h) ? ((Object)h).GetInstanceID() : 0, prefab ?? "");
}
public static bool IsLocked(Humanoid h, string prefab)
{
string key = Key(h, prefab);
if (_lockUntil.TryGetValue(key, out var value))
{
return Time.time < value;
}
return false;
}
public static float GetLastStart(Humanoid h, string prefab)
{
string key = Key(h, prefab);
if (!_lastStart.TryGetValue(key, out var value))
{
return -999f;
}
return value;
}
public static void MarkStartedAndLock(Humanoid h, string prefab, float cooldown)
{
string key = Key(h, prefab);
float time = Time.time;
_lastStart[key] = time;
_lockUntil[key] = time + Mathf.Max(0.1f, cooldown);
}
public static void ClearLock(Humanoid h, string prefab)
{
string key = Key(h, prefab);
_lockUntil.Remove(key);
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class BSU_Util
{
public static ItemData GetEquippedBow(Humanoid h)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Invalid comparison between Unknown and I4
ItemData val = ((h != null) ? h.GetCurrentWeapon() : null);
if (val?.m_shared == null)
{
return null;
}
if ((int)val.m_shared.m_itemType != 4)
{
return null;
}
return val;
}
public static string GetPrefabName(ItemData item)
{
if (item == null)
{
return null;
}
if ((Object)(object)item.m_dropPrefab != (Object)null)
{
return ((Object)item.m_dropPrefab).name;
}
try
{
ObjectDB instance = ObjectDB.instance;
if ((Object)(object)instance != (Object)null)
{
foreach (GameObject item2 in instance.m_items)
{
if (Object.op_Implicit((Object)(object)item2) && item2.GetComponent<ItemDrop>()?.m_itemData?.m_shared == item.m_shared)
{
return ((Object)item2).name;
}
}
}
}
catch
{
}
return null;
}
public static bool SecondaryPressedThisFrame()
{
try
{
if (ZInput.GetButtonDown("SecondaryAttack"))
{
return true;
}
}
catch
{
}
try
{
if (ZInput.GetButtonDown("Attack2"))
{
return true;
}
}
catch
{
}
try
{
if (ZInput.GetButtonDown("SecAttack"))
{
return true;
}
}
catch
{
}
try
{
if (Input.GetKeyDown((KeyCode)325))
{
return true;
}
}
catch
{
}
return false;
}
private static bool CallBoolNoArgs(object obj, string methodName)
{
if (obj == null)
{
return false;
}
Type type = obj.GetType();
while (type != null)
{
MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
if (method != null && method.ReturnType == typeof(bool))
{
try
{
return (bool)method.Invoke(obj, Array.Empty<object>());
}
catch
{
return false;
}
}
type = type.BaseType;
}
return false;
}
public static bool IsInAttackStrict(Humanoid h)
{
if (CallBoolNoArgs(h, "InAttack"))
{
return true;
}
if (CallBoolNoArgs(h, "IsAttacking"))
{
return true;
}
return false;
}
public static float GetAttackCooldown(object attackObj)
{
if (attackObj == null)
{
return 0.35f;
}
try
{
FieldInfo field = attackObj.GetType().GetField("m_attackCooldown", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null && field.FieldType == typeof(float))
{
float num = (float)field.GetValue(attackObj);
if (num > 0f)
{
return num;
}
}
}
catch
{
}
return 0.5f;
}
public static void ClearStuckCurrentAttackIfSafe(Humanoid h, float lastStartTime, float cooldown)
{
if (IsInAttackStrict(h) || Time.time < lastStartTime + Mathf.Max(0.1f, cooldown) + 0.035f)
{
return;
}
try
{
if (GetField(h, "m_currentAttack") != null)
{
SetField(h, "m_currentAttack", null);
}
}
catch
{
}
}
private static FieldInfo FindField(Type t, string name)
{
while (t != null)
{
FieldInfo field = t.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
return field;
}
t = t.BaseType;
}
return null;
}
private static object GetField(object obj, string name)
{
if (obj == null)
{
return null;
}
return FindField(obj.GetType(), name)?.GetValue(obj);
}
private static void SetField(object obj, string name, object val)
{
if (obj != null)
{
FindField(obj.GetType(), name)?.SetValue(obj, val);
}
}
private static object FindFieldByTypeName(object obj, string typeName)
{
if (obj == null)
{
return null;
}
Type type = obj.GetType();
while (type != null)
{
FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (FieldInfo fieldInfo in fields)
{
Type fieldType = fieldInfo.FieldType;
if (!(fieldType == null) && (fieldType.Name == typeName || (fieldType.FullName != null && fieldType.FullName.EndsWith("." + typeName, StringComparison.Ordinal))))
{
object value = fieldInfo.GetValue(obj);
if (value != null)
{
return value;
}
}
}
type = type.BaseType;
}
return null;
}
private static Type FindTypeByName(string typeName)
{
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
Type type = null;
try
{
type = assembly.GetType(typeName);
}
catch
{
}
if (type != null)
{
return type;
}
try
{
Type[] types = assembly.GetTypes();
foreach (Type type2 in types)
{
if (type2.Name == typeName)
{
return type2;
}
if (type2.FullName != null && type2.FullName.EndsWith("." + typeName, StringComparison.Ordinal))
{
return type2;
}
}
}
catch
{
}
}
return null;
}
private static Component GetComponentByTypeName(Component c, string typeName)
{
if ((Object)(object)c == (Object)null)
{
return null;
}
Type type = FindTypeByName(typeName);
if (type == null)
{
return null;
}
try
{
return c.GetComponent(type);
}
catch
{
return null;
}
}
private static object FindZAnim(Humanoid h)
{
object field = GetField(h, "m_zanim");
if (field != null)
{
return field;
}
field = FindFieldByTypeName(h, "ZSyncAnimation");
if (field != null)
{
return field;
}
field = FindFieldByTypeName(h, "ZAnimator");
if (field != null)
{
return field;
}
return GetComponentByTypeName((Component)(object)h, "ZSyncAnimation") ?? GetComponentByTypeName((Component)(object)h, "ZAnimator");
}
private static Rigidbody FindBody(Humanoid h)
{
object field = GetField(h, "m_body");
Rigidbody val = (Rigidbody)((field is Rigidbody) ? field : null);
if ((Object)(object)val != (Object)null)
{
return val;
}
try
{
return ((Component)h).GetComponent<Rigidbody>();
}
catch
{
return null;
}
}
private static object FindAnimEvent(Humanoid h)
{
object field = GetField(h, "m_animEvent");
if (field != null)
{
return field;
}
field = FindFieldByTypeName(h, "CharacterAnimEvent");
if (field != null)
{
return field;
}
return GetComponentByTypeName((Component)(object)h, "CharacterAnimEvent");
}
private static object FindVisEquipment(Humanoid h)
{
object field = GetField(h, "m_visEquipment");
if (field != null)
{
return field;
}
field = FindFieldByTypeName(h, "VisEquipment");
if (field != null)
{
return field;
}
return GetComponentByTypeName((Component)(object)h, "VisEquipment");
}
private static IEnumerable<MethodInfo> EnumerateAttackStartMethods(object attackObj)
{
if (attackObj == null)
{
yield break;
}
IEnumerable<MethodInfo> enumerable = from m in attackObj.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
where m.Name == "Start"
select m;
foreach (MethodInfo item in enumerable)
{
yield return item;
}
}
public static bool TryStartSecondary(Humanoid h, ItemData item)
{
if ((Object)(object)h == (Object)null || item?.m_shared == null)
{
return false;
}
Attack secondaryAttack = item.m_shared.m_secondaryAttack;
if (secondaryAttack == null)
{
return false;
}
try
{
SetField(h, "m_currentWeapon", item);
SetField(h, "m_currentAttack", secondaryAttack);
FieldInfo fieldInfo = FindField(((object)h).GetType(), "m_attackQueue");
if (fieldInfo != null)
{
fieldInfo.SetValue(h, false);
}
FieldInfo fieldInfo2 = FindField(((object)h).GetType(), "m_blocking");
if (fieldInfo2 != null)
{
fieldInfo2.SetValue(h, false);
}
FieldInfo fieldInfo3 = FindField(((object)h).GetType(), "m_wasAiming");
if (fieldInfo3 != null)
{
fieldInfo3.SetValue(h, false);
}
}
catch
{
}
Rigidbody body = FindBody(h);
object zAnim = FindZAnim(h);
object animEv = FindAnimEvent(h);
object visEq = FindVisEquipment(h);
List<MethodInfo> list = EnumerateAttackStartMethods(secondaryAttack).ToList();
if (list.Count == 0)
{
return false;
}
foreach (MethodInfo item2 in list)
{
ParameterInfo[] parameters = item2.GetParameters();
object[] args = new object[parameters.Length];
if (TryFillArgsAndInvoke(item2, parameters, args, h, body, zAnim, animEv, visEq, item, secondaryAttack, Time.time, 1f, prevAttackNull: false))
{
return true;
}
if (TryFillArgsAndInvoke(item2, parameters, args, h, body, zAnim, animEv, visEq, item, secondaryAttack, Time.time, 1f, prevAttackNull: true))
{
return true;
}
}
return false;
}
private static bool TryFillArgsAndInvoke(MethodInfo mi, ParameterInfo[] pars, object[] args, Humanoid h, Rigidbody body, object zAnim, object animEv, object visEq, ItemData item, object secAttack, float timeNow, float drawPct, bool prevAttackNull)
{
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_024c: Unknown result type (might be due to invalid IL or missing references)
int num = 0;
for (int i = 0; i < pars.Length; i++)
{
Type parameterType = pars[i].ParameterType;
if (parameterType == typeof(Humanoid) || parameterType == typeof(Character) || parameterType == typeof(Player) || parameterType.IsInstanceOfType(h))
{
args[i] = h;
}
else if (parameterType == typeof(Rigidbody))
{
if ((Object)(object)body == (Object)null)
{
return false;
}
args[i] = body;
}
else if (zAnim != null && (parameterType.IsInstanceOfType(zAnim) || parameterType.Name.Contains("ZSyncAnimation") || parameterType.Name.Contains("ZAnimator")))
{
args[i] = zAnim;
}
else if (parameterType.Name == "CharacterAnimEvent")
{
if (animEv == null)
{
return false;
}
args[i] = animEv;
}
else if (parameterType.Name == "VisEquipment")
{
if (visEq == null)
{
return false;
}
args[i] = visEq;
}
else if (parameterType == typeof(ItemData))
{
args[i] = item;
}
else if (parameterType.Name == "Attack")
{
args[i] = (prevAttackNull ? null : secAttack);
}
else if (parameterType == typeof(float))
{
args[i] = ((num++ == 0) ? timeNow : ((num == 2) ? drawPct : 0f));
}
else if (parameterType == typeof(bool))
{
args[i] = true;
}
else if (parameterType == typeof(int))
{
args[i] = 0;
}
else if (parameterType == typeof(string))
{
try
{
FieldInfo field = secAttack.GetType().GetField("m_attackAnimation", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
args[i] = ((field != null) ? ((string)field.GetValue(secAttack)) : "");
}
catch
{
args[i] = "";
}
}
else if (parameterType == typeof(Vector3))
{
args[i] = ((Component)h).transform.position;
}
else
{
if (!(parameterType == typeof(Quaternion)))
{
return false;
}
args[i] = ((Component)h).transform.rotation;
}
}
try
{
return !(mi.Invoke(secAttack, args) is bool flag) || flag;
}
catch
{
return false;
}
}
}
[HarmonyPatch(typeof(Player), "Update")]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class BSU_PlayerUpdate_Postfix
{
private static float _lastTriggerTime;
private static readonly HashSet<string> _notified = new HashSet<string>(StringComparer.Ordinal);
private static void Postfix(Player __instance)
{
try
{
if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer || !BSU_Util.SecondaryPressedThisFrame())
{
return;
}
ItemData equippedBow = BSU_Util.GetEquippedBow((Humanoid)(object)__instance);
if (equippedBow == null)
{
return;
}
string prefabName = BSU_Util.GetPrefabName(equippedBow);
if (!BSU_Whitelist.Match(prefabName))
{
return;
}
if (!string.IsNullOrEmpty(prefabName) && !_notified.Contains(prefabName))
{
_notified.Add(prefabName);
BSU_Log.Info("Secondary unlocked for '" + prefabName + "'.");
}
if (Time.time - _lastTriggerTime < 0.1f)
{
return;
}
_lastTriggerTime = Time.time;
float attackCooldown = BSU_Util.GetAttackCooldown(equippedBow.m_shared?.m_secondaryAttack);
if (!BSU_Util.IsInAttackStrict((Humanoid)(object)__instance))
{
if (BSU_RateLimiter.IsLocked((Humanoid)(object)__instance, prefabName))
{
BSU_Util.ClearStuckCurrentAttackIfSafe((Humanoid)(object)__instance, BSU_RateLimiter.GetLastStart((Humanoid)(object)__instance, prefabName), attackCooldown);
}
else if (BSU_Util.TryStartSecondary((Humanoid)(object)__instance, equippedBow))
{
BSU_RateLimiter.MarkStartedAndLock((Humanoid)(object)__instance, prefabName, attackCooldown);
}
}
}
catch (Exception ex)
{
BSU_Log.Err("BowSecondaryUnlock.Update error: " + ex.GetType().Name + ": " + ex.Message);
}
}
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class VES_Log
{
private static readonly ManualLogSource _log = Logger.CreateLogSource("VisEqSafeSetup");
public static void Info(string s)
{
_log.LogInfo((object)s);
}
public static void Warn(string s)
{
_log.LogWarning((object)s);
}
public static void Err(string s)
{
_log.LogError((object)s);
}
}
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
internal static class VES_Ref
{
public static FieldInfo FindField(Type t, string name)
{
while (t != null)
{
FieldInfo field = t.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
return field;
}
t = t.BaseType;
}
return null;
}
public static object GetField(object obj, string name)
{
if (obj == null)
{
return null;
}
return FindField(obj.GetType(), name)?.GetValue(obj);
}
public static void SetField(object obj, string name, object val)
{
if (obj != null)
{
FindField(obj.GetType(), name)?.SetValue(obj, val);
}
}
}
[HarmonyPatch(typeof(Humanoid), "Awake")]
internal static class Humanoid_Awake_VisEq_Autobind
{
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
private static void Postfix(Humanoid __instance)
{
try
{
FieldInfo fieldInfo = VES_Ref.FindField(((object)__instance).GetType(), "m_visEquipment");
if (!(fieldInfo == null) && !((Object)/*isinst with value type is only supported in some contexts*/ != (Object)null))
{
VisEquipment componentInChildren = ((Component)__instance).GetComponentInChildren<VisEquipment>(true);
if ((Object)(object)componentInChildren != (Object)null)
{
fieldInfo.SetValue(__instance, componentInChildren);
}
}
}
catch (Exception ex)
{
VES_Log.Warn("[AutoBind] " + ((__instance != null) ? ((Object)__instance).name : null) + ": " + ex.GetType().Name + ": " + ex.Message);
}
}
}
[HarmonyPatch(typeof(Humanoid), "SetupVisEquipment")]
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
internal static class Humanoid_SetupVisEquipment_Safe
{
private static readonly HashSet<string> Notified = new HashSet<string>(StringComparer.Ordinal);
private static bool Prefix(Humanoid __instance, VisEquipment visEq, bool isRagdoll)
{
if (__instance is Player)
{
return true;
}
if ((Object)(object)visEq == (Object)null)
{
NotifyOnce(__instance, "missing VisEquipment");
return false;
}
if ((Object)(object)visEq.m_bodyModel == (Object)null || ((Object)(object)visEq.m_leftHand == (Object)null && (Object)(object)visEq.m_rightHand == (Object)null))
{
NotifyOnce(__instance, "incomplete VisEquipment");
return false;
}
return true;
}
private static Exception Finalizer(Humanoid __instance, VisEquipment visEq, bool isRagdoll, Exception __exception)
{
if (__exception != null && !(__instance is Player))
{
NotifyOnce(__instance, "exception in SetupVisEquipment: " + __exception.GetType().Name);
return null;
}
return __exception;
}
private static void NotifyOnce(Humanoid h, string reason)
{
try
{
string text = (Object.op_Implicit((Object)(object)h) ? (((Object)h).name ?? "Humanoid") : "Humanoid");
int num = text.IndexOf("(Clone)", StringComparison.Ordinal);
if (num >= 0)
{
text = text.Substring(0, num).Trim();
}
if (!Notified.Contains(text))
{
Notified.Add(text);
VES_Log.Info("Guarded SetupVisEquipment for '" + text + "' (" + reason + ").");
}
}
catch
{
}
}
}
namespace Hunter_Legacy
{
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(1)]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(0)]
[BepInPlugin("Dreanegade.Hunter_Legacy", "Hunter_Legacy", "1.0.7")]
public class Hunter_LegacyPlugin : BaseUnityPlugin
{
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(0)]
public enum Toggle
{
On = 1,
Off = 0
}
[<a55f9a56-9d47-49d2-a89b-b110901fa336>NullableContext(0)]
private class ConfigurationManagerAttributes
{
[UsedImplicitly]
public int? Order;
[UsedImplicitly]
public bool? Browsable;
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(2)]
[UsedImplicitly]
public string Category;
[UsedImplicitly]
[<0989fef8-d62b-49fe-82ce-23a7b0fca8e5>Nullable(new byte[] { 2, 1 })]
public Action<ConfigEntryBase> CustomDrawer;
}
internal const string ModName = "Hunter_Legacy";
internal const string ModVersion = "1.0.7";
internal const string Author = "Dreanegade";
private const string ModGUID = "Dreanegade.Hunter_Legacy";
private static string ConfigFileName = "Dreanegade.Hunter_Legacy.cfg";
private static string ConfigFileFullPath;
internal static string ConnectionError;
private readonly Harmony _harmony = new Harmony("Dreanegade.Hunter_Legacy");
public static readonly ManualLogSource Hunter_LegacyLogger;
private static readonly ConfigSync ConfigSync;
private static ConfigEntry<Toggle> _serverConfigLocked;
private static ConfigEntry<Toggle> _recipeIsActiveConfig;
public void Awake()
{
Localizer.Load();
_serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only.");
ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
AssetBundle assets = PrefabManager.RegisterAssetBundle("hunter_legacy");
BuildPiece.ConfigurationEnabled = true;
PrefabManager.RegisterPrefab(assets, "vfx_arrowhit_nocturne_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_flint_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_stone_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_bone_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_obsidian_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_crystal_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_marble_DO");
PrefabManager.RegisterPrefab(assets, "projectile_demon_hunter_crossbow_blood_DO");
PrefabManager.RegisterPrefab(assets, "vfx_demon_hunter_crossbow_blood_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_demon_hunter_crossbow_blood_fire_main_DO");
PrefabManager.RegisterPrefab(assets, "sfx_demon_hunter_crossbow_blood_fire_scream_DO");
PrefabManager.RegisterPrefab(assets, "vfx_demon_hunter_crossbow_blood_hit_DO");
PrefabManager.RegisterPrefab(assets, "spawn_demon_hunter_crossbow_blood_skeleton_DO");
PrefabManager.RegisterPrefab(assets, "creature_demon_hunter_crossbow_blood_skeleton_DO");
PrefabManager.RegisterPrefab(assets, "fx_demon_hunter_crossbow_blood_skeleton_summon_DO");
PrefabManager.RegisterPrefab(assets, "sfx_dread_crossbow_poison_fire_DO");
PrefabManager.RegisterPrefab(assets, "vfx_dread_crossbow_poison_fire_DO");
PrefabManager.RegisterPrefab(assets, "aoe_dread_crossbow_poison_hit_DO");
PrefabManager.RegisterPrefab(assets, "aoe_dread_crossbow_spirit_hit_DO");
PrefabManager.RegisterPrefab(assets, "vfx_dread_crossbow_spirit_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_dread_crossbow_spirit_fire_DO");
PrefabManager.RegisterPrefab(assets, "aoe_dread_crossbow_frost_hit_DO");
PrefabManager.RegisterPrefab(assets, "vfx_dread_crossbow_frost_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_dread_crossbow_frost_fire_DO");
PrefabManager.RegisterPrefab(assets, "projectile_demon_hunter_crossbow_lightning_DO");
PrefabManager.RegisterPrefab(assets, "chain_demon_hunter_crossbow_lightning_DO");
PrefabManager.RegisterPrefab(assets, "vfx_demon_hunter_crossbow_lightning_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_demon_hunter_crossbow_lightning_fire_DO");
PrefabManager.RegisterPrefab(assets, "fx_demon_hunter_crossbow_lightning_hit_DO");
PrefabManager.RegisterPrefab(assets, "fx_demon_hunter_crossbow_lightning_hit_secondary_DO");
PrefabManager.RegisterPrefab(assets, "vfx_demon_hunter_crossbow_nature_fire_DO");
PrefabManager.RegisterPrefab(assets, "fx_demon_hunter_crossbow_nature_shield_block_DO");
PrefabManager.RegisterPrefab(assets, "vfx_demon_hunter_crossbow_nature_hit_secondary_DO");
PrefabManager.RegisterPrefab(assets, "sfx_demon_hunter_crossbow_nature_hit_secondary_DO");
PrefabManager.RegisterPrefab(assets, "aoe_ashen_exile_bow_hit_DO");
PrefabManager.RegisterPrefab(assets, "vfx_ashen_exile_bow_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_ashen_exile_bow_fire_DO");
PrefabManager.RegisterPrefab(assets, "projectile_bolt_syringe_poison_DO");
PrefabManager.RegisterPrefab(assets, "vfx_evo_bow_blood_fire_DO");
PrefabManager.RegisterPrefab(assets, "vfx_evo_bow_lightning_fire_DO");
PrefabManager.RegisterPrefab(assets, "vfx_evo_bow_nature_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_bow_nocturne_fire_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_knife_bronze_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_knife_iron_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_knife_silver_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_knife_blackmetal_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_knife_flametal_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_whirlstar_bronze_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_whirlstar_iron_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_whirlstar_silver_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_whirlstar_blackmetal_DO");
PrefabManager.RegisterPrefab(assets, "projectile_throwing_whirlstar_flametal_DO");
PrefabManager.RegisterPrefab(assets, "vfx_bomb_smoke_escape_smoke_DO");
PrefabManager.RegisterPrefab(assets, "sfx_bomb_smoke_escape_glass_break_DO");
PrefabManager.RegisterPrefab(assets, "vfx_slingshot_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_slingshot_fire_DO");
PrefabManager.RegisterPrefab(assets, "sfx_slingshot_fire_whistle_DO");
PrefabManager.RegisterPrefab(assets, "sfx_slingshot_draw_DO");
PrefabManager.RegisterPrefab(assets, "projectile_pellet_stone_DO");
PrefabManager.RegisterPrefab(assets, "projectile_pellet_obsidian_DO");
PrefabManager.RegisterPrefab(assets, "projectile_pellet_marble_DO");
PrefabManager.RegisterPrefab(assets, "projectile_pellet_grausten_DO");
BuildPiece buildPiece = new BuildPiece("hunter_legacy", "HunterTableDO");
buildPiece.RequiredItems.Add("Bronze", 10, recover: true);
buildPiece.RequiredItems.Add("RoundLog", 30, recover: true);
buildPiece.RequiredItems.Add("BronzeNails", 40, recover: true);
buildPiece.RequiredItems.Add("Resin", 15, recover: true);
buildPiece.Category.Set("Distant Origins");
buildPiece.Crafting.Set(PieceManager.CraftingTable.Forge);
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece2 = new BuildPiece("hunter_legacy", "MunitionsBenchDO");
buildPiece2.RequiredItems.Add("Bronze", 10, recover: true);
buildPiece2.RequiredItems.Add("RoundLog", 20, recover: true);
buildPiece2.RequiredItems.Add("BronzeNails", 20, recover: true);
buildPiece2.RequiredItems.Add("Wood", 20, recover: true);
buildPiece2.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece3 = new BuildPiece("hunter_legacy", "HunterTableExt1DO");
buildPiece3.RequiredItems.Add("Wood", 15, recover: true);
buildPiece3.RequiredItems.Add("Iron", 3, recover: true);
buildPiece3.RequiredItems.Add("LeatherResinedDO", 6, recover: true);
buildPiece3.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece4 = new BuildPiece("hunter_legacy", "HunterTableExt2DO");
buildPiece4.RequiredItems.Add("RoundLog", 25, recover: true);
buildPiece4.RequiredItems.Add("CoarseThreadDO", 8, recover: true);
buildPiece4.RequiredItems.Add("Silver", 4, recover: true);
buildPiece4.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece5 = new BuildPiece("hunter_legacy", "HunterTableExt3DO");
buildPiece5.RequiredItems.Add("LeatherTarredDO", 16, recover: true);
buildPiece5.RequiredItems.Add("FineWood", 16, recover: true);
buildPiece5.RequiredItems.Add("LinenThread", 10, recover: true);
buildPiece5.RequiredItems.Add("BlackMetal", 10, recover: true);
buildPiece5.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece6 = new BuildPiece("hunter_legacy", "HunterTableExt4DO");
buildPiece6.RequiredItems.Add("YggdrasilWood", 15, recover: true);
buildPiece6.RequiredItems.Add("Silver", 10, recover: true);
buildPiece6.RequiredItems.Add("BlackMetal", 15, recover: true);
buildPiece6.RequiredItems.Add("LeatherSappedDO", 10, recover: true);
buildPiece6.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece7 = new BuildPiece("hunter_legacy", "HunterTableExt5DO");
buildPiece7.RequiredItems.Add("BlackMarble", 30, recover: true);
buildPiece7.RequiredItems.Add("FlametalNew", 6, recover: true);
buildPiece7.RequiredItems.Add("TrophyFallenValkyrie", 1, recover: true);
buildPiece7.RequiredItems.Add("TrophyMorgen", 1, recover: true);
buildPiece7.Category.Set("Distant Origins");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece8 = new BuildPiece("hunter_legacy", "ShowcaseHunterSmallV1DO");
buildPiece8.RequiredItems.Add("RoundLog", 6, recover: true);
buildPiece8.RequiredItems.Add("Crystal", 3, recover: true);
buildPiece8.RequiredItems.Add("IronNails", 5, recover: true);
buildPiece8.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece9 = new BuildPiece("hunter_legacy", "ShowcaseHunterSmallV2DO");
buildPiece9.RequiredItems.Add("RoundLog", 5, recover: true);
buildPiece9.RequiredItems.Add("Crystal", 4, recover: true);
buildPiece9.RequiredItems.Add("IronNails", 5, recover: true);
buildPiece9.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece10 = new BuildPiece("hunter_legacy", "ShowcaseHunterMediumV1DO");
buildPiece10.RequiredItems.Add("RoundLog", 10, recover: true);
buildPiece10.RequiredItems.Add("Crystal", 6, recover: true);
buildPiece10.RequiredItems.Add("IronNails", 10, recover: true);
buildPiece10.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece10.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece11 = new BuildPiece("hunter_legacy", "ShowcaseHunterLargeV1DO");
buildPiece11.RequiredItems.Add("RoundLog", 15, recover: true);
buildPiece11.RequiredItems.Add("Crystal", 8, recover: true);
buildPiece11.RequiredItems.Add("IronNails", 15, recover: true);
buildPiece11.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece11.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece12 = new BuildPiece("hunter_legacy", "ShowcaseHunterLargeV2DO");
buildPiece12.RequiredItems.Add("RoundLog", 20, recover: true);
buildPiece12.RequiredItems.Add("Crystal", 6, recover: true);
buildPiece12.RequiredItems.Add("IronNails", 15, recover: true);
buildPiece12.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece12.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece13 = new BuildPiece("hunter_legacy", "ShowcaseHunterGiantV1DO");
buildPiece13.RequiredItems.Add("RoundLog", 25, recover: true);
buildPiece13.RequiredItems.Add("Crystal", 10, recover: true);
buildPiece13.RequiredItems.Add("IronNails", 20, recover: true);
buildPiece13.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece13.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece14 = new BuildPiece("hunter_legacy", "ShowcaseHunterGiantV2DO");
buildPiece14.RequiredItems.Add("RoundLog", 25, recover: true);
buildPiece14.RequiredItems.Add("Crystal", 8, recover: true);
buildPiece14.RequiredItems.Add("IronNails", 20, recover: true);
buildPiece14.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece14.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece15 = new BuildPiece("hunter_legacy", "ArmorStandWoodDO");
buildPiece15.RequiredItems.Add("Wood", 15, recover: true);
buildPiece15.RequiredItems.Add("BronzeNails", 5, recover: true);
buildPiece15.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece15.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece16 = new BuildPiece("hunter_legacy", "ArmorStandCorewoodDO");
buildPiece16.RequiredItems.Add("RoundLog", 10, recover: true);
buildPiece16.RequiredItems.Add("BronzeNails", 5, recover: true);
buildPiece16.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece16.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece17 = new BuildPiece("hunter_legacy", "ArmorStandCopperDO");
buildPiece17.RequiredItems.Add("Copper", 2, recover: true);
buildPiece17.RequiredItems.Add("Resin", 4, recover: true);
buildPiece17.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece17.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece18 = new BuildPiece("hunter_legacy", "ArmorStandTarDO");
buildPiece18.RequiredItems.Add("FineWood", 6, recover: true);
buildPiece18.RequiredItems.Add("Tar", 2, recover: true);
buildPiece18.RequiredItems.Add("IronNails", 5, recover: true);
buildPiece18.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece18.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece19 = new BuildPiece("hunter_legacy", "ArmorStandMarbleDO");
buildPiece19.RequiredItems.Add("BlackMarble", 5, recover: true);
buildPiece19.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece19.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece20 = new BuildPiece("hunter_legacy", "ItemStandWoodDO");
buildPiece20.RequiredItems.Add("Wood", 5, recover: true);
buildPiece20.RequiredItems.Add("BronzeNails", 2, recover: true);
buildPiece20.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece20.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece21 = new BuildPiece("hunter_legacy", "ItemStandCorewoodDO");
buildPiece21.RequiredItems.Add("RoundLog", 3, recover: true);
buildPiece21.RequiredItems.Add("BronzeNails", 2, recover: true);
buildPiece21.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece21.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece22 = new BuildPiece("hunter_legacy", "ItemStandCopperDO");
buildPiece22.RequiredItems.Add("Copper", 1, recover: true);
buildPiece22.RequiredItems.Add("Resin", 2, recover: true);
buildPiece22.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece22.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece23 = new BuildPiece("hunter_legacy", "ItemStandTarDO");
buildPiece23.RequiredItems.Add("FineWood", 2, recover: true);
buildPiece23.RequiredItems.Add("Tar", 1, recover: true);
buildPiece23.RequiredItems.Add("IronNails", 2, recover: true);
buildPiece23.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece23.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
BuildPiece buildPiece24 = new BuildPiece("hunter_legacy", "ItemStandMarbleDO");
buildPiece24.RequiredItems.Add("BlackMarble", 2, recover: true);
buildPiece24.Category.Set("Distant Origins Decor");
MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece24.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
Item item = new Item("hunter_legacy", "DrawLeverDO");
item.Crafting.Add("HunterTableDO", 1);
item.RequiredItems.Add("Bronze", 4);
item.RequiredItems.Add("BronzeNails", 10);
item.RequiredItems.Add("LeatherResinedDO", 2);
item.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Draw Lever", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item2 = new Item("hunter_legacy", "EternalBowstringDO");
item2.Crafting.Add("HunterTableDO", 1);
item2.RequiredItems.Add("CoarseThreadDO", 10);
item2.RequiredItems.Add("LeatherResinedDO", 3);
item2.RequiredItems.Add("AncientSeed", 1);
item2.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Eternal Bowstring", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item2.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item3 = new Item("hunter_legacy", "CoarseThreadDO");
item3.Crafting.Add("HunterTableDO", 1);
item3.RequiredItems.Add("Thistle", 2);
item3.RequiredItems.Add("Dandelion", 4);
item3.RequiredItems.Add("Resin", 3);
item3.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Coarse Thread", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item3.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item4 = new Item("hunter_legacy", "GemstoneCelestineDO");
MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Gemstone Celestine", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item4.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item5 = new Item("hunter_legacy", "GemstoneCryoliteDO");
MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Gemstone Celestine", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item5.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item6 = new Item("hunter_legacy", "LeatherResinedDO");
item6.Crafting.Add("HunterTableDO", 1);
item6.RequiredItems.Add("DeerHide", 1);
item6.RequiredItems.Add("Resin", 3);
item6.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Resined", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item6.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item7 = new Item("hunter_legacy", "LeatherGreasedDO");
item7.Crafting.Add("HunterTableDO", 1);
item7.RequiredItems.Add("TrollHide", 1);
item7.RequiredItems.Add("RawMeat", 2);
item7.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Greased", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item7.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item8 = new Item("hunter_legacy", "LeatherFrostedDO");
item8.Crafting.Add("HunterTableDO", 1);
item8.RequiredItems.Add("WolfPelt", 1);
item8.RequiredItems.Add("FreezeGland", 1);
item8.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Frosted", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item8.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item9 = new Item("hunter_legacy", "LeatherTarredDO");
item9.Crafting.Add("HunterTableDO", 1);
item9.RequiredItems.Add("LoxPelt", 1);
item9.RequiredItems.Add("Tar", 1);
item9.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Tarred", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item9.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item10 = new Item("hunter_legacy", "LeatherSappedDO");
item10.Crafting.Add("HunterTableDO", 1);
item10.RequiredItems.Add("ScaleHide", 1);
item10.RequiredItems.Add("Sap", 2);
item10.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Sapped", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item10.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item11 = new Item("hunter_legacy", "LeatherCharredDO");
item11.Crafting.Add("HunterTableDO", 1);
item11.RequiredItems.Add("AskHide", 1);
item11.RequiredItems.Add("CharcoalResin", 1);
item11.CraftAmount = 2;
MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Leather Charred", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item11.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item12 = new Item("hunter_legacy", "BoltFlintDO");
item12.Crafting.Add("MunitionsBenchDO", 1);
item12.RequiredItems.Add("Flint", 2);
item12.RequiredItems.Add("Wood", 8);
item12.RequiredItems.Add("Feathers", 2);
item12.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Flint", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item12.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item13 = new Item("hunter_legacy", "BoltStoneDO");
item13.Crafting.Add("MunitionsBenchDO", 1);
item13.RequiredItems.Add("Stone", 4);
item13.RequiredItems.Add("RoundLog", 8);
item13.RequiredItems.Add("Feathers", 2);
item13.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Stone", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item13.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item14 = new Item("hunter_legacy", "BoltBoneDO");
item14.Crafting.Add("MunitionsBenchDO", 1);
item14.RequiredItems.Add("WitheredBone", 2);
item14.RequiredItems.Add("ElderBark", 2);
item14.RequiredItems.Add("Feathers", 2);
item14.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Bone", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item14.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item15 = new Item("hunter_legacy", "BoltObsidianDO");
item15.Crafting.Add("MunitionsBenchDO", 1);
item15.RequiredItems.Add("Obsidian", 4);
item15.RequiredItems.Add("Wood", 8);
item15.RequiredItems.Add("Feathers", 2);
item15.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Obsidian", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item15.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item16 = new Item("hunter_legacy", "BoltCrystalDO");
item16.Crafting.Add("MunitionsBenchDO", 1);
item16.RequiredItems.Add("Crystal", 2);
item16.RequiredItems.Add("Wood", 8);
item16.RequiredItems.Add("Feathers", 2);
item16.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Crystal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item16.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item17 = new Item("hunter_legacy", "BoltMarbleDO");
item17.Crafting.Add("MunitionsBenchDO", 1);
item17.RequiredItems.Add("BlackMarble", 2);
item17.RequiredItems.Add("Wood", 8);
item17.RequiredItems.Add("Feathers", 2);
item17.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Marble", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item17.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item18 = new Item("hunter_legacy", "BoltSyringePoisonDO");
item18.Crafting.Add("MunitionsBenchDO", 1);
item18.RequiredItems.Add("Ooze", 3);
item18.RequiredItems.Add("BlackMetal", 1);
item18.RequiredItems.Add("Feathers", 2);
item18.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bolt Syringe Poison", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item18.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item19 = new Item("hunter_legacy", "ThrowingKnifeCoreBronzeDO");
item19.Crafting.Add("MunitionsBenchDO", 1);
item19.RequiredItems.Add("Bronze", 1);
item19.RequiredItems.Add("LeatherResinedDO", 1);
item19.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Knife Core Bronze", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item19.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item20 = new Item("hunter_legacy", "ThrowingKnifeCoreIronDO");
item20.Crafting.Add("MunitionsBenchDO", 1);
item20.RequiredItems.Add("Iron", 1);
item20.RequiredItems.Add("LeatherGreasedDO", 1);
item20.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Knife Core Iron", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item20.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item21 = new Item("hunter_legacy", "ThrowingKnifeCoreSilverDO");
item21.Crafting.Add("MunitionsBenchDO", 1);
item21.RequiredItems.Add("Silver", 1);
item21.RequiredItems.Add("LeatherFrostedDO", 1);
item21.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Knife Core Silver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item21.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item22 = new Item("hunter_legacy", "ThrowingKnifeCoreBlackmetalDO");
item22.Crafting.Add("MunitionsBenchDO", 1);
item22.RequiredItems.Add("BlackMetal", 1);
item22.RequiredItems.Add("LeatherTarredDO", 1);
item22.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Knife Core Blackmetal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item22.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item23 = new Item("hunter_legacy", "ThrowingKnifeCoreFlametalDO");
item23.Crafting.Add("MunitionsBenchDO", 1);
item23.RequiredItems.Add("FlametalNew", 1);
item23.RequiredItems.Add("LeatherCharredDO", 1);
item23.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Knife Core Flametal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item23.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item24 = new Item("hunter_legacy", "ThrowingWhirlstarCoreBronzeDO");
item24.Crafting.Add("MunitionsBenchDO", 1);
item24.RequiredItems.Add("Bronze", 1);
item24.RequiredItems.Add("LeatherResinedDO", 1);
item24.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Whirlstar Core Bronze", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item24.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item25 = new Item("hunter_legacy", "ThrowingWhirlstarCoreIronDO");
item25.Crafting.Add("MunitionsBenchDO", 1);
item25.RequiredItems.Add("Iron", 1);
item25.RequiredItems.Add("LeatherGreasedDO", 1);
item25.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Whirlstar Core Iron", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item25.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item26 = new Item("hunter_legacy", "ThrowingWhirlstarCoreSilverDO");
item26.Crafting.Add("MunitionsBenchDO", 1);
item26.RequiredItems.Add("Silver", 1);
item26.RequiredItems.Add("LeatherFrostedDO", 1);
item26.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Whirlstar Core Silver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item26.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item27 = new Item("hunter_legacy", "ThrowingWhirlstarCoreBlackmetalDO");
item27.Crafting.Add("MunitionsBenchDO", 1);
item27.RequiredItems.Add("BlackMetal", 2);
item27.RequiredItems.Add("LeatherTarredDO", 1);
item27.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Whirlstar Core Black Metal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item27.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item28 = new Item("hunter_legacy", "ThrowingWhirlstarCoreFlametalDO");
item28.Crafting.Add("MunitionsBenchDO", 1);
item28.RequiredItems.Add("FlametalNew", 1);
item28.RequiredItems.Add("LeatherCharredDO", 1);
item28.CraftAmount = 100;
MaterialReplacer.RegisterGameObjectForShaderSwap(item28.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Throwing Whirlstar Core Flametal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item28.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item29 = new Item("hunter_legacy", "BombSmokeEscapeDO");
item29.Crafting.Add("MunitionsBenchDO", 1);
item29.RequiredItems.Add("Crystal", 1);
item29.RequiredItems.Add("Obsidian", 2);
item29.RequiredItems.Add("Coal", 5);
item29.RequiredItems.Add("BoneFragments", 5);
item29.CraftAmount = 5;
MaterialReplacer.RegisterGameObjectForShaderSwap(item29.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Bomb Smoke Escape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item29.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item30 = new Item("hunter_legacy", "SlingshotWoodDO");
item30.Crafting.Add(ItemManager.CraftingTable.Workbench, 1);
item30.Crafting.Add("HunterTableDO", 1);
item30.RequiredItems.Add("Wood", 8);
item30.RequiredItems.Add("LeatherScraps", 6);
item30.RequiredUpgradeItems.Add("Wood", 4);
item30.RequiredUpgradeItems.Add("LeatherScraps", 3);
item30.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item30.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Wood", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item30.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item31 = new Item("hunter_legacy", "SlingshotCorewoodDO");
item31.Crafting.Add("HunterTableDO", 1);
item31.RequiredItems.Add("RoundLog", 8);
item31.RequiredItems.Add("LeatherResinedDO", 4);
item31.RequiredUpgradeItems.Add("RoundLog", 4);
item31.RequiredUpgradeItems.Add("LeatherResinedDO", 2);
item31.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item31.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Corewood", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item31.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item32 = new Item("hunter_legacy", "SlingshotIronDO");
item32.Crafting.Add("HunterTableDO", 1);
item32.RequiredItems.Add("Iron", 10);
item32.RequiredItems.Add("LeatherGreasedDO", 6);
item32.RequiredUpgradeItems.Add("Iron", 5);
item32.RequiredUpgradeItems.Add("LeatherGreasedDO", 3);
item32.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item32.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Iron", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item32.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item33 = new Item("hunter_legacy", "SlingshotSilverDO");
item33.Crafting.Add("HunterTableDO", 2);
item33.RequiredItems.Add("Silver", 12);
item33.RequiredItems.Add("LeatherFrostedDO", 6);
item33.RequiredUpgradeItems.Add("Silver", 6);
item33.RequiredUpgradeItems.Add("LeatherFrostedDO", 3);
item33.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item33.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Silver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item33.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item34 = new Item("hunter_legacy", "SlingshotBlackmetalDO");
item34.Crafting.Add("HunterTableDO", 3);
item34.RequiredItems.Add("BlackMetal", 16);
item34.RequiredItems.Add("LeatherTarredDO", 6);
item34.RequiredUpgradeItems.Add("BlackMetal", 8);
item34.RequiredUpgradeItems.Add("LeatherTarredDO", 3);
item34.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item34.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Blackmetal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item34.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item35 = new Item("hunter_legacy", "SlingshotCompositeMistlandsDO");
item35.Crafting.Add("HunterTableDO", 4);
item35.RequiredItems.Add("Iron", 12);
item35.RequiredItems.Add("Bronze", 12);
item35.RequiredItems.Add("LeatherSappedDO", 8);
item35.RequiredUpgradeItems.Add("Iron", 6);
item35.RequiredUpgradeItems.Add("Bronze", 6);
item35.RequiredUpgradeItems.Add("LeatherSappedDO", 4);
item35.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item35.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Composite Mistlands", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item35.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item36 = new Item("hunter_legacy", "SlingshotCompositeAshlandsDO");
item36.Crafting.Add("HunterTableDO", 4);
item36.RequiredItems.Add("FlametalNew", 10);
item36.RequiredItems.Add("Silver", 14);
item36.RequiredItems.Add("LeatherCharredDO", 8);
item36.RequiredUpgradeItems.Add("FlametalNew", 5);
item36.RequiredUpgradeItems.Add("Silver", 7);
item36.RequiredUpgradeItems.Add("LeatherCharredDO", 4);
item36.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item36.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Slingshot Composite Ashlands", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item36.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item37 = new Item("hunter_legacy", "PelletStoneDO");
item37.Crafting.Add(ItemManager.CraftingTable.Workbench, 1);
item37.Crafting.Add("MunitionsBenchDO", 1);
item37.RequiredItems.Add("Stone", 4);
item37.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item37.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Pellet Stone", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item37.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item38 = new Item("hunter_legacy", "PelletObsidianDO");
item38.Crafting.Add("MunitionsBenchDO", 1);
item38.RequiredItems.Add("Obsidian", 2);
item38.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item38.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Pellet Obsidian", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item38.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item39 = new Item("hunter_legacy", "PelletMarbleDO");
item39.Crafting.Add("MunitionsBenchDO", 1);
item39.RequiredItems.Add("BlackMarble", 2);
item39.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item39.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Pellet Marble", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item39.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item40 = new Item("hunter_legacy", "PelletGraustenDO");
item40.Crafting.Add("MunitionsBenchDO", 1);
item40.RequiredItems.Add("Grausten", 4);
item40.CraftAmount = 20;
MaterialReplacer.RegisterGameObjectForShaderSwap(item40.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Pellet Grausten", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item40.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item41 = new Item("hunter_legacy", "ArmorForestSentinelChestDO");
item41.Crafting.Add("HunterTableDO", 1);
item41.RequiredItems.Add("Bronze", 2);
item41.RequiredItems.Add("LeatherResinedDO", 6);
item41.RequiredItems.Add("CoarseThreadDO", 4);
item41.RequiredUpgradeItems.Add("Bronze", 2);
item41.RequiredUpgradeItems.Add("LeatherResinedDO", 4);
item41.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item41.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Forest Sentinel Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item41.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item42 = new Item("hunter_legacy", "ArmorForestSentinelLegsDO");
item42.Crafting.Add("HunterTableDO", 1);
item42.RequiredItems.Add("Bronze", 2);
item42.RequiredItems.Add("LeatherResinedDO", 6);
item42.RequiredItems.Add("CoarseThreadDO", 4);
item42.RequiredUpgradeItems.Add("Bronze", 2);
item42.RequiredUpgradeItems.Add("LeatherResinedDO", 4);
item42.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item42.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Forest Sentinel Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item42.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item43 = new Item("hunter_legacy", "ArmorForestSentinelHelmetDO");
item43.Crafting.Add("HunterTableDO", 1);
item43.RequiredItems.Add("Bronze", 2);
item43.RequiredItems.Add("LeatherResinedDO", 6);
item43.RequiredItems.Add("CoarseThreadDO", 4);
item43.RequiredUpgradeItems.Add("Bronze", 2);
item43.RequiredUpgradeItems.Add("LeatherResinedDO", 4);
item43.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item43.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Forest Sentinel Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item43.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item44 = new Item("hunter_legacy", "ArmorForestSentinelCapeDO");
item44.Crafting.Add("HunterTableDO", 1);
item44.RequiredItems.Add("Bronze", 1);
item44.RequiredItems.Add("LeatherResinedDO", 4);
item44.RequiredItems.Add("CoarseThreadDO", 3);
item44.RequiredUpgradeItems.Add("LeatherResinedDO", 1);
item44.RequiredUpgradeItems.Add("CoarseThreadDO", 2);
item44.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item44.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Forest Sentinel Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item44.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item45 = new Item("hunter_legacy", "ArmorForestSentinelBeltDO");
item45.Crafting.Add("HunterTableDO", 1);
item45.RequiredItems.Add("LeatherResinedDO", 10);
item45.RequiredItems.Add("LeatherGreasedDO", 8);
item45.RequiredItems.Add("TrophyGreydwarfShaman", 1);
item45.RequiredItems.Add("Coins", 100);
item45.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item45.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Forest Sentinel Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item45.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item46 = new Item("hunter_legacy", "ArmorFrostpeakHarrierChestDO");
item46.Crafting.Add("HunterTableDO", 2);
item46.RequiredItems.Add("Silver", 4);
item46.RequiredItems.Add("LeatherFrostedDO", 12);
item46.RequiredItems.Add("CoarseThreadDO", 8);
item46.RequiredUpgradeItems.Add("Silver", 2);
item46.RequiredUpgradeItems.Add("LeatherFrostedDO", 4);
item46.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item46.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Frostpeak Harrier Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item46.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item47 = new Item("hunter_legacy", "ArmorFrostpeakHarrierLegsDO");
item47.Crafting.Add("HunterTableDO", 2);
item47.RequiredItems.Add("Silver", 4);
item47.RequiredItems.Add("LeatherFrostedDO", 12);
item47.RequiredItems.Add("CoarseThreadDO", 8);
item47.RequiredUpgradeItems.Add("Silver", 2);
item47.RequiredUpgradeItems.Add("LeatherFrostedDO", 4);
item47.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item47.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Frostpeak Harrier Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item47.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item48 = new Item("hunter_legacy", "ArmorFrostpeakHarrierHelmetDO");
item48.Crafting.Add("HunterTableDO", 2);
item48.RequiredItems.Add("Silver", 4);
item48.RequiredItems.Add("LeatherFrostedDO", 12);
item48.RequiredItems.Add("CoarseThreadDO", 8);
item48.RequiredUpgradeItems.Add("Silver", 2);
item48.RequiredUpgradeItems.Add("LeatherFrostedDO", 4);
item48.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item48.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Frostpeak Harrier Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item48.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item49 = new Item("hunter_legacy", "ArmorFrostpeakHarrierCapeDO");
item49.Crafting.Add("HunterTableDO", 2);
item49.RequiredItems.Add("Silver", 1);
item49.RequiredItems.Add("LeatherFrostedDO", 4);
item49.RequiredItems.Add("CoarseThreadDO", 3);
item49.RequiredItems.Add("Wood", 4);
item49.RequiredUpgradeItems.Add("LeatherFrostedDO", 1);
item49.RequiredUpgradeItems.Add("CoarseThreadDO", 2);
item49.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item49.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Frostpeak Harrier Quiver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item49.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item50 = new Item("hunter_legacy", "ArmorFrostpeakHarrierTrinketDO");
item50.Crafting.Add("HunterTableDO", 2);
item50.RequiredItems.Add("CoarseThreadDO", 10);
item50.RequiredItems.Add("WolfFang", 9);
item50.RequiredItems.Add("WolfClaw", 3);
item50.RequiredItems.Add("TrophyWolf", 1);
item50.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item50.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Frostpeak Harrier Trinket", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item50.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item51 = new Item("hunter_legacy", "ArmorGoldenStriderChestDO");
item51.Crafting.Add("HunterTableDO", 3);
item51.RequiredItems.Add("BlackMetal", 5);
item51.RequiredItems.Add("LeatherTarredDO", 15);
item51.RequiredItems.Add("LinenThread", 10);
item51.RequiredUpgradeItems.Add("BlackMetal", 3);
item51.RequiredUpgradeItems.Add("LeatherTarredDO", 6);
item51.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item51.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Golden Strider Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item51.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item52 = new Item("hunter_legacy", "ArmorGoldenStriderLegsDO");
item52.Crafting.Add("HunterTableDO", 3);
item52.RequiredItems.Add("BlackMetal", 5);
item52.RequiredItems.Add("LeatherTarredDO", 15);
item52.RequiredItems.Add("LinenThread", 10);
item52.RequiredUpgradeItems.Add("BlackMetal", 3);
item52.RequiredUpgradeItems.Add("LeatherTarredDO", 6);
item52.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item52.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Golden Strider Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item52.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item53 = new Item("hunter_legacy", "ArmorGoldenStriderHelmetDO");
item53.Crafting.Add("HunterTableDO", 3);
item53.RequiredItems.Add("BlackMetal", 5);
item53.RequiredItems.Add("LeatherTarredDO", 15);
item53.RequiredItems.Add("LinenThread", 10);
item53.RequiredUpgradeItems.Add("BlackMetal", 3);
item53.RequiredUpgradeItems.Add("LeatherTarredDO", 6);
item53.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item53.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Golden Strider Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item53.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item54 = new Item("hunter_legacy", "ArmorGoldenStriderCapeDO");
item54.Crafting.Add("HunterTableDO", 3);
item54.RequiredItems.Add("BlackMetal", 1);
item54.RequiredItems.Add("LeatherTarredDO", 4);
item54.RequiredItems.Add("LinenThread", 3);
item54.RequiredItems.Add("FineWood", 6);
item54.RequiredUpgradeItems.Add("LeatherTarredDO", 1);
item54.RequiredUpgradeItems.Add("LinenThread", 2);
item54.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item54.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Golden Strider Quiver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item54.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item55 = new Item("hunter_legacy", "ArmorGoldenStriderBeltDO");
item55.Crafting.Add("HunterTableDO", 3);
item55.RequiredItems.Add("LeatherTarredDO", 15);
item55.RequiredItems.Add("Bronze", 12);
item55.RequiredItems.Add("TrophyGoblinShaman", 1);
item55.RequiredItems.Add("TrophyDeathsquito", 1);
item55.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item55.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Golden Strider Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item55.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item56 = new Item("hunter_legacy", "ArmorSapphireFalconChestDO");
item56.Crafting.Add("HunterTableDO", 4);
item56.RequiredItems.Add("Carapace", 8);
item56.RequiredItems.Add("LeatherSappedDO", 10);
item56.RequiredItems.Add("LinenThread", 12);
item56.RequiredUpgradeItems.Add("Carapace", 4);
item56.RequiredUpgradeItems.Add("LeatherSappedDO", 5);
item56.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item56.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Sapphire Falcon Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item56.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item57 = new Item("hunter_legacy", "ArmorSapphireFalconLegsDO");
item57.Crafting.Add("HunterTableDO", 4);
item57.RequiredItems.Add("Carapace", 8);
item57.RequiredItems.Add("LeatherSappedDO", 10);
item57.RequiredItems.Add("LinenThread", 12);
item57.RequiredUpgradeItems.Add("Carapace", 4);
item57.RequiredUpgradeItems.Add("LeatherSappedDO", 5);
item57.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item57.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Sapphire Falcon Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item57.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item58 = new Item("hunter_legacy", "ArmorSapphireFalconHelmetDO");
item58.Crafting.Add("HunterTableDO", 4);
item58.RequiredItems.Add("Carapace", 8);
item58.RequiredItems.Add("LeatherSappedDO", 10);
item58.RequiredItems.Add("LinenThread", 10);
item58.RequiredUpgradeItems.Add("Carapace", 4);
item58.RequiredUpgradeItems.Add("LeatherSappedDO", 5);
item58.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item58.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Sapphire Falcon Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item58.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item59 = new Item("hunter_legacy", "ArmorSapphireFalconCapeDO");
item59.Crafting.Add("HunterTableDO", 4);
item59.RequiredItems.Add("Carapace", 2);
item59.RequiredItems.Add("LeatherSappedDO", 6);
item59.RequiredItems.Add("LinenThread", 3);
item59.RequiredItems.Add("YggdrasilWood", 6);
item59.RequiredUpgradeItems.Add("Carapace", 2);
item59.RequiredUpgradeItems.Add("LeatherSappedDO", 3);
item59.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item59.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Sapphire Falcon Quiver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item59.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item60 = new Item("hunter_legacy", "ArmorSapphireFalconTrinketDO");
item60.Crafting.Add("HunterTableDO", 4);
item60.RequiredItems.Add("LeatherSappedDO", 10);
item60.RequiredItems.Add("Eitr", 12);
item60.RequiredItems.Add("Bilebag", 3);
item60.RequiredItems.Add("TrophyDvergr", 1);
item60.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item60.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Sapphire Falcon Trinket", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item60.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item61 = new Item("hunter_legacy", "ArmorNocturneArrowChestDO");
item61.Crafting.Add("HunterTableDO", 4);
item61.RequiredItems.Add("Carapace", 4);
item61.RequiredItems.Add("LeatherSappedDO", 14);
item61.RequiredItems.Add("LinenThread", 12);
item61.RequiredUpgradeItems.Add("Carapace", 2);
item61.RequiredUpgradeItems.Add("LeatherSappedDO", 7);
item61.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item61.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Nocturne Arrow Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item61.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item62 = new Item("hunter_legacy", "ArmorNocturneArrowLegsDO");
item62.Crafting.Add("HunterTableDO", 4);
item62.RequiredItems.Add("Carapace", 4);
item62.RequiredItems.Add("LeatherSappedDO", 14);
item62.RequiredItems.Add("LinenThread", 12);
item62.RequiredUpgradeItems.Add("Carapace", 2);
item62.RequiredUpgradeItems.Add("LeatherSappedDO", 7);
item62.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item62.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Nocturne Arrow Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item62.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item63 = new Item("hunter_legacy", "ArmorNocturneArrowHelmetDO");
item63.Crafting.Add("HunterTableDO", 4);
item63.RequiredItems.Add("Carapace", 4);
item63.RequiredItems.Add("LeatherSappedDO", 14);
item63.RequiredItems.Add("LinenThread", 12);
item63.RequiredUpgradeItems.Add("Carapace", 2);
item63.RequiredUpgradeItems.Add("LeatherSappedDO", 7);
item63.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item63.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Nocturne Arrow Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item63.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item64 = new Item("hunter_legacy", "ArmorNocturneArrowCapeDO");
item64.Crafting.Add("HunterTableDO", 4);
item64.RequiredItems.Add("Carapace", 4);
item64.RequiredItems.Add("LeatherSappedDO", 12);
item64.RequiredItems.Add("LinenThread", 18);
item64.RequiredItems.Add("YggdrasilWood", 12);
item64.RequiredUpgradeItems.Add("Carapace", 2);
item64.RequiredUpgradeItems.Add("LeatherSappedDO", 6);
item64.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item64.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Nocturne Arrow Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item64.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item65 = new Item("hunter_legacy", "ArmorAshenExileChestDO");
item65.Crafting.Add("HunterTableDO", 4);
item65.RequiredItems.Add("FlametalNew", 6);
item65.RequiredItems.Add("Eitr", 6);
item65.RequiredItems.Add("LeatherCharredDO", 14);
item65.RequiredItems.Add("LinenThread", 12);
item65.RequiredUpgradeItems.Add("FlametalNew", 2);
item65.RequiredUpgradeItems.Add("LeatherCharredDO", 4);
item65.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item65.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Ashen Exile Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item65.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item66 = new Item("hunter_legacy", "ArmorAshenExileLegsDO");
item66.Crafting.Add("HunterTableDO", 4);
item66.RequiredItems.Add("FlametalNew", 6);
item66.RequiredItems.Add("Eitr", 6);
item66.RequiredItems.Add("LeatherCharredDO", 14);
item66.RequiredItems.Add("LinenThread", 12);
item66.RequiredUpgradeItems.Add("FlametalNew", 2);
item66.RequiredUpgradeItems.Add("LeatherCharredDO", 4);
item66.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item66.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Ashen Exile Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item66.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item67 = new Item("hunter_legacy", "ArmorAshenExileHelmetDO");
item67.Crafting.Add("HunterTableDO", 4);
item67.RequiredItems.Add("FlametalNew", 6);
item67.RequiredItems.Add("Eitr", 6);
item67.RequiredItems.Add("LeatherCharredDO", 14);
item67.RequiredItems.Add("LinenThread", 12);
item67.RequiredUpgradeItems.Add("FlametalNew", 2);
item67.RequiredUpgradeItems.Add("LeatherCharredDO", 4);
item67.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item67.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Ashen Exile Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item67.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item68 = new Item("hunter_legacy", "ArmorAshenExileCapeDO");
item68.Crafting.Add("HunterTableDO", 4);
item68.RequiredItems.Add("FlametalNew", 2);
item68.RequiredItems.Add("LeatherCharredDO", 6);
item68.RequiredItems.Add("LinenThread", 4);
item68.RequiredItems.Add("Blackwood", 4);
item68.RequiredUpgradeItems.Add("FlametalNew", 1);
item68.RequiredUpgradeItems.Add("LeatherCharredDO", 3);
item68.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item68.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Ashen Exile Quiver", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item68.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item69 = new Item("hunter_legacy", "ArmorAshenExileTrinketDO");
item69.Crafting.Add("HunterTableDO", 4);
item69.RequiredItems.Add("GemstoneRed", 1);
item69.RequiredItems.Add("ProustitePowder", 20);
item69.RequiredItems.Add("TrophyFallenValkyrie", 1);
item69.CraftAmount = 1;
MaterialReplacer.RegisterGameObjectForShaderSwap(item69.Prefab, MaterialReplacer.ShaderType.UseUnityShader);
_recipeIsActiveConfig = config("Ashen Exile Trinket", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab");
item69.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig;
Item item70 = new Item("hunter_legacy", "ArmorGraveMercenaryChestDO");
item70.Crafting.Add("HunterTableDO", 1);
item70.RequiredItems.Add("Iron", 6);
item70.RequiredItems.Add("LeatherGreasedDO", 12);
item70.RequiredItems.