Decompiled source of BrickWalls v0.3.2

plugins\BrickWalls.dll

Decompiled a month ago
using System.Collections.Generic;
using System.Diagnostics;
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 Jotunn.Utils;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("BrickWalls")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BrickWalls")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
namespace BrickWalls
{
	[BepInPlugin("org.bepinex.plugins.bid.brickwalls", "BrickWalls", "0.3.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	internal class BrickWalls : BaseUnityPlugin
	{
		public const string PluginGUID = "org.bepinex.plugins.bid.brickwalls";

		public const string PluginName = "BrickWalls";

		public const string PluginVersion = "0.3.2";

		public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization();

		public static ConfigEntry<float> ClayMinAltitudeConfig;

		public static ConfigEntry<float> ClayMaxAltitudeConfig;

		public static ConfigEntry<float> ClayMinConfig;

		public static ConfigEntry<float> ClayMaxConfig;

		private Dictionary<string, Material> Materials = new Dictionary<string, Material>();

		private readonly Harmony harmony = new Harmony("org.bepinex.plugins.bid.brickwalls");

		private static string CategoryName;

		private void Awake()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			Logger.LogInfo((object)"BrickWalls has landed");
			CategoryName = "bricks";
			PrefabManager.OnVanillaPrefabsAvailable += AddClonedItems;
			CreateConfigValues();
			new Harmony("org.bepinex.plugins.bid.brickwalls").PatchAll();
		}

		private void CreateConfigValues()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Expected O, but got Unknown
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Expected O, but got Unknown
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Expected O, but got Unknown
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Expected O, but got Unknown
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Expected O, but got Unknown
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
			ClayMinAltitudeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "ClayMinAltitude", -0.5f, new ConfigDescription("Min altitude clay will spawn", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			} }));
			ClayMaxAltitudeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "ClayMaxAltitude", 1f, new ConfigDescription("Max altitude clay will spawn", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			} }));
			ClayMinConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "ClayMin", 1f, new ConfigDescription("Min amount per zone", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			} }));
			ClayMaxConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "ClayMax", 10f, new ConfigDescription("values 0-1: chance to place clay; value 1+: max amount per zone", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			} }));
			SynchronizationManager.OnConfigurationSynchronized += delegate(object obj, ConfigurationSynchronizationEventArgs attr)
			{
				_ = attr.InitialSynchronization;
			};
		}

		private void OnDestroy()
		{
			harmony.UnpatchSelf();
		}

		private void ChangeMaterial(GameObject obj, Material matNew, Material matWorn, Material matBroken)
		{
			WearNTear component = obj.GetComponent<WearNTear>();
			Transform val = obj.transform.Find("new");
			component.m_new = ((Component)val).gameObject;
			MeshRenderer[] componentsInChildren = ((Component)val).GetComponentsInChildren<MeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).material = matNew;
			}
			val = obj.transform.Find("worn");
			component.m_worn = ((Component)val).gameObject;
			componentsInChildren = ((Component)val).GetComponentsInChildren<MeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).material = matWorn;
			}
			val = obj.transform.Find("broken");
			component.m_broken = ((Component)val).gameObject;
			componentsInChildren = ((Component)val).GetComponentsInChildren<MeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).material = matBroken;
			}
		}

		private void LoadMaterial(AssetBundle brickWallsAssetBundle, string name, int scale = 1)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			Material val = brickWallsAssetBundle.LoadAsset<Material>(name);
			if (scale != 1)
			{
				Vector2 val2 = default(Vector2);
				((Vector2)(ref val2))..ctor((float)scale, (float)scale);
				Material val3 = new Material(val);
				val3.SetTextureScale("_MainTex", val2);
				Materials.Add(name + scale, val3);
			}
			else
			{
				Materials.Add(name, val);
			}
		}

		private Material GetMaterial(string name)
		{
			return Materials[name];
		}

		private void LoadMaterials(AssetBundle brickWallsAssetBundle)
		{
			LoadMaterial(brickWallsAssetBundle, "mat_clay_ore");
			LoadMaterial(brickWallsAssetBundle, "mat_claywhite_ore");
			LoadMaterial(brickWallsAssetBundle, "Color_clay_new");
			LoadMaterial(brickWallsAssetBundle, "Color_clay_worn");
			LoadMaterial(brickWallsAssetBundle, "Color_clay_broken");
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_new");
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_worn");
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_broken");
			LoadMaterial(brickWallsAssetBundle, "Color_clay_new", 3);
			LoadMaterial(brickWallsAssetBundle, "Color_clay_worn", 3);
			LoadMaterial(brickWallsAssetBundle, "Color_clay_broken", 3);
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_new", 3);
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_worn", 3);
			LoadMaterial(brickWallsAssetBundle, "Color_claywhite_broken", 3);
			LoadMaterial(brickWallsAssetBundle, "roof_clay_new");
			LoadMaterial(brickWallsAssetBundle, "roof_claywhite_new");
			LoadMaterial(brickWallsAssetBundle, "roof_clay_worn");
			LoadMaterial(brickWallsAssetBundle, "roof_claywhite_worn");
			LoadMaterial(brickWallsAssetBundle, "roof_clay_broken");
			LoadMaterial(brickWallsAssetBundle, "roof_claywhite_broken");
		}

		private GameObject AddOre(string name)
		{
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Expected O, but got Unknown
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			string name2 = "item_" + name;
			GameObject val = PrefabManager.Instance.CreateClonedPrefab("ClayOre" + name, "CopperOre");
			((Object)val).name = name2;
			ItemData itemData = val.GetComponent<ItemDrop>().m_itemData;
			itemData.m_shared.m_name = "$item_" + name + "ore";
			itemData.m_shared.m_description = "$item_" + name + "ore_description";
			itemData.m_shared.m_weight = 2f;
			itemData.m_shared.m_maxStackSize = 50;
			itemData.m_shared.m_teleportable = true;
			((Component)val.transform.GetChild(0)).GetComponentInChildren<Renderer>().sharedMaterial = GetMaterial("mat_" + name + "_ore");
			CustomItem val2 = new CustomItem(val, true);
			ItemManager.Instance.AddItem(val2);
			val.GetComponent<ItemDrop>().m_itemData.m_shared.m_icons[0] = RenderManager.Instance.Render(val, RenderManager.IsometricRotation);
			return val;
		}

		private void AddMine(AssetBundle brickWallsAssetBundle, string name, GameObject drop, Biome biome)
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Expected O, but got Unknown
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_01e8: 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_025e: Expected O, but got Unknown
			Texture val = brickWallsAssetBundle.LoadAsset<Texture>(name + "small");
			Material val2 = null;
			GameObject val3 = PrefabManager.Instance.CreateClonedPrefab("vfx_" + name + "_Destroyed_large", "vfx_RockDestroyed_large");
			GameObject val4 = PrefabManager.Instance.CreateClonedPrefab("rock_" + name, "rock4_coast");
			GameObject val5 = PrefabManager.Instance.CreateClonedPrefab("rock_" + name + "_frac", "rock4_coast_frac");
			DropData value = default(DropData);
			value.m_item = drop;
			val5.GetComponent<MineRock5>().m_dropItems.m_drops[0] = value;
			Renderer[] componentsInChildren = val4.GetComponentsInChildren<Renderer>();
			foreach (Renderer val6 in componentsInChildren)
			{
				if ((Object)(object)val2 == (Object)null)
				{
					val2 = new Material(val6.sharedMaterial);
					val2.SetTexture("_MainTex", val);
					((Object)val2).name = "material_" + name;
				}
				val6.sharedMaterial = val2;
			}
			componentsInChildren = val5.GetComponentsInChildren<Renderer>();
			foreach (Renderer val7 in componentsInChildren)
			{
				Material[] sharedMaterials = val7.sharedMaterials;
				for (int j = 0; j < sharedMaterials.Length; j++)
				{
					sharedMaterials[j] = val2;
				}
				val7.sharedMaterials = sharedMaterials;
			}
			componentsInChildren = ((Component)val3.transform.GetChild(0)).GetComponentsInChildren<Renderer>();
			foreach (Renderer val8 in componentsInChildren)
			{
				Material[] sharedMaterials2 = val8.sharedMaterials;
				for (int k = 0; k < sharedMaterials2.Length; k++)
				{
					sharedMaterials2[k] = val2;
				}
				val8.sharedMaterials = sharedMaterials2;
			}
			MineRock5 component = val5.GetComponent<MineRock5>();
			EffectData val9 = new EffectData();
			val9.m_prefab = val3;
			component.m_destroyedEffect.m_effectPrefabs[1] = val9;
			PrefabManager.Instance.AddPrefab(new CustomPrefab(val5, false));
			val4.GetComponent<Destructible>().m_spawnWhenDestroyed = val5;
			VegetationConfig val10 = new VegetationConfig();
			val10.Biome = biome;
			val10.BlockCheck = true;
			val10.ScaleMax = 0.15f;
			val10.MinAltitude = ClayMinAltitudeConfig.Value;
			val10.MaxAltitude = ClayMaxAltitudeConfig.Value;
			val10.Min = ClayMinConfig.Value;
			val10.Max = ClayMaxConfig.Value;
			val10.GroundOffset = -0.5f;
			CustomVegetation val11 = new CustomVegetation(val4, false, val10);
			ZoneManager.Instance.AddCustomVegetation(val11);
		}

		private void AddRoofClone(string materialname, string roofname)
		{
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Expected O, but got Unknown
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Expected O, but got Unknown
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Expected O, but got Unknown
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Expected O, but got Unknown
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Expected O, but got Unknown
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02de: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Expected O, but got Unknown
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Expected O, but got Unknown
			GameObject val = PrefabManager.Instance.CreateClonedPrefab(materialname + "_" + roofname, "darkwood_" + roofname);
			val.GetComponent<Piece>().m_name = "$piece_" + materialname + "_" + roofname;
			MeshRenderer[] componentsInChildren = ((Component)val.transform.Find("New")).GetComponentsInChildren<MeshRenderer>();
			foreach (MeshRenderer val2 in componentsInChildren)
			{
				string text = "roof_mat_" + materialname + "_new";
				Material val3 = null;
				if (!Materials.ContainsKey(text))
				{
					val3 = new Material(((Renderer)val2).sharedMaterial);
					val3.SetTexture("_MainTex", GetMaterial("roof_" + materialname + "_new").mainTexture);
					Materials.Add(text, val3);
				}
				val3 = GetMaterial(text);
				((Renderer)val2).sharedMaterial = val3;
			}
			componentsInChildren = ((Component)val.transform.Find("Worn")).GetComponentsInChildren<MeshRenderer>();
			foreach (MeshRenderer val4 in componentsInChildren)
			{
				string text2 = "roof_mat_" + materialname + "_worn";
				Material val5 = null;
				if (!Materials.ContainsKey(text2))
				{
					val5 = new Material(((Renderer)val4).sharedMaterial);
					val5.SetTexture("_MainTex", GetMaterial("roof_" + materialname + "_worn").mainTexture);
					Materials.Add(text2, val5);
				}
				val5 = GetMaterial(text2);
				((Renderer)val4).sharedMaterial = val5;
			}
			componentsInChildren = ((Component)val.transform.Find("Broken")).GetComponentsInChildren<MeshRenderer>();
			foreach (MeshRenderer val6 in componentsInChildren)
			{
				string text3 = "roof_mat_" + materialname + "_broken";
				Material val7 = null;
				if (!Materials.ContainsKey(text3))
				{
					val7 = new Material(((Renderer)val6).sharedMaterial);
					val7.SetTexture("_MainTex", GetMaterial("roof_" + materialname + "_broken").mainTexture);
					Materials.Add(text3, val7);
				}
				val7 = GetMaterial(text3);
				((Renderer)val6).sharedMaterial = val7;
			}
			PieceManager instance = PieceManager.Instance;
			PieceConfig val8 = new PieceConfig();
			val8.PieceTable = "Hammer";
			val8.Requirements = (RequirementConfig[])(object)new RequirementConfig[2]
			{
				new RequirementConfig
				{
					Item = "item_" + materialname + "_brick",
					Recover = true,
					Amount = 2
				},
				new RequirementConfig
				{
					Item = "Wood",
					Recover = true,
					Amount = 2
				}
			};
			val8.Icon = RenderManager.Instance.Render(val, RenderManager.IsometricRotation);
			val8.CraftingStation = "piece_stonecutter";
			val8.Category = CategoryName;
			instance.AddPiece(new CustomPiece(val, true, val8));
		}

		private void addArch(string material)
		{
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Expected O, but got Unknown
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Expected O, but got Unknown
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			Vector2 val = default(Vector2);
			((Vector2)(ref val))..ctor(3f, 3f);
			GameObject val2 = PrefabManager.Instance.CreateClonedPrefab(material + "_arch", "stone_arch");
			val2.GetComponent<Piece>().m_name = "$piece_" + material + "_arch";
			Renderer[] componentsInChildren = ((Component)val2.transform.Find("New")).GetComponentsInChildren<Renderer>();
			foreach (Renderer val3 in componentsInChildren)
			{
				Material[] sharedMaterials = val3.sharedMaterials;
				for (int j = 0; j < sharedMaterials.Length; j++)
				{
					sharedMaterials[j] = GetMaterial("Color_" + material + "_new3");
					sharedMaterials[j].SetTextureScale("_MainTex", val);
				}
				val3.sharedMaterials = sharedMaterials;
			}
			componentsInChildren = ((Component)val2.transform.Find("Worn")).GetComponentsInChildren<Renderer>();
			foreach (Renderer val4 in componentsInChildren)
			{
				Material[] sharedMaterials2 = val4.sharedMaterials;
				for (int k = 0; k < sharedMaterials2.Length; k++)
				{
					sharedMaterials2[k] = GetMaterial("Color_" + material + "_worn3");
					sharedMaterials2[k].SetTextureScale("_MainTex", val);
				}
				val4.sharedMaterials = sharedMaterials2;
			}
			componentsInChildren = ((Component)val2.transform.Find("Broken")).GetComponentsInChildren<Renderer>();
			foreach (Renderer val5 in componentsInChildren)
			{
				Material[] sharedMaterials3 = val5.sharedMaterials;
				for (int l = 0; l < sharedMaterials3.Length; l++)
				{
					sharedMaterials3[l] = GetMaterial("Color_" + material + "_broken3");
					sharedMaterials3[l].SetTextureScale("_MainTex", val);
				}
				val5.sharedMaterials = sharedMaterials3;
			}
			Vector3 localScale = val2.transform.localScale;
			localScale.z *= 0.5f;
			val2.transform.localScale = localScale;
			PieceManager instance = PieceManager.Instance;
			PieceConfig val6 = new PieceConfig();
			val6.PieceTable = "Hammer";
			val6.Requirements = (RequirementConfig[])(object)new RequirementConfig[1]
			{
				new RequirementConfig
				{
					Item = "item_" + material + "_brick",
					Recover = true,
					Amount = 6
				}
			};
			val6.Icon = RenderManager.Instance.Render(val2, RenderManager.IsometricRotation);
			val6.CraftingStation = "piece_stonecutter";
			val6.Category = CategoryName;
			instance.AddPiece(new CustomPiece(val2, true, val6));
		}

		private void AddItemAndConversion(AssetBundle brickWallsAssetBundle, string name)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Expected O, but got Unknown
			string text = "brick_" + name + "_item";
			GameObject val = brickWallsAssetBundle.LoadAsset<GameObject>(text);
			CustomItem val2 = new CustomItem(val, true);
			((Object)val).name = "item_" + name + "_brick";
			val.GetComponent<ItemDrop>().m_itemData.m_shared.m_icons[0] = RenderManager.Instance.Render(val, RenderManager.IsometricRotation);
			ItemManager.Instance.AddItem(val2);
			SmelterConversionConfig val3 = new SmelterConversionConfig();
			((ConversionConfig)val3).FromItem = "item_" + name;
			((ConversionConfig)val3).ToItem = "item_" + name + "_brick";
			((ConversionConfig)val3).Station = "CharcoalKiln";
			ItemManager.Instance.AddItemConversion(new CustomItemConversion((ConversionConfig)(object)val3));
		}

		private void AddBrickPiece(AssetBundle brickWallsAssetBundle, string asset, string material, int cost = 3)
		{
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Expected O, but got Unknown
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Expected O, but got Unknown
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Expected O, but got Unknown
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Expected O, but got Unknown
			GameObject val = PrefabManager.Instance.CreateClonedPrefab("vfx_ClayDestroyed_large" + asset + material, "vfx_RockDestroyed");
			Renderer[] componentsInChildren = ((Component)val.transform.GetChild(0)).GetComponentsInChildren<Renderer>();
			foreach (Renderer val2 in componentsInChildren)
			{
				Material[] sharedMaterials = val2.sharedMaterials;
				for (int j = 0; j < sharedMaterials.Length; j++)
				{
					sharedMaterials[j] = GetMaterial("mat_" + material + "_ore");
				}
				val2.sharedMaterials = sharedMaterials;
			}
			GameObject val3 = brickWallsAssetBundle.LoadAsset<GameObject>(asset);
			val3 = PrefabManager.Instance.CreateClonedPrefab(asset + "_" + material, val3);
			val3.GetComponent<Piece>().m_name = "$piece_" + asset + "_" + material;
			WearNTear component = val3.GetComponent<WearNTear>();
			EffectData val4 = new EffectData();
			val4.m_prefab = val;
			component.m_destroyedEffect.m_effectPrefabs[1] = val4;
			ChangeMaterial(val3, GetMaterial("Color_" + material + "_new"), GetMaterial("Color_" + material + "_worn"), GetMaterial("Color_" + material + "_broken"));
			PieceManager instance = PieceManager.Instance;
			GameObject obj = val3;
			PieceConfig val5 = new PieceConfig();
			val5.PieceTable = "Hammer";
			val5.Requirements = (RequirementConfig[])(object)new RequirementConfig[1]
			{
				new RequirementConfig
				{
					Item = "item_" + material + "_brick",
					Recover = true,
					Amount = cost
				}
			};
			val5.Icon = RenderManager.Instance.Render(val3, RenderManager.IsometricRotation);
			val5.CraftingStation = "piece_stonecutter";
			val5.Category = CategoryName;
			instance.AddPiece(new CustomPiece(obj, true, val5));
		}

		private void AddClonedItems()
		{
			AssetBundle val = AssetUtils.LoadAssetBundleFromResources("brickwalls");
			if ((Object)(object)val == (Object)null)
			{
				MonoBehaviour.print((object)"Error loading assetbundle bricks");
				return;
			}
			try
			{
				LoadMaterials(val);
				GameObject drop = AddOre("clay");
				GameObject drop2 = AddOre("claywhite");
				AddMine(val, "clay", drop, (Biome)9);
				AddMine(val, "claywhite", drop2, (Biome)16);
				AddItemAndConversion(val, "clay");
				AddItemAndConversion(val, "claywhite");
				AddBrickPiece(val, "ClayBrickHalf", "clay", 1);
				AddBrickPiece(val, "ClayBrick", "clay", 1);
				AddBrickPiece(val, "ClayBrick1x1", "clay");
				AddBrickPiece(val, "ClayBrick2x1", "clay", 4);
				AddBrickPiece(val, "ClayBrick4x2", "clay", 6);
				AddBrickPiece(val, "ClayBrickPillar", "clay", 5);
				AddBrickPiece(val, "ClayBrickFloor", "clay", 6);
				AddBrickPiece(val, "ClayBrickStair", "clay", 8);
				addArch("clay");
				AddRoofClone("clay", "roof");
				AddRoofClone("clay", "roof_45");
				AddRoofClone("clay", "roof_icorner");
				AddRoofClone("clay", "roof_icorner_45");
				AddRoofClone("clay", "roof_ocorner");
				AddRoofClone("clay", "roof_ocorner_45");
				AddRoofClone("clay", "roof_top");
				AddRoofClone("clay", "roof_top_45");
				AddBrickPiece(val, "ClayBrickHalf", "claywhite", 1);
				AddBrickPiece(val, "ClayBrick", "claywhite", 1);
				AddBrickPiece(val, "ClayBrick1x1", "claywhite");
				AddBrickPiece(val, "ClayBrick2x1", "claywhite", 4);
				AddBrickPiece(val, "ClayBrick4x2", "claywhite", 6);
				AddBrickPiece(val, "ClayBrickPillar", "claywhite", 5);
				AddBrickPiece(val, "ClayBrickFloor", "claywhite", 6);
				AddBrickPiece(val, "ClayBrickStair", "claywhite", 8);
				addArch("claywhite");
				AddRoofClone("claywhite", "roof");
				AddRoofClone("claywhite", "roof_45");
				AddRoofClone("claywhite", "roof_icorner");
				AddRoofClone("claywhite", "roof_icorner_45");
				AddRoofClone("claywhite", "roof_ocorner");
				AddRoofClone("claywhite", "roof_ocorner_45");
				AddRoofClone("claywhite", "roof_top");
				AddRoofClone("claywhite", "roof_top_45");
				Materials.Clear();
			}
			finally
			{
				val.Unload(false);
			}
			PrefabManager.OnVanillaPrefabsAvailable -= AddClonedItems;
		}
	}
}
namespace BrickWalls.Patches
{
	[HarmonyPatch(typeof(Smelter), "Spawn")]
	internal class Smelter_Spawn_patch
	{
		private static void Postfix(string ore, int stack, Transform ___m_outputPoint)
		{
			//IL_0028: 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_0071: 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)
			if (ore.Equals("item_clay"))
			{
				GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("item_clay_brick");
				if ((Object)(object)itemPrefab != (Object)null)
				{
					Object.Instantiate<GameObject>(itemPrefab, ___m_outputPoint.position, ___m_outputPoint.rotation).GetComponent<ItemDrop>().m_itemData.m_stack = stack;
				}
			}
			else if (ore.Equals("item_claywhite"))
			{
				GameObject itemPrefab2 = ObjectDB.instance.GetItemPrefab("item_claywhite_brick");
				if ((Object)(object)itemPrefab2 != (Object)null)
				{
					Object.Instantiate<GameObject>(itemPrefab2, ___m_outputPoint.position, ___m_outputPoint.rotation).GetComponent<ItemDrop>().m_itemData.m_stack = stack;
				}
			}
		}
	}
}