Decompiled source of FineWoodPieces v1.6.5

FineWoodPieces.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using ClayBuildPieces.Functions;
using FineWoodPieces.Functions;
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.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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("blacks7ar")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.6.5")]
[assembly: AssemblyInformationalVersion("1.6.5")]
[assembly: AssemblyProduct("FineWoodPieces")]
[assembly: AssemblyTitle("FineWoodPieces")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.6.5.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ClayBuildPieces.Functions
{
	public static class Helper
	{
		public static bool ZNetSceneAwake()
		{
			if ((Object)(object)ZNetScene.instance != (Object)null && ZNetScene.instance.m_prefabs.Count != 0)
			{
				return (Object)(object)ZNetScene.instance.GetPrefab("piece_workbench") != (Object)null;
			}
			return false;
		}
	}
}
namespace FineWoodPieces
{
	[BepInPlugin("blacks7ar.FineWoodPieces", "FineWoodPieces", "1.6.5")]
	[BepInIncompatibility("blacks7ar.ClayBuildPieces")]
	[BepInIncompatibility("blacks7ar.FineWoodBuildPieces")]
	[BepInIncompatibility("blacks7ar.FineWoodFurnitures")]
	public class Plugin : BaseUnityPlugin
	{
		private const string modGUID = "blacks7ar.FineWoodPieces";

		public const string modName = "FineWoodPieces";

		public const string modAuthor = "blacks7ar";

		public const string modVersion = "1.6.5";

		public const string modLink = "https://valheim.thunderstore.io/package/blacks7ar/FineWoodPieces/";

		private static readonly Harmony _harmony = new Harmony("blacks7ar.FineWoodPieces");

		private static readonly ConfigSync _configSync = new ConfigSync("blacks7ar.FineWoodPieces")
		{
			DisplayName = "FineWoodPieces",
			CurrentVersion = "1.6.5",
			MinimumRequiredVersion = "1.6.5"
		};

		private static ConfigEntry<FineWoodPieces.Functions.Toggle> _serverConfigLocked;

		public static ConfigEntry<FineWoodPieces.Functions.Toggle> _enableReed;

		public static ConfigEntry<float> _reedGroupRadius;

		public static ConfigEntry<int> _reedGroupSizeMin;

		public static ConfigEntry<int> _reedGroupSizeMax;

		public static ConfigEntry<float> _reedMax;

		public static ConfigEntry<FineWoodPieces.Functions.Toggle> _enableClay;

		public static ConfigEntry<float> _clayGroupRadius;

		public static ConfigEntry<int> _clayGroupSizeMin;

		public static ConfigEntry<int> _clayGroupSizeMax;

		public static ConfigEntry<float> _clayMax;

		public static ConfigEntry<FineWoodPieces.Functions.Toggle> _enableClayBig;

		public static ConfigEntry<float> _clayBigGroupRadius;

		public static ConfigEntry<int> _clayBigGroupSizeMin;

		public static ConfigEntry<int> _clayBigGroupSizeMax;

		public static ConfigEntry<float> _clayBigMax;

		public static ConfigEntry<float> _secPerUnit;

		public static ConfigEntry<int> _maxClay;

		public static ConfigEntry<FineWoodPieces.Functions.Toggle> _hideTrapDoorHoverText;

		private ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool synchronizedConfig = true)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			ConfigDescription val = new ConfigDescription(description.Description + (synchronizedConfig ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
			ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
			_configSync.AddConfigEntry<T>(val2).SynchronizedConfig = synchronizedConfig;
			return val2;
		}

		public void Awake()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Expected O, but got Unknown
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Expected O, but got Unknown
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Expected O, but got Unknown
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Expected O, but got Unknown
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Expected O, but got Unknown
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Expected O, but got Unknown
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Expected O, but got Unknown
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Expected O, but got Unknown
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Expected O, but got Unknown
			//IL_0270: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Expected O, but got Unknown
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Expected O, but got Unknown
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Expected O, but got Unknown
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_0310: Expected O, but got Unknown
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Expected O, but got Unknown
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_0382: Expected O, but got Unknown
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Expected O, but got Unknown
			Localizer.Load();
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = false;
			_serverConfigLocked = config("1- ServerSync", "Lock Configuration", FineWoodPieces.Functions.Toggle.On, new ConfigDescription("If On, the configuration is locked and can be changed by server admins only.", (AcceptableValueBase)null, Array.Empty<object>()));
			_configSync.AddLockingConfigEntry<FineWoodPieces.Functions.Toggle>(_serverConfigLocked);
			_hideTrapDoorHoverText = config("8- TrapDoor", "Hide HoverText", FineWoodPieces.Functions.Toggle.On, new ConfigDescription("If On, trap doors hover text and interact prompt will be hidden.", (AcceptableValueBase)null, Array.Empty<object>()));
			_enableReed = config("2- Reed", "Enable", FineWoodPieces.Functions.Toggle.On, new ConfigDescription("If On, harvestable reeds will spawn across meadows and black forest biomes.", (AcceptableValueBase)null, Array.Empty<object>()));
			_reedGroupRadius = config("2- Reed", "Group Radius", 4f, new ConfigDescription("Group radius.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 50f), Array.Empty<object>()));
			_reedGroupSizeMin = config("2- Reed", "Group Size Min", 4, new ConfigDescription("Minimum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_reedGroupSizeMax = config("2- Reed", "Group Size Max", 8, new ConfigDescription("Maximum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_reedMax = config("2- Reed", "Max", 10f, new ConfigDescription("Maximum amount per zone.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 20f), Array.Empty<object>()));
			_enableClay = config("3- Clay-Pickable", "Enable", FineWoodPieces.Functions.Toggle.On, new ConfigDescription("If On, pickable clays will spawn to all biomes except ashlands and deepnorth.", (AcceptableValueBase)null, Array.Empty<object>()));
			_clayGroupRadius = config("3- Clay-Pickable", "Group Radius", 2f, new ConfigDescription("Group radius.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 50f), Array.Empty<object>()));
			_clayGroupSizeMin = config("3- Clay-Pickable", "Group Size Min", 2, new ConfigDescription("Minimum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_clayGroupSizeMax = config("3- Clay-Pickable", "Group Size Max", 6, new ConfigDescription("Maximum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_clayMax = config("3- Clay-Pickable", "Max", 20f, new ConfigDescription("Maximum amount per zone.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 20f), Array.Empty<object>()));
			_enableClayBig = config("4- Clay-Cluster", "Enable", FineWoodPieces.Functions.Toggle.On, new ConfigDescription("If On, a giant cluster of clays will spawn to all biomes except ashlands and deepnorth.", (AcceptableValueBase)null, Array.Empty<object>()));
			_clayBigGroupRadius = config("4- Clay-Cluster", "Group Radius", 20f, new ConfigDescription("Group radius.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 50f), Array.Empty<object>()));
			_clayBigGroupSizeMin = config("4- Clay-Cluster", "Group Size Min", 1, new ConfigDescription("Minimum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_clayBigGroupSizeMax = config("4- Clay-Cluster", "Group Size Max", 1, new ConfigDescription("Maximum group size.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>()));
			_clayBigMax = config("4- Clay-Cluster", "Max", 5f, new ConfigDescription("Maximum amount per zone.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 20f), Array.Empty<object>()));
			_secPerUnit = config("5- Collector", "Duration", 120f, new ConfigDescription("How long does the collector would take to collect clays from pits in seconds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(30f, 300f), Array.Empty<object>()));
			_maxClay = config("5- Collector", "Max Capacity", 10, new ConfigDescription("Maximum Capacity.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 50), Array.Empty<object>()));
			PrefabsSetup.Init();
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
			((BaseUnityPlugin)this).Config.Save();
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
		}

		private void OnDestroy()
		{
			((BaseUnityPlugin)this).Config.Save();
		}
	}
}
namespace FineWoodPieces.Functions
{
	public class ClayCollector : MonoBehaviour, Hoverable, Interactable
	{
		public string m_name;

		public Transform m_spawnPoint;

		public float m_secPerUnit = 10f;

		public int m_maxClay = 4;

		public ItemDrop m_clayItem;

		public EffectList m_spawnEffect = new EffectList();

		public GameObject m_enabledObject;

		public Biome m_biome;

		[Header("Texts")]
		public string m_extractText = "$bcp_claycollector_extract";

		public string m_collectingText = "$bcp_claycollector_collecting";

		public string m_notConnectedText = "$bcp_claycollector_notconnected";

		public string m_fullText = "$bcp_claycollector_full";

		public ZNetView m_nview;

		private Collider m_collider;

		private Piece m_piece;

		private bool m_connected;

		private Collider[] m_sphereResults = (Collider[])(object)new Collider[32];

		public void Awake()
		{
			m_nview = ((Component)this).GetComponent<ZNetView>();
			m_collider = ((Component)this).GetComponentInChildren<Collider>();
			m_piece = ((Component)this).GetComponent<Piece>();
			if (m_nview.GetZDO() != null)
			{
				if (m_nview.IsOwner() && m_nview.GetZDO().GetLong(ZDOVars.s_lastTime, 0L) == 0L)
				{
					m_nview.GetZDO().Set(ZDOVars.s_lastTime, ZNet.instance.GetTime().Ticks);
				}
				m_nview.Register("RPC_Extract", (Action<long>)RPC_Extract);
				m_nview.Register("RPC_UpdateEffects", (Action<long>)RPC_UpdateEffects);
				((MonoBehaviour)this).InvokeRepeating("UpdateTicks", Random.Range(0f, 2f), 5f);
			}
		}

		public string GetHoverText()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, false, false))
			{
				return Localization.instance.Localize(m_name + "\n$bcp_noaccess");
			}
			int tarLevel = GetTarLevel();
			string statusText = GetStatusText();
			string text = ((!m_connected) ? (m_name + "\n( " + statusText + ", " + tarLevel + " / " + m_maxClay + " ) ") : (m_name + "\n( " + statusText + ", " + tarLevel + " / " + m_maxClay + " ) <color=orange>" + TimeLeft() + "</color>"));
			if (tarLevel > 0)
			{
				text = text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + m_extractText;
			}
			return Localization.instance.Localize(text);
		}

		public string GetHoverName()
		{
			return m_name;
		}

		public bool Interact(Humanoid character, bool repeat, bool alt)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			if (repeat)
			{
				return false;
			}
			if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false))
			{
				return true;
			}
			if (GetTarLevel() <= 0)
			{
				return false;
			}
			Extract();
			return true;
		}

		public string GetStatusText()
		{
			if (GetTarLevel() >= m_maxClay)
			{
				return m_fullText;
			}
			if (!m_connected)
			{
				return m_notConnectedText;
			}
			return m_collectingText;
		}

		public bool UseItem(Humanoid user, ItemData item)
		{
			return false;
		}

		public void Extract()
		{
			m_nview.InvokeRPC("RPC_Extract", Array.Empty<object>());
		}

		public void RPC_Extract(long caller)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			int tarLevel = GetTarLevel();
			if (tarLevel > 0)
			{
				m_spawnEffect.Create(m_spawnPoint.position, Quaternion.identity, (Transform)null, 1f, -1);
				for (int i = 0; i < tarLevel; i++)
				{
					Vector2 val = Random.insideUnitCircle * 0.5f;
					Vector3 val2 = m_spawnPoint.position + new Vector3(val.x, 0.25f * (float)i, val.y);
					Object.Instantiate<ItemDrop>(m_clayItem, val2, Quaternion.identity);
				}
				ResetLevel();
				m_nview.InvokeRPC(ZNetView.Everybody, "RPC_UpdateEffects", Array.Empty<object>());
			}
		}

		private float GetTimeSinceLastUpdate()
		{
			DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong(ZDOVars.s_lastTime, ZNet.instance.GetTime().Ticks));
			DateTime time = ZNet.instance.GetTime();
			TimeSpan timeSpan = time - dateTime;
			m_nview.GetZDO().Set(ZDOVars.s_lastTime, time.Ticks);
			double num = timeSpan.TotalSeconds;
			if (num < 0.0)
			{
				num = 0.0;
			}
			return (float)num;
		}

		public void ResetLevel()
		{
			m_nview.GetZDO().Set(ZDOVars.s_level, 0, false);
		}

		public void IncreaseLevel(int i)
		{
			int tarLevel = GetTarLevel();
			tarLevel += i;
			tarLevel = Mathf.Clamp(tarLevel, 0, m_maxClay);
			m_nview.GetZDO().Set(ZDOVars.s_level, tarLevel, false);
		}

		private int GetTarLevel()
		{
			if (m_nview.GetZDO() != null)
			{
				return m_nview.GetZDO().GetInt(ZDOVars.s_level, 0);
			}
			return 0;
		}

		public void UpdateTicks()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			if (CheckBiome() && !m_connected)
			{
				int num = Physics.OverlapSphereNonAlloc(((Component)this).transform.position, 0.2f, m_sphereResults);
				for (int i = 0; i < num; i++)
				{
					if (((Component)m_sphereResults[i]).gameObject.layer == 4)
					{
						m_connected = true;
					}
				}
			}
			bool flag = CheckBiome() && m_connected;
			if (m_nview.IsOwner() && flag)
			{
				float timeSinceLastUpdate = GetTimeSinceLastUpdate();
				if (GetTarLevel() < m_maxClay)
				{
					float @float = m_nview.GetZDO().GetFloat(ZDOVars.s_product, 0f);
					@float += timeSinceLastUpdate;
					if (@float > m_secPerUnit)
					{
						int i2 = (int)(@float / m_secPerUnit);
						IncreaseLevel(i2);
						@float = 0f;
					}
					m_nview.GetZDO().Set(ZDOVars.s_product, @float);
				}
			}
			UpdateEffects();
		}

		public void RPC_UpdateEffects(long caller)
		{
			UpdateEffects();
		}

		public void UpdateEffects()
		{
			bool active = GetTarLevel() < m_maxClay && m_connected && GetStatusText() == m_collectingText;
			m_enabledObject.SetActive(active);
		}

		private bool CheckBiome()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Invalid comparison between Unknown and I4
			return (Heightmap.FindBiome(((Component)this).transform.position) & m_biome) > 0;
		}

		private string TimeLeft()
		{
			string result = "";
			if (GetTarLevel() == m_maxClay)
			{
				return result;
			}
			if (!m_nview.IsValid() || !m_nview.IsOwner())
			{
				return result;
			}
			float @float = m_nview.GetZDO().GetFloat(ZDOVars.s_product, 0f);
			float num = m_secPerUnit - @float;
			int num2 = Mathf.FloorToInt((float)((int)num / 60));
			int num3 = Mathf.FloorToInt((float)((int)num % 60));
			return $"[ {num2:00}:{num3:00} ]";
		}
	}
	public static class ComponentsSetup
	{
		public static void SetCollector(ZNetScene zNetScene)
		{
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Expected O, but got Unknown
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			if (Helper.ZNetSceneAwake())
			{
				ClayCollector component = zNetScene.GetPrefab("BCP_ClayCollector").GetComponent<ClayCollector>();
				component.m_name = "$bcp_claycollector";
				component.m_spawnPoint = Utils.FindChild(((Component)component).gameObject.transform, "spawnpoint", (IterativeSearchType)0);
				component.m_secPerUnit = Plugin._secPerUnit.Value;
				component.m_maxClay = Plugin._maxClay.Value;
				component.m_clayItem = zNetScene.GetPrefab("BFP_Clay").GetComponent<ItemDrop>();
				component.m_spawnEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[2]
				{
					new EffectData
					{
						m_prefab = PrefabsSetup._fineWoodBundle.LoadAsset<GameObject>("bfp_sfx_pickable_pick"),
						m_enabled = true,
						m_variant = -1
					},
					new EffectData
					{
						m_prefab = PrefabsSetup._fineWoodBundle.LoadAsset<GameObject>("bfp_vfx_pickable_pick"),
						m_enabled = true,
						m_variant = -1
					}
				};
				component.m_enabledObject = ((Component)Utils.FindChild(((Component)component).gameObject.transform, "_enabled", (IterativeSearchType)0)).gameObject;
				component.m_biome = (Biome)27;
			}
		}

		public static void SetClayLightPost(ZNetScene zNetScene)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Expected O, but got Unknown
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			if (Helper.ZNetSceneAwake())
			{
				Fireplace component = zNetScene.GetPrefab("BFP_ClayLightPost").GetComponent<Fireplace>();
				component.m_fuelItem = zNetScene.GetPrefab("Coal").GetComponent<ItemDrop>();
				FireworkItem[] array = new FireworkItem[1];
				FireworkItem val = new FireworkItem
				{
					m_fireworkItemCount = 1,
					m_fireworkItem = zNetScene.GetPrefab("Resin").GetComponent<ItemDrop>()
				};
				EffectList val2 = new EffectList();
				val2.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = zNetScene.GetPrefab("vfx_Firework_Rocket")
					}
				};
				val.m_fireworksEffects = val2;
				array[0] = val;
				component.m_fireworkItemList = (FireworkItem[])(object)array;
			}
		}

		public static void SetStoneLightPost(ZNetScene zNetScene)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Expected O, but got Unknown
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			if (Helper.ZNetSceneAwake())
			{
				Fireplace component = zNetScene.GetPrefab("BFP_StoneLightPost").GetComponent<Fireplace>();
				component.m_fuelItem = zNetScene.GetPrefab("Coal").GetComponent<ItemDrop>();
				FireworkItem[] array = new FireworkItem[1];
				FireworkItem val = new FireworkItem
				{
					m_fireworkItemCount = 1,
					m_fireworkItem = zNetScene.GetPrefab("Resin").GetComponent<ItemDrop>()
				};
				EffectList val2 = new EffectList();
				val2.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = zNetScene.GetPrefab("vfx_Firework_Rocket")
					}
				};
				val.m_fireworksEffects = val2;
				array[0] = val;
				component.m_fireworkItemList = (FireworkItem[])(object)array;
			}
		}

		public static void SetTrapDoor(ZNetScene zNetScene)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Expected O, but got Unknown
			if (Helper.ZNetSceneAwake())
			{
				TrapDoor component = zNetScene.GetPrefab("BFP_TrapDoor").GetComponent<TrapDoor>();
				component.m_name = "$bfp_trapdoor";
				component.m_checkGuardStone = true;
				component.m_openEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = PrefabsSetup._fineWoodBundle.LoadAsset<GameObject>("bfp_sfx_door_open"),
						m_enabled = true,
						m_variant = -1
					}
				};
				component.m_closeEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]
				{
					new EffectData
					{
						m_prefab = PrefabsSetup._fineWoodBundle.LoadAsset<GameObject>("bfp_sfx_door_close"),
						m_enabled = true,
						m_variant = -1
					}
				};
			}
		}

		public static void SetArmorStand(ZNetScene zNetScene)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Expected O, but got Unknown
			if (Helper.ZNetSceneAwake())
			{
				ArmorStand component = zNetScene.GetPrefab("BFP_ArmorStand").GetComponent<ArmorStand>();
				component.m_supports = new List<ArmorStandSupport>(1)
				{
					new ArmorStandSupport
					{
						m_items = new List<ItemDrop>(4)
						{
							zNetScene.GetPrefab("ArmorBronzeChest").GetComponent<ItemDrop>(),
							zNetScene.GetPrefab("ArmorIronChest").GetComponent<ItemDrop>(),
							zNetScene.GetPrefab("ArmorCarapaceChest").GetComponent<ItemDrop>(),
							zNetScene.GetPrefab("ArmorMageChest").GetComponent<ItemDrop>()
						},
						m_supports = new List<GameObject>(2)
						{
							((Component)Utils.FindChild(((Component)component).gameObject.transform, "ArmLeft", (IterativeSearchType)0)).gameObject,
							((Component)Utils.FindChild(((Component)component).gameObject.transform, "ArmRight", (IterativeSearchType)0)).gameObject
						}
					}
				};
			}
		}
	}
	[HarmonyPatch]
	public class Patches
	{
		private static readonly List<ZoneVegetation> _resourceList = new List<ZoneVegetation>();

		[HarmonyPrefix]
		[HarmonyPatch(typeof(ClayCollector), "Awake")]
		private static void Awake_Prefix(ref float ___m_secPerUnit, ref int ___m_maxClay, ClayCollector __instance)
		{
			Plugin._secPerUnit.SettingChanged += delegate
			{
				__instance.m_secPerUnit = Plugin._secPerUnit.Value;
			};
			___m_secPerUnit = Plugin._secPerUnit.Value;
			Plugin._maxClay.SettingChanged += delegate
			{
				__instance.m_maxClay = Plugin._maxClay.Value;
			};
			___m_maxClay = Plugin._maxClay.Value;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ClayCollector), "UpdateEffects")]
		private static void UpdateEffects_Postfix(ClayCollector __instance)
		{
			if ((Object)(object)__instance == (Object)null || (Object)(object)__instance.m_nview == (Object)null || !__instance.m_nview.IsValid() || !((Object)((Component)__instance).gameObject).name.StartsWith("BCP_Clay"))
			{
				return;
			}
			Transform val = Utils.FindChild(((Component)__instance).gameObject.transform, "refinery_high", (IterativeSearchType)0);
			Transform val2 = Utils.FindChild(((Component)__instance).gameObject.transform, "refinery_high_worn", (IterativeSearchType)0);
			Transform val3 = Utils.FindChild(((Component)__instance).gameObject.transform, "refineryBroken", (IterativeSearchType)0);
			if (__instance.GetStatusText() == __instance.m_collectingText)
			{
				if (((Component)val).gameObject.activeInHierarchy)
				{
					((Component)val).gameObject.GetComponent<Animator>().speed = 1f;
				}
				else if (((Component)val2).gameObject.activeInHierarchy)
				{
					((Component)val2).gameObject.GetComponent<Animator>().speed = 1f;
				}
				else if (((Component)val3).gameObject.activeInHierarchy)
				{
					((Component)val3).gameObject.GetComponent<Animator>().speed = 1f;
				}
			}
			else if (((Component)val).gameObject.activeInHierarchy)
			{
				((Component)val).gameObject.GetComponent<Animator>().speed = 0f;
			}
			else if (((Component)val2).gameObject.activeInHierarchy)
			{
				((Component)val2).gameObject.GetComponent<Animator>().speed = 0f;
			}
			else if (((Component)val3).gameObject.activeInHierarchy)
			{
				((Component)val3).gameObject.GetComponent<Animator>().speed = 0f;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ZNetScene), "Awake")]
		private static void Awake_Postfix(ZNetScene __instance)
		{
			ComponentsSetup.SetCollector(__instance);
			ComponentsSetup.SetArmorStand(__instance);
			ComponentsSetup.SetTrapDoor(__instance);
			ComponentsSetup.SetStoneLightPost(__instance);
			ComponentsSetup.SetClayLightPost(__instance);
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(ZoneSystem), "ValidateVegetation")]
		private static void ValidateVegetation_Prefix(ZoneSystem __instance)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Expected O, but got Unknown
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Expected O, but got Unknown
			foreach (ZoneVegetation resource in _resourceList)
			{
				__instance.m_vegetation.Remove(resource);
			}
			_resourceList.Clear();
			ZoneVegetation item = new ZoneVegetation
			{
				m_enable = (Plugin._enableClay.Value == Toggle.On),
				m_groupRadius = Plugin._clayGroupRadius.Value,
				m_groupSizeMin = Plugin._clayGroupSizeMin.Value,
				m_groupSizeMax = Plugin._clayGroupSizeMax.Value,
				m_max = Plugin._clayMax.Value,
				m_chanceToUseGroundTilt = 1f,
				m_biome = (Biome)539,
				m_minAltitude = -0.5f,
				m_maxAltitude = 2f,
				m_maxTerrainDelta = 2f,
				m_prefab = PrefabsSetup._pickableClay
			};
			_resourceList.Add(item);
			ZoneVegetation item2 = new ZoneVegetation
			{
				m_enable = (Plugin._enableClayBig.Value == Toggle.On),
				m_groupRadius = Plugin._clayBigGroupRadius.Value,
				m_groupSizeMin = Plugin._clayBigGroupSizeMin.Value,
				m_groupSizeMax = Plugin._clayBigGroupSizeMax.Value,
				m_max = Plugin._clayBigMax.Value,
				m_chanceToUseGroundTilt = 1f,
				m_biome = (Biome)539,
				m_minAltitude = -0.5f,
				m_maxAltitude = 2f,
				m_maxTerrainDelta = 2f,
				m_prefab = PrefabsSetup._clusterClay
			};
			_resourceList.Add(item2);
			ZoneVegetation item3 = new ZoneVegetation
			{
				m_enable = (Plugin._enableReed.Value == Toggle.On),
				m_groupRadius = Plugin._reedGroupRadius.Value,
				m_groupSizeMin = Plugin._reedGroupSizeMin.Value,
				m_groupSizeMax = Plugin._reedGroupSizeMax.Value,
				m_max = Plugin._reedMax.Value,
				m_chanceToUseGroundTilt = 1f,
				m_biome = (Biome)9,
				m_minAltitude = -0.6f,
				m_maxAltitude = 1.8f,
				m_maxTerrainDelta = 2f,
				m_prefab = PrefabsSetup._pickableReed
			};
			_resourceList.Add(item3);
			foreach (ZoneVegetation resource2 in _resourceList)
			{
				__instance.m_vegetation.Add(resource2);
			}
		}
	}
	public static class PrefabsSetup
	{
		public static AssetBundle _fineWoodBundle;

		private const string _clayMat = "BFP_Clay";

		private const string _customHammer = "BFP_FineHammer";

		private const string _strawMat = "BFP_Straw";

		private const string _fineWoodMat = "FineWood";

		private const string _bronzeNailsMat = "BronzeNails";

		private const string _beechMat = "BeechSeeds";

		public static GameObject _pickableClay;

		public static GameObject _clusterClay;

		public static GameObject _pickableReed;

		public static void Init()
		{
			_fineWoodBundle = PiecePrefabManager.RegisterAssetBundle("finewoodbundle");
			Others();
			HardPieces();
			Misc();
			Furniture();
			WoodPieces();
			Effects();
		}

		private static void Others()
		{
			Item item = new Item(_fineWoodBundle, "BFP_FineHammer");
			item.Crafting.Add(ItemManager.CraftingTable.Forge, 1);
			item.RequiredItems.Add("Bronze", 2);
			item.RequiredItems.Add("RoundLog", 1);
			item.RequiredUpgradeItems.Add("Bronze", 1);
			item.RequiredUpgradeItems.Add("RoundLog", 1);
			item.Configurable = Configurability.Full;
			ShaderReplacer.Replace(new Item(_fineWoodBundle, "BFP_Clay")
			{
				Configurable = Configurability.Disabled
			}.Prefab);
			ShaderReplacer.Replace(new Item(_fineWoodBundle, "BFP_Straw")
			{
				Configurable = Configurability.Disabled
			}.Prefab);
			BuildPiece buildPiece = new BuildPiece(_fineWoodBundle, "BFP_FineHammerRepair");
			buildPiece.Crafting.Set(PieceManager.CraftingTable.None);
			buildPiece.Category.Set(BuildPieceCategory.All);
			buildPiece.Tool.Add("BFP_FineHammer");
			buildPiece.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = true
			};
			BuildPiece buildPiece2 = new BuildPiece(_fineWoodBundle, "BCP_ClayCollector");
			buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece2.Category.Set("CollectorSeries");
			buildPiece2.RequiredItems.Add("SurtlingCore", 5, recover: true);
			buildPiece2.RequiredItems.Add("Bronze", 12, recover: true);
			buildPiece2.RequiredItems.Add("RoundLog", 15, recover: true);
			buildPiece2.RequiredItems.Add("Stone", 22, recover: true);
			buildPiece.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			if (!Object.op_Implicit((Object)(object)buildPiece2.Prefab.GetComponent<ClayCollector>()))
			{
				buildPiece2.Prefab.AddComponent<ClayCollector>();
			}
			ShaderReplacer.Replace(buildPiece2.Prefab);
			_pickableClay = PiecePrefabManager.RegisterPrefab(_fineWoodBundle, "BFP_Pickable_Clay");
			ShaderReplacer.Replace(_pickableClay);
			_clusterClay = PiecePrefabManager.RegisterPrefab(_fineWoodBundle, "BFP_Pickable_ClayBig");
			ShaderReplacer.Replace(_clusterClay);
			_pickableReed = PiecePrefabManager.RegisterPrefab(_fineWoodBundle, "BFP_Pickable_Reed");
			ShaderReplacer.Replace(_pickableReed);
		}

		private static void Furniture()
		{
			BuildPiece buildPiece = new BuildPiece(_fineWoodBundle, "BFP_ArmorStand");
			buildPiece.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece.Category.Set(BuildPieceCategory.Furniture);
			buildPiece.Tool.Add("BFP_FineHammer");
			buildPiece.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece.RequiredItems.Add("BronzeNails", 6, recover: true);
			buildPiece.RequiredItems.Add("LeatherScraps", 4, recover: true);
			buildPiece.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece.Prefab);
			BuildPiece buildPiece2 = new BuildPiece(_fineWoodBundle, "BFP_Bench1");
			buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece2.Category.Set(BuildPieceCategory.Furniture);
			buildPiece2.Tool.Add("BFP_FineHammer");
			buildPiece2.RequiredItems.Add("FineWood", 16, recover: true);
			buildPiece2.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece2.Prefab);
			BuildPiece buildPiece3 = new BuildPiece(_fineWoodBundle, "BFP_Bench2");
			buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece3.Category.Set(BuildPieceCategory.Furniture);
			buildPiece3.Tool.Add("BFP_FineHammer");
			buildPiece3.RequiredItems.Add("FineWood", 24, recover: true);
			buildPiece3.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece3.Prefab);
			BuildPiece buildPiece4 = new BuildPiece(_fineWoodBundle, "BFP_Bench3");
			buildPiece4.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece4.Category.Set(BuildPieceCategory.Furniture);
			buildPiece4.Tool.Add("BFP_FineHammer");
			buildPiece4.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece4.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece4.Prefab);
			BuildPiece buildPiece5 = new BuildPiece(_fineWoodBundle, "BFP_Bench4");
			buildPiece5.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece5.Category.Set(BuildPieceCategory.Furniture);
			buildPiece5.Tool.Add("BFP_FineHammer");
			buildPiece5.RequiredItems.Add("Stone", 24, recover: true);
			buildPiece5.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece5.Prefab);
			BuildPiece buildPiece6 = new BuildPiece(_fineWoodBundle, "BFP_Bench5");
			buildPiece6.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece6.Category.Set(BuildPieceCategory.Furniture);
			buildPiece6.Tool.Add("BFP_FineHammer");
			buildPiece6.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece6.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece6.Prefab);
			BuildPiece buildPiece7 = new BuildPiece(_fineWoodBundle, "BFP_Bench6");
			buildPiece7.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece7.Category.Set(BuildPieceCategory.Furniture);
			buildPiece7.Tool.Add("BFP_FineHammer");
			buildPiece7.RequiredItems.Add("FineWood", 18, recover: true);
			buildPiece7.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece7.Prefab);
			BuildPiece buildPiece8 = new BuildPiece(_fineWoodBundle, "BFP_Bench7");
			buildPiece8.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece8.Category.Set(BuildPieceCategory.Furniture);
			buildPiece8.Tool.Add("BFP_FineHammer");
			buildPiece8.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece8.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece8.Prefab);
			BuildPiece buildPiece9 = new BuildPiece(_fineWoodBundle, "BFP_Bench8");
			buildPiece9.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece9.Category.Set(BuildPieceCategory.Furniture);
			buildPiece9.Tool.Add("BFP_FineHammer");
			buildPiece9.RequiredItems.Add("FineWood", 6, recover: true);
			buildPiece9.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece9.Prefab);
			BuildPiece buildPiece10 = new BuildPiece(_fineWoodBundle, "BFP_Bench9");
			buildPiece10.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece10.Category.Set(BuildPieceCategory.Furniture);
			buildPiece10.Tool.Add("BFP_FineHammer");
			buildPiece10.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece10.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece10.Prefab);
			BuildPiece buildPiece11 = new BuildPiece(_fineWoodBundle, "BFP_BronzeFrameChest");
			buildPiece11.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece11.Category.Set(BuildPieceCategory.Furniture);
			buildPiece11.Tool.Add("BFP_FineHammer");
			buildPiece11.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece11.RequiredItems.Add("Bronze", 4, recover: true);
			buildPiece11.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece11.Prefab);
			BuildPiece buildPiece12 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet1");
			buildPiece12.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece12.Category.Set(BuildPieceCategory.Furniture);
			buildPiece12.Tool.Add("BFP_FineHammer");
			buildPiece12.RequiredItems.Add("FineWood", 42, recover: true);
			buildPiece12.RequiredItems.Add("BronzeNails", 12, recover: true);
			buildPiece12.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece12.Prefab);
			BuildPiece buildPiece13 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet2");
			buildPiece13.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece13.Category.Set(BuildPieceCategory.Furniture);
			buildPiece13.Tool.Add("BFP_FineHammer");
			buildPiece13.RequiredItems.Add("FineWood", 42, recover: true);
			buildPiece13.RequiredItems.Add("BronzeNails", 12, recover: true);
			buildPiece13.RequiredItems.Add("Crystal", 2, recover: true);
			buildPiece13.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece13.Prefab);
			BuildPiece buildPiece14 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet3");
			buildPiece14.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece14.Category.Set(BuildPieceCategory.Furniture);
			buildPiece14.Tool.Add("BFP_FineHammer");
			buildPiece14.RequiredItems.Add("FineWood", 21, recover: true);
			buildPiece14.RequiredItems.Add("BronzeNails", 6, recover: true);
			buildPiece14.RequiredItems.Add("Crystal", 1, recover: true);
			buildPiece14.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece14.Prefab);
			BuildPiece buildPiece15 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet4");
			buildPiece15.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece15.Category.Set(BuildPieceCategory.Furniture);
			buildPiece15.Tool.Add("BFP_FineHammer");
			buildPiece15.RequiredItems.Add("FineWood", 36, recover: true);
			buildPiece15.RequiredItems.Add("BronzeNails", 16, recover: true);
			buildPiece15.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece15.Prefab);
			BuildPiece buildPiece16 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet5");
			buildPiece16.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece16.Category.Set(BuildPieceCategory.Furniture);
			buildPiece16.Tool.Add("BFP_FineHammer");
			buildPiece16.RequiredItems.Add("FineWood", 36, recover: true);
			buildPiece16.RequiredItems.Add("BronzeNails", 16, recover: true);
			buildPiece16.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece16.Prefab);
			BuildPiece buildPiece17 = new BuildPiece(_fineWoodBundle, "BFP_Cabinet7");
			buildPiece17.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece17.Category.Set(BuildPieceCategory.Furniture);
			buildPiece17.Tool.Add("BFP_FineHammer");
			buildPiece17.RequiredItems.Add("FineWood", 16, recover: true);
			buildPiece17.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece17.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece17.Prefab);
			BuildPiece buildPiece18 = new BuildPiece(_fineWoodBundle, "BFP_ClayChest");
			buildPiece18.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece18.Category.Set(BuildPieceCategory.Furniture);
			buildPiece18.Tool.Add("BFP_FineHammer");
			buildPiece18.RequiredItems.Add("BFP_Clay", 10, recover: true);
			buildPiece18.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece18.Prefab);
			BuildPiece buildPiece19 = new BuildPiece(_fineWoodBundle, "BFP_Cupboard");
			buildPiece19.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece19.Category.Set(BuildPieceCategory.Furniture);
			buildPiece19.Tool.Add("BFP_FineHammer");
			buildPiece19.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece19.RequiredItems.Add("RoundLog", 2, recover: true);
			buildPiece19.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece19.Prefab);
			BuildPiece buildPiece20 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodBasket");
			buildPiece20.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece20.Category.Set(BuildPieceCategory.Furniture);
			buildPiece20.Tool.Add("BFP_FineHammer");
			buildPiece20.RequiredItems.Add("FineWood", 4, recover: true);
			buildPiece20.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			BuildPiece buildPiece21 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodBed1");
			buildPiece21.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece21.Category.Set(BuildPieceCategory.Furniture);
			buildPiece21.Tool.Add("BFP_FineHammer");
			buildPiece21.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece21.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece21.Prefab);
			BuildPiece buildPiece22 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodBed2");
			buildPiece22.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece22.Category.Set(BuildPieceCategory.Furniture);
			buildPiece22.Tool.Add("BFP_FineHammer");
			buildPiece22.RequiredItems.Add("FineWood", 18, recover: true);
			buildPiece22.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece22.Prefab);
			BuildPiece buildPiece23 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair1");
			buildPiece23.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece23.Category.Set(BuildPieceCategory.Furniture);
			buildPiece23.Tool.Add("BFP_FineHammer");
			buildPiece23.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece23.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece23.Prefab);
			BuildPiece buildPiece24 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair2");
			buildPiece24.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece24.Category.Set(BuildPieceCategory.Furniture);
			buildPiece24.Tool.Add("BFP_FineHammer");
			buildPiece24.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece24.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece24.Prefab);
			BuildPiece buildPiece25 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair3");
			buildPiece25.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece25.Category.Set(BuildPieceCategory.Furniture);
			buildPiece25.Tool.Add("BFP_FineHammer");
			buildPiece25.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece25.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece25.Prefab);
			BuildPiece buildPiece26 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair4");
			buildPiece26.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece26.Category.Set(BuildPieceCategory.Furniture);
			buildPiece26.Tool.Tools.Add("BFP_FineHammer");
			buildPiece26.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece26.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece26.Prefab);
			BuildPiece buildPiece27 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair5");
			buildPiece27.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece27.Category.Set(BuildPieceCategory.Furniture);
			buildPiece27.Tool.Add("BFP_FineHammer");
			buildPiece27.RequiredItems.Add("FineWood", 8, recover: true);
			buildPiece27.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece27.Prefab);
			BuildPiece buildPiece28 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair6");
			buildPiece28.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece28.Category.Set(BuildPieceCategory.Furniture);
			buildPiece28.Tool.Add("BFP_FineHammer");
			buildPiece28.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece28.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece28.Prefab);
			BuildPiece buildPiece29 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodChair7");
			buildPiece29.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece29.Category.Set(BuildPieceCategory.Furniture);
			buildPiece29.Tool.Add("BFP_FineHammer");
			buildPiece29.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece29.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece29.Prefab);
			BuildPiece buildPiece30 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodDrawer1");
			buildPiece30.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece30.Category.Set(BuildPieceCategory.Furniture);
			buildPiece30.Tool.Add("BFP_FineHammer");
			buildPiece30.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece30.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece30.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece30.Prefab);
			BuildPiece buildPiece31 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodDrawer2");
			buildPiece31.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece31.Category.Set(BuildPieceCategory.Furniture);
			buildPiece31.Tool.Add("BFP_FineHammer");
			buildPiece31.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece31.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece31.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece31.Prefab);
			BuildPiece buildPiece32 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodDrawer3");
			buildPiece32.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece32.Category.Set(BuildPieceCategory.Furniture);
			buildPiece32.Tool.Add("BFP_FineHammer");
			buildPiece32.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece32.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece32.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece32.Prefab);
			BuildPiece buildPiece33 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodDrawer4");
			buildPiece33.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece33.Category.Set(BuildPieceCategory.Furniture);
			buildPiece33.Tool.Add("BFP_FineHammer");
			buildPiece33.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece33.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece33.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece33.Prefab);
			BuildPiece buildPiece34 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodDrawer5");
			buildPiece34.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece34.Category.Set(BuildPieceCategory.Furniture);
			buildPiece34.Tool.Add("BFP_FineHammer");
			buildPiece34.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece34.RequiredItems.Add("BronzeNails", 8, recover: true);
			buildPiece34.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece34.Prefab);
			BuildPiece buildPiece35 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodStool");
			buildPiece35.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece35.Category.Set(BuildPieceCategory.Furniture);
			buildPiece35.Tool.Add("BFP_FineHammer");
			buildPiece35.RequiredItems.Add("FineWood", 6, recover: true);
			buildPiece35.RequiredItems.Add("BronzeNails", 4, recover: true);
			buildPiece35.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece35.Prefab);
			BuildPiece buildPiece36 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable1");
			buildPiece36.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece36.Category.Set(BuildPieceCategory.Furniture);
			buildPiece36.Tool.Add("BFP_FineHammer");
			buildPiece36.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece36.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece36.Prefab);
			BuildPiece buildPiece37 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable2");
			buildPiece37.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece37.Category.Set(BuildPieceCategory.Furniture);
			buildPiece37.Tool.Add("BFP_FineHammer");
			buildPiece37.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece37.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece37.Prefab);
			BuildPiece buildPiece38 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable3");
			buildPiece38.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece38.Category.Set(BuildPieceCategory.Furniture);
			buildPiece38.Tool.Add("BFP_FineHammer");
			buildPiece38.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece38.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece38.Prefab);
			BuildPiece buildPiece39 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable4");
			buildPiece39.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece39.Category.Set(BuildPieceCategory.Furniture);
			buildPiece39.Tool.Add("BFP_FineHammer");
			buildPiece39.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece39.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece39.Prefab);
			BuildPiece buildPiece40 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable5");
			buildPiece40.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece40.Category.Set(BuildPieceCategory.Furniture);
			buildPiece40.Tool.Add("BFP_FineHammer");
			buildPiece40.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece40.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece40.Prefab);
			BuildPiece buildPiece41 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable6");
			buildPiece41.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece41.Category.Set(BuildPieceCategory.Furniture);
			buildPiece41.Tool.Add("BFP_FineHammer");
			buildPiece41.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece41.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece41.Prefab);
			BuildPiece buildPiece42 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable7");
			buildPiece42.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece42.Category.Set(BuildPieceCategory.Furniture);
			buildPiece42.Tool.Add("BFP_FineHammer");
			buildPiece42.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece42.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece42.Prefab);
			BuildPiece buildPiece43 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable8");
			buildPiece43.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece43.Category.Set(BuildPieceCategory.Furniture);
			buildPiece43.Tool.Add("BFP_FineHammer");
			buildPiece43.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece43.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece43.Prefab);
			BuildPiece buildPiece44 = new BuildPiece(_fineWoodBundle, "BFP_FineWoodTable9");
			buildPiece44.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece44.Category.Set(BuildPieceCategory.Furniture);
			buildPiece44.Tool.Add("BFP_FineHammer");
			buildPiece44.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece44.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece44.Prefab);
			BuildPiece buildPiece45 = new BuildPiece(_fineWoodBundle, "BFP_LeatherBed");
			buildPiece45.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece45.Category.Set(BuildPieceCategory.Furniture);
			buildPiece45.Tool.Add("BFP_FineHammer");
			buildPiece45.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece45.RequiredItems.Add("LeatherScraps", 10, recover: true);
			buildPiece45.RequiredItems.Add("DeerHide", 12, recover: true);
			buildPiece45.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece45.Prefab);
			BuildPiece buildPiece46 = new BuildPiece(_fineWoodBundle, "BFP_LogChair");
			buildPiece46.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece46.Category.Set(BuildPieceCategory.Furniture);
			buildPiece46.Tool.Add("BFP_FineHammer");
			buildPiece46.RequiredItems.Add("FineWood", 6, recover: true);
			buildPiece46.RequiredItems.Add("RoundLog", 1, recover: true);
			buildPiece46.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece46.Prefab);
			BuildPiece buildPiece47 = new BuildPiece(_fineWoodBundle, "BFP_LongCrate");
			buildPiece47.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece47.Category.Set(BuildPieceCategory.Furniture);
			buildPiece47.Tool.Add("BFP_FineHammer");
			buildPiece47.RequiredItems.Add("FineWood", 12, recover: true);
			buildPiece47.RequiredItems.Add("Bronze", 4, recover: true);
			buildPiece47.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece47.Prefab);
			BuildPiece buildPiece48 = new BuildPiece(_fineWoodBundle, "BFP_LoxBed");
			buildPiece48.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece48.Category.Set(BuildPieceCategory.Furniture);
			buildPiece48.Tool.Add("BFP_FineHammer");
			buildPiece48.RequiredItems.Add("FineWood", 18, recover: true);
			buildPiece48.RequiredItems.Add("LinenThread", 10, recover: true);
			buildPiece48.RequiredItems.Add("LoxPelt", 8, recover: true);
			buildPiece48.RequiredItems.Add("WolfPelt", 4, recover: true);
			buildPiece48.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece48.Prefab);
			BuildPiece buildPiece49 = new BuildPiece(_fineWoodBundle, "BFP_LoxDoubleBed");
			buildPiece49.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece49.Category.Set(BuildPieceCategory.Furniture);
			buildPiece49.Tool.Add("BFP_FineHammer");
			buildPiece49.RequiredItems.Add("FineWood", 26, recover: true);
			buildPiece49.RequiredItems.Add("LinenThread", 22, recover: true);
			buildPiece49.RequiredItems.Add("LoxPelt", 16, recover: true);
			buildPiece49.RequiredItems.Add("WolfPelt", 8, recover: true);
			buildPiece49.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece49.Prefab);
			BuildPiece buildPiece50 = new BuildPiece(_fineWoodBundle, "BFP_MiniStool1");
			buildPiece50.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece50.Category.Set(BuildPieceCategory.Furniture);
			buildPiece50.Tool.Add("BFP_FineHammer");
			buildPiece50.RequiredItems.Add("FineWood", 6, recover: true);
			buildPiece50.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece50.Prefab);
			BuildPiece buildPiece51 = new BuildPiece(_fineWoodBundle, "BFP_MiniStool2");
			buildPiece51.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece51.Category.Set(BuildPieceCategory.Furniture);
			buildPiece51.Tool.Add("BFP_FineHammer");
			buildPiece51.RequiredItems.Add("FineWood", 6, recover: true);
			buildPiece51.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece51.Prefab);
			BuildPiece buildPiece52 = new BuildPiece(_fineWoodBundle, "BFP_MiniTable1");
			buildPiece52.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece52.Category.Set(BuildPieceCategory.Furniture);
			buildPiece52.Tool.Add("BFP_FineHammer");
			buildPiece52.RequiredItems.Add("FineWood", 28, recover: true);
			buildPiece52.RequiredItems.Add("Crystal", 3, recover: true);
			buildPiece52.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece52.Prefab);
			BuildPiece buildPiece53 = new BuildPiece(_fineWoodBundle, "BFP_MiniTable2");
			buildPiece53.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece53.Category.Set(BuildPieceCategory.Furniture);
			buildPiece53.Tool.Add("BFP_FineHammer");
			buildPiece53.RequiredItems.Add("FineWood", 22, recover: true);
			buildPiece53.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece53.Prefab);
			BuildPiece buildPiece54 = new BuildPiece(_fineWoodBundle, "BFP_MiniTable4");
			buildPiece54.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece54.Category.Set(BuildPieceCategory.Furniture);
			buildPiece54.Tool.Add("BFP_FineHammer");
			buildPiece54.RequiredItems.Add("FineWood", 16, recover: true);
			buildPiece54.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece54.Prefab);
			BuildPiece buildPiece55 = new BuildPiece(_fineWoodBundle, "BFP_PoolChair");
			buildPiece55.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece55.Category.Set(BuildPieceCategory.Furniture);
			buildPiece55.Tool.Add("BFP_FineHammer");
			buildPiece55.RequiredItems.Add("FineWood", 18, recover: true);
			buildPiece55.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece55.Prefab);
			BuildPiece buildPiece56 = new BuildPiece(_fineWoodBundle, "BFP_Stool1");
			buildPiece56.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece56.Category.Set(BuildPieceCategory.Furniture);
			buildPiece56.Tool.Add("BFP_FineHammer");
			buildPiece56.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece56.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece56.Prefab);
			BuildPiece buildPiece57 = new BuildPiece(_fineWoodBundle, "BFP_Stool2");
			buildPiece57.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece57.Category.Set(BuildPieceCategory.Furniture);
			buildPiece57.Tool.Add("BFP_FineHammer");
			buildPiece57.RequiredItems.Add("FineWood", 14, recover: true);
			buildPiece57.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece57.Prefab);
		}

		private static void HardPieces()
		{
			BuildPiece buildPiece = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45");
			buildPiece.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece.Tool.Add("BFP_FineHammer");
			buildPiece.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece.Prefab);
			BuildPiece buildPiece2 = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45_Corner");
			buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece2.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece2.Tool.Add("BFP_FineHammer");
			buildPiece2.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece2.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece2.Prefab);
			BuildPiece buildPiece3 = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45_Corner2");
			buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece3.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece3.Tool.Add("BFP_FineHammer");
			buildPiece3.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece3.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece3.Prefab);
			BuildPiece buildPiece4 = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45Arch");
			buildPiece4.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece4.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece4.Tool.Add("BFP_FineHammer");
			buildPiece4.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece4.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece4.Prefab);
			BuildPiece buildPiece5 = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45Arch_Corner");
			buildPiece5.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece5.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece5.Tool.Add("BFP_FineHammer");
			buildPiece5.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece5.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece5.Prefab);
			BuildPiece buildPiece6 = new BuildPiece(_fineWoodBundle, "BCP_Clay2_Roof45Arch_Corner2");
			buildPiece6.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece6.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece6.Tool.Add("BFP_FineHammer");
			buildPiece6.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece6.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece6.Prefab);
			BuildPiece buildPiece7 = new BuildPiece(_fineWoodBundle, "BCP_ClayArch_Big");
			buildPiece7.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece7.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece7.Tool.Add("BFP_FineHammer");
			buildPiece7.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece7.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece7.Prefab);
			BuildPiece buildPiece8 = new BuildPiece(_fineWoodBundle, "BCP_ClayArch_Bottom");
			buildPiece8.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece8.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece8.Tool.Add("BFP_FineHammer");
			buildPiece8.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece8.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece8.Prefab);
			BuildPiece buildPiece9 = new BuildPiece(_fineWoodBundle, "BCP_ClayArch_Top");
			buildPiece9.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece9.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece9.Tool.Add("BFP_FineHammer");
			buildPiece9.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece9.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece9.Prefab);
			BuildPiece buildPiece10 = new BuildPiece(_fineWoodBundle, "BCP_ClayBeam1m");
			buildPiece10.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece10.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece10.Tool.Add("BFP_FineHammer");
			buildPiece10.RequiredItems.Add("BFP_Clay", 1, recover: true);
			buildPiece10.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece10.Prefab);
			BuildPiece buildPiece11 = new BuildPiece(_fineWoodBundle, "BCP_ClayBeam2m");
			buildPiece11.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece11.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece11.Tool.Add("BFP_FineHammer");
			buildPiece11.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece11.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece11.Prefab);
			BuildPiece buildPiece12 = new BuildPiece(_fineWoodBundle, "BCP_ClayDeco_Floor");
			buildPiece12.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece12.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece12.Tool.Add("BFP_FineHammer");
			buildPiece12.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece12.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece12.Prefab);
			BuildPiece buildPiece13 = new BuildPiece(_fineWoodBundle, "BCP_ClayDecoWall_2x2");
			buildPiece13.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece13.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece13.Tool.Add("BFP_FineHammer");
			buildPiece13.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece13.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece13.Prefab);
			BuildPiece buildPiece14 = new BuildPiece(_fineWoodBundle, "BCP_ClayDecoWall_Divider");
			buildPiece14.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece14.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece14.Tool.Add("BFP_FineHammer");
			buildPiece14.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece14.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece14.Prefab);
			BuildPiece buildPiece15 = new BuildPiece(_fineWoodBundle, "BCP_ClayDecoWall_Tree");
			buildPiece15.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece15.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece15.Tool.Add("BFP_FineHammer");
			buildPiece15.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece15.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece15.Prefab);
			BuildPiece buildPiece16 = new BuildPiece(_fineWoodBundle, "BCP_ClayFloor_1x1");
			buildPiece16.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece16.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece16.Tool.Add("BFP_FineHammer");
			buildPiece16.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece16.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece16.Prefab);
			BuildPiece buildPiece17 = new BuildPiece(_fineWoodBundle, "BCP_ClayFloor_2x2");
			buildPiece17.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece17.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece17.Tool.Add("BFP_FineHammer");
			buildPiece17.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece17.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece17.Prefab);
			BuildPiece buildPiece18 = new BuildPiece(_fineWoodBundle, "BCP_ClayHalfWall_1x2");
			buildPiece18.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece18.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece18.Tool.Add("BFP_FineHammer");
			buildPiece18.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece18.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece18.Prefab);
			BuildPiece buildPiece19 = new BuildPiece(_fineWoodBundle, "BCP_ClayLadder");
			buildPiece19.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece19.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece19.Tool.Add("BFP_FineHammer");
			buildPiece19.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece19.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece19.Prefab);
			BuildPiece buildPiece20 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarArch");
			buildPiece20.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece20.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece20.Tool.Add("BFP_FineHammer");
			buildPiece20.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece20.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece20.Prefab);
			BuildPiece buildPiece21 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarArch_Small");
			buildPiece21.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece21.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece21.Tool.Add("BFP_FineHammer");
			buildPiece21.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece21.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece21.Prefab);
			BuildPiece buildPiece22 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBase_Medium");
			buildPiece22.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece22.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece22.Tool.Add("BFP_FineHammer");
			buildPiece22.RequiredItems.Add("BFP_Clay", 5, recover: true);
			buildPiece22.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece22.Prefab);
			BuildPiece buildPiece23 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBase_Small");
			buildPiece23.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece23.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece23.Tool.Add("BFP_FineHammer");
			buildPiece23.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece23.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece23.Prefab);
			BuildPiece buildPiece24 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBase_Tapered");
			buildPiece24.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece24.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece24.Tool.Add("BFP_FineHammer");
			buildPiece24.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece24.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece24.Prefab);
			BuildPiece buildPiece25 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBase_TaperedInverted");
			buildPiece25.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece25.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece25.Tool.Add("BFP_FineHammer");
			buildPiece25.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece25.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece25.Prefab);
			BuildPiece buildPiece26 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBeam_Medium");
			buildPiece26.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece26.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece26.Tool.Add("BFP_FineHammer");
			buildPiece26.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece26.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece26.Prefab);
			BuildPiece buildPiece27 = new BuildPiece(_fineWoodBundle, "BCP_ClayPillarBeam_Small");
			buildPiece27.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece27.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece27.Tool.Add("BFP_FineHammer");
			buildPiece27.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece27.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece27.Prefab);
			BuildPiece buildPiece28 = new BuildPiece(_fineWoodBundle, "BCP_ClayPole1m");
			buildPiece28.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece28.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece28.Tool.Add("BFP_FineHammer");
			buildPiece28.RequiredItems.Add("BFP_Clay", 1, recover: true);
			buildPiece28.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece28.Prefab);
			BuildPiece buildPiece29 = new BuildPiece(_fineWoodBundle, "BCP_ClayPole_2m");
			buildPiece29.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece29.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece29.Tool.Add("BFP_FineHammer");
			buildPiece29.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece29.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece29.Prefab);
			BuildPiece buildPiece30 = new BuildPiece(_fineWoodBundle, "BCP_ClayQuarterWall_1x1");
			buildPiece30.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece30.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece30.Tool.Add("BFP_FineHammer");
			buildPiece30.RequiredItems.Add("BFP_Clay", 1, recover: true);
			buildPiece30.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece30.Prefab);
			BuildPiece buildPiece31 = new BuildPiece(_fineWoodBundle, "BCP_ClayRoundDoor");
			buildPiece31.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece31.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece31.Tool.Add("BFP_FineHammer");
			buildPiece31.RequiredItems.Add("BFP_Clay", 12, recover: true);
			buildPiece31.RequiredItems.Add("Copper", 8, recover: true);
			buildPiece31.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece31.Prefab);
			BuildPiece buildPiece32 = new BuildPiece(_fineWoodBundle, "BCP_ClayStair2");
			buildPiece32.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece32.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece32.Tool.Add("BFP_FineHammer");
			buildPiece32.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece32.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece32.Prefab);
			BuildPiece buildPiece33 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall1x2");
			buildPiece33.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece33.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece33.Tool.Add("BFP_FineHammer");
			buildPiece33.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece33.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece33.Prefab);
			BuildPiece buildPiece34 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall2x2");
			buildPiece34.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece34.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece34.Tool.Add("BFP_FineHammer");
			buildPiece34.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece34.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece34.Prefab);
			BuildPiece buildPiece35 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall4x2");
			buildPiece35.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece35.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece35.Tool.Add("BFP_FineHammer");
			buildPiece35.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece35.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece35.Prefab);
			BuildPiece buildPiece36 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_2x2");
			buildPiece36.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece36.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece36.Tool.Add("BFP_FineHammer");
			buildPiece36.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece36.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece36.Prefab);
			BuildPiece buildPiece37 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Arch");
			buildPiece37.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece37.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece37.Tool.Add("BFP_FineHammer");
			buildPiece37.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece37.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece37.Prefab);
			BuildPiece buildPiece38 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Arch2");
			buildPiece38.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece38.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece38.Tool.Add("BFP_FineHammer");
			buildPiece38.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece38.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece38.Prefab);
			BuildPiece buildPiece39 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_ArchInverted");
			buildPiece39.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece39.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece39.Tool.Add("BFP_FineHammer");
			buildPiece39.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece39.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece39.Prefab);
			BuildPiece buildPiece40 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Beam26");
			buildPiece40.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece40.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece40.Tool.Add("BFP_FineHammer");
			buildPiece40.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece40.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece40.Prefab);
			BuildPiece buildPiece41 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Beam26Alt");
			buildPiece41.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece41.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece41.Tool.Add("BFP_FineHammer");
			buildPiece41.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece41.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece41.Prefab);
			BuildPiece buildPiece42 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Beam45");
			buildPiece42.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece42.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece42.Tool.Add("BFP_FineHammer");
			buildPiece42.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece42.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece42.Prefab);
			BuildPiece buildPiece43 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Beam45Alt");
			buildPiece43.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece43.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece43.Tool.Add("BFP_FineHammer");
			buildPiece43.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece43.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece43.Prefab);
			BuildPiece buildPiece44 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Cross26");
			buildPiece44.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece44.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece44.Tool.Add("BFP_FineHammer");
			buildPiece44.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece44.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece44.Prefab);
			BuildPiece buildPiece45 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Cross26Alt");
			buildPiece45.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece45.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece45.Tool.Add("BFP_FineHammer");
			buildPiece45.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece45.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece45.Prefab);
			BuildPiece buildPiece46 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Cross45");
			buildPiece46.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece46.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece46.Tool.Add("BFP_FineHammer");
			buildPiece46.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece46.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece46.Prefab);
			BuildPiece buildPiece47 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Cross45Alt");
			buildPiece47.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece47.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece47.Tool.Add("BFP_FineHammer");
			buildPiece47.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece47.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece47.Prefab);
			BuildPiece buildPiece48 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Roof26");
			buildPiece48.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece48.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece48.Tool.Add("BFP_FineHammer");
			buildPiece48.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece48.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece48.Prefab);
			BuildPiece buildPiece49 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Roof26UpsideDown");
			buildPiece49.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece49.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece49.Tool.Add("BFP_FineHammer");
			buildPiece49.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece49.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece49.Prefab);
			BuildPiece buildPiece50 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Roof45");
			buildPiece50.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece50.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece50.Tool.Add("BFP_FineHammer");
			buildPiece50.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece50.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece50.Prefab);
			BuildPiece buildPiece51 = new BuildPiece(_fineWoodBundle, "BCP_ClayWall_Roof45UpsideDown");
			buildPiece51.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece51.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece51.Tool.Add("BFP_FineHammer");
			buildPiece51.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece51.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece51.Prefab);
			BuildPiece buildPiece52 = new BuildPiece(_fineWoodBundle, "BCP_ClayWindow2x2");
			buildPiece52.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece52.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece52.Tool.Add("BFP_FineHammer");
			buildPiece52.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece52.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece52.Prefab);
			BuildPiece buildPiece53 = new BuildPiece(_fineWoodBundle, "BCP_ClayWindow4x2");
			buildPiece53.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece53.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece53.Tool.Add("BFP_FineHammer");
			buildPiece53.RequiredItems.Add("BFP_Clay", 8, recover: true);
			buildPiece53.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece53.Prefab);
			BuildPiece buildPiece54 = new BuildPiece(_fineWoodBundle, "BFP_ClayArch");
			buildPiece54.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece54.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece54.Tool.Add("BFP_FineHammer");
			buildPiece54.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece54.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece54.Prefab);
			BuildPiece buildPiece55 = new BuildPiece(_fineWoodBundle, "BFP_ClayArch2");
			buildPiece55.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece55.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece55.Tool.Add("BFP_FineHammer");
			buildPiece55.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece55.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece55.Prefab);
			BuildPiece buildPiece56 = new BuildPiece(_fineWoodBundle, "BFP_ClayBase1");
			buildPiece56.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece56.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece56.Tool.Add("BFP_FineHammer");
			buildPiece56.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece56.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece56.Prefab);
			BuildPiece buildPiece57 = new BuildPiece(_fineWoodBundle, "BFP_ClayBase2");
			buildPiece57.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece57.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece57.Tool.Add("BFP_FineHammer");
			buildPiece57.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece57.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece57.Prefab);
			BuildPiece buildPiece58 = new BuildPiece(_fineWoodBundle, "BFP_ClayBaseCorner");
			buildPiece58.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece58.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece58.Tool.Add("BFP_FineHammer");
			buildPiece58.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece58.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece58.Prefab);
			BuildPiece buildPiece59 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock1x1");
			buildPiece59.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece59.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece59.Tool.Add("BFP_FineHammer");
			buildPiece59.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece59.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece59.Prefab);
			BuildPiece buildPiece60 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock2x1x1");
			buildPiece60.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece60.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece60.Tool.Add("BFP_FineHammer");
			buildPiece60.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece60.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece60.Prefab);
			BuildPiece buildPiece61 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock2x2_Enforced");
			buildPiece61.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece61.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece61.Tool.Add("BFP_FineHammer");
			buildPiece61.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece61.RequiredItems.Add("Copper", 2, recover: true);
			buildPiece61.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece61.Prefab);
			BuildPiece buildPiece62 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock2x2x1");
			buildPiece62.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece62.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece62.Tool.Add("BFP_FineHammer");
			buildPiece62.RequiredItems.Add("BFP_Clay", 6, recover: true);
			buildPiece62.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece62.Prefab);
			BuildPiece buildPiece63 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock2x2x2");
			buildPiece63.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece63.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece63.Tool.Add("BFP_FineHammer");
			buildPiece63.RequiredItems.Add("BFP_Clay", 4, recover: true);
			buildPiece63.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece63.Prefab);
			BuildPiece buildPiece64 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock_OutCorner");
			buildPiece64.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece64.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece64.Tool.Add("BFP_FineHammer");
			buildPiece64.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece64.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece64.Prefab);
			BuildPiece buildPiece65 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlock_SlopeInverted1x2");
			buildPiece65.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece65.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece65.Tool.Add("BFP_FineHammer");
			buildPiece65.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece65.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece65.Prefab);
			BuildPiece buildPiece66 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlockOut1");
			buildPiece66.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece66.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece66.Tool.Add("BFP_FineHammer");
			buildPiece66.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece66.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece66.Prefab);
			BuildPiece buildPiece67 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlockOut2");
			buildPiece67.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece67.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece67.Tool.Add("BFP_FineHammer");
			buildPiece67.RequiredItems.Add("BFP_Clay", 3, recover: true);
			buildPiece67.SpecialProperties = new SpecialProperties
			{
				AdminOnly = false,
				NoConfig = false
			};
			ShaderReplacer.Replace(buildPiece67.Prefab);
			BuildPiece buildPiece68 = new BuildPiece(_fineWoodBundle, "BFP_ClayBlockSlope1x2");
			buildPiece68.Crafting.Set(PieceManager.CraftingTable.Workbench);
			buildPiece68.Category.Set(BuildPieceCategory.BuildingStonecutter);
			buildPiece68.Tool.Add("BFP_FineHammer");
			buildPiece68.RequiredItems.Add("BFP_Clay", 2, recover: true);
			buildPiece68.SpecialPro