Decompiled source of MoonforgedLightsAndDecor v1.0.2

MoonforgedLightsAndDecor.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using UnityEngine;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace Moonforged.LightsAndDecor;

public class LampColorSwitcher : MonoBehaviour, Interactable, Hoverable
{
	private int index = 0;

	private int customColorPacked = 0;

	private const int OFF_INDEX = -1;

	private const int CUSTOM_INDEX = 4;

	private Light[] lights;

	private Renderer[] allRenderers;

	private Renderer[] bulbRenderers;

	private LightFlicker[] flickers;

	private LightLod[] lods;

	private ParticleSystem[] particles;

	private Transform[] flareObjects;

	private ZNetView znv;

	private readonly Color[] colors = (Color[])(object)new Color[4]
	{
		new Color(1f, 0.82f, 0.28f),
		new Color(0.22f, 0.85f, 0.32f),
		new Color(0.28f, 0.48f, 0.95f),
		new Color(0.95f, 0.3f, 0.7f)
	};

	private readonly string[] names = new string[4] { "Yellow", "Green", "Blue", "Dvergr Pink" };

	private const string ZDO_KEY = "LampColorIndex";

	private const string ZDO_CUSTOM_COLOR = "LampCustomColor";

	private const string ZDO_INIT = "initialized";

	private void Awake()
	{
		//IL_0240: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		lights = ((Component)this).GetComponentsInChildren<Light>(true);
		allRenderers = ((Component)this).GetComponentsInChildren<Renderer>(true);
		bulbRenderers = Array.FindAll(allRenderers, delegate(Renderer r)
		{
			Material[] sharedMaterials = r.sharedMaterials;
			foreach (Material val2 in sharedMaterials)
			{
				if ((Object)(object)val2 != (Object)null && ((Object)val2).name.StartsWith("M_Bulb"))
				{
					return true;
				}
			}
			return false;
		});
		flickers = ((Component)this).GetComponentsInChildren<LightFlicker>(true);
		lods = ((Component)this).GetComponentsInChildren<LightLod>(true);
		particles = ((Component)this).GetComponentsInChildren<ParticleSystem>(true);
		flareObjects = Array.FindAll(((Component)this).GetComponentsInChildren<Transform>(true), (Transform t) => (Object)(object)t != (Object)(object)((Component)this).transform && string.Equals(((Object)t).name, "flare", StringComparison.OrdinalIgnoreCase));
		if (RelicConfigManager.EnableFlare != null)
		{
			RelicConfigManager.EnableFlare.SettingChanged += OnFlareSettingChanged;
		}
		ApplyFlareState();
		if (RelicConfigManager.BulbBrightness != null)
		{
			RelicConfigManager.BulbBrightness.SettingChanged += OnBulbBrightnessChanged;
		}
		Collider componentInChildren = ((Component)this).GetComponentInChildren<Collider>();
		if ((Object)(object)componentInChildren == (Object)null)
		{
			CapsuleCollider val = ((Component)this).gameObject.AddComponent<CapsuleCollider>();
			((Collider)val).isTrigger = true;
			val.radius = 0.25f;
			val.height = 1.2f;
		}
		znv = ((Component)this).GetComponent<ZNetView>();
		if (!Object.op_Implicit((Object)(object)znv))
		{
			return;
		}
		znv.Register<int, int>("SetLampState", (Action<long, int, int>)RPC_SetLampState);
		znv.Register<int>("RequestLampCycle", (Action<long, int>)RPC_RequestLampCycle);
		ZDO zDO = znv.GetZDO();
		if (zDO != null)
		{
			if (znv.IsOwner() && !zDO.GetBool("initialized", false))
			{
				index = Random.Range(0, colors.Length);
				customColorPacked = PackColor(RelicConfigManager.GetCustomLampColor());
				zDO.Set("LampColorIndex", index);
				zDO.Set("LampCustomColor", customColorPacked);
				zDO.Set("initialized", true);
			}
			index = NormalizeIndex(zDO.GetInt("LampColorIndex", index));
			customColorPacked = zDO.GetInt("LampCustomColor", PackColor(RelicConfigManager.GetCustomLampColor()));
			ApplyState();
		}
	}

