Decompiled source of Biome Banners v1.0.0

plugins/RavenwoodBiomeBanners/RavenwoodBiomeBanners.dll

Decompiled 2 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("RavenwoodBiomeBanners")]
[assembly: AssemblyDescription("A Valheim mod that adds custom World and Biome Gates with Light and Banners.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("James Jones TV")]
[assembly: AssemblyProduct("Ravenwood Biome Regions")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("1.0.3")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.3.0")]
namespace RavenwoodBiomeBanners;

public class BannerInteraction : MonoBehaviour
{
	private Cloth _cloth;

	private float _lastPush;

	private void Awake()
	{
		_cloth = ((Component)this).GetComponentInChildren<Cloth>(true);
	}

	private void OnTriggerStay(Collider other)
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)_cloth == (Object)null)
		{
			return;
		}
		Character componentInParent = ((Component)other).GetComponentInParent<Character>();
		if (!((Object)(object)componentInParent == (Object)null) && !(Time.time - _lastPush < 0.05f))
		{
			_lastPush = Time.time;
			Vector3 position = ((Component)other).transform.position;
			Vector3 position2 = ((Component)this).transform.position;
			Vector3 val = position2 - position;
			val.y = 0f;
			float magnitude = ((Vector3)(ref val)).magnitude;
			if (!(magnitude < 0.01f))
			{
				((Vector3)(ref val)).Normalize();
				float num = Mathf.Clamp01(1.5f - magnitude) * 15f;
				_cloth.externalAcceleration = val * num;
				_cloth.bendingStiffness = 0.1f;
				_cloth.stretchingStiffness = 0.3f;
				((MonoBehaviour)this).CancelInvoke("ResetCloth");
				((MonoBehaviour)this).Invoke("ResetCloth", 0.25f);
			}
		}
	}

	private void ResetCloth()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)_cloth == (Object)null))
		{
			_cloth.externalAcceleration = Vector3.zero;
			_cloth.bendingStiffness = 0.4f;
			_cloth.stretchingStiffness = 0.6f;
		}
	}
}
public class BannerLampController : MonoBehaviour
{
	public List<string> BulbObjectNames = new List<string>();

	public Color NightColor = new Color(0.78f, 0.68f, 0.88f);

	public float NightIntensity = 2.5f;

	public float NightEmissionMultiplier = 3f;

	public bool NormalizePerceivedBrightness = true;

	private readonly List<Light> lights = new List<Light>();

	private readonly List<Material> materials = new List<Material>();

	private bool lastNightState = false;

	private bool initialized = false;

	private static readonly Color ReferenceColor = new Color(0.78f, 0.68f, 0.88f);

	private float referenceLuminance;

	private void Awake()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		referenceLuminance = ComputeLuminanceLinear(ReferenceColor);
		foreach (string name in BulbObjectNames)
		{
			Transform val = ((IEnumerable<Transform>)((Component)this).GetComponentsInChildren<Transform>(true)).FirstOrDefault((Func<Transform, bool>)((Transform t) => ((Object)t).name == name));
			if ((Object)(object)val == (Object)null)
			{
				continue;
			}
			Light[] componentsInChildren = ((Component)val).GetComponentsInChildren<Light>(true);
			foreach (Light val2 in componentsInChildren)
			{
				if ((Object)(object)val2 != (Object)null)
				{
					val2.type = (LightType)2;
					val2.shadows = (LightShadows)0;
					val2.range = 5f;
					lights.Add(val2);
				}
			}
			Renderer component = ((Component)val).GetComponent<Renderer>();
			if ((Object)(object)component != (Object)null && (Object)(object)component.material != (Object)null)
			{
				Material material = component.material;
				if (material.HasProperty("_Metallic"))
				{
					material.SetFloat("_Metallic", 0f);
				}
				if (material.HasProperty("_Glossiness"))
				{
					material.SetFloat("_Glossiness", 0.4f);
				}
				if (material.HasProperty("_Smoothness"))
				{
					material.SetFloat("_Smoothness", 0.4f);
				}
				material.EnableKeyword("_EMISSION");
				material.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)1;
				materials.Add(material);
			}
		}
		initialized = true;
	}

	private void Update()
	{
		//IL_018e: Unknown result type (might be due to invalid IL or missing references)
		if (!initialized || (Object)(object)EnvMan.instance == (Object)null)
		{
			return;
		}
		bool flag = EnvMan.IsNight();
		if (flag != lastNightState)
		{
			lastNightState = flag;
			float intensity = (flag ? NightIntensity : 0f);
			ApplyState(intensity);
		}
		foreach (Light light in lights)
		{
			if ((Object)(object)light == (Object)null)
			{
				continue;
			}
			if (flag)
			{
				if (!((Behaviour)light).enabled)
				{
					((Behaviour)light).enabled = true;
				}
				if (light.intensity <= 0f)
				{
					light.intensity = NightIntensity;
				}
				((Behaviour)light).enabled = false;
				((Behaviour)light).enabled = true;
				light.range = 5f;
				light.renderMode = (LightRenderMode)1;
			}
			else
			{
				light.intensity = 0f;
				((Behaviour)light).enabled = false;
			}
		}
		foreach (Material material in materials)
		{
			if ((Object)(object)material == (Object)null)
			{
				continue;
			}
			if (flag)
			{
				if (!material.IsKeywordEnabled("_EMISSION"))
				{
					material.EnableKeyword("_EMISSION");
				}
			}
			else
			{
				material.SetColor("_EmissionColor", Color.black);
			}
		}
	}

	private void ApplyState(float intensity)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		float num = intensity;
		if (NormalizePerceivedBrightness && intensity > 0f)
		{
			float num2 = ComputeLuminanceLinear(NightColor);
			if (num2 > 0.0001f && referenceLuminance > 0.0001f)
			{
				float num3 = referenceLuminance / num2;
				if (num3 < 0.5f)
				{
					num3 = 0.5f;
				}
				if (num3 > 2f)
				{
					num3 = 2f;
				}
				num = intensity * num3;
			}
		}
		foreach (Light light in lights)
		{
			if (!((Object)(object)light == (Object)null))
			{
				light.color = NightColor;
				light.intensity = intensity;
			}
		}
		foreach (Material material in materials)
		{
			if (!((Object)(object)material == (Object)null))
			{
				material.EnableKeyword("_EMISSION");
				material.SetColor("_EmissionColor", NightColor * num * NightEmissionMultiplier);
			}
		}
	}

	private static float ComputeLuminanceLinear(Color c)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		Color linear = ((Color)(ref c)).linear;
		return 0.2126f * linear.r + 0.7152f * linear.g + 0.0722f * linear.b;
	}

	public static void AttachTo(GameObject prefab, List<string> bulbNames, Color nightColor, float intensity = 2.5f, float emissionMultiplier = 3f)
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)prefab.GetComponent<BannerLampController>() != (Object)null))
		{
			BannerLampController bannerLampController = prefab.AddComponent<BannerLampController>();
			bannerLampController.BulbObjectNames = bulbNames;
			bannerLampController.NightColor = nightColor;
			bannerLampController.NightIntensity = intensity;
			bannerLampController.NightEmissionMultiplier = emissionMultiplier;
		}
	}
}
public static class BannerLightRegistry
{
	private class BannerLightConfig
	{
		public string BulbName;

