Decompiled source of sunnfjordheimPieces v1.0.0

sunnfjordheimPieces.dll

Decompiled a day 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 System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using PieceManager;
using ServerSync;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("sunnfjordheimPieces")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("sunnfjordheimPieces")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyCompany("Azathoth")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded]
	internal sealed class <89c61d47-d0d7-4884-900b-332b43ff8f87>EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	[<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded]
	internal sealed class <22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public <22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace sunnfjordheimPieces
{
	[HarmonyPatch(typeof(WearNTear), "HaveSupport")]
	[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
	[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
	public static class PiecesPatchSupport
	{
		private static readonly string[] SunnforheimpiecesPrefabs = new string[93]
		{
			"WCP_DARKPORTAL", "WCP_TrollHut1", "WCP_TrollHut2", "WCP_TrollHut3", "WCP_TrollHut4", "WCP_TrollHut5", "WCP_uldum_dam", "WCP_watchtower", "WCP_ZIGURAT", "WCP_TrollGate",
			"WCP_TrollGate1", "WCP_TrollGate2", "WCP_TrollGate3", "WCP_TrollWall", "WCP_TrollWall1", "WCP_TrollWall2", "WCP_TrollWall3", "WCP_temple_of_the_damned", "WCP_shipyard", "WCP_Necropolis",
			"WCP_hunter_hall", "WCP_scourge_crypt", "WCP_dwarf_blacksmith", "WCP_dwarf_altar_of_kings", "WCP_altar_of_darkness", "WCP_naga_altar_of_the_depths", "WCP_dwarf_lumber_mill", "WCP_scourge_slaughterhouse", "WCP_altar_of_elders", "WCP_mercenary_camp",
			"WCP_dwarf_workshop", "WCP_dwarf_aviary", "WCP_chimera_roost", "WCP_dwarf_cannon_tower", "WCP_kaldorei_shipyard", "WCP_dranei_seers_den", "WCP_scourge_graveyard", "WCP_dwarf_tower", "WCP_goblin_shipyard", "WCP_barrow_den",
			"WCP_kaldorei_tower_1", "WCP_kaldorei_tower_2", "WCP_orc_altar", "WCP_fountain_of_power", "WCP_orc_forge", "WCP_orc_barracks", "WCP_orc_village1", "WCP_orc_village", "WCP_goldmine", "WCP_moonwell",
			"WCP_scourge_catapult", "WCP_loch_modan", "WCP_ironforge", "WCP_ironforgegate", "WCP_elf_fountain", "SUNP_Blacksmithg", "SUNP_Vikinghouse", "SUNP_wizard-table", "SUNP_Darkangel", "WCP_dwarf_wall",
			"WCP_dranei_haven", "WCP_dranei_barracks", "WCP_high_elf_house3", "WCP_elfgate2", "WCP_elven_barracks", "WCP_kaldorei_house", "WCP_elfgate1", "WCP_Market", "WCP_high_elf_house1", "WCP_elf_spire",
			"WCP_highelftower", "WCP_castle_human", "WCP_human_torre", "WCP_humanhero_statue", "WCP_barrack_human", "WCP_tower_humanmage", "WCP_orc_clanhousesmall", "WCP_orc_claninn", "WCP_orc_orcclans_barracks", "WCP_orc_orcclans_farm",
			"WCP_orc_orcclans_forge", "WCP_orc_orcclans_guardtower", "WCP_orc_orcclans_houselarge", "WCP_orc_orcclans_huts", "WCP_orc_orcclans_ritualpit", "WCP_orc_orcclans_spirithouse", "WCP_orc_orcclans_townhall", "WCP_orc_orcclans_wolfpen", "WCP_Murlocaltar", "WCP_Murlochut",
			"WCP_Murlochutcluster1", "WCP_Murlochutcluster2", "WCP_Murlocshiptower"
		};

		private const float VerticalCheckDistance = 200f;

		private const float LateralCheckRadius = 4f;

		private static void Postfix(WearNTear __instance, ref bool __result)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)(object)__instance == (Object)null) | __result)
			{
				return;
			}
			Vector3 position = ((Component)__instance).transform.position;
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(position + Vector3.up * 0.5f, Vector3.down, ref val, 200f))
			{
				string prefabName = Utils.GetPrefabName(((Component)((Component)((RaycastHit)(ref val)).collider).transform.root).gameObject);
				if (SunnforheimpiecesPrefabs.Contains(prefabName))
				{
					__result = true;
					return;
				}
			}
			Collider[] array = Physics.OverlapSphere(position, 4f);
			if (array == null || array.Length == 0)
			{
				return;
			}
			Collider[] array2 = array;
			foreach (Collider val2 in array2)
			{
				string prefabName2 = Utils.GetPrefabName(((Component)((Component)val2).transform.root).gameObject);
				if (SunnforheimpiecesPrefabs.Contains(prefabName2))
				{
					__result = true;
					break;
				}
			}
		}
	}
	[BepInPlugin("Azathoth.sunnfjordheimPieces", "sunnfjordheimPieces", "1.0.0")]
	[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
	[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
	public class sunnfjordheimPiecesPlugin : BaseUnityPlugin
	{
		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(0)]
		public enum Toggle
		{
			On = 1,
			Off = 0
		}

		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(0)]
		private class ConfigurationManagerAttributes
		{
			[UsedImplicitly]
			public int? Order = null;

			[UsedImplicitly]
			public bool? Browsable = null;

			[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(2)]
			[UsedImplicitly]
			public string Category = null;

			[UsedImplicitly]
			[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(new byte[] { 2, 1 })]
			public Action<ConfigEntryBase> CustomDrawer = null;
		}

		[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
		private class AcceptableShortcuts : AcceptableValueBase
		{
			public AcceptableShortcuts()
				: base(typeof(KeyboardShortcut))
			{
			}

			public override object Clamp(object value)
			{
				return value;
			}

			public override bool IsValid(object value)
			{
				return true;
			}

			public override string ToDescriptionString()
			{
				return "# Acceptable values: " + string.Join(", ", UnityInput.Current.SupportedKeyCodes);
			}
		}

		internal const string ModName = "sunnfjordheimPieces";

		internal const string ModVersion = "1.0.0";

		internal const string Author = "Azathoth";

		private const string ModGUID = "Azathoth.sunnfjordheimPieces";

		private static string ConfigFileName = "Azathoth.sunnfjordheimPieces.cfg";

		private static string ConfigFileFullPath;

		internal static string ConnectionError;

		private readonly Harmony _harmony = new Harmony("Azathoth.sunnfjordheimPieces");

		public static readonly ManualLogSource sunnfjordheimPiecesLogger;

		private static readonly ConfigSync ConfigSync;

		private static ConfigEntry<Toggle> _serverConfigLocked;

		public void Awake()
		{
			Localizer.Load();
			_serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only.");
			ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
			BuildPiece.ConfigurationEnabled = true;
			BuildPiece buildPiece = new BuildPiece("warcrafpieces", "WCP_DARKPORTAL");
			buildPiece.Name.English("Dark Portal");
			buildPiece.Description.English("A mysterious ancient portal from distant lands.");
			buildPiece.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece.Category.Set("Warcraft Pieces");
			buildPiece.Crafting.Set(CraftingTable.Workbench);
			buildPiece.Tool.Add("Hammer");
			buildPiece.SpecialProperties.NoConfig = false;
			buildPiece.SpecialProperties.AdminOnly = true;
			buildPiece.Snapshot();
			BuildPiece buildPiece2 = new BuildPiece("warcrafpieces", "WCP_TrollHut1");
			buildPiece2.Name.English("Troll Hut I");
			buildPiece2.Description.English("A savage troll hut built of crude wood and bone.");
			buildPiece2.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece2.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece2.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece2.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece2.Category.Set("Warcraft Pieces");
			buildPiece2.Crafting.Set(CraftingTable.Workbench);
			buildPiece2.Tool.Add("Hammer");
			buildPiece2.SpecialProperties.NoConfig = false;
			buildPiece2.SpecialProperties.AdminOnly = true;
			buildPiece2.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece3 = new BuildPiece("warcrafpieces", "WCP_TrollHut2");
			buildPiece3.Name.English("Troll Hut II");
			buildPiece3.Description.English("A reinforced hut crafted by forest trolls.");
			buildPiece3.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece3.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece3.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece3.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece3.Category.Set("Warcraft Pieces");
			buildPiece3.Crafting.Set(CraftingTable.Workbench);
			buildPiece3.Tool.Add("Hammer");
			buildPiece3.SpecialProperties.NoConfig = false;
			buildPiece3.SpecialProperties.AdminOnly = true;
			buildPiece3.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece4 = new BuildPiece("warcrafpieces", "WCP_TrollHut3");
			buildPiece4.Name.English("Troll Hut III");
			buildPiece4.Description.English("A fortified troll shelter built for war.");
			buildPiece4.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece4.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece4.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece4.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece4.Category.Set("Warcraft Pieces");
			buildPiece4.Crafting.Set(CraftingTable.Workbench);
			buildPiece4.Tool.Add("Hammer");
			buildPiece4.SpecialProperties.NoConfig = false;
			buildPiece4.SpecialProperties.AdminOnly = true;
			buildPiece4.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece5 = new BuildPiece("warcrafpieces", "WCP_TrollHut4");
			buildPiece5.Name.English("Troll Hut IV");
			buildPiece5.Description.English("A warlike troll hut decorated with tribal sigils.");
			buildPiece5.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece5.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece5.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece5.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece5.Category.Set("Warcraft Pieces");
			buildPiece5.Crafting.Set(CraftingTable.Workbench);
			buildPiece5.Tool.Add("Hammer");
			buildPiece5.SpecialProperties.NoConfig = false;
			buildPiece5.SpecialProperties.AdminOnly = true;
			buildPiece5.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece6 = new BuildPiece("warcrafpieces", "WCP_TrollHut5");
			buildPiece6.Name.English("Troll Hut V");
			buildPiece6.Description.English("A formidable troll structure built for chieftains.");
			buildPiece6.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece6.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece6.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece6.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece6.Category.Set("Warcraft Pieces");
			buildPiece6.Crafting.Set(CraftingTable.Workbench);
			buildPiece6.Tool.Add("Hammer");
			buildPiece6.SpecialProperties.NoConfig = false;
			buildPiece6.SpecialProperties.AdminOnly = true;
			buildPiece6.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece7 = new BuildPiece("warcrafpieces", "WCP_uldum_dam");
			buildPiece7.Name.English("Uldum Dam");
			buildPiece7.Description.English("A colossal ancient dam engineered by forgotten civilizations.");
			buildPiece7.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece7.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece7.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece7.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece7.Category.Set("Warcraft Pieces");
			buildPiece7.Crafting.Set(CraftingTable.Workbench);
			buildPiece7.Tool.Add("Hammer");
			buildPiece7.SpecialProperties.NoConfig = false;
			buildPiece7.SpecialProperties.AdminOnly = true;
			buildPiece7.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece8 = new BuildPiece("warcrafpieces", "WCP_watchtower");
			buildPiece8.Name.English("Watch Tower");
			buildPiece8.Description.English("A watch tower used to scout foe movements.");
			buildPiece8.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece8.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece8.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece8.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece8.Category.Set("Warcraft Pieces");
			buildPiece8.Crafting.Set(CraftingTable.Workbench);
			buildPiece8.Tool.Add("Hammer");
			buildPiece8.SpecialProperties.NoConfig = false;
			buildPiece8.SpecialProperties.AdminOnly = true;
			buildPiece8.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece9 = new BuildPiece("warcrafpieces", "WCP_high_elf_house2");
			buildPiece9.Name.English("High Elf House II");
			buildPiece9.Description.English("A refined high elven residence adorned with arcane motifs.");
			buildPiece9.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece9.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece9.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece9.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece9.Category.Set("Warcraft Pieces");
			buildPiece9.Crafting.Set(CraftingTable.Workbench);
			buildPiece9.Tool.Add("Hammer");
			buildPiece9.SpecialProperties.NoConfig = false;
			buildPiece9.SpecialProperties.AdminOnly = true;
			buildPiece9.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece10 = new BuildPiece("warcrafpieces", "WCP_ZIGURAT");
			buildPiece10.Name.English("Ziggurat");
			buildPiece10.Description.English("An imposing necromantic fortress of war and ice.");
			buildPiece10.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece10.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece10.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece10.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece10.Category.Set("Warcraft Pieces");
			buildPiece10.Crafting.Set(CraftingTable.Workbench);
			buildPiece10.Tool.Add("Hammer");
			buildPiece10.SpecialProperties.NoConfig = false;
			buildPiece10.SpecialProperties.AdminOnly = true;
			buildPiece10.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece10.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece11 = new BuildPiece("warcrafpieces", "WCP_TrollGate");
			buildPiece11.Name.English("Troll Gate");
			buildPiece11.Description.English("A primitive troll gate reinforced with crude wood.");
			buildPiece11.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece11.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece11.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece11.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece11.Category.Set("Warcraft Pieces");
			buildPiece11.Crafting.Set(CraftingTable.Workbench);
			buildPiece11.Tool.Add("Hammer");
			buildPiece11.SpecialProperties.NoConfig = false;
			buildPiece11.SpecialProperties.AdminOnly = true;
			buildPiece11.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece11.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece12 = new BuildPiece("warcrafpieces", "WCP_TrollGate1");
			buildPiece12.Name.English("Troll Gate I");
			buildPiece12.Description.English("A wooden troll gate decorated with tribal markings.");
			buildPiece12.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece12.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece12.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece12.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece12.Category.Set("Warcraft Pieces");
			buildPiece12.Crafting.Set(CraftingTable.Workbench);
			buildPiece12.Tool.Add("Hammer");
			buildPiece12.SpecialProperties.NoConfig = false;
			buildPiece12.SpecialProperties.AdminOnly = true;
			buildPiece12.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece12.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece13 = new BuildPiece("warcrafpieces", "WCP_TrollGate2");
			buildPiece13.Name.English("Troll Gate II");
			buildPiece13.Description.English("A reinforced troll gate built for war.");
			buildPiece13.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece13.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece13.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece13.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece13.Category.Set("Warcraft Pieces");
			buildPiece13.Crafting.Set(CraftingTable.Workbench);
			buildPiece13.Tool.Add("Hammer");
			buildPiece13.SpecialProperties.NoConfig = false;
			buildPiece13.SpecialProperties.AdminOnly = true;
			buildPiece13.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece13.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece14 = new BuildPiece("warcrafpieces", "WCP_TrollGate3");
			buildPiece14.Name.English("Troll Gate III");
			buildPiece14.Description.English("A large tribal troll gate carved with ancient sigils.");
			buildPiece14.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece14.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece14.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece14.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece14.Category.Set("Warcraft Pieces");
			buildPiece14.Crafting.Set(CraftingTable.Workbench);
			buildPiece14.Tool.Add("Hammer");
			buildPiece14.SpecialProperties.NoConfig = false;
			buildPiece14.SpecialProperties.AdminOnly = true;
			buildPiece14.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece14.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece15 = new BuildPiece("warcrafpieces", "WCP_TrollWall");
			buildPiece15.Name.English("Troll Wall");
			buildPiece15.Description.English("A crude troll wall built from thick wooden logs.");
			buildPiece15.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece15.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece15.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece15.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece15.Category.Set("Warcraft Pieces");
			buildPiece15.Crafting.Set(CraftingTable.Workbench);
			buildPiece15.Tool.Add("Hammer");
			buildPiece15.SpecialProperties.NoConfig = false;
			buildPiece15.SpecialProperties.AdminOnly = true;
			buildPiece15.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece15.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece16 = new BuildPiece("warcrafpieces", "WCP_TrollWall1");
			buildPiece16.Name.English("Troll Wall I");
			buildPiece16.Description.English("A reinforced troll wall assembled from forest timber.");
			buildPiece16.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece16.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece16.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece16.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece16.Category.Set("Warcraft Pieces");
			buildPiece16.Crafting.Set(CraftingTable.Workbench);
			buildPiece16.Tool.Add("Hammer");
			buildPiece16.SpecialProperties.NoConfig = false;
			buildPiece16.SpecialProperties.AdminOnly = true;
			buildPiece16.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece16.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece17 = new BuildPiece("warcrafpieces", "WCP_TrollWall2");
			buildPiece17.Name.English("Troll Wall II");
			buildPiece17.Description.English("A thick troll barricade prepared for tribal warfare.");
			buildPiece17.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece17.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece17.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece17.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece17.Category.Set("Warcraft Pieces");
			buildPiece17.Crafting.Set(CraftingTable.Workbench);
			buildPiece17.Tool.Add("Hammer");
			buildPiece17.SpecialProperties.NoConfig = false;
			buildPiece17.SpecialProperties.AdminOnly = true;
			buildPiece17.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece17.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece18 = new BuildPiece("warcrafpieces", "WCP_TrollWall3");
			buildPiece18.Name.English("Troll Wall III");
			buildPiece18.Description.English("A massive troll wall fit to defend an entire tribe.");
			buildPiece18.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece18.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece18.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece18.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece18.Category.Set("Warcraft Pieces");
			buildPiece18.Crafting.Set(CraftingTable.Workbench);
			buildPiece18.Tool.Add("Hammer");
			buildPiece18.SpecialProperties.NoConfig = false;
			buildPiece18.SpecialProperties.AdminOnly = true;
			buildPiece18.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece18.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece19 = new BuildPiece("warcrafpieces", "WCP_temple_of_the_damned");
			buildPiece19.Name.English("Temple of the Damned");
			buildPiece19.Description.English("A cursed temple infused with necromantic energy.");
			buildPiece19.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece19.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece19.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece19.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece19.Category.Set("Warcraft Pieces");
			buildPiece19.Crafting.Set(CraftingTable.Workbench);
			buildPiece19.Tool.Add("Hammer");
			buildPiece19.SpecialProperties.NoConfig = false;
			buildPiece19.SpecialProperties.AdminOnly = true;
			buildPiece19.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece19.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece20 = new BuildPiece("warcrafpieces", "WCP_shipyard");
			buildPiece20.Name.English("Shipyard");
			buildPiece20.Description.English("A grand shipyard used to construct powerful warships.");
			buildPiece20.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece20.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece20.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece20.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece20.Category.Set("Warcraft Pieces");
			buildPiece20.Crafting.Set(CraftingTable.Workbench);
			buildPiece20.Tool.Add("Hammer");
			buildPiece20.SpecialProperties.NoConfig = false;
			buildPiece20.SpecialProperties.AdminOnly = true;
			buildPiece20.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece20.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece21 = new BuildPiece("warcrafpieces", "WCP_Necropolis");
			buildPiece21.Name.English("Necropolis");
			buildPiece21.Description.English("A floating fortress of death and plague.");
			buildPiece21.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece21.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece21.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece21.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece21.Category.Set("Warcraft Pieces");
			buildPiece21.Crafting.Set(CraftingTable.Workbench);
			buildPiece21.Tool.Add("Hammer");
			buildPiece21.SpecialProperties.NoConfig = false;
			buildPiece21.SpecialProperties.AdminOnly = true;
			buildPiece21.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece21.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece22 = new BuildPiece("warcrafpieces", "WCP_hunter_hall");
			buildPiece22.Name.English("Hunter Hall");
			buildPiece22.Description.English("A guild hall for expert trackers and hunters.");
			buildPiece22.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece22.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece22.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece22.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece22.Category.Set("Warcraft Pieces");
			buildPiece22.Crafting.Set(CraftingTable.Workbench);
			buildPiece22.Tool.Add("Hammer");
			buildPiece22.SpecialProperties.NoConfig = false;
			buildPiece22.SpecialProperties.AdminOnly = true;
			buildPiece22.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece22.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece23 = new BuildPiece("warcrafpieces", "WCP_scourge_crypt");
			buildPiece23.Name.English("Scourge Crypt");
			buildPiece23.Description.English("A crypt entombing the soldiers of the undead scourge.");
			buildPiece23.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece23.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece23.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece23.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece23.Category.Set("Warcraft Pieces");
			buildPiece23.Crafting.Set(CraftingTable.Workbench);
			buildPiece23.Tool.Add("Hammer");
			buildPiece23.SpecialProperties.NoConfig = false;
			buildPiece23.SpecialProperties.AdminOnly = true;
			buildPiece23.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece23.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece24 = new BuildPiece("warcrafpieces", "WCP_dwarf_blacksmith");
			buildPiece24.Name.English("Dwarven Blacksmith");
			buildPiece24.Description.English("A dwarven forge dedicated to crafting legendary arms.");
			buildPiece24.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece24.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece24.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece24.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece24.Category.Set("Warcraft Pieces");
			buildPiece24.Crafting.Set(CraftingTable.Workbench);
			buildPiece24.Tool.Add("Hammer");
			buildPiece24.SpecialProperties.NoConfig = false;
			buildPiece24.SpecialProperties.AdminOnly = true;
			buildPiece24.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece24.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece25 = new BuildPiece("warcrafpieces", "WCP_dwarf_altar_of_kings");
			buildPiece25.Name.English("Altar of Kings");
			buildPiece25.Description.English("A sacred dwarven altar built to honor past monarchs.");
			buildPiece25.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece25.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece25.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece25.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece25.Category.Set("Warcraft Pieces");
			buildPiece25.Crafting.Set(CraftingTable.Workbench);
			buildPiece25.Tool.Add("Hammer");
			buildPiece25.SpecialProperties.NoConfig = false;
			buildPiece25.SpecialProperties.AdminOnly = true;
			buildPiece25.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece25.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece26 = new BuildPiece("warcrafpieces", "WCP_altar_of_darkness");
			buildPiece26.Name.English("Altar of Darkness");
			buildPiece26.Description.English("An altar devoted to shadow magic and infernal rites.");
			buildPiece26.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece26.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece26.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece26.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece26.Category.Set("Warcraft Pieces");
			buildPiece26.Crafting.Set(CraftingTable.Workbench);
			buildPiece26.Tool.Add("Hammer");
			buildPiece26.SpecialProperties.NoConfig = false;
			buildPiece26.SpecialProperties.AdminOnly = true;
			buildPiece26.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece26.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece27 = new BuildPiece("warcrafpieces", "WCP_naga_altar_of_the_depths");
			buildPiece27.Name.English("Naga Altar of the Depths");
			buildPiece27.Description.English("A deep sea altar devoted to ancient Naga magic.");
			buildPiece27.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece27.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece27.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece27.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece27.Category.Set("Warcraft Pieces");
			buildPiece27.Crafting.Set(CraftingTable.Workbench);
			buildPiece27.Tool.Add("Hammer");
			buildPiece27.SpecialProperties.NoConfig = false;
			buildPiece27.SpecialProperties.AdminOnly = true;
			buildPiece27.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece27.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece28 = new BuildPiece("warcrafpieces", "WCP_dwarf_lumber_mill");
			buildPiece28.Name.English("Dwarf Lumber Mill");
			buildPiece28.Description.English("A stout dwarven mill for refining timber.");
			buildPiece28.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece28.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece28.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece28.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece28.Category.Set("Warcraft Pieces");
			buildPiece28.Crafting.Set(CraftingTable.Workbench);
			buildPiece28.Tool.Add("Hammer");
			buildPiece28.SpecialProperties.NoConfig = false;
			buildPiece28.SpecialProperties.AdminOnly = true;
			buildPiece28.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece28.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece29 = new BuildPiece("warcrafpieces", "WCP_scourge_slaughterhouse");
			buildPiece29.Name.English("Scourge Slaughterhouse");
			buildPiece29.Description.English("A grim slaughterhouse used by the undead scourge.");
			buildPiece29.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece29.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece29.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece29.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece29.Category.Set("Warcraft Pieces");
			buildPiece29.Crafting.Set(CraftingTable.Workbench);
			buildPiece29.Tool.Add("Hammer");
			buildPiece29.SpecialProperties.NoConfig = false;
			buildPiece29.SpecialProperties.AdminOnly = true;
			buildPiece29.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece29.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece30 = new BuildPiece("warcrafpieces", "WCP_altar_of_elders");
			buildPiece30.Name.English("Altar of Elders");
			buildPiece30.Description.English("A sacred altar honoring ancient spirits of nature.");
			buildPiece30.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece30.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece30.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece30.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece30.Category.Set("Warcraft Pieces");
			buildPiece30.Crafting.Set(CraftingTable.Workbench);
			buildPiece30.Tool.Add("Hammer");
			buildPiece30.SpecialProperties.NoConfig = false;
			buildPiece30.SpecialProperties.AdminOnly = true;
			buildPiece30.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece30.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece31 = new BuildPiece("warcrafpieces", "WCP_mercenary_camp");
			buildPiece31.Name.English("Mercenary Camp");
			buildPiece31.Description.English("A camp where battle-hardened mercenaries gather.");
			buildPiece31.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece31.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece31.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece31.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece31.Category.Set("Warcraft Pieces");
			buildPiece31.Crafting.Set(CraftingTable.Workbench);
			buildPiece31.Tool.Add("Hammer");
			buildPiece31.SpecialProperties.NoConfig = false;
			buildPiece31.SpecialProperties.AdminOnly = true;
			buildPiece31.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece31.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece32 = new BuildPiece("warcrafpieces", "WCP_dwarf_workshop");
			buildPiece32.Name.English("Dwarf Workshop");
			buildPiece32.Description.English("A hardy dwarven workshop brimming with tools.");
			buildPiece32.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece32.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece32.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece32.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece32.Category.Set("Warcraft Pieces");
			buildPiece32.Crafting.Set(CraftingTable.Workbench);
			buildPiece32.Tool.Add("Hammer");
			buildPiece32.SpecialProperties.NoConfig = false;
			buildPiece32.SpecialProperties.AdminOnly = true;
			buildPiece32.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece32.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece33 = new BuildPiece("warcrafpieces", "WCP_dwarf_aviary");
			buildPiece33.Name.English("Dwarf Aviary");
			buildPiece33.Description.English("A dwarven aviary housing armored gryphons.");
			buildPiece33.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece33.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece33.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece33.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece33.Category.Set("Warcraft Pieces");
			buildPiece33.Crafting.Set(CraftingTable.Workbench);
			buildPiece33.Tool.Add("Hammer");
			buildPiece33.SpecialProperties.NoConfig = false;
			buildPiece33.SpecialProperties.AdminOnly = true;
			buildPiece33.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece33.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece34 = new BuildPiece("warcrafpieces", "WCP_chimera_roost");
			buildPiece34.Name.English("Chimera Roost");
			buildPiece34.Description.English("A mystical roost for powerful chimeras.");
			buildPiece34.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece34.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece34.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece34.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece34.Category.Set("Warcraft Pieces");
			buildPiece34.Crafting.Set(CraftingTable.Workbench);
			buildPiece34.Tool.Add("Hammer");
			buildPiece34.SpecialProperties.NoConfig = false;
			buildPiece34.SpecialProperties.AdminOnly = true;
			buildPiece34.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece34.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece35 = new BuildPiece("warcrafpieces", "WCP_dwarf_cannon_tower");
			buildPiece35.Name.English("Dwarf Cannon Tower");
			buildPiece35.Description.English("A dwarven tower equipped with heavy cannons.");
			buildPiece35.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece35.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece35.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece35.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece35.Category.Set("Warcraft Pieces");
			buildPiece35.Crafting.Set(CraftingTable.Workbench);
			buildPiece35.Tool.Add("Hammer");
			buildPiece35.SpecialProperties.NoConfig = false;
			buildPiece35.SpecialProperties.AdminOnly = true;
			buildPiece35.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece35.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece36 = new BuildPiece("warcrafpieces", "WCP_kaldorei_shipyard");
			buildPiece36.Name.English("Kaldorei Shipyard");
			buildPiece36.Description.English("A moonlit shipyard built by the ancient Kaldorei.");
			buildPiece36.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece36.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece36.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece36.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece36.Category.Set("Warcraft Pieces");
			buildPiece36.Crafting.Set(CraftingTable.Workbench);
			buildPiece36.Tool.Add("Hammer");
			buildPiece36.SpecialProperties.NoConfig = false;
			buildPiece36.SpecialProperties.AdminOnly = true;
			buildPiece36.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece36.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece37 = new BuildPiece("warcrafpieces", "WCP_dranei_seers_den");
			buildPiece37.Name.English("Draenei Seer's Den");
			buildPiece37.Description.English("A sanctum for wise Draenei seers.");
			buildPiece37.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece37.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece37.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece37.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece37.Category.Set("Warcraft Pieces");
			buildPiece37.Crafting.Set(CraftingTable.Workbench);
			buildPiece37.Tool.Add("Hammer");
			buildPiece37.SpecialProperties.NoConfig = false;
			buildPiece37.SpecialProperties.AdminOnly = true;
			buildPiece37.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece37.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece38 = new BuildPiece("warcrafpieces", "WCP_scourge_graveyard");
			buildPiece38.Name.English("Scourge Graveyard");
			buildPiece38.Description.English("A haunting graveyard controlled by the scourge.");
			buildPiece38.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece38.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece38.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece38.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece38.Category.Set("Warcraft Pieces");
			buildPiece38.Crafting.Set(CraftingTable.Workbench);
			buildPiece38.Tool.Add("Hammer");
			buildPiece38.SpecialProperties.NoConfig = false;
			buildPiece38.SpecialProperties.AdminOnly = true;
			buildPiece38.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece38.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece39 = new BuildPiece("warcrafpieces", "WCP_dwarf_tower");
			buildPiece39.Name.English("Dwarf Tower");
			buildPiece39.Description.English("A commanding dwarven tower overseeing vast lands.");
			buildPiece39.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece39.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece39.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece39.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece39.Category.Set("Warcraft Pieces");
			buildPiece39.Crafting.Set(CraftingTable.Workbench);
			buildPiece39.Tool.Add("Hammer");
			buildPiece39.SpecialProperties.NoConfig = false;
			buildPiece39.SpecialProperties.AdminOnly = true;
			buildPiece39.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece39.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece40 = new BuildPiece("warcrafpieces", "WCP_goblin_shipyard");
			buildPiece40.Name.English("Goblin Shipyard");
			buildPiece40.Description.English("An explosive shipyard built with questionable engineering.");
			buildPiece40.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece40.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece40.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece40.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece40.Category.Set("Warcraft Pieces");
			buildPiece40.Crafting.Set(CraftingTable.Workbench);
			buildPiece40.Tool.Add("Hammer");
			buildPiece40.SpecialProperties.NoConfig = false;
			buildPiece40.SpecialProperties.AdminOnly = true;
			buildPiece40.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece40.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece41 = new BuildPiece("warcrafpieces", "WCP_barrow_den");
			buildPiece41.Name.English("Barrow Den");
			buildPiece41.Description.English("An ancient den tied to druidic and kaldorei magic.");
			buildPiece41.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece41.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece41.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece41.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece41.Category.Set("Warcraft Pieces");
			buildPiece41.Crafting.Set(CraftingTable.Workbench);
			buildPiece41.Tool.Add("Hammer");
			buildPiece41.SpecialProperties.NoConfig = false;
			buildPiece41.SpecialProperties.AdminOnly = true;
			buildPiece41.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece41.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece42 = new BuildPiece("warcrafpieces", "WCP_kaldorei_tower_1");
			buildPiece42.Name.English("Kaldorei Tower I");
			buildPiece42.Description.English("A moonlit defensive tower of the Kaldorei.");
			buildPiece42.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece42.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece42.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece42.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece42.Category.Set("Warcraft Pieces");
			buildPiece42.Crafting.Set(CraftingTable.Workbench);
			buildPiece42.Tool.Add("Hammer");
			buildPiece42.SpecialProperties.NoConfig = false;
			buildPiece42.SpecialProperties.AdminOnly = true;
			buildPiece42.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece42.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece43 = new BuildPiece("warcrafpieces", "WCP_kaldorei_tower_2");
			buildPiece43.Name.English("Kaldorei Tower II");
			buildPiece43.Description.English("An advanced defensive tower of the Kaldorei.");
			buildPiece43.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece43.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece43.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece43.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece43.Category.Set("Warcraft Pieces");
			buildPiece43.Crafting.Set(CraftingTable.Workbench);
			buildPiece43.Tool.Add("Hammer");
			buildPiece43.SpecialProperties.NoConfig = false;
			buildPiece43.SpecialProperties.AdminOnly = true;
			buildPiece43.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece43.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece44 = new BuildPiece("warcrafpieces", "WCP_orc_altar");
			buildPiece44.Name.English("Orc Altar");
			buildPiece44.Description.English("A brutal altar honoring the spirits of the Horde.");
			buildPiece44.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece44.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece44.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece44.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece44.Category.Set("Warcraft Pieces");
			buildPiece44.Crafting.Set(CraftingTable.Workbench);
			buildPiece44.Tool.Add("Hammer");
			buildPiece44.SpecialProperties.NoConfig = false;
			buildPiece44.SpecialProperties.AdminOnly = true;
			buildPiece44.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece44.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece45 = new BuildPiece("warcrafpieces", "WCP_fountain_of_power");
			buildPiece45.Name.English("Fountain of Power");
			buildPiece45.Description.English("A mystical fountain radiating raw magical energy.");
			buildPiece45.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece45.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece45.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece45.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece45.Category.Set("Warcraft Pieces");
			buildPiece45.Crafting.Set(CraftingTable.Workbench);
			buildPiece45.Tool.Add("Hammer");
			buildPiece45.SpecialProperties.NoConfig = false;
			buildPiece45.SpecialProperties.AdminOnly = true;
			buildPiece45.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece45.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece46 = new BuildPiece("warcrafpieces", "WCP_orc_forge");
			buildPiece46.Name.English("Orc Forge");
			buildPiece46.Description.English("A crude but powerful forge of the Orc clans.");
			buildPiece46.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece46.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece46.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece46.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece46.Category.Set("Warcraft Pieces");
			buildPiece46.Crafting.Set(CraftingTable.Workbench);
			buildPiece46.Tool.Add("Hammer");
			buildPiece46.SpecialProperties.NoConfig = false;
			buildPiece46.SpecialProperties.AdminOnly = true;
			buildPiece46.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece46.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece47 = new BuildPiece("warcrafpieces", "WCP_orc_barracks");
			buildPiece47.Name.English("Orc Barracks");
			buildPiece47.Description.English("A barracks used to train fierce Orc warriors.");
			buildPiece47.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece47.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece47.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece47.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece47.Category.Set("Warcraft Pieces");
			buildPiece47.Crafting.Set(CraftingTable.Workbench);
			buildPiece47.Tool.Add("Hammer");
			buildPiece47.SpecialProperties.NoConfig = false;
			buildPiece47.SpecialProperties.AdminOnly = true;
			buildPiece47.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece47.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece48 = new BuildPiece("warcrafpieces", "WCP_orc_village1");
			buildPiece48.Name.English("Orc Village I");
			buildPiece48.Description.English("A small settlement of Orc clans.");
			buildPiece48.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece48.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece48.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece48.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece48.Category.Set("Warcraft Pieces");
			buildPiece48.Crafting.Set(CraftingTable.Workbench);
			buildPiece48.Tool.Add("Hammer");
			buildPiece48.SpecialProperties.NoConfig = false;
			buildPiece48.SpecialProperties.AdminOnly = true;
			buildPiece48.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece48.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece49 = new BuildPiece("warcrafpieces", "WCP_orc_village");
			buildPiece49.Name.English("Orc Village");
			buildPiece49.Description.English("A large Orc village bustling with warriors.");
			buildPiece49.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece49.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece49.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece49.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece49.Category.Set("Warcraft Pieces");
			buildPiece49.Crafting.Set(CraftingTable.Workbench);
			buildPiece49.Tool.Add("Hammer");
			buildPiece49.SpecialProperties.NoConfig = false;
			buildPiece49.SpecialProperties.AdminOnly = true;
			buildPiece49.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece49.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece50 = new BuildPiece("warcrafpieces", "WCP_goldmine");
			buildPiece50.Name.English("Gold Mine");
			buildPiece50.Description.English("A rich mine extracting valuable gold.");
			buildPiece50.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece50.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece50.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece50.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece50.Category.Set("Warcraft Pieces");
			buildPiece50.Crafting.Set(CraftingTable.Workbench);
			buildPiece50.Tool.Add("Hammer");
			buildPiece50.SpecialProperties.NoConfig = false;
			buildPiece50.SpecialProperties.AdminOnly = true;
			buildPiece50.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece50.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece51 = new BuildPiece("warcrafpieces", "WCP_moonwell");
			buildPiece51.Name.English("Moonwell");
			buildPiece51.Description.English("A sacred well blessed by Elune.");
			buildPiece51.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece51.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece51.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece51.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece51.Category.Set("Warcraft Pieces");
			buildPiece51.Crafting.Set(CraftingTable.Workbench);
			buildPiece51.Tool.Add("Hammer");
			buildPiece51.SpecialProperties.NoConfig = false;
			buildPiece51.SpecialProperties.AdminOnly = true;
			buildPiece51.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece51.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece52 = new BuildPiece("warcrafpieces", "WCP_scourge_catapult");
			buildPiece52.Name.English("Scourge Catapult");
			buildPiece52.Description.English("A catapult designed to spread plague and death.");
			buildPiece52.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece52.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece52.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece52.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece52.Category.Set("Warcraft Pieces");
			buildPiece52.Crafting.Set(CraftingTable.Workbench);
			buildPiece52.Tool.Add("Hammer");
			buildPiece52.SpecialProperties.NoConfig = false;
			buildPiece52.SpecialProperties.AdminOnly = true;
			buildPiece52.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece52.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece53 = new BuildPiece("warcrafpieces", "WCP_loch_modan");
			buildPiece53.Name.English("Loch Modan");
			buildPiece53.Description.English("A massive dwarven stronghold carved in stone.");
			buildPiece53.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece53.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece53.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece53.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece53.Category.Set("Warcraft Pieces");
			buildPiece53.Crafting.Set(CraftingTable.Workbench);
			buildPiece53.Tool.Add("Hammer");
			buildPiece53.SpecialProperties.NoConfig = false;
			buildPiece53.SpecialProperties.AdminOnly = true;
			buildPiece53.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece53.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece54 = new BuildPiece("warcrafpieces", "WCP_ironforge");
			buildPiece54.Name.English("Ironforge");
			buildPiece54.Description.English("The legendary capital city of the Dwarves.");
			buildPiece54.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece54.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece54.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece54.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece54.Category.Set("Warcraft Pieces");
			buildPiece54.Crafting.Set(CraftingTable.Workbench);
			buildPiece54.Tool.Add("Hammer");
			buildPiece54.SpecialProperties.NoConfig = false;
			buildPiece54.SpecialProperties.AdminOnly = true;
			buildPiece54.Snapshot();
			BuildPiece buildPiece55 = new BuildPiece("warcrafpieces", "WCP_ironforgegate");
			buildPiece55.Name.English("Ironforge Gate");
			buildPiece55.Description.English("The massive gates protecting Ironforge.");
			buildPiece55.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece55.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece55.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece55.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece55.Category.Set("Warcraft Pieces");
			buildPiece55.Crafting.Set(CraftingTable.Workbench);
			buildPiece55.Tool.Add("Hammer");
			buildPiece55.SpecialProperties.NoConfig = false;
			buildPiece55.SpecialProperties.AdminOnly = true;
			buildPiece55.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece55.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece56 = new BuildPiece("warcrafpieces", "WCP_elf_fountain");
			buildPiece56.Name.English("Elven Fountain");
			buildPiece56.Description.English("A graceful fountain infused with elven magic.");
			buildPiece56.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece56.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece56.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece56.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece56.Category.Set("Warcraft Pieces");
			buildPiece56.Crafting.Set(CraftingTable.Workbench);
			buildPiece56.Tool.Add("Hammer");
			buildPiece56.SpecialProperties.NoConfig = false;
			buildPiece56.SpecialProperties.AdminOnly = true;
			buildPiece56.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece56.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece57 = new BuildPiece("sunnpiece", "SUNP_Blacksmithg");
			buildPiece57.Name.English("Blacksmith");
			buildPiece57.Description.English("A sturdy blacksmith building for forging weapons and armor.");
			buildPiece57.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece57.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece57.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece57.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece57.Category.Set("Medieval and fantasy pieces");
			buildPiece57.Crafting.Set(CraftingTable.Workbench);
			buildPiece57.Tool.Add("Hammer");
			buildPiece57.SpecialProperties.NoConfig = false;
			buildPiece57.SpecialProperties.AdminOnly = true;
			buildPiece57.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece57.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece58 = new BuildPiece("sunnpiece", "SUNP_Vikinghouse");
			buildPiece58.Name.English("Viking House");
			buildPiece58.Description.English("A traditional viking-style house built for harsh northern lands.");
			buildPiece58.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece58.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece58.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece58.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece58.Category.Set("Medieval and fantasy pieces");
			buildPiece58.Crafting.Set(CraftingTable.Workbench);
			buildPiece58.Tool.Add("Hammer");
			buildPiece58.SpecialProperties.NoConfig = false;
			buildPiece58.SpecialProperties.AdminOnly = true;
			buildPiece58.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece58.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece59 = new BuildPiece("sunnpiece", "SUNP_wizard-table");
			buildPiece59.Name.English("Wizard Table");
			buildPiece59.Description.English("An arcane table used by wizards to study spells and artifacts.");
			buildPiece59.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece59.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece59.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece59.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece59.Category.Set("Medieval and fantasy pieces");
			buildPiece59.Crafting.Set(CraftingTable.Workbench);
			buildPiece59.Tool.Add("Hammer");
			buildPiece59.SpecialProperties.NoConfig = false;
			buildPiece59.SpecialProperties.AdminOnly = true;
			buildPiece59.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece59.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece60 = new BuildPiece("sunnpiece", "SUNP_Darkangel");
			buildPiece60.Name.English("Dark Angel Statue");
			buildPiece60.Description.English("A dark angel statue radiating ominous and ancient power.");
			buildPiece60.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece60.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece60.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece60.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece60.Category.Set("Medieval and fantasy pieces");
			buildPiece60.Crafting.Set(CraftingTable.Workbench);
			buildPiece60.Tool.Add("Hammer");
			buildPiece60.SpecialProperties.NoConfig = false;
			buildPiece60.SpecialProperties.AdminOnly = true;
			buildPiece60.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece60.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece61 = new BuildPiece("warcrafpieces", "WCP_dwarf_wall");
			buildPiece61.Name.English("Dwarven Wall");
			buildPiece61.Description.English("A sturdy stone wall crafted by dwarven masons.");
			buildPiece61.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece61.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece61.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece61.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece61.Category.Set("Warcraft Pieces");
			buildPiece61.Crafting.Set(CraftingTable.Workbench);
			buildPiece61.Tool.Add("Hammer");
			buildPiece61.SpecialProperties.NoConfig = false;
			buildPiece61.SpecialProperties.AdminOnly = true;
			buildPiece61.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece61.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece62 = new BuildPiece("warcrafpieces", "WCP_dranei_haven");
			buildPiece62.Name.English("Draenei Haven");
			buildPiece62.Description.English("A serene haven imbued with Draenei crystal magic.");
			buildPiece62.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece62.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece62.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece62.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece62.Category.Set("Warcraft Pieces");
			buildPiece62.Crafting.Set(CraftingTable.Workbench);
			buildPiece62.Tool.Add("Hammer");
			buildPiece62.SpecialProperties.NoConfig = false;
			buildPiece62.SpecialProperties.AdminOnly = true;
			buildPiece62.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece62.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece63 = new BuildPiece("warcrafpieces", "WCP_dranei_barracks");
			buildPiece63.Name.English("Draenei Barracks");
			buildPiece63.Description.English("Barracks housing disciplined Draenei warriors.");
			buildPiece63.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece63.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece63.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece63.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece63.Category.Set("Warcraft Pieces");
			buildPiece63.Crafting.Set(CraftingTable.Workbench);
			buildPiece63.Tool.Add("Hammer");
			buildPiece63.SpecialProperties.NoConfig = false;
			buildPiece63.SpecialProperties.AdminOnly = true;
			buildPiece63.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece63.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece64 = new BuildPiece("warcrafpieces", "WCP_high_elf_house3");
			buildPiece64.Name.English("High Elf House III");
			buildPiece64.Description.English("An elegant high elven residence with ornate details.");
			buildPiece64.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece64.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece64.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece64.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece64.Category.Set("Warcraft Pieces");
			buildPiece64.Crafting.Set(CraftingTable.Workbench);
			buildPiece64.Tool.Add("Hammer");
			buildPiece64.SpecialProperties.NoConfig = false;
			buildPiece64.SpecialProperties.AdminOnly = true;
			buildPiece64.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece64.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece65 = new BuildPiece("warcrafpieces", "WCP_elfgate2");
			buildPiece65.Name.English("Elven Gate II");
			buildPiece65.Description.English("A graceful elven gate guarding ancient paths.");
			buildPiece65.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece65.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece65.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece65.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece65.Category.Set("Warcraft Pieces");
			buildPiece65.Crafting.Set(CraftingTable.Workbench);
			buildPiece65.Tool.Add("Hammer");
			buildPiece65.SpecialProperties.NoConfig = false;
			buildPiece65.SpecialProperties.AdminOnly = true;
			buildPiece65.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece65.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece66 = new BuildPiece("warcrafpieces", "WCP_elven_barracks");
			buildPiece66.Name.English("Elven Barracks");
			buildPiece66.Description.English("Barracks for disciplined and agile elven soldiers.");
			buildPiece66.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece66.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece66.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece66.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece66.Category.Set("Warcraft Pieces");
			buildPiece66.Crafting.Set(CraftingTable.Workbench);
			buildPiece66.Tool.Add("Hammer");
			buildPiece66.SpecialProperties.NoConfig = false;
			buildPiece66.SpecialProperties.AdminOnly = true;
			buildPiece66.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece66.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece67 = new BuildPiece("warcrafpieces", "WCP_kaldorei_house");
			buildPiece67.Name.English("Kaldorei House");
			buildPiece67.Description.English("A mystical house of the ancient Kaldorei.");
			buildPiece67.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece67.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece67.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece67.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece67.Category.Set("Warcraft Pieces");
			buildPiece67.Crafting.Set(CraftingTable.Workbench);
			buildPiece67.Tool.Add("Hammer");
			buildPiece67.SpecialProperties.NoConfig = false;
			buildPiece67.SpecialProperties.AdminOnly = true;
			buildPiece67.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece67.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece68 = new BuildPiece("warcrafpieces", "WCP_elfgate1");
			buildPiece68.Name.English("Elven Gate I");
			buildPiece68.Description.English("A smaller elven gate adorned with glowing runes.");
			buildPiece68.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece68.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece68.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece68.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece68.Category.Set("Warcraft Pieces");
			buildPiece68.Crafting.Set(CraftingTable.Workbench);
			buildPiece68.Tool.Add("Hammer");
			buildPiece68.SpecialProperties.NoConfig = false;
			buildPiece68.SpecialProperties.AdminOnly = true;
			buildPiece68.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece68.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece69 = new BuildPiece("warcrafpieces", "WCP_Market");
			buildPiece69.Name.English("Elven Market");
			buildPiece69.Description.English("A lively market filled with exotic elven goods.");
			buildPiece69.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece69.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece69.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece69.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece69.Category.Set("Warcraft Pieces");
			buildPiece69.Crafting.Set(CraftingTable.Workbench);
			buildPiece69.Tool.Add("Hammer");
			buildPiece69.SpecialProperties.NoConfig = false;
			buildPiece69.SpecialProperties.AdminOnly = true;
			buildPiece69.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece69.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece70 = new BuildPiece("warcrafpieces", "WCP_high_elf_house1");
			buildPiece70.Name.English("High Elf House I");
			buildPiece70.Description.English("A refined high elven dwelling bathed in arcane light.");
			buildPiece70.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece70.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece70.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece70.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece70.Category.Set("Warcraft Pieces");
			buildPiece70.Crafting.Set(CraftingTable.Workbench);
			buildPiece70.Tool.Add("Hammer");
			buildPiece70.SpecialProperties.NoConfig = false;
			buildPiece70.SpecialProperties.AdminOnly = true;
			buildPiece70.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece70.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece71 = new BuildPiece("warcrafpieces", "WCP_elf_spire");
			buildPiece71.Name.English("Elven Spire");
			buildPiece71.Description.English("A towering elven spire reaching toward the skies.");
			buildPiece71.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece71.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece71.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece71.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece71.Category.Set("Warcraft Pieces");
			buildPiece71.Crafting.Set(CraftingTable.Workbench);
			buildPiece71.Tool.Add("Hammer");
			buildPiece71.SpecialProperties.NoConfig = false;
			buildPiece71.SpecialProperties.AdminOnly = true;
			buildPiece71.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece71.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece72 = new BuildPiece("warcrafpieces", "WCP_highelftower");
			buildPiece72.Name.English("High Elf Tower");
			buildPiece72.Description.English("A majestic tower crafted by skilled high elven architects.");
			buildPiece72.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece72.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece72.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece72.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece72.Category.Set("Warcraft Pieces");
			buildPiece72.Crafting.Set(CraftingTable.Workbench);
			buildPiece72.Tool.Add("Hammer");
			buildPiece72.SpecialProperties.NoConfig = false;
			buildPiece72.SpecialProperties.AdminOnly = true;
			buildPiece72.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece72.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece73 = new BuildPiece("warcrafpieces", "WCP_castle_human");
			buildPiece73.Name.English("Human Castle");
			buildPiece73.Description.English("A fortified human castle built for war and diplomacy.");
			buildPiece73.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece73.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece73.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece73.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece73.Category.Set("Warcraft Pieces");
			buildPiece73.Crafting.Set(CraftingTable.Workbench);
			buildPiece73.Tool.Add("Hammer");
			buildPiece73.SpecialProperties.NoConfig = false;
			buildPiece73.SpecialProperties.AdminOnly = true;
			buildPiece73.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece73.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece74 = new BuildPiece("warcrafpieces", "WCP_human_torre");
			buildPiece74.Name.English("Human Tower");
			buildPiece74.Description.English("A defensive tower operated by human soldiers.");
			buildPiece74.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece74.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece74.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece74.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece74.Category.Set("Warcraft Pieces");
			buildPiece74.Crafting.Set(CraftingTable.Workbench);
			buildPiece74.Tool.Add("Hammer");
			buildPiece74.SpecialProperties.NoConfig = false;
			buildPiece74.SpecialProperties.AdminOnly = true;
			buildPiece74.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece74.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece75 = new BuildPiece("warcrafpieces", "WCP_humanhero_statue");
			buildPiece75.Name.English("Human Hero Statue");
			buildPiece75.Description.English("A heroic statue commemorating a human champion.");
			buildPiece75.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece75.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece75.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece75.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece75.Category.Set("Warcraft Pieces");
			buildPiece75.Crafting.Set(CraftingTable.Workbench);
			buildPiece75.Tool.Add("Hammer");
			buildPiece75.SpecialProperties.NoConfig = false;
			buildPiece75.SpecialProperties.AdminOnly = true;
			buildPiece75.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece75.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece76 = new BuildPiece("warcrafpieces", "WCP_barrack_human");
			buildPiece76.Name.English("Human Barracks");
			buildPiece76.Description.English("Barracks housing trained human soldiers.");
			buildPiece76.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece76.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece76.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece76.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece76.Category.Set("Warcraft Pieces");
			buildPiece76.Crafting.Set(CraftingTable.Workbench);
			buildPiece76.Tool.Add("Hammer");
			buildPiece76.SpecialProperties.NoConfig = false;
			buildPiece76.SpecialProperties.AdminOnly = true;
			buildPiece76.Snapshot();
			BuildPiece buildPiece77 = new BuildPiece("warcrafpieces", "WCP_tower_humanmage");
			buildPiece77.Name.English("Mage Tower");
			buildPiece77.Description.English("A towering arcane bastion for master wizards.");
			buildPiece77.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece77.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece77.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece77.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece77.Category.Set("Warcraft Pieces");
			buildPiece77.Crafting.Set(CraftingTable.Workbench);
			buildPiece77.Tool.Add("Hammer");
			buildPiece77.SpecialProperties.NoConfig = false;
			buildPiece77.SpecialProperties.AdminOnly = true;
			buildPiece77.Snapshot();
			BuildPiece buildPiece78 = new BuildPiece("warcrafpieces", "WCP_orc_clanhousesmall");
			buildPiece78.Name.English("Orc Clan House (Small)");
			buildPiece78.Description.English("A small dwelling belonging to an Orc clan.");
			buildPiece78.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece78.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece78.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece78.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece78.Category.Set("Warcraft Pieces");
			buildPiece78.Crafting.Set(CraftingTable.Workbench);
			buildPiece78.Tool.Add("Hammer");
			buildPiece78.SpecialProperties.NoConfig = false;
			buildPiece78.SpecialProperties.AdminOnly = true;
			buildPiece78.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece78.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece79 = new BuildPiece("warcrafpieces", "WCP_orc_claninn");
			buildPiece79.Name.English("Orc Clan Inn");
			buildPiece79.Description.English("A rowdy inn that serves as the heart of clan gatherings.");
			buildPiece79.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece79.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece79.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece79.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece79.Category.Set("Warcraft Pieces");
			buildPiece79.Crafting.Set(CraftingTable.Workbench);
			buildPiece79.Tool.Add("Hammer");
			buildPiece79.SpecialProperties.NoConfig = false;
			buildPiece79.SpecialProperties.AdminOnly = true;
			buildPiece79.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece79.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece80 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_barracks");
			buildPiece80.Name.English("Orc Clan Barracks");
			buildPiece80.Description.English("Barracks for training Orc clan warriors.");
			buildPiece80.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece80.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece80.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece80.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece80.Category.Set("Warcraft Pieces");
			buildPiece80.Crafting.Set(CraftingTable.Workbench);
			buildPiece80.Tool.Add("Hammer");
			buildPiece80.SpecialProperties.NoConfig = false;
			buildPiece80.SpecialProperties.AdminOnly = true;
			buildPiece80.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece80.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece81 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_farm");
			buildPiece81.Name.English("Orc Clan Farm");
			buildPiece81.Description.English("A rough farm that provides food for the Orc clans.");
			buildPiece81.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece81.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece81.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece81.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece81.Category.Set("Warcraft Pieces");
			buildPiece81.Crafting.Set(CraftingTable.Workbench);
			buildPiece81.Tool.Add("Hammer");
			buildPiece81.SpecialProperties.NoConfig = false;
			buildPiece81.SpecialProperties.AdminOnly = true;
			buildPiece81.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece81.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece82 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_forge");
			buildPiece82.Name.English("Orc Clan Forge");
			buildPiece82.Description.English("A brutal forge used to craft Orcish weaponry.");
			buildPiece82.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece82.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece82.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece82.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece82.Category.Set("Warcraft Pieces");
			buildPiece82.Crafting.Set(CraftingTable.Workbench);
			buildPiece82.Tool.Add("Hammer");
			buildPiece82.SpecialProperties.NoConfig = false;
			buildPiece82.SpecialProperties.AdminOnly = true;
			buildPiece82.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece82.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece83 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_guardtower");
			buildPiece83.Name.English("Orc Clan Guard Tower");
			buildPiece83.Description.English("A guard tower overlooking the Orc clan lands.");
			buildPiece83.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece83.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece83.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece83.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece83.Category.Set("Warcraft Pieces");
			buildPiece83.Crafting.Set(CraftingTable.Workbench);
			buildPiece83.Tool.Add("Hammer");
			buildPiece83.SpecialProperties.NoConfig = false;
			buildPiece83.SpecialProperties.AdminOnly = true;
			buildPiece83.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece83.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece84 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_houselarge");
			buildPiece84.Name.English("Orc Clan House (Large)");
			buildPiece84.Description.English("A large house for powerful Orc clan leaders.");
			buildPiece84.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece84.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece84.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece84.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece84.Category.Set("Warcraft Pieces");
			buildPiece84.Crafting.Set(CraftingTable.Workbench);
			buildPiece84.Tool.Add("Hammer");
			buildPiece84.SpecialProperties.NoConfig = false;
			buildPiece84.SpecialProperties.AdminOnly = true;
			buildPiece84.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece84.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece85 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_huts");
			buildPiece85.Name.English("Orc Clan Huts");
			buildPiece85.Description.English("A small cluster of rugged Orc clan huts.");
			buildPiece85.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece85.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece85.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece85.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece85.Category.Set("Warcraft Pieces");
			buildPiece85.Crafting.Set(CraftingTable.Workbench);
			buildPiece85.Tool.Add("Hammer");
			buildPiece85.SpecialProperties.NoConfig = false;
			buildPiece85.SpecialProperties.AdminOnly = true;
			buildPiece85.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece85.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece86 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_ritualpit");
			buildPiece86.Name.English("Orc Clan Ritual Pit");
			buildPiece86.Description.English("A ritual pit used for dark Orcish ceremonies.");
			buildPiece86.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece86.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece86.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece86.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece86.Category.Set("Warcraft Pieces");
			buildPiece86.Crafting.Set(CraftingTable.Workbench);
			buildPiece86.Tool.Add("Hammer");
			buildPiece86.SpecialProperties.NoConfig = false;
			buildPiece86.SpecialProperties.AdminOnly = true;
			buildPiece86.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece86.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece87 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_spirithouse");
			buildPiece87.Name.English("Orc Clan Spirit House");
			buildPiece87.Description.English("A sacred house honoring the ancestral spirits of the clan.");
			buildPiece87.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece87.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece87.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece87.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece87.Category.Set("Warcraft Pieces");
			buildPiece87.Crafting.Set(CraftingTable.Workbench);
			buildPiece87.Tool.Add("Hammer");
			buildPiece87.SpecialProperties.NoConfig = false;
			buildPiece87.SpecialProperties.AdminOnly = true;
			buildPiece87.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece87.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece88 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_townhall");
			buildPiece88.Name.English("Orc Clan Town Hall");
			buildPiece88.Description.English("The central hall of the Orc clan's settlement.");
			buildPiece88.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece88.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece88.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece88.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece88.Category.Set("Warcraft Pieces");
			buildPiece88.Crafting.Set(CraftingTable.Workbench);
			buildPiece88.Tool.Add("Hammer");
			buildPiece88.SpecialProperties.NoConfig = false;
			buildPiece88.SpecialProperties.AdminOnly = true;
			buildPiece88.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece88.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece89 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_wolfpen");
			buildPiece89.Name.English("Orc Clan Wolf Pen");
			buildPiece89.Description.English("A pen used to house the clan's fearsome war wolves.");
			buildPiece89.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece89.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece89.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece89.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece89.Category.Set("Warcraft Pieces");
			buildPiece89.Crafting.Set(CraftingTable.Workbench);
			buildPiece89.Tool.Add("Hammer");
			buildPiece89.SpecialProperties.NoConfig = false;
			buildPiece89.SpecialProperties.AdminOnly = true;
			buildPiece89.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece89.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece90 = new BuildPiece("warcrafpieces", "WCP_Murlocaltar");
			buildPiece90.Name.English("Murloc Altar");
			buildPiece90.Description.English("A strange altar dedicated to mysterious Murloc deities.");
			buildPiece90.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece90.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece90.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece90.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece90.Category.Set("Warcraft Pieces");
			buildPiece90.Crafting.Set(CraftingTable.Workbench);
			buildPiece90.Tool.Add("Hammer");
			buildPiece90.SpecialProperties.NoConfig = false;
			buildPiece90.SpecialProperties.AdminOnly = true;
			buildPiece90.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece90.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece91 = new BuildPiece("warcrafpieces", "WCP_Murlochut");
			buildPiece91.Name.English("Murloc Hut");
			buildPiece91.Description.English("A crude hut used by coastal Murloc tribes.");
			buildPiece91.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece91.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece91.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece91.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece91.Category.Set("Warcraft Pieces");
			buildPiece91.Crafting.Set(CraftingTable.Workbench);
			buildPiece91.Tool.Add("Hammer");
			buildPiece91.SpecialProperties.NoConfig = false;
			buildPiece91.SpecialProperties.AdminOnly = true;
			buildPiece91.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece91.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece92 = new BuildPiece("warcrafpieces", "WCP_Murlochutcluster1");
			buildPiece92.Name.English("Murloc Hut Cluster I");
			buildPiece92.Description.English("A small cluster of coastal Murloc huts.");
			buildPiece92.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece92.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece92.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece92.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece92.Category.Set("Warcraft Pieces");
			buildPiece92.Crafting.Set(CraftingTable.Workbench);
			buildPiece92.Tool.Add("Hammer");
			buildPiece92.SpecialProperties.NoConfig = false;
			buildPiece92.SpecialProperties.AdminOnly = true;
			buildPiece92.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece92.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece93 = new BuildPiece("warcrafpieces", "WCP_Murlochutcluster2");
			buildPiece93.Name.English("Murloc Hut Cluster II");
			buildPiece93.Description.English("A larger cluster of ramshackle Murloc huts.");
			buildPiece93.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece93.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece93.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece93.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece93.Category.Set("Warcraft Pieces");
			buildPiece93.Crafting.Set(CraftingTable.Workbench);
			buildPiece93.Tool.Add("Hammer");
			buildPiece93.SpecialProperties.NoConfig = false;
			buildPiece93.SpecialProperties.AdminOnly = true;
			buildPiece93.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece93.Prefab, MaterialReplacer.ShaderType.PieceShader);
			BuildPiece buildPiece94 = new BuildPiece("warcrafpieces", "WCP_Murlocshiptower");
			buildPiece94.Name.English("Murloc Ship Tower");
			buildPiece94.Description.English("A rickety tower rising above Murloc docks.");
			buildPiece94.RequiredItems.Add("Wood", 200, recover: false);
			buildPiece94.RequiredItems.Add("FineWood", 200, recover: false);
			buildPiece94.RequiredItems.Add("Stone", 100, recover: false);
			buildPiece94.RequiredItems.Add("Coal", 20, recover: false);
			buildPiece94.Category.Set("Warcraft Pieces");
			buildPiece94.Crafting.Set(CraftingTable.Workbench);
			buildPiece94.Tool.Add("Hammer");
			buildPiece94.SpecialProperties.NoConfig = false;
			buildPiece94.SpecialProperties.AdminOnly = true;
			buildPiece94.Snapshot();
			MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece94.Prefab, MaterialReplacer.ShaderType.PieceShader);
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
			SetupWatcher();
		}

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

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

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

		private ConfigEntry<T> config<[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
			ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
			SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2);
			syncedConfigEntry.SynchronizedConfig = synchronizedSetting;
			return val2;
		}

		private ConfigEntry<T> config<[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting);
		}

		static sunnfjordheimPiecesPlugin()
		{
			string configPath = Paths.ConfigPath;
			char directorySeparatorChar = Path.DirectorySeparatorChar;
			ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName;
			ConnectionError = "";
			sunnfjordheimPiecesLogger = Logger.CreateLogSource("sunnfjordheimPieces");
			ConfigSync = new ConfigSync("Azathoth.sunnfjordheimPieces")
			{
				DisplayName = "sunnfjordheimPieces",
				CurrentVersion = "1.0.0",
				MinimumRequiredVersion = "1.0.0"
			};
			_serverConfigLocked = null;
		}
	}
	public static class KeyboardExtensions
	{
		public static bool IsKeyDown(this KeyboardShortcut shortcut)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
		}

		public static bool IsKeyHeld(this KeyboardShortcut shortcut)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
		}
	}
	[HarmonyPatch(typeof(ZNet), "OnNewConnection")]
	public static class RegisterAndCheckVersion
	{
		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogDebug((object)"Registering version RPC handler");
			peer.m_rpc.Register<ZPackage>("sunnfjordheimPieces_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_sunnfjordheimPieces_Version);
			sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)"Invoking version check");
			ZPackage val = new ZPackage();
			val.Write("1.0.0");
			peer.m_rpc.Invoke("sunnfjordheimPieces_VersionCheck", new object[1] { val });
		}
	}
	[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
	[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
	[HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")]
	public static class VerifyClient
	{
		private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance)
		{
			if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc))
			{
				return true;
			}
			sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting"));
			rpc.Invoke("Error", new object[1] { 3 });
			return false;
		}

		private static void Postfix(ZNet __instance)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "sunnfjordheimPiecesRequestAdminSync", new object[1] { (object)new ZPackage() });
		}
	}
	[HarmonyPatch(typeof(FejdStartup), "ShowConnectError")]
	public class ShowConnectionError
	{
		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
		private static void Postfix(FejdStartup __instance)
		{
			if (__instance.m_connectionFailedPanel.activeSelf)
			{
				__instance.m_connectionFailedError.fontSizeMax = 25f;
				__instance.m_connectionFailedError.fontSizeMin = 15f;
				TMP_Text connectionFailedError = __instance.m_connectionFailedError;
				connectionFailedError.text = connectionFailedError.text + "\n" + sunnfjordheimPiecesPlugin.ConnectionError;
			}
		}
	}
	[HarmonyPatch(typeof(ZNet), "Disconnect")]
	public static class RemoveDisconnectedPeerFromVerified
	{
		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			if (__instance.IsServer())
			{
				sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list"));
				RpcHandlers.ValidatedPeers.Remove(peer.m_rpc);
			}
		}
	}
	[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
	[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
	public static class RpcHandlers
	{
		public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>();

		public static void RPC_sunnfjordheimPieces_Version(ZRpc rpc, ZPackage pkg)
		{
			string text = pkg.ReadString();
			sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Version check, local: 1.0.0,  remote: " + text));
			if (text != "1.0.0")
			{
				sunnfjordheimPiecesPlugin.ConnectionError = "sunnfjordheimPieces Installed: 1.0.0\n Needed: " + text;
				if (ZNet.instance.IsServer())
				{
					sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."));
					rpc.Invoke("Error", new object[1] { 3 });
				}
			}
			else if (!ZNet.instance.IsServer())
			{
				sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)"Received same version from server!");
			}
			else
			{
				sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list"));
				ValidatedPeers.Add(rpc);
			}
		}
	}
}
namespace PieceManager
{
	[PublicAPI]
	[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)]
	[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)]
	public static class MaterialReplacer
	{
		[<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(0)]
		public enum ShaderType
		{
			PieceShader,
			VegetationShader,
			RockShader,
			RugShader,
			GrassShader,
			CustomCreature,
			UseUnityShader
		}

		private static readonly Dictionary<GameObject, bool> ObjectToSwap;

		private static readonly Dictionary<string, Material> OriginalMaterials;

		private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace;

		private static readonly HashSet<Shader> CachedShaders;

		private static bool hasRun;

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

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

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

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

		[HarmonyPriority(700)]
		private static void ReplaceAllMaterialsWithOriginal()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun)
			{
				return;
			}
			if (OriginalMaterials.Count == 0)
			{
				GetAllMaterials();
			}
			foreach (KeyValuePair<GameObject, bo