	public bool Interact(Humanoid user, bool hold, bool alt)
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		if (hold)
		{
			return false;
		}
		if (!Object.op_Implicit((Object)(object)znv))
		{
			return false;
		}
		ZDO zDO = znv.GetZDO();
		if (zDO == null)
		{
			return false;
		}
		int num = PackColor(RelicConfigManager.GetCustomLampColor());
		if (znv.IsOwner())
		{
			CycleLamp(num);
		}
		else
		{
			znv.InvokeRPC("RequestLampCycle", new object[1] { num });
		}
		return true;
	}

	public bool Interact(Humanoid user, bool hold)
	{
		return Interact(user, hold, alt: false);
	}

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

	private void RPC_RequestLampCycle(long sender, int requestedCustomColor)
	{
		if (Object.op_Implicit((Object)(object)znv) && znv.IsOwner())
		{
			CycleLamp(requestedCustomColor);
		}
	}

	private void CycleLamp(int requestedCustomColor)
	{
		ZDO zDO = znv.GetZDO();
		if (zDO != null)
		{
			if (index == -1)
			{
				index = 0;
			}
			else if (index < 4)
			{
				index++;
			}
			else
			{
				index = -1;
			}
			if (index == 4)
			{
				customColorPacked = requestedCustomColor;
			}
			zDO.Set("LampColorIndex", index);
			zDO.Set("LampCustomColor", customColorPacked);
			znv.InvokeRPC(ZNetView.Everybody, "SetLampState", new object[2] { index, customColorPacked });
			ApplyState();
		}
	}

	private void RPC_SetLampState(long sender, int newState, int newCustomColor)
	{
		index = NormalizeIndex(newState);
		customColorPacked = newCustomColor;
		ApplyState();
	}

	private int NormalizeIndex(int value)
	{
		if (value == -1)
		{
			return -1;
		}
		if (value < 0 || value > 4)
		{
			return 0;
		}
		return value;
	}

	private void ApplyState()
	{
		//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0169: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: Unknown result type (might be due to invalid IL or missing references)
		//IL_0351: Unknown result type (might be due to invalid IL or missing references)
		//IL_0357: Unknown result type (might be due to invalid IL or missing references)
		index = NormalizeIndex(index);
		if (index == -1)
		{
			Light[] array = lights;
			foreach (Light val in array)
			{
				if (Object.op_Implicit((Object)(object)val))
				{
					((Behaviour)val).enabled = false;
				}
			}
			LightFlicker[] array2 = flickers;
			foreach (LightFlicker val2 in array2)
			{
				if (Object.op_Implicit((Object)(object)val2))
				{
					((Behaviour)val2).enabled = false;
				}
			}
			LightLod[] array3 = lods;
			foreach (LightLod val3 in array3)
			{
				if (Object.op_Implicit((Object)(object)val3))
				{
					((Behaviour)val3).enabled = false;
				}
			}
			ParticleSystem[] array4 = particles;
			foreach (ParticleSystem val4 in array4)
			{
				if (Object.op_Implicit((Object)(object)val4))
				{
					val4.Stop(true);
					((Component)val4).gameObject.SetActive(false);
				}
			}
			Renderer[] array5 = bulbRenderers;
			foreach (Renderer val5 in array5)
			{
				Material[] materials = val5.materials;
				foreach (Material val6 in materials)
				{
					if (val6.HasProperty("_EmissionColor"))
					{
						val6.DisableKeyword("_EMISSION");
						val6.SetColor("_EmissionColor", Color.black);
					}
				}
			}
			return;
		}
		Color val7 = ((index == 4) ? UnpackColor(customColorPacked) : colors[index]);
		Light[] array6 = lights;
		foreach (Light val8 in array6)
		{
			if (Object.op_Implicit((Object)(object)val8))
			{
				((Behaviour)val8).enabled = true;
				val8.color = val7;
			}
		}
		LightFlicker[] array7 = flickers;
		foreach (LightFlicker val9 in array7)
		{
			if (Object.op_Implicit((Object)(object)val9))
			{
				((Behaviour)val9).enabled = true;
			}
		}
		LightLod[] array8 = lods;
		foreach (LightLod val10 in array8)
		{
			if (Object.op_Implicit((Object)(object)val10))
			{
				((Behaviour)val10).enabled = true;
			}
		}
		ParticleSystem[] array9 = particles;
		foreach (ParticleSystem val11 in array9)
		{
			if (Object.op_Implicit((Object)(object)val11))
			{
				((Component)val11).gameObject.SetActive(true);
				val11.Play();
			}
		}
		Renderer[] array10 = bulbRenderers;
		foreach (Renderer val12 in array10)
		{
			Material[] materials2 = val12.materials;
			foreach (Material val13 in materials2)
			{
				if (!((Object)(object)val13 == (Object)null) && ((Object)val13).name.StartsWith("M_Bulb"))
				{
					TintBulbMaterial(val13, val7);
					if (val13.HasProperty("_EmissionColor"))
					{
						val13.EnableKeyword("_EMISSION");
						val13.SetColor("_EmissionColor", val7 * GetBulbBrightness());
					}
				}
			}
		}
		ApplyFlareState();
	}

	public string GetHoverText()
	{
		index = NormalizeIndex(index);
		if (index == -1)
		{
			return "[E] Turn On";
		}
		string text = ((index == 4) ? "Custom" : names[index]);
		return "[E] Change color (" + text + ")";
	}

	private static int PackColor(Color color)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//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_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		Color32 val = Color32.op_Implicit(color);
		return (val.r << 16) | (val.g << 8) | val.b;
	}

	private static Color UnpackColor(int packed)
	{
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: 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_0036: Unknown result type (might be due to invalid IL or missing references)
		byte b = (byte)((packed >> 16) & 0xFF);
		byte b2 = (byte)((packed >> 8) & 0xFF);
		byte b3 = (byte)(packed & 0xFF);
		return Color32.op_Implicit(new Color32(b, b2, b3, byte.MaxValue));
	}

	public string GetHoverName()
	{
		return "Lamp";
	}

	public float GetHoverOffset()
	{
		return 0f;
	}

	private void OnFlareSettingChanged(object sender, EventArgs e)
	{
		ApplyFlareState();
	}

	private void ApplyFlareState()
	{
		if (flareObjects == null)
		{
			return;
		}
		bool flag = index != -1 && (RelicConfigManager.EnableFlare == null || RelicConfigManager.EnableFlare.Value);
		Transform[] array = flareObjects;
		foreach (Transform val in array)
		{
			if (!Object.op_Implicit((Object)(object)val))
			{
				continue;
			}
			if (!flag)
			{
				ParticleSystem[] componentsInChildren = ((Component)val).GetComponentsInChildren<ParticleSystem>(true);
				foreach (ParticleSystem val2 in componentsInChildren)
				{
					if (Object.op_Implicit((Object)(object)val2))
					{
						val2.Stop(false, (ParticleSystemStopBehavior)0);
					}
				}
			}
			((Component)val).gameObject.SetActive(flag);
			if (!flag)
			{
				continue;
			}
			ParticleSystem[] componentsInChildren2 = ((Component)val).GetComponentsInChildren<ParticleSystem>(true);
			foreach (ParticleSystem val3 in componentsInChildren2)
			{
				if (Object.op_Implicit((Object)(object)val3) && ((Component)val3).gameObject.activeInHierarchy && !val3.isPlaying)
				{
					val3.Play(false);
				}
			}
		}
	}

	private static float GetBulbBrightness()
	{
		return (RelicConfigManager.BulbBrightness != null) ? RelicConfigManager.BulbBrightness.Value : 1.5f;
	}

	private static void TintBulbMaterial(Material material, Color color)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: 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_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		if (material.HasProperty("_Color"))
		{
			Color val = color;
			val.a = material.GetColor("_Color").a;
			material.SetColor("_Color", val);
		}
		if (material.HasProperty("_BaseColor"))
		{
			Color val2 = color;
			val2.a = material.GetColor("_BaseColor").a;
			material.SetColor("_BaseColor", val2);
		}
	}

	private void OnBulbBrightnessChanged(object sender, EventArgs e)
	{
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: 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_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		if (bulbRenderers == null)
		{
			return;
		}
		Color val = ((index == 4) ? UnpackColor(customColorPacked) : colors[(NormalizeIndex(index) != -1) ? NormalizeIndex(index) : 0]);
		Renderer[] array = bulbRenderers;
		foreach (Renderer val2 in array)
		{
			if (!Object.op_Implicit((Object)(object)val2))
			{
				continue;
			}
			Material[] materials = val2.materials;
			foreach (Material val3 in materials)
			{
				if (!((Object)(object)val3 == (Object)null) && ((Object)val3).name.StartsWith("M_Bulb") && val3.HasProperty("_EmissionColor"))
				{
					val3.SetColor("_EmissionColor", (index == -1) ? Color.black : (val * GetBulbBrightness()));
				}
			}
		}
	}

	private void OnDestroy()
	{
		if (RelicConfigManager.EnableFlare != null)
		{
			RelicConfigManager.EnableFlare.SettingChanged -= OnFlareSettingChanged;
		}
		if (RelicConfigManager.BulbBrightness != null)
		{
			RelicConfigManager.BulbBrightness.SettingChanged -= OnBulbBrightnessChanged;
		}
	}
}
[BepInPlugin("Moonforged.LightsAndDecor", "Moonforged Lights and Decor", "1.0.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MoonforgedLightsAndDecor : BaseUnityPlugin
{
	public const string PluginGUID = "Moonforged.LightsAndDecor";

	public const string PluginName = "Moonforged Lights and Decor";

	public const string PluginVersion = "1.0.2";

	private AssetBundle relicsBundle;

	private void Awake()
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		RelicConfigManager.Init("Moonforged.LightsAndDecor", ((BaseUnityPlugin)this).Config);
		string platformBundleResourcePath = GetPlatformBundleResourcePath();
		relicsBundle = EmbeddedAssetBundleLoader.LoadBundle(platformBundleResourcePath);
		if ((Object)(object)relicsBundle == (Object)null)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("Failed to load embedded AssetBundle: " + platformBundleResourcePath));
			return;
		}
		RelicRegistrar.InitConfig(((BaseUnityPlugin)this).Config);
		foreach (string allCategory in RelicRegistrar.GetAllCategories())
		{
			PieceManager.Instance.AddPieceCategory(allCategory);
		}
		PrefabManager.OnPrefabsRegistered += OnPrefabsRegistered;
	}

	private static string GetPlatformBundleResourcePath()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Invalid comparison between Unknown and I4
		RuntimePlatform platform = Application.platform;
		RuntimePlatform val = platform;
		if ((int)val <= 1)
		{
			return "Moonforged.LightsAndDecor.mld_windows";
		}
		return "Moonforged.LightsAndDecor.mld_windows";
	}

	private void OnDestroy()
	{
		PrefabManager.OnPrefabsRegistered -= OnPrefabsRegistered;
	}

	private void OnPrefabsRegistered()
	{
		((MonoBehaviour)this).StartCoroutine(DelayedRegister(relicsBundle));
	}

	private IEnumerator DelayedRegister(AssetBundle bundle)
	{
		while ((Object)(object)ZNetScene.instance == (Object)null)
		{
			yield return null;
		}
		RelicRegistrar.RegisterAllRelics(bundle);
	}
}
public static class EmbeddedAssetBundleLoader
{
	public static AssetBundle LoadBundle(string resourcePath)
	{
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		using Stream stream = executingAssembly.GetManifestResourceStream(resourcePath);
		if (stream == null)
		{
			Debug.LogError((object)("AssetBundle resource not found: " + resourcePath));
			return null;
		}
		using MemoryStream memoryStream = new MemoryStream();
		stream.CopyTo(memoryStream);
		return AssetBundle.LoadFromMemory(memoryStream.ToArray());
	}
}
public static class RelicConfigManager
{
	public static ConfigEntry<string> CustomLampColor { get; private set; }