		public Color Color;

		public float Intensity;

		public float Emission;

		public BannerLightConfig(string bulb, Color color, float intensity, float emission)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			BulbName = bulb;
			Color = color;
			Intensity = intensity;
			Emission = emission;
		}

		public void LoadFromConfig(ConfigFile config, string prefabName)
		{
			string text = "BannerLights";
			int num = Mathf.RoundToInt(Color.r * 255f);
			int num2 = Mathf.RoundToInt(Color.g * 255f);
			int num3 = Mathf.RoundToInt(Color.b * 255f);
			ConfigEntry<string> val = config.Bind<string>(text, prefabName, $"{num},{num2},{num3} | {Intensity.ToString(CultureInfo.InvariantCulture)} | {Emission.ToString(CultureInfo.InvariantCulture)}", "RGB(0-255) | Intensity | Emission");
			Parse(val.Value);
		}

		private void Parse(string value)
		{
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			if (string.IsNullOrWhiteSpace(value))
			{
				return;
			}
			string[] array = value.Split(new char[1] { '|' });
			if (array.Length == 3)
			{
				string[] array2 = array[0].Trim().Split(new char[1] { ',' });
				if (array2.Length == 3 && float.TryParse(array2[0], NumberStyles.Float, CultureInfo.InvariantCulture, out var result) && float.TryParse(array2[1], NumberStyles.Float, CultureInfo.InvariantCulture, out var result2) && float.TryParse(array2[2], NumberStyles.Float, CultureInfo.InvariantCulture, out var result3))
				{
					Color = new Color(result / 255f, result2 / 255f, result3 / 255f);
				}
				if (float.TryParse(array[1], NumberStyles.Float, CultureInfo.InvariantCulture, out var result4))
				{
					Intensity = result4;
				}
				if (float.TryParse(array[2], NumberStyles.Float, CultureInfo.InvariantCulture, out var result5))
				{
					Emission = result5;
				}
			}
		}
	}

	private static readonly Dictionary<string, BannerLightConfig> configs = new Dictionary<string, BannerLightConfig>
	{
		{
			"Ravenwood_Banner",
			new BannerLightConfig("Bolb_Ravenwood_Banner", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Ravenwood_Gate_Banner",
			new BannerLightConfig("Bolb_Ravenwood_Gate", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Deadwood_Banner",
			new BannerLightConfig("Bolb_Deadwood_Banner", new Color(0.737f, 0.043f, 0.043f), 1.9f, 1.7f)
		},
		{
			"Deadwood_Gate_Banner",
			new BannerLightConfig("Bolb_Deadwood_Gate", new Color(0.737f, 0.043f, 0.043f), 1.9f, 1.7f)
		},
		{
			"Frostwood_Banner",
			new BannerLightConfig("Bolb_Frostwood_Banner", new Color(0.55f, 0.9f, 1f), 1.6f, 1.3f)
		},
		{
			"Frostwood_Gate_Banner",
			new BannerLightConfig("Bolb_Frostwood_Gate", new Color(0.55f, 0.9f, 1f), 1.6f, 1.3f)
		},
		{
			"Darkwood_Banner",
			new BannerLightConfig("Bolb_Darkwood_Banner", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Darkwood_Gate_Banner",
			new BannerLightConfig("Bolb_Darkwood_Gate", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Whitewood_Banner",
			new BannerLightConfig("Bolb_Whitewood_Banner", new Color(1f, 1f, 1f), 1.6f, 1.8f)
		},
		{
			"Whitewood_Gate_Banner",
			new BannerLightConfig("Bolb_Whitewood_Gate", new Color(1f, 1f, 1f), 1.6f, 1.8f)
		},
		{
			"Redwood_Banner",
			new BannerLightConfig("Bolb_Redwood_Banner", new Color(1f, 0.165f, 0f), 1.6f, 1.8f)
		},
		{
			"Redwood_Gate_Banner",
			new BannerLightConfig("Bolb_Redwood_Gate", new Color(1f, 0.165f, 0f), 1.6f, 1.8f)
		},
		{
			"Grimgrove_Banner",
			new BannerLightConfig("Bolb_Grimgrove_Banner", new Color(0.18f, 0.85f, 0.3f), 1.6f, 1.8f)
		},
		{
			"Grimgrove_Gate_Banner",
			new BannerLightConfig("Bolb_Grimgrove_Gate", new Color(0.18f, 0.85f, 0.3f), 1.6f, 1.8f)
		},
		{
			"Acacia_Banner",
			new BannerLightConfig("Bolb_Acacia_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Acacia_Gate_Banner",
			new BannerLightConfig("Bolb_Acacia_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Jadewood_Banner",
			new BannerLightConfig("Bolb_Jadewood_Banner", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Jadewood_Gate_Banner",
			new BannerLightConfig("Bolb_Jadewood_Gate", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"JJ_Banner",
			new BannerLightConfig("Bolb_JJ_Banner", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"JJ_Gate_Banner",
			new BannerLightConfig("Bolb_JJ_Gate", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Scarwood_Banner",
			new BannerLightConfig("Bolb_Scarwood_Banner", new Color(1f, 0.6f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Scarwood_Gate_Banner",
			new BannerLightConfig("Bolb_Scarwood_Gate", new Color(1f, 0.6f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Sakura_Banner",
			new BannerLightConfig("Bolb_Sakura_Banner", new Color(1f, 0.45f, 0.65f), 1.6f, 1.8f)
		},
		{
			"Sakura_Gate_Banner",
			new BannerLightConfig("Bolb_Sakura_Gate", new Color(1f, 0.45f, 0.65f), 1.6f, 1.8f)
		},
		{
			"Slayer_Banner",
			new BannerLightConfig("Bolb_Slayer_Banner", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Slayer_Gate_Banner",
			new BannerLightConfig("Bolb_Slayer_Gate", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Egypt_Banner",
			new BannerLightConfig("Bolb_Egypt_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Egypt_Gate_Banner",
			new BannerLightConfig("Bolb_Egypt_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Rome_Banner",
			new BannerLightConfig("Bolb_Rome_Banner", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Rome_Gate_Banner",
			new BannerLightConfig("Bolb_Rome_Gate", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Snake_Banner",
			new BannerLightConfig("Bolb_Snake_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Snake_Gate_Banner",
			new BannerLightConfig("Bolb_Snake_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Jonestown_Banner",
			new BannerLightConfig("Bolb_Jonestown_Banner", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Jonestown_Gate_Banner",
			new BannerLightConfig("Bolb_Jonestown_Gate", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Jonesland_Banner",
			new BannerLightConfig("Bolb_Jonesland_Banner", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Jonesland_Gate_Banner",
			new BannerLightConfig("Bolb_Jonesland_Gate", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Sandstone_Banner",
			new BannerLightConfig("Bolb_Sandstone_Banner", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Sandstone_Gate_Banner",
			new BannerLightConfig("Bolb_Sandstone_Gate", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Dragonstone_Banner",
			new BannerLightConfig("Bolb_Dragonstone_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Dragonstone_Gate_Banner",
			new BannerLightConfig("Bolb_Dragonstone_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Murkwood_Banner",
			new BannerLightConfig("Bolb_Murkwood_Banner", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Murkwood_Gate_Banner",
			new BannerLightConfig("Bolb_Murkwood_Gate", new Color(0.74f, 0.68f, 0.88f), 1.6f, 1.6f)
		},
		{
			"Pirate_1_Banner",
			new BannerLightConfig("Bolb_Pirate_1_Banner", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Pirate_1_Gate_Banner",
			new BannerLightConfig("Bolb_Pirate_1_Gate", new Color(0.3f, 1f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Pirate_2_Banner",
			new BannerLightConfig("Bolb_Pirate_2_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Pirate_2_Gate_Banner",
			new BannerLightConfig("Bolb_Pirate_2_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Pirate_3_Banner",
			new BannerLightConfig("Bolb_Pirate_3_Banner", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Pirate_3_Gate_Banner",
			new BannerLightConfig("Bolb_Pirate_3_Gate", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Pirate_4_Banner",
			new BannerLightConfig("Bolb_Pirate_4_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Pirate_4_Gate_Banner",
			new BannerLightConfig("Bolb_Pirate_4_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Whisperwood_Banner",
			new BannerLightConfig("Bolb_Whisperwood_Banner", new Color(0.9f, 0.3f, 0.78f), 1.6f, 1.6f)
		},
		{
			"Whisperwood_Gate_Banner",
			new BannerLightConfig("Bolb_Whisperwood_Gate", new Color(0.9f, 0.3f, 0.78f), 1.6f, 1.6f)
		},
		{
			"Blackwood_Banner",
			new BannerLightConfig("Bolb_Blackwood_Banner", new Color(0.65f, 0.85f, 1f), 1.8f, 1.6f)
		},
		{
			"Blackwood_Gate_Banner",
			new BannerLightConfig("Bolb_Blackwood_Gate", new Color(0.65f, 0.85f, 1f), 1.8f, 1.6f)
		},
		{
			"Elmwood_Banner",
			new BannerLightConfig("Bolb_Elmwood_Banner", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Elmwood_Gate_Banner",
			new BannerLightConfig("Bolb_Elmwood_Gate", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Willowwood_Banner",
			new BannerLightConfig("Bolb_Willowwood_Banner", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Willowwood_Gate_Banner",
			new BannerLightConfig("Bolb_Willowwood_Gate", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Silverstone_Banner",
			new BannerLightConfig("Bolb_Silverstone_Banner", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Silverstone_Gate_Banner",
			new BannerLightConfig("Bolb_Silverstone_Gate", new Color(0.75f, 0.9f, 0.7f), 1.6f, 1.8f)
		},
		{
			"Steelstone_Banner",
			new BannerLightConfig("Bolb_Steelstone_Banner", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Steelstone_Gate_Banner",
			new BannerLightConfig("Bolb_Steelstone_Gate", new Color(0.78f, 0.68f, 0.88f), 1.8f, 1.6f)
		},
		{
			"Gorilla_Banner",
			new BannerLightConfig("Bolb_Gorilla_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Gorilla_Gate_Banner",
			new BannerLightConfig("Bolb_Gorilla_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Orangutan_Banner",
			new BannerLightConfig("Bolb_Orangutan_Banner", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Orangutan_Gate_Banner",
			new BannerLightConfig("Bolb_Orangutan_Gate", new Color(1f, 0.62f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Mandrill_Banner",
			new BannerLightConfig("Bolb_Mandrill_Banner", new Color(1f, 0.6f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Mandrill_Gate_Banner",
			new BannerLightConfig("Bolb_Mandrill_Gate", new Color(1f, 0.6f, 0.1f), 1.6f, 1.8f)
		},
		{
			"Eagle_Banner",
			new BannerLightConfig("Bolb_Eagle_Banner", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Eagle_Gate_Banner",
			new BannerLightConfig("Bolb_Eagle_Gate", new Color(0.2f, 0.9f, 0.55f), 1.6f, 1.8f)
		},
		{
			"Wyrmwood_Banner",
			new BannerLightConfig("Bolb_Wyrmwood_Banner", new Color(0.737f, 0.043f, 0.043f), 1.9f, 1.7f)
		},
		{
			"Wyrmwood_Gate_Banner",
			new BannerLightConfig("Bolb_Wyrmwood_Gate", new Color(0.737f, 0.043f, 0.043f), 1.9f, 1.7f)
		},
		{
			"Dreadmire_Banner",
			new BannerLightConfig("Bolb_Dreadmire_Banner", new Color(0.333f, 0.839f, 0.745f), 1.9f, 1.7f)
		},
		{
			"Dreadmire_Gate_Banner",
			new BannerLightConfig("Bolb_Dreadmire_Gate", new Color(0.333f, 0.839f, 0.745f), 1.9f, 1.7f)
		},
		{
			"TheWall_Banner",
			new BannerLightConfig("Bolb_TheWall_Banner", new Color(1f, 1f, 1f), 1.6f, 1.8f)
		},
		{
			"TheWall_Gate_Banner",
			new BannerLightConfig("Bolb_TheWall_Gate", new Color(1f, 1f, 1f), 1.6f, 1.8f)
		}
	};

	public static void Initialize(ConfigFile config)
	{
		foreach (KeyValuePair<string, BannerLightConfig> config2 in configs)
		{
			config2.Value.LoadFromConfig(config, config2.Key);
		}
	}

	public static void Register(GameObject prefab)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		if (configs.TryGetValue(((Object)prefab).name, out var value))
		{
			BannerLampController.AttachTo(prefab, new List<string> { value.BulbName }, value.Color, value.Intensity, value.Emission);
		}
	}

	public static List<Color> GetAllColors()
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		HashSet<Color> hashSet = new HashSet<Color>();
		foreach (BannerLightConfig value in configs.Values)
		{
			hashSet.Add(value.Color);
		}
		return new List<Color>(hashSet);
	}
}
public class LampColorCycler : MonoBehaviour, Hoverable, Interactable
{
	private Piece m_piece;

	private LampNetworkController m_controller;

	private void Awake()
	{
		m_piece = ((Component)this).GetComponentInParent<Piece>();
		m_controller = ((Component)this).GetComponentInParent<LampNetworkController>();
	}

	public string GetHoverText()
	{
		string text = (((Object)(object)m_piece != (Object)null) ? m_piece.m_name : "Lamp");
		return text + "\n[<color=yellow><b>E</b></color>] Change Light Color";
	}

	public string GetHoverName()
	{
		return ((Object)(object)m_piece != (Object)null) ? m_piece.m_name : "Lamp";
	}

	public bool Interact(Humanoid user, bool hold, bool alt)
	{
		if (hold)
		{
			return false;
		}
		if ((Object)(object)m_controller == (Object)null)
		{
			return false;
		}
		return m_controller.CycleToNextColor();
	}

	public bool UseItem(Humanoid user, ItemData item)
	{
		return false;
	}
}
public static class LampInteractionRegistry
{
	private static ConfigEntry<bool> WorldGateLampInteractionEnabled;

	private static readonly List<string> RegisteredPrefabs = new List<string> { "Biome_Gate_Lamp" };

	public static void Initialize(ConfigFile config)
	{
		WorldGateLampInteractionEnabled = config.Bind<bool>("World Gate Lamp", "EnableColorInteraction", true, "Allow players to press E on the World Gate Lamp to cycle its light color.");
	}

	public static void RegisterAll()
	{
		foreach (string registeredPrefab in RegisteredPrefabs)
		{
			GameObject prefab = PrefabManager.Instance.GetPrefab(registeredPrefab);
			if ((Object)(object)prefab == (Object)null)
			{
				continue;
			}
			if (!Object.op_Implicit((Object)(object)prefab.GetComponent<LampNetworkController>()))
			{
				prefab.AddComponent<LampNetworkController>();
			}
			if (WorldGateLampInteractionEnabled != null && !WorldGateLampInteractionEnabled.Value)
			{
				continue;
			}
			Transform[] componentsInChildren = prefab.GetComponentsInChildren<Transform>(true);
			foreach (Transform val in componentsInChildren)
			{
				if (((Object)val).name.StartsWith("Bolb_Biome_") && !Object.op_Implicit((Object)(object)((Component)val).GetComponent<LampColorCycler>()))
				{
					((Component)val).gameObject.AddComponent<LampColorCycler>();
				}
			}
		}
	}
}
public class LampNetworkController : MonoBehaviour
{
	private const string HasColorKey = "RWB_WorldGateLamp_HasColor";

	private const string ColorKey = "RWB_WorldGateLamp_Color";

	private const string SetColorRpc = "RWB_WorldGateLamp_SetColor";

	private readonly List<Light> lights = new List<Light>();

	private readonly List<Material> materials = new List<Material>();

	private ZNetView m_nview;

	private List<Color> colors;

	private Color lastAppliedColor;

	private bool hasAppliedColor;

	private int currentIndex;

	private void Awake()
	{
		m_nview = ((Component)this).GetComponent<ZNetView>();
		colors = BannerLightRegistry.GetAllColors();
		Transform[] componentsInChildren = ((Component)this).GetComponentsInChildren<Transform>(true);
		foreach (Transform val in componentsInChildren)
		{
			if (!((Object)val).name.StartsWith("Bolb_Biome_"))
			{
				continue;
			}
			Light[] componentsInChildren2 = ((Component)val).GetComponentsInChildren<Light>(true);
			foreach (Light val2 in componentsInChildren2)
			{
				if ((Object)(object)val2 != (Object)null)
				{
					lights.Add(val2);
				}
			}
			Renderer component = ((Component)val).GetComponent<Renderer>();
			if ((Object)(object)component != (Object)null && (Object)(object)component.material != (Object)null)
			{
				materials.Add(component.material);
			}
		}
		if ((Object)(object)m_nview != (Object)null && m_nview.IsValid())
		{
			m_nview.Register<Vector3>("RWB_WorldGateLamp_SetColor", (Action<long, Vector3>)RPC_SetColor);
			SyncFromZDO();
			((MonoBehaviour)this).InvokeRepeating("SyncFromZDO", 0.2f, 0.2f);
		}
	}

	private void OnDestroy()
	{
		((MonoBehaviour)this).CancelInvoke("SyncFromZDO");
	}

	public bool CycleToNextColor()
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		if (colors == null || colors.Count == 0)
		{
			return false;
		}
		if (TryGetSavedColor(out var color))
		{
			currentIndex = FindClosestColorIndex(color);
		}
		currentIndex++;
		if (currentIndex >= colors.Count)
		{
			currentIndex = 0;
		}
		Color val = colors[currentIndex];
		ApplyColor(val);
		if ((Object)(object)m_nview != (Object)null && m_nview.IsValid())
		{
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(val.r, val.g, val.b);
			m_nview.InvokeRPC("RWB_WorldGateLamp_SetColor", new object[1] { val2 });
		}
		return true;
	}

	private void RPC_SetColor(long sender, Vector3 rgb)
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)m_nview == (Object)null) && m_nview.IsValid() && m_nview.IsOwner())
		{
			Color val = default(Color);
			((Color)(ref val))..ctor(Mathf.Clamp01(rgb.x), Mathf.Clamp01(rgb.y), Mathf.Clamp01(rgb.z));
			ZDO zDO = m_nview.GetZDO();
			if (zDO != null)
			{
				zDO.Set("RWB_WorldGateLamp_Color", new Vector3(val.r, val.g, val.b));
				zDO.Set("RWB_WorldGateLamp_HasColor", true);
				ApplyColor(val);
			}
		}
	}

	private void SyncFromZDO()
	{
		//IL_001b: 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_0031: Unknown result type (might be due to invalid IL or missing references)
		if (TryGetSavedColor(out var color) && (!hasAppliedColor || !ApproximatelySameColor(lastAppliedColor, color)))
		{
			ApplyColor(color);
		}
	}

	private bool TryGetSavedColor(out Color color)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		color = Color.white;
		if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid())
		{
			return false;
		}
		ZDO zDO = m_nview.GetZDO();
		if (zDO == null || !zDO.GetBool("RWB_WorldGateLamp_HasColor", false))
		{
			return false;
		}
		Vector3 vec = zDO.GetVec3("RWB_WorldGateLamp_Color", Vector3.one);
		color = new Color(Mathf.Clamp01(vec.x), Mathf.Clamp01(vec.y), Mathf.Clamp01(vec.z));
		return true;
	}

	private void ApplyColor(Color color)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		lastAppliedColor = color;
		hasAppliedColor = true;
		foreach (Light light in lights)
		{
			if (!((Object)(object)light == (Object)null))
			{
				light.color = color;
				light.intensity = 2.5f;
				((Behaviour)light).enabled = true;
			}
		}
		foreach (Material material in materials)
		{
			if (!((Object)(object)material == (Object)null))
			{
				material.EnableKeyword("_EMISSION");
				material.SetColor("_EmissionColor", color * 3f);
			}
		}
	}

	private int FindClosestColorIndex(Color color)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: 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_002a: 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_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		int result = 0;
		float num = float.MaxValue;
		for (int i = 0; i < colors.Count; i++)
		{
			Color val = colors[i];
			float num2 = val.r - color.r;
			float num3 = val.g - color.g;
			float num4 = val.b - color.b;
			float num5 = num2 * num2 + num3 * num3 + num4 * num4;
			if (num5 < num)
			{
				num = num5;
				result = i;
			}
		}
		return result;
	}

	private static bool ApproximatelySameColor(Color a, Color b)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		return Mathf.Abs(a.r - b.r) < 0.0001f && Mathf.Abs(a.g - b.g) < 0.0001f && Mathf.Abs(a.b - b.b) < 0.0001f;
	}
}
public static class PieceConfigRegistry
{
	private sealed class PieceOptions
	{
		public RequirementConfig[] DefaultRequirements;

		public ConfigEntry<string> CraftingCosts;

		public ConfigEntry<bool> Visible;

		public ConfigEntry<int> Comfort;

		public ConfigEntry<string> CraftingStation;
	}

	private static readonly Dictionary<string, PieceOptions> configs = new Dictionary<string, PieceOptions>();

	public static void Initialize(ConfigFile config, IEnumerable<RelicRegistration> registrations)
	{
		if (config == null || registrations == null || configs.Count > 0)
		{
			return;
		}
		foreach (RelicRegistration registration in registrations)
		{
			string text = "Pieces - " + registration.PrefabName;
			RequirementConfig[] array = CloneRequirements(registration.Requirements);
			configs[registration.PrefabName] = new PieceOptions
			{
				DefaultRequirements = array,
				CraftingCosts = config.Bind<string>(text, "CraftingCosts", FormatRequirements(array), "Build costs as ItemPrefab:Amount pairs separated by commas. Leave empty for no build cost."),
				Visible = config.Bind<bool>(text, "Visible", true, "Show this prefab in the hammer build menu."),
				Comfort = config.Bind<int>(text, "Comfort", registration.Comfort, "Comfort value for this prefab. Existing default behavior is preserved when both this value and the registration default are 0."),
				CraftingStation = config.Bind<string>(text, "CraftingStation", "piece_workbench", "Required crafting station prefab. Use None or leave empty for no required crafting station.")
			};
		}
	}

	public static RequirementConfig[] GetRequirements(RelicRegistration reg)
	{
		if (reg == null || !configs.TryGetValue(reg.PrefabName, out var value))
		{
			return (reg != null) ? CloneRequirements(reg.Requirements) : Array.Empty<RequirementConfig>();
		}
		if (TryParseRequirements(value.CraftingCosts.Value, out var requirements))
		{
			return requirements;
		}
		Logger.LogWarning((object)("[RavenwoodBiomeBanners] Invalid CraftingCosts config for " + reg.PrefabName + ". Keeping the original recipe."));
		return CloneRequirements(value.DefaultRequirements);
	}

	public static bool GetVisible(RelicRegistration reg)
	{
		PieceOptions value;
		return reg == null || !configs.TryGetValue(reg.PrefabName, out value) || value.Visible.Value;
	}

	public static int GetComfort(RelicRegistration reg)
	{
		PieceOptions value;
		return (reg != null && configs.TryGetValue(reg.PrefabName, out value)) ? Math.Max(0, value.Comfort.Value) : (reg?.Comfort ?? 0);
	}

	public static string GetCraftingStation(RelicRegistration reg)
	{
		PieceOptions value;
		string text = ((reg != null && configs.TryGetValue(reg.PrefabName, out value)) ? value.CraftingStation.Value : "piece_workbench");
		if (string.IsNullOrWhiteSpace(text) || text.Equals("None", StringComparison.OrdinalIgnoreCase) || text.Equals("Disabled", StringComparison.OrdinalIgnoreCase))
		{
			return string.Empty;
		}
		return text.Trim();
	}

	private static string FormatRequirements(IEnumerable<RequirementConfig> requirements)
	{
		if (requirements == null)
		{
			return string.Empty;
		}
		return string.Join(", ", requirements.Select((RequirementConfig r) => r.Item + ":" + r.Amount));
	}

	private static bool TryParseRequirements(string value, out RequirementConfig[] requirements)
	{
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Expected O, but got Unknown
		requirements = Array.Empty<RequirementConfig>();
		if (string.IsNullOrWhiteSpace(value))
		{
			return true;
		}
		List<RequirementConfig> list = new List<RequirementConfig>();
		string[] array = value.Split(new char[1] { ',' });
		string[] array2 = array;
		foreach (string text in array2)
		{
			string text2 = text.Trim();
			if (text2.Length != 0)
			{
				int num = text2.LastIndexOf(':');
				if (num <= 0 || num >= text2.Length - 1)
				{
					return false;
				}
				string text3 = text2.Substring(0, num).Trim();
				string s = text2.Substring(num + 1).Trim();
				if (text3.Length == 0 || !int.TryParse(s, out var result) || result <= 0)
				{
					return false;
				}
				list.Add(new RequirementConfig(text3, result, 0, true));
			}
		}
		requirements = list.ToArray();
		return true;
	}

	private static RequirementConfig[] CloneRequirements(IEnumerable<RequirementConfig> requirements)
	{
		if (requirements == null)
		{
			return Array.Empty<RequirementConfig>();
		}
		return requirements.Select((Func<RequirementConfig, RequirementConfig>)((RequirementConfig r) => new RequirementConfig(r.Item, r.Amount, r.AmountPerLevel, r.Recover))).ToArray();
	}
}
[BepInPlugin("Ravenwood.BiomeBanners", "Ravenwood Biome Banners", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class RavenwoodBiomeBanners : BaseUnityPlugin
{
	public const string PluginGUID = "Ravenwood.BiomeBanners";

	public const string PluginName = "Ravenwood Biome Banners";

	public const string PluginVersion = "1.0.0";

	private AssetBundle relicsBundle;

	public static ConfigEntry<string> PlayerPreferredCategory;

	private void Awake()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		new Harmony("ravenwood.biomebanners.harmony").PatchAll();
		PlayerPreferredCategory = ((BaseUnityPlugin)this).Config.Bind<string>("UI", "CustomHammerTab", "Ravenwood", "Custom hammer tab category name");
		PieceManager.Instance.AddPieceCategory(PlayerPreferredCategory.Value);
		BannerLightRegistry.Initialize(((BaseUnityPlugin)this).Config);
		PieceConfigRegistry.Initialize(((BaseUnityPlugin)this).Config, RelicRegistrar.AllRegistrations);
		LampInteractionRegistry.Initialize(((BaseUnityPlugin)this).Config);
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		string text = executingAssembly.GetManifestResourceNames().FirstOrDefault((string r) => r.ToLower().Contains("regions"));
		if (string.IsNullOrEmpty(text))
		{
			((BaseUnityPlugin)this).Logger.LogError((object)"Could not find embedded asset bundle resource containing 'regions'.");
			return;
		}
		using (Stream stream = executingAssembly.GetManifestResourceStream(text))
		{
			if (stream == null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Embedded asset bundle stream was null for '" + text + "'."));
				return;
			}
			using MemoryStream memoryStream = new MemoryStream();
			stream.CopyTo(memoryStream);
			relicsBundle = AssetBundle.LoadFromMemory(memoryStream.ToArray());
		}
		if ((Object)(object)relicsBundle == (Object)null)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load AssetBundle from embedded resource!");
		}
		else
		{
			PrefabManager.OnPrefabsRegistered += RegisterNow;
		}
	}

	private void RegisterNow()
	{
		if (!((Object)(object)relicsBundle == (Object)null))
		{
			RelicRegistrar.RegisterAllRelics(relicsBundle);
			LampInteractionRegistry.RegisterAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)("[RavenwoodBiomeBanners] Registration complete. Hammer tab: '" + PlayerPreferredCategory.Value + "'."));
		}
	}
}
public class RelicRegistration
{
	public string PrefabName;

	public string DisplayName;

	public RequirementConfig[] Requirements;

	public string Description;

	public int Comfort;

	public RelicRegistration(string prefab, string display, RequirementConfig[] reqs, string desc, int comfort = 0)
	{
		PrefabName = prefab;
		DisplayName = display;
		Requirements = reqs;
		Description = desc;
		Comfort = comfort;
	}
}
public static class RelicRegistrar
{
	private static bool wasAlreadyRegistered = false;

	public static readonly List<RelicRegistration> AllRegistrations = new List<RelicRegistration>
	{
		new RelicRegistration("Ravenwood_Banner", "Ravenwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Darkwood_Banner", "Darkwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Deadwood_Banner", "Deadwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Frostwood_Banner", "Frostwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whitewood_Banner", "Whitewood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Redwood_Banner", "Redwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Grimgrove_Banner", "Grimgrove Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Acacia_Banner", "Acacia Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Scarwood_Banner", "Scarwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jadewood_Banner", "Jadewood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sakura_Banner", "Sakura Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Slayer_Banner", "Slayer Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Egypt_Banner", "Egypt Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Rome_Banner", "Rome Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("JJ_Banner", "James Jones Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonestown_Banner", "Jonestown Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonesland_Banner", "Jonesland Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Murkwood_Banner", "Murkwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_1_Banner", "Pirate I Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_2_Banner", "Pirate II Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_3_Banner", "Pirate III Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_4_Banner", "Pirate IV Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whisperwood_Banner", "Whisperwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Blackwood_Banner", "Blackwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Willowwood_Banner", "Willowwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Elmwood_Banner", "Elmwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Silverstone_Banner", "Silverstone Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Steelstone_Banner", "Steelstone Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Snake_Banner", "Snake Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Gorilla_Banner", "Gorilla Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Orangutan_Banner", "Orangutan Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Mandrill_Banner", "Baboon Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Eagle_Banner", "Eagle Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sandstone_Banner", "Sandstone Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dragonstone_Banner", "Dragonstone Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Wyrmwood_Banner", "Wyrmwood Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dreadmire_Banner", "Dreadmire Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("TheWall_Banner", "TheWall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Wood", 5, 0, true),
			new RequirementConfig("LeatherScraps", 3, 0, true),
			new RequirementConfig("DeerHide", 1, 0, true),
			new RequirementConfig("RWc_Deer", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("TheRavenwood_Wall_Banner", "The Ravenwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Darkwood_Wall_Banner", "Darkwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Deadwood_Wall_Banner", "Deadwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Frostwood_Wall_Banner", "Frostwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whitewood_Wall_Banner", "Whitewood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Redwood_Wall_Banner", "Redwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Grimgrove_Wall_Banner", "Grimgrove Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Acacia_Wall_Banner", "Acacia Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Scarwood_Wall_Banner", "Scarewood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jadewood_Wall_Banner", "Jadewood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sakura_Wall_Banner", "Sakura Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Slayer_Wall_Banner", "Slayer Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Egypt_Wall_Banner", "Egypt Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Rome_Wall_Banner", "Rome Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("JJ_Wall_Banner", "James Jones Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonestown_Wall_Banner", "Jonestown Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonesland_Wall_Banner", "Jonesland Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Murkwood_Wall_Banner", "Murkwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_1_Wall_Banner", "Pirate I Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_2_Wall_Banner", "Pirate II Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_3_Wall_Banner", "Pirate III Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_4_Wall_Banner", "Pirate IV Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whisperwood_Wall_Banner", "Whisperwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Blackwood_Wall_Banner", "Blackwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Willowwood_Wall_Banner", "Willowwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Elmwood_Wall_Banner", "Elmwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Silverstone_Wall_Banner", "Silverstone Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Steelstone_Wall_Banner", "Steelstone Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Snake_Wall_Banner", "Snake Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Gorilla_Wall_Banner", "Gorilla Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Orangutan_Wall_Banner", "Orangutan Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Mandrill_Wall_Banner", "Baboon Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Eagle_Wall_Banner", "Eagle Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sandstone_Wall_Banner", "Sandstone Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dragonstone_Wall_Banner", "Dragonstone Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Wyrmwood_Wall_Banner", "Wyrmwood Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dreadmire_Wall_Banner", "Dreadmire Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("TheWall_Wall_Banner", "TheWall Wall Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BronzeNails", 2, 0, true),
			new RequirementConfig("LeatherScraps", 5, 0, true),
			new RequirementConfig("DeerHide", 2, 0, true),
			new RequirementConfig("RWc_Deer", 10, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Ravenwood_Gate_Banner", "Ravenwood Gate Banner ", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Darkwood_Gate_Banner", "Darkwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Deadwood_Gate_Banner", "Deadwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Frostwood_Gate_Banner", "Frostwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whitewood_Gate_Banner", "Whitewood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Redwood_Gate_Banner", "Redwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Grimgrove_Gate_Banner", "Grimgrove Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Acacia_Gate_Banner", "Acacia Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Scarwood_Gate_Banner", "Scarewood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jadewood_Gate_Banner", "Jadewood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sakura_Gate_Banner", "Sakura Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Slayer_Gate_Banner", "Slayer`s Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Egypt_Gate_Banner", "Egypt Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Rome_Gate_Banner", "Rome Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("JJ_Gate_Banner", "James Jones Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonestown_Gate_Banner", "Jonestown Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Jonesland_Gate_Banner", "Jonesland Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Murkwood_Gate_Banner", "Murkwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_1_Gate_Banner", "Pirate I Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_2_Gate_Banner", "Pirate II Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_3_Gate_Banner", "Pirate III Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Pirate_4_Gate_Banner", "Pirate IV Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Whisperwood_Gate_Banner", "Whisperwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Blackwood_Gate_Banner", "Blackwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Willowwood_Gate_Banner", "Willowwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Elmwood_Gate_Banner", "Elmwood Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Silverstone_Gate_Banner", "Silverstone Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Steelstone_Gate_Banner", "Steelstone Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Snake_Gate_Banner", "Snake Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Gorilla_Gate_Banner", "Gorilla Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Orangutan_Gate_Banner", "Orangutan Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Mandrill_Gate_Banner", "Baboon Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Eagle_Gate_Banner", "Eagle Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dreadmire_Gate_Banner", "Dreadmire Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("TheWall_Gate_Banner", "TheWall Gate Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("RoundLog", 25, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Sandstone_Gate_Banner", "Sandstone Entrance Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Stone", 100, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Bear", 20, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Dragonstone_Gate_Banner", "Dragonstone Entrance Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Stone", 50, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Snake", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Wyrmwood_Gate_Banner", "Wyrmwood Entrance Banner", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Stone", 100, 0, true),
			new RequirementConfig("LeatherScraps", 10, 0, true),
			new RequirementConfig("DeerHide", 3, 0, true),
			new RequirementConfig("RWc_Wolf", 5, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Biome_Gate_1", "World Gate I.", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Stone", 100, 0, true),
			new RequirementConfig("RWc_Wolf", 5, 0, true),
			new RequirementConfig("RWc_Lion", 1, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Biome_Gate_2", "World Gate II.", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Stone", 50, 0, true),
			new RequirementConfig("RWc_Snake", 5, 0, true),
			new RequirementConfig("RWc_Lion", 1, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Biome_Gate_3", "World Gate III.", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Stone", 100, 0, true),
			new RequirementConfig("RWc_Bear", 20, 0, true),
			new RequirementConfig("RWc_Lion", 1, 0, true)
		}, "A custom decorative piece."),
		new RelicRegistration("Biome_Gate_Lamp", "World Gate Lamp I.", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 5, 0, true)
		}, "A custom decorative piece.")
	};

	public static void RegisterAllRelics(AssetBundle bundle)
	{
		if (wasAlreadyRegistered || (Object)(object)bundle == (Object)null)
		{
			return;
		}
		int num = 0;
		int num2 = 0;
		foreach (RelicRegistration allRegistration in AllRegistrations)
		{
			if (RegisterRelic(bundle, allRegistration))
			{
				num++;
			}
			else
			{
				num2++;
			}
		}
		wasAlreadyRegistered = true;
	}

	private static bool RegisterRelic(AssetBundle bundle, RelicRegistration reg)
	{
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Expected O, but got Unknown
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c1: Expected O, but got Unknown
		//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01df: Unknown result type (might be due to invalid IL or missing references)
		//IL_01eb: Expected O, but got Unknown
		//IL_0234: Unknown result type (might be due to invalid IL or missing references)
		//IL_023b: Expected O, but got Unknown
		//IL_0252: Unknown result type (might be due to invalid IL or missing references)
		//IL_0257: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Expected O, but got Unknown
		//IL_027c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_0289: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: Expected O, but got Unknown
		//IL_037b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0380: Unknown result type (might be due to invalid IL or missing references)
		//IL_038c: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03af: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ba: Expected O, but got Unknown
		//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e7: Expected O, but got Unknown
		if ((Object)(object)bundle == (Object)null)
		{
			return false;
		}
		if ((Object)(object)PrefabManager.Instance.GetPrefab(reg.PrefabName) != (Object)null)
		{
			return true;
		}
		GameObject val = bundle.LoadAsset<GameObject>(reg.PrefabName);
		if ((Object)(object)val == (Object)null)
		{
			Logger.LogWarning((object)("[RavenwoodBiomeBanners] Missing prefab: " + reg.PrefabName));
			return false;
		}
		((Object)val).name = reg.PrefabName;
		ZNetView val2 = val.GetComponent<ZNetView>();
		if ((Object)(object)val2 == (Object)null)
		{
			val2 = val.AddComponent<ZNetView>();
		}
		val2.m_persistent = true;
		val2.m_syncInitialScale = true;
		if (!Object.op_Implicit((Object)(object)val.GetComponent<ZSyncTransform>()))
		{
			val.AddComponent<ZSyncTransform>();
		}
		Piece val3 = val.GetComponent<Piece>();
		if ((Object)(object)val3 == (Object)null)
		{
			val3 = val.AddComponent<Piece>();
		}
		val3.m_name = reg.DisplayName;
		val3.m_description = reg.Description;
		val3.m_groundOnly = false;
		if (reg.PrefabName.StartsWith("Biome_Gate"))
		{
			if ((Object)(object)val3 == (Object)null)
			{
				Debug.LogError((object)("[RavenwoodBiomeBanners] " + reg.PrefabName + " missing Piece (set in Unity)"));
				return false;
			}
			if ((Object)(object)val2 == (Object)null)
			{
				Debug.LogError((object)("[RavenwoodBiomeBanners] " + reg.PrefabName + " missing ZNetView (set in Unity)"));
				return false;
			}
		}
		SFX_VFX_Registry.GetEffects(reg.PrefabName, out var vfxPlace, out var sfxPlace, out var destroyVFX, out var destroySFX);
		EffectList val4 = new EffectList();
		List<EffectData> list = new List<EffectData>();
		if ((Object)(object)vfxPlace != (Object)null)
		{
			list.Add(new EffectData
			{
				m_prefab = vfxPlace,
				m_enabled = true
			});
		}
		if ((Object)(object)sfxPlace != (Object)null)
		{
			list.Add(new EffectData
			{
				m_prefab = sfxPlace,
				m_enabled = true
			});
		}
		val4.m_effectPrefabs = list.ToArray();
		val3.m_placeEffect = val4;
		WearNTear val5 = val.GetComponent<WearNTear>();
		if ((Object)(object)val5 == (Object)null)
		{
			val5 = val.AddComponent<WearNTear>();
		}
		val5.m_health = 1000f;
		val5.m_noRoofWear = true;
		EffectList val6 = new EffectList();
		List<EffectData> list2 = new List<EffectData>();
		if ((Object)(object)destroyVFX != (Object)null)
		{
			list2.Add(new EffectData
			{
				m_prefab = destroyVFX,
				m_enabled = true
			});
		}
		if ((Object)(object)destroySFX != (Object)null)
		{
			list2.Add(new EffectData
			{
				m_prefab = destroySFX,
				m_enabled = true
			});
		}
		val6.m_effectPrefabs = list2.ToArray();
		val5.m_destroyedEffect = val6;
		if (reg.PrefabName.ToLowerInvariant().Contains("banner") && !Object.op_Implicit((Object)(object)val.GetComponent<BannerInteraction>()))
		{
			val.AddComponent<BannerInteraction>();
		}
		int comfort = PieceConfigRegistry.GetComfort(reg);
		if (comfort > 0 || reg.Comfort > 0)
		{
			val3.m_comfort = comfort;
		}
		BannerLightRegistry.Register(val);
		Sprite val7 = bundle.LoadAsset<Sprite>(reg.PrefabName);
		if ((Object)(object)val7 != (Object)null)
		{
			val3.m_icon = val7;
		}
		string craftingStation = PieceConfigRegistry.GetCraftingStation(reg);
		RequirementConfig[] requirements = PieceConfigRegistry.GetRequirements(reg);
		bool visible = PieceConfigRegistry.GetVisible(reg);
		if (requirements.Length == 0)
		{
			val3.m_resources = (Requirement[])(object)new Requirement[0];
		}
		if (string.IsNullOrWhiteSpace(craftingStation))
		{
			val3.m_craftingStation = null;
		}
		PieceConfig val8 = new PieceConfig
		{
			PieceTable = "Hammer",
			Category = RavenwoodBiomeBanners.PlayerPreferredCategory.Value,
			CraftingStation = craftingStation,
			Requirements = requirements,
			Enabled = visible
		};
		if (PieceManager.Instance.GetPiece(reg.PrefabName) == null)
		{
			PieceManager.Instance.AddPiece(new CustomPiece(val, true, val8));
		}
		return true;
	}
}
public static class SFX_VFX_Registry
{
	private static readonly HashSet<string> WoodObjects = new HashSet<string>
	{
		"Ravenwood_Gate_Banner", "Deadwood_Gate_Banner", "Frostwood_Gate_Banner", "Darkwood_Gate_Banner", "Whitewood_Gate_Banner", "Redwood_Gate_Banner", "Grimgrove_Gate_Banner", "Acacia_Gate_Banner", "Scarwood_Gate_Banner", "Jadewood_Gate_Banner",
		"JJ_Gate_Banner", "Sakura_Gate_Banner", "Slayer_Gate_Banner", "Egypt_Gate_Banner", "Rome_Gate_Banner", "Snake_Gate_Banner", "Jonestown_Gate_Banner", "Jonesland_Gate_Banner", "Sandstone_Gate_Banner", "Dragonstone_Gate_Banner",
		"Murkwood_Gate_Banner", "Pirate_1_Gate_Banner", "Pirate_2_Gate_Banner", "Pirate_3_Gate_Banner", "Pirate_4_Gate_Banner", "Whisperwood_Gate_Banner", "Blackwood_Gate_Banner", "Elmwood_Gate_Banner", "Willowwood_Gate_Banner", "Silverstone_Gate_Banner",
		"Steelstone_Gate_Banner", "Gorilla_Gate_Banner", "Orangutan_Gate_Banner", "Mandrill_Gate_Banner", "Eagle_Gate_Banner", "Wyrmwood_Gate_Banner", "Dreadmire_Gate_Banner", "TheWall_Gate_Banner", "Ravenwood_Banner", "Frostwood_Banner",
		"Deadwood_Banner", "Darkwood_Banner", "Whitewood_Banner", "Redwood_Banner", "Grimgrove_Banner", "Acacia_Banner", "Scarwood_Banner", "Jadewood_Banner", "JJ_Banner", "Sakura_Banner",
		"Slayer_Banner", "Egypt_Banner", "Rome_Banner", "Snake_Banner", "Jonestown_Banner", "Jonesland_Banner", "Sandstone_Banner", "Dragonstone_Banner", "Murkwood_Banner", "Pirate_1_Banner",
		"Pirate_2_Banner", "Pirate_3_Banner", "Pirate_4_Banner", "Whisperwood_Banner", "Blackwood_Banner", "Elmwood_Banner", "Willowwood_Banner", "Silverstone_Banner", "Steelstone_Banner", "Gorilla_Banner",
		"Orangutan_Banner", "Mandrill_Banner", "Eagle_Banner", "Wyrmwood_Banner", "Dreadmire_Banner", "TheWall_Banner", "TheRavenwood_Wall_Banner", "Deadwood_Wall_Banner", "Frostwood_Wall_Banner", "Darkwood_Wall_Banner",
		"Whitewood_Wall_Banner", "Redwood_Wall_Banner", "Grimgrove_Wall_Banner", "Acacia_Wall_Banner", "Scarwood_Wall_Banner", "Jadewood_Wall_Banner", "JJ_Wall_Banner", "Sakura_Wall_Banner", "Slayer_Wall_Banner", "Egypt_Wall_Banner",
		"Rome_Wall_Banner", "Snake_Wall_Banner", "Jonestown_Wall_Banner", "Jonesland_Wall_Banner", "Sandstone_Wall_Banner", "Dragonstone_Wall_Banner", "Murkwood_Wall_Banner", "Pirate_1_Wall_Banner", "Pirate_2_Wall_Banner", "Pirate_3_Wall_Banner",
		"Pirate_4_Wall_Banner", "Whisperwood_Wall_Banner", "Blackwood_Wall_Banner", "Elmwood_Wall_Banner", "Willowwood_Wall_Banner", "Silverstone_Wall_Banner", "Steelstone_Wall_Banner", "Gorilla_Wall_Banner", "Orangutan_Wall_Banner", "Mandrill_Wall_Banner",
		"Eagle_Wall_Banner", "Wyrmwood_Wall_Banner", "Dreadmire_Wall_Banner", "TheWall_Wall_Banner"
	};

	public static void GetEffects(string prefabName, out GameObject vfxPlace, out GameObject sfxPlace, out GameObject destroyVFX, out GameObject destroySFX)
	{
		if (WoodObjects.Contains(prefabName))
		{
			ZNetScene instance = ZNetScene.instance;
			vfxPlace = ((instance != null) ? instance.GetPrefab("vfx_Place_wood") : null);
			ZNetScene instance2 = ZNetScene.instance;
			sfxPlace = ((instance2 != null) ? instance2.GetPrefab("sfx_build_hammer_wood") : null);
			ZNetScene instance3 = ZNetScene.instance;
			destroyVFX = ((instance3 != null) ? instance3.GetPrefab("vfx_destroyed") : null);
			ZNetScene instance4 = ZNetScene.instance;
			destroySFX = ((instance4 != null) ? instance4.GetPrefab("sfx_wood_break") : null);
		}
		else
		{
			ZNetScene instance5 = ZNetScene.instance;
			vfxPlace = ((instance5 != null) ? instance5.GetPrefab("vfx_Place_stone") : null);
			ZNetScene instance6 = ZNetScene.instance;
			sfxPlace = ((instance6 != null) ? instance6.GetPrefab("sfx_build_hammer_stone") : null);
			ZNetScene instance7 = ZNetScene.instance;
			destroyVFX = ((instance7 != null) ? instance7.GetPrefab("vfx_destroyed") : null);
			ZNetScene instance8 = ZNetScene.instance;
			destroySFX = ((instance8 != null) ? instance8.GetPrefab("sfx_rock_destroyed") : null);
		}
	}
}