	public static ConfigEntry<bool> EnableFlare { get; private set; }

	public static ConfigEntry<float> BulbBrightness { get; private set; }

	public static void Init(string modName, ConfigFile config)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Expected O, but got Unknown
		BulbBrightness = config.Bind<float>("Lamps", "BulbBrightness", 1.5f, new ConfigDescription("Bulb emission brightness, separate from ground lighting. Lower values preserve more color; higher values create stronger glow but may wash out colors. Applies immediately when changed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
		EnableFlare = AddEntry(config, "Lamps", "EnableFlare", defaultValue: true, "Enable the orange flare particle effects around lamp bulbs. Disable to hide all lamp flares without changing lamp lighting or colors. Applies immediately when this setting changes.");
		CustomLampColor = AddEntry(config, "Lamps", "CustomLampColor", "#FF7A00", "Custom lamp color added after the built-in Yellow, Green, Blue and Dvergr Pink colors. Use HTML hex format, for example #FF7A00.");
	}

	public static Color GetCustomLampColor()
	{
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		Color result = default(Color);
		if (CustomLampColor != null && ColorUtility.TryParseHtmlString(CustomLampColor.Value, ref result))
		{
			return result;
		}
		return new Color(1f, 0.48f, 0f);
	}

	public static ConfigEntry<T> AddEntry<T>(ConfigFile cfg, string section, string key, T defaultValue, string description)
	{
		return cfg.Bind<T>(section, key, defaultValue, description);
	}
}
public class RelicRegistration
{
	public string PrefabName;

	public string DisplayName;

	public RequirementConfig[] Requirements;

	public string Description;

	public string Category;

	public int Comfort;

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

	private static ConfigEntry<string> CustomHammerTabConfig;

	public static readonly List<RelicRegistration> AllRegistrations = new List<RelicRegistration>
	{
		new RelicRegistration("M_FineWood_Throne", "Moonforged FineWood Throne", (RequirementConfig[])(object)new RequirementConfig[1]
		{
			new RequirementConfig("FineWood", 20, 0, true)
		}, "A custom decorative piece.", "furniture", 2),
		new RelicRegistration("M_Werewolf_Throne", "Moonforged Werewolf Throne", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("WolfPelt", 5, 0, true),
			new RequirementConfig("TrophyFenring", 3, 0, true),
			new RequirementConfig("Iron", 5, 0, true)
		}, "A custom decorative piece.", "furniture", 2),
		new RelicRegistration("M_Wolf_Throne", "Moonforged Geirrhafa`s Throne", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("FineWood", 5, 0, true),
			new RequirementConfig("WolfPelt", 5, 0, true),
			new RequirementConfig("Silver", 5, 0, true),
			new RequirementConfig("TrophyCultist_Hildir", 1, 0, true)
		}, "A custom decorative piece.", "furniture", 2),
		new RelicRegistration("M_Iron_Throne", "Moonforged Iron Throne", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("Bronze", 10, 0, true)
		}, "A custom decorative piece.", "furniture", 2),
		new RelicRegistration("M_PersianRug_1", "Persian Rug I", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_PersianRug_2", "Persian Rug II", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 2, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_PersianRug_4", "Regal Persian Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 2, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Stairs_Rug", "Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Stairs_Rug_Blue", "Blue Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteBlue", 2, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Stairs_Rug_Blue_Runed", "Runed Blue Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteBlue", 2, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Stairs_Rug_Small", "Small Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 2, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Stairs_Runed", "Runed Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Stairs_Rug_Wool", "Wool Stair Rug", (RequirementConfig[])(object)new RequirementConfig[1]
		{
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Stairs_Rug_Green_Runed", "Runed Green Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("Ooze", 1, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Stairs_Rug_Green", "Green Stair Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("Ooze", 1, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_BlueRug", "Blue Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteBlue", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Red_2m_semiround_rug", "Red Semiround Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_2m_semiround_rug", "Brown Semiround Rug", (RequirementConfig[])(object)new RequirementConfig[1]
		{
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Round_Red_Rug", "Round Red Jute Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 4, 0, true),
			new RequirementConfig("DeerHide", 4, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_TrollRoundRug", "Troll Hide Round Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("TrollHide", 5, 0, true),
			new RequirementConfig("DeerHide", 5, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_TrollHideRug", "Troll Hide Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("TrollHide", 10, 0, true),
			new RequirementConfig("DeerHide", 5, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_TrollSemiRoundRug", "Troll Hide Semi Round Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("TrollHide", 2, 0, true),
			new RequirementConfig("DeerHide", 5, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_TrollSemiRoundRugRuned", "Troll Hide Runed Semi Round Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("TrollHide", 2, 0, true),
			new RequirementConfig("GreydwarfEye", 2, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_TrollPeltRug", "Troll Pelt Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("TrollHide", 10, 0, true),
			new RequirementConfig("TrophyForestTroll", 1, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_Jute_Red_Simple_Rug", "Simple Red Jute Rug", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("JuteRed", 2, 0, true),
			new RequirementConfig("DeerHide", 5, 0, true)
		}, "A custom decorative piece.", "furniture"),
		new RelicRegistration("M_AsianTeaSetPlate", "Tea Plate", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Wood", 1, 0, true),
			new RequirementConfig("FineWood", 1, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_bigplate", "Large Porcelain Plate", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_cup1", "Porcelain Tea Cup", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_justplate1", "Large Porcelain Plate II", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_justcup1", "Porcelain Tea Cup II", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_teapot", "Porcelain Teapot", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_AsianTeaPot", "Asian Teapot", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_AsianTeaCup", "Asian Tea Cup", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_AsianTeaPotLid", "Teapot Lid", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_ChineseVase", "Chinese Vase", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Crystal", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_ChineseTeaSet", "Chinese Tea Set", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Stone", 5, 0, true),
			new RequirementConfig("Resin", 2, 0, true)
		}, "A custom decorative piece.", "clutter"),
		new RelicRegistration("M_Emberwrought_Lamp", "Emberwrought Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Wrought_Iron_Lantern_Post", "Wrought Iron Lamp Post", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Classic_Lamp", "Classic Street Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Japanese_Lamp", "Japanese Street Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Classic_Iron_Bench", "Classic Iron Bench", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true)
		}, "Dvergr Forged Classic Iron Bench.", "furniture"),
		new RelicRegistration("M_Classic_Double_Lamp", "Classic Double Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron 2x Lamp.", "building"),
		new RelicRegistration("M_Classic_Double_Lamp_2", "Classic Double Lamp II", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron 2x Lamp.", "building"),
		new RelicRegistration("M_classic_bin", "Classic Garden Bin", (RequirementConfig[])(object)new RequirementConfig[2]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true)
		}, "Dvergr Forged Classic Iron Bin.", "furniture"),
		new RelicRegistration("M_Classic_Single_Lamp", "Classic Single Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron 1x Lamp.", "building"),
		new RelicRegistration("M_Chinese_Lamp", "Chinese Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_classic_quad_light", "Classic Quad Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron 4x Lamp.", "building"),
		new RelicRegistration("M_Classic_Wall_Lamp", "Classic Wall Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron Wall Lamp.", "building"),
		new RelicRegistration("M_Classic_Wall_Lamp_2", "Classic Wall Lamp II", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "Dvergr Forged Classic Iron Wall Lamp.", "building"),
		new RelicRegistration("M_Pirate_Ship_Cannon", "Pirate Cannon", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Pirate_Ship_Cannon_Balls", "Cannonballs", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_M1857_12Pounder_Cannon_Cannonballs", "12-Pounder Cannonballs", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_M1857_12Pounder_Cannon", "12-Pounder Cannon", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("Wood", 4, 0, true),
			new RequirementConfig("Resin", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_BookShelf", "Ancient Root Bookshelf", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("FineWood", 20, 0, true),
			new RequirementConfig("RoundLog", 5, 0, true),
			new RequirementConfig("Resin", 4, 0, true),
			new RequirementConfig("ElderBark", 5, 0, true)
		}, "", "building"),
		new RelicRegistration("M_VikingBed", "Viking Chieftain’s Bed", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("FineWood", 20, 0, true),
			new RequirementConfig("WolfPelt", 5, 0, true),
			new RequirementConfig("LoxPelt", 5, 0, true),
			new RequirementConfig("IronNails", 20, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Dreamkeel", "Moonforged Dreamkeel", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("FineWood", 5, 0, true),
			new RequirementConfig("WolfPelt", 1, 0, true),
			new RequirementConfig("LoxPelt", 2, 0, true),
			new RequirementConfig("IronNails", 4, 0, true)
		}, "", "building"),
		new RelicRegistration("M_LeafChair", "Moonforged Leaf Chair", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("FineWood", 5, 0, true),
			new RequirementConfig("Dandelion", 10, 0, true),
			new RequirementConfig("Wood", 5, 0, true)
		}, "", "building"),
		new RelicRegistration("M_Viking_Greathall_Table", "Moonforged Viking Greathall Table", (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("FineWood", 20, 0, true),
			new RequirementConfig("RoundLog", 10, 0, true),
			new RequirementConfig("Wood", 25, 0, true),
			new RequirementConfig("IronNails", 10, 0, true)
		}, "", "building"),
		new RelicRegistration("M_GargoyleLamp", "Moonforged Gargoyle Wall Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Iron", 2, 0, true),
			new RequirementConfig("Resin", 10, 0, true),
			new RequirementConfig("GreydwarfEye", 20, 0, true)
		}, "", "building"),
		new RelicRegistration("M_DragonLamp", "Moonforged Dragon Wall Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("Silver", 10, 0, true),
			new RequirementConfig("Resin", 10, 0, true),
			new RequirementConfig("GreydwarfEye", 20, 0, true)
		}, "", "building"),
		new RelicRegistration("M_CrowLamp", "Moonforged Raven Wall Lamp", (RequirementConfig[])(object)new RequirementConfig[3]
		{
			new RequirementConfig("BlackMetal", 2, 0, true),
			new RequirementConfig("Resin", 10, 0, true),
			new RequirementConfig("GreydwarfEye", 20, 0, true)
		}, "", "building")
	};

	public static void InitConfig(ConfigFile cfg)
	{
		CustomHammerTabConfig = RelicConfigManager.AddEntry(cfg, "Categories", "CustomHammerTab", "Moonforged Lights and Decor", "Hammer tab name for all Moonforged Lights and Decor pieces. Enter an existing category name or any new custom category name.");
	}

	public static IEnumerable<string> GetAllCategories()
	{
		return AllRegistrations.Select((RelicRegistration r) => CategoryToTab(r.Category)).Distinct();
	}

	private static string CategoryToTab(string category)
	{
		if (CustomHammerTabConfig != null && !string.IsNullOrWhiteSpace(CustomHammerTabConfig.Value))
		{
			return CustomHammerTabConfig.Value.Trim();
		}
		return "Moonforged Lights and Decor";
	}

	public static void RegisterAllRelics(AssetBundle bundle)
	{
		if (wasAlreadyRegistered)
		{
			return;
		}
		foreach (RelicRegistration allRegistration in AllRegistrations)
		{
			RegisterRelic(bundle, allRegistration);
		}
		wasAlreadyRegistered = true;
	}

	private static void RegisterRelic(AssetBundle bundle, RelicRegistration reg)
	{
		//IL_0507: Unknown result type (might be due to invalid IL or missing references)
		//IL_050e: Expected O, but got Unknown
		//IL_0524: Unknown result type (might be due to invalid IL or missing references)
		//IL_0529: Unknown result type (might be due to invalid IL or missing references)
		//IL_0535: Expected O, but got Unknown
		//IL_0546: Unknown result type (might be due to invalid IL or missing references)
		//IL_054b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0558: Expected O, but got Unknown
		//IL_0595: Unknown result type (might be due to invalid IL or missing references)
		//IL_059c: Expected O, but got Unknown
		//IL_05b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c5: Expected O, but got Unknown
		//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05db: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e8: Expected O, but got Unknown
		//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0702: Unknown result type (might be due to invalid IL or missing references)
		//IL_0714: Unknown result type (might be due to invalid IL or missing references)
		//IL_071d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0726: Unknown result type (might be due to invalid IL or missing references)
		//IL_0735: Expected O, but got Unknown
		//IL_073e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0748: Expected O, but got Unknown
		if ((Object)(object)bundle == (Object)null)
		{
			return;
		}
		GameObject val = bundle.LoadAsset<GameObject>(reg.PrefabName);
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogWarning((object)("[Moonforged Lights and Decor] Missing prefab in AssetBundle: " + reg.PrefabName));
			return;
		}
		((Object)val).name = reg.PrefabName;
		ZNetView val2 = val.GetComponent<ZNetView>() ?? 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>() ?? val.AddComponent<Piece>();
		val3.m_name = reg.DisplayName;
		val3.m_description = reg.Description;
		val3.m_groundOnly = false;
		GameObject val4 = null;
		GameObject val5 = null;
		GameObject val6 = null;
		GameObject val7 = null;
		string text = reg.PrefabName.ToLowerInvariant();
		bool flag = false;
		if (reg.DisplayName != null && reg.DisplayName.ToLower().Contains("window"))
		{
			flag = true;
		}
		if (reg.PrefabName.ToLower().Contains("mozaic"))
		{
			flag = true;
		}
		HashSet<string> hashSet = new HashSet<string> { "M_teapot", "M_cup1", "M_justcup1", "M_justplate1", "M_bigplate", "M_AsianTeaPot", "M_AsianTeaCup", "M_AsianTeaPotLid", "M_ChineseVase" };
		bool flag2 = hashSet.Contains(reg.PrefabName);
		bool flag3 = text.Contains("rug") || text.Contains("carpet");
		bool flag4 = text.Contains("lamp") || text.Contains("lantern") || text.Contains("light");
		bool flag5 = text.Contains("cannon");
		bool flag6 = text.Contains("bench") || text.Contains("bin");
		string text2 = reg.DisplayName?.ToLowerInvariant() ?? "";
		bool flag7 = flag3 || text2.Contains("rug") || text2.Contains("carpet");
		string[] usage = (flag4 ? new string[1] { PieceUsages.Lighting } : (flag5 ? new string[1] { PieceUsages.Defense } : ((!(flag7 || flag6) && !text.Contains("throne") && !text.Contains("bookshelf") && !text.Contains("bed") && !text.Contains("dreamkeel") && !text.Contains("chair") && !text.Contains("table")) ? new string[1] { PieceUsages.Decor } : new string[1] { PieceUsages.Furniture })));
		if (flag2)
		{
			ZNetScene instance = ZNetScene.instance;
			val4 = ((instance != null) ? instance.GetPrefab("vfx_Place_crystal") : null);
			ZNetScene instance2 = ZNetScene.instance;
			val5 = ((instance2 != null) ? instance2.GetPrefab("sfx_build_hammer_crystal") : null);
			ZNetScene instance3 = ZNetScene.instance;
			val7 = ((instance3 != null) ? instance3.GetPrefab("sfx_clay_pot_break") : null);
		}
		else if (flag3)
		{
			ZNetScene instance4 = ZNetScene.instance;
			val4 = ((instance4 != null) ? instance4.GetPrefab("vfx_Place_wood") : null);
			ZNetScene instance5 = ZNetScene.instance;
			val5 = ((instance5 != null) ? instance5.GetPrefab("sfx_build_hammer_wood") : null);
			ZNetScene instance6 = ZNetScene.instance;
			val6 = ((instance6 != null) ? instance6.GetPrefab("vfx_destroyed") : null);
			ZNetScene instance7 = ZNetScene.instance;
			val7 = ((instance7 != null) ? instance7.GetPrefab("sfx_wood_break") : null);
		}
		else if (flag4 || flag5 || flag6)
		{
			ZNetScene instance8 = ZNetScene.instance;
			val4 = ((instance8 != null) ? instance8.GetPrefab("vfx_Place_stone") : null);
			ZNetScene instance9 = ZNetScene.instance;
			val5 = ((instance9 != null) ? instance9.GetPrefab("sfx_build_hammer_metal") : null);
			ZNetScene instance10 = ZNetScene.instance;
			val6 = ((instance10 != null) ? instance10.GetPrefab("vfx_destroyed") : null);
			ZNetScene instance11 = ZNetScene.instance;
			val7 = ((instance11 != null) ? instance11.GetPrefab("sfx_metal_blocked") : null);
		}
		else if (flag)
		{
			ZNetScene instance12 = ZNetScene.instance;
			val4 = ((instance12 != null) ? instance12.GetPrefab("vfx_Place_crystal") : null);
			ZNetScene instance13 = ZNetScene.instance;
			val5 = ((instance13 != null) ? instance13.GetPrefab("sfx_build_hammer_crystal") : null);
			ZNetScene instance14 = ZNetScene.instance;
			val7 = ((instance14 != null) ? instance14.GetPrefab("sfx_clay_pot_break") : null);
		}
		else
		{
			ZNetScene instance15 = ZNetScene.instance;
			val4 = ((instance15 != null) ? instance15.GetPrefab("vfx_Place_wood") : null);
			ZNetScene instance16 = ZNetScene.instance;
			val5 = ((instance16 != null) ? instance16.GetPrefab("sfx_build_hammer_wood") : null);
			ZNetScene instance17 = ZNetScene.instance;
			val6 = ((instance17 != null) ? instance17.GetPrefab("vfx_destroyed") : null);
			ZNetScene instance18 = ZNetScene.instance;
			val7 = ((instance18 != null) ? instance18.GetPrefab("sfx_wood_break") : null);
		}
		EffectList val8 = new EffectList();
		List<EffectData> list = new List<EffectData>();
		if ((Object)(object)val4 != (Object)null)
		{
			list.Add(new EffectData
			{
				m_prefab = val4
			});
		}
		if ((Object)(object)val5 != (Object)null)
		{
			list.Add(new EffectData
			{
				m_prefab = val5
			});
		}
		val8.m_effectPrefabs = list.ToArray();
		val3.m_placeEffect = val8;
		WearNTear val9 = val.GetComponent<WearNTear>() ?? val.AddComponent<WearNTear>();
		val9.m_health = 1000f;
		val9.m_noRoofWear = true;
		EffectList val10 = new EffectList();
		List<EffectData> list2 = new List<EffectData>();
		if ((Object)(object)val6 != (Object)null)
		{
			list2.Add(new EffectData
			{
				m_prefab = val6
			});
		}
		if ((Object)(object)val7 != (Object)null)
		{
			list2.Add(new EffectData
			{
				m_prefab = val7
			});
		}
		val10.m_effectPrefabs = list2.ToArray();
		val9.m_destroyedEffect = val10;
		if (reg.Comfort > 0)
		{
			val3.m_comfort = reg.Comfort;
		}
		Sprite val11 = bundle.LoadAsset<Sprite>(reg.PrefabName);
		if ((Object)(object)val11 != (Object)null)
		{
			val3.m_icon = val11;
		}
		if (flag4 && (Object)(object)val.GetComponent<LampColorSwitcher>() == (Object)null)
		{
			val.AddComponent<LampColorSwitcher>();
		}
		if (flag)
		{
			Renderer[] componentsInChildren = val.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val12 in componentsInChildren)
			{
				if (Object.op_Implicit((Object)(object)val12))
				{
					val12.shadowCastingMode = (ShadowCastingMode)1;
					val12.receiveShadows = true;
				}
			}
		}
		string craftingStation = (reg.Requirements.Any((RequirementConfig r) => r.Item.ToLower() == "iron") ? "forge" : "piece_workbench");
		PieceConfig val13 = new PieceConfig
		{
			PieceTable = "Hammer",
			Category = CategoryToTab(reg.Category),
			Usage = usage,
			CraftingStation = craftingStation,
			Requirements = reg.Requirements
		};
		PieceManager.Instance.AddPiece(new CustomPiece(val, false, val13));
	}
}