Decompiled source of balrond ElvenRoof v1.0.2

plugins/BalrondElvenRoof.dll

Decompiled 3 weeks ago
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
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("RainbowTrollArmor")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RainbowTrollArmor")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("f405ea1c-ac25-47a3-9aa2-a8f56c14bfd6")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BalrondElvenRoof;

public class BalrondShaderSwap : MonoBehaviour
{
	[Tooltip("Use this Field For Normal Renderers")]
	[SerializeField]
	internal Renderer[] _renderers;

	private void OnEnable()
	{
		_renderers = ((Component)this).GetComponentsInChildren<Renderer>();
		Renderer[] renderers = _renderers;
		foreach (Renderer val in renderers)
		{
			Material[] sharedMaterials = val.sharedMaterials;
			foreach (Material val2 in sharedMaterials)
			{
				Shader shader = val2.shader;
				if (!((Object)(object)shader == (Object)null))
				{
					string name = ((Object)shader).name;
					if (!(name == "Standard") && name.Contains("Balrond"))
					{
						setProperValue(val2, name);
					}
				}
			}
		}
	}

	private void setProperValue(Material material, string shaderName)
	{
		string properName = shaderName.Replace("Balrond", "Custom");
		properName = checkNaming(properName);
		Shader val = ShaderReplacment.shaders.Find((Shader x) => ((Object)x).name == properName);
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogWarning((object)("Shader not found " + properName));
		}
		else
		{
			material.shader = val;
		}
	}

	private string checkNaming(string name)
	{
		string result = name;
		if (name.Contains("Bumped"))
		{
			result = name.Replace("Custom", "Lux Lit Particles");
		}
		if (name.Contains("Tess Bumped"))
		{
			result = name.Replace("Custom", "Lux Lit Particles");
		}
		if (name.Contains("Standard Surface"))
		{
			result = name.Replace("Custom", "Particles");
			result = result.Replace("Standard Surface2", "Standard Surface");
		}
		if (name.Contains("Standard Unlit"))
		{
			result = name.Replace("Custom", "Particles");
			result = result.Replace("Standard Unlit", "Standard Unlit2");
			result = result.Replace("Standard Unlit22", "Standard Unlit2");
		}
		return result;
	}
}
public class FxReplacment
{
	private List<GameObject> allPrefabs;

	public void setInstance(List<GameObject> gameObjects)
	{
		allPrefabs = gameObjects;
	}

	public void ReplaceFxOnPiece(GameObject gameObject)
	{
		if ((Object)(object)gameObject == (Object)null)
		{
			Debug.LogWarning((object)"BALROND CONTAINERS: GameObject not found");
			return;
		}
		Piece component = gameObject.GetComponent<Piece>();
		if ((Object)(object)component != (Object)null)
		{
			EffectList placeEffect = component.m_placeEffect;
			if (placeEffect != null)
			{
				findEffectsAndChange(placeEffect.m_effectPrefabs);
			}
		}
		WearNTear component2 = gameObject.GetComponent<WearNTear>();
		if ((Object)(object)component2 != (Object)null)
		{
			EffectList hitEffect = component2.m_hitEffect;
			if (hitEffect != null)
			{
				findEffectsAndChange(hitEffect.m_effectPrefabs);
			}
		}
	}

	private void findEffectsAndChange(EffectData[] effects)
	{
		if (effects == null || effects.Length == 0)
		{
			Debug.LogError((object)"BALROND CONTAINERS: Effects in Method are empty");
			return;
		}
		foreach (EffectData val in effects)
		{
			if ((Object)(object)val.m_prefab != (Object)null)
			{
				string name = ((Object)val.m_prefab).name;
				GameObject val2 = allPrefabs.Find((GameObject x) => ((Object)x).name == name);
				if ((Object)(object)val2 == (Object)null)
				{
					Debug.LogWarning((object)("BALROND CONTAINERS: Replace Effect not found: " + name));
				}
				else
				{
					val.m_prefab = val2;
				}
			}
		}
	}
}
[BepInPlugin("balrond.astafaraios.BalrondElvenRoof", "BalrondElvenRoof", "1.0.2")]
public class Launch : BaseUnityPlugin
{
	[HarmonyPriority(700)]
	[HarmonyPatch(typeof(FejdStartup), "Awake")]
	private static class Replace_ShaderPatch
	{
		public static void Postfix()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			if (new ZNet().IsDedicated())
			{
				return;
			}
			ShaderReplacment.findShadersByName();
			foreach (GameObject item in ShaderReplacment.GOToSwap)
			{
				if (!((Object)(object)item == (Object)null))
				{
					Renderer[] componentsInChildren = item.GetComponentsInChildren<Renderer>();
					if (componentsInChildren == null || componentsInChildren.Length == 0)
					{
						break;
					}
					ShaderReplacment.ReplaceShadersInObject(componentsInChildren);
				}
			}
		}
	}

	[HarmonyPatch(typeof(ZNetScene), "Awake")]
	public static class ZNetScene_Awake_Path
	{
		public static void Prefix(ZNetScene __instance)
		{
			if ((Object)(object)__instance == (Object)null)
			{
				Debug.LogWarning((object)"BalrondElvenRoof: No ZnetScene found");
				return;
			}
			GameObject val = FindItem(__instance.m_prefabs, "Hammer");
			List<GameObject> pieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces;
			fxReplacment.setInstance(__instance.m_prefabs);
			foreach (GameObject item in prefabs)
			{
				editBuildPiece(__instance.m_prefabs, item);
				fxReplacment.ReplaceFxOnPiece(item);
				GameObject val2 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)item).name);
				if ((Object)(object)val2 == (Object)null)
				{
					__instance.m_prefabs.Add(item);
				}
				GameObject val3 = pieces.Find((GameObject x) => ((Object)x).name == ((Object)item).name);
				if ((Object)(object)val3 == (Object)null)
				{
					pieces.Add(item);
				}
			}
		}
	}

	private readonly Harmony harmony = new Harmony("balrond.astafaraios.BalrondElvenRoof");

	public const string PluginGUID = "balrond.astafaraios.BalrondElvenRoof";

	public const string PluginName = "BalrondElvenRoof";

	public const string PluginVersion = "1.0.2";

	public static AssetBundle assetBundle;

	public static List<GameObject> prefabs = new List<GameObject>();

	public static FxReplacment fxReplacment = new FxReplacment();

	public ShaderReplacment shaderReplacment = new ShaderReplacment();

	private string[] prefabnames = new string[173]
	{
		"elvenwood_roof_flat1", "elvenwood_roof_45", "elvenwood_roof_45_half", "elvenwood_roof_45_large", "elvenwood_roof_45_tower_curved_v1", "elvenwood_roof_45_tower_curved_v2", "elvenwood_roof_45_tower_curved_v2_reverse", "elvenwood_roof_45_tower_curved_v1_reverse", "elvenwood_roof_icorner_45", "elvenwood_roof_ocorner_45",
		"elvenwood_roof_ocorner_45_large", "elvenwood_roof_ocorner_45_sharp", "elvenwood_roof_window_45", "elvenwood_roof_ocorner_45_window_double", "elvenwood_roof_top_45", "elvenwood_roof_top_45_peak", "elvenwood_roof_top_45_quarter", "elvenwood_beam_45_tile", "elvenwood_wall_roof_45", "elvenwood_wall_roof_45_upsidedown",
		"elvenwood_wall_roof_45_double", "elvenwood_wall_top_45", "elvenwood_beam_side1", "elvenwood_beam_top1", "elvenwood_roof_flat", "elvenwood_roof_45_v2", "elvenwood_roof_45_half_v2", "elvenwood_roof_45_v2_large", "elvenwood_roof_45_tower_convex_v1", "elvenwood_roof_45_tower_convex_v1_reverse",
		"elvenwood_roof_45_tower_convex_v2", "elvenwood_roof_45_tower_convex_v2_reverse", "elvenwood_roof_icorner_45_v2", "elvenwood_roof_ocorner_45_v2", "elvenwood_roof_ocorner_45_v2_large", "elvenwood_roof_window_45_v2", "elvenwood_roof_ocorner_45_window_v2", "elvenwood_roof_ocorner_45_window_double_v2", "elvenwood_roof_top_45_v2", "elvenwood_roof_top_45_peak_v2",
		"elvenwood_roof_top_45_quarter_v2", "elvenwood_beam_45_tile_v2", "elvenwood_wall_roof_45_v2", "elvenwood_wall_roof_45_upsidedown_v2", "elvenwood_wall_roof_45_double_v2", "elvenwood_wall_top_45_v2", "elvenwood_beam_top", "elvenwood_beam_side", "elvenwood_roof_flat2", "elvenwood_roof_45_v3",
		"elvenwood_roof_45_half_v3", "elvenwood_roof_45_v3_large", "elvenwood_roof_45_tower_straight_v1", "elvenwood_roof_45_tower_straight_v2", "elvenwood_roof_45_tower_straight_v2_reverse", "elvenwood_roof_45_tower_straight_v1_reverse", "elvenwood_roof_icorner_45_v3", "elvenwood_roof_ocorner_45_v3", "elvenwood_roof_ocorner_45_v3_large", "elvenwood_roof_ocorner_45_sharp1",
		"elvenwood_roof_window_45_v3", "elvenwood_roof_ocorner_45_window_double_v3", "elvenwood_roof_top_45_v3", "elvenwood_roof_top_45_peak_v3", "elvenwood_roof_top_45_quarter_v3", "elvenwood_beam_45_tile_v3", "elvenwood_wall_roof_45_v3", "elvenwood_wall_roof_45_upsidedown_v3", "elvenwood_wall_roof_45_double_v3", "elvenwood_wall_top_45_v3",
		"elvenwood_beam_top2", "elvenwood_beam_side2", "elvenwood_roof", "elvenwood_wall_roof", "elvenwood_beam_26", "elven_woodwall", "elven_woodwall1", "elven_woodwall2", "elven_woodwall3", "elven_woodwall4",
		"elven_woodwall6", "elven_woodwall7", "elven_woodwall_2x1", "elven_woodwall_1x1", "elven_woodwall_half", "elven_woodwall_half_window", "elven_woodwall_large", "elven_woodwall_large1", "elven_woodwall_large2", "elvenwood_door_curved",
		"elvenwood_door_curved_double", "elven_woodarch", "elven_woodarch1", "elven_wooddoor", "elven_wooddoor1", "elven_wooddoor_large", "elvenwood_roof_top_orial", "elvenwood_wall_curved", "elvenwood_wall_curved1", "elvenwood_wall_curved2",
		"elvenwood_wall_curved_large", "elvenwood_wall_curved_large_half", "elvenwood_wall_curved_large_door", "elvenwood_floor2x2", "elvenwood_floor2x2_curved", "elvenwood_floor_1x1", "elvenwood_floor_1x1_curved", "elvenwood_floor_curved_medium", "elvenwood_floor_curved_large", "elvenwood_wall_curved_step",
		"elvenwood_railing_1", "elvenwood_railing_2", "elvenwood_railing_curved", "elvenwood_railing_curved_medium", "elvenwood_railing_curved_large", "elvenwood_wall_step", "elvenstone_stair", "elvenstone_stair_railing", "elvenstone_stair1", "elvenwood_beam_45_tilegreen",
		"elvenwood_beam_45_tile_v2green", "elvenwood_beam_45_tile_v3green", "elvenwood_beam_topgreen", "elvenwood_beam_sidegreen", "elvenwood_roof_flatgreen", "elvenwood_roof_top_45green", "elvenwood_roof_top_45_peakgreen", "elvenwood_roof_top_45_quartergreen", "elvenwood_roof_top_45_v2green", "elvenwood_roof_top_45_peak_v2green",
		"elvenwood_roof_top_45_quarter_v2green", "elvenwood_roof_top_45_v3green", "elvenwood_roof_top_45_peak_v3green", "elvenwood_roof_top_45_quarter_v3green", "elvenwood_roof_45green", "elvenwood_roof_45_halfgreen", "elvenwood_roof_45_v2green", "elvenwood_roof_45_half_v2green", "elvenwood_roof_45_v3green", "elvenwood_roof_45_half_v3green",
		"elvenwood_roof_icorner_45green", "elvenwood_roof_icorner_45_v2green", "elvenwood_roof_icorner_45_v3green", "elvenwood_roof_ocorner_45green", "elvenwood_roof_ocorner_45_v2green", "elvenwood_roof_ocorner_45_window_v2green", "elvenwood_roof_ocorner_45_v3green", "elvenwood_roof_ocorner_45_sharpgreen", "elvenwood_roof_ocorner_45_sharp1green", "elvenwood_roof_45_largegreen",
		"elvenwood_roof_45_v2_largegreen", "elvenwood_roof_45_v3_largegreen", "elvenwood_roof_ocorner_45_v2_largegreen", "elvenwood_roof_ocorner_45_largegreen", "elvenwood_roof_ocorner_45_v3_largegreen", "elvenwood_roof_window_45green", "elvenwood_roof_ocorner_45_window_doublegreen", "elvenwood_roof_window_45_v2green", "elvenwood_roof_ocorner_45_window_double_v2", "elvenwood_roof_window_45_v3",
		"elvenwood_roof_ocorner_45_window_double_v3", "elvenwood_roof_45_tower_curved_v1green", "elvenwood_roof_45_tower_curved_v2green", "elvenwood_roof_45_tower_curved_v2_reversegreen", "elvenwood_roof_45_tower_curved_v1_reversegreen", "elvenwood_roof_45_tower_convex_v1green", "elvenwood_roof_45_tower_convex_v1_reversegreen", "elvenwood_roof_45_tower_convex_v2green", "elvenwood_roof_45_tower_convex_v2_reversegreen", "elvenwood_roof_45_tower_straight_v1green",
		"elvenwood_roof_45_tower_straight_v2green", "elvenwood_roof_45_tower_straight_v2_reversegreen", "elvenwood_roof_45_tower_straight_v1_reversegreen"
	};

	private void Awake()
	{
		assetBundle = GetAssetBundleFromResources("elvenroof");
		loadAssets();
		harmony.PatchAll();
	}

	private void loadAssets()
	{
		string text = "Assets/Custom/BalrondElvenRoof/";
		string[] array = prefabnames;
		foreach (string text2 in array)
		{
			GameObject val = assetBundle.LoadAsset<GameObject>(text + text2 + ".prefab");
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)("BalrondElvenRoof: Could not find file with name: " + text2));
				continue;
			}
			ShaderReplacment.Replace(val);
			val.SetActive(true);
			prefabs.Add(val);
		}
	}

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

	private static bool IsObjectDBValid()
	{
		return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null;
	}

	public static AssetBundle GetAssetBundleFromResources(string filename)
	{
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename));
		using Stream stream = executingAssembly.GetManifestResourceStream(name);
		return AssetBundle.LoadFromStream(stream);
	}

	private static GameObject FindItem(List<GameObject> list, string name)
	{
		GameObject val = list.Find((GameObject x) => ((Object)x).name == name);
		if ((Object)(object)val != (Object)null)
		{
			return val;
		}
		Debug.LogWarning((object)"BalrondElvenRoof: Item Not Found");
		return null;
	}

	public static CraftingStation FindStation(List<GameObject> list, string name)
	{
		GameObject val = FindItem(list, name);
		if ((Object)(object)val != (Object)null)
		{
			return val.GetComponent<CraftingStation>();
		}
		return null;
	}

	public static void editBuildPiece(List<GameObject> buildPieces, GameObject gameObject)
	{
		Piece component = gameObject.GetComponent<Piece>();
		component.m_enabled = true;
		createResourceFor(((Object)gameObject).name, component, buildPieces);
	}

	public static Requirement createReq(string name, int amount)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		Requirement val = new Requirement();
		val.m_resItem = FindItem(ObjectDB.instance.m_items, name).GetComponent<ItemDrop>();
		val.m_amount = amount;
		val.m_recover = true;
		val.m_amountPerLevel = amount;
		return val;
	}

	public static void createResourceFor(string prefabName, Piece piece, List<GameObject> buildPieces)
	{
		List<Requirement> list = new List<Requirement>();
		switch (prefabName)
		{
		case "elvenwood_roof_45_tower_curved_v1green":
		case "elvenwood_roof_45_tower_curved_v2green":
		case "elvenwood_roof_45_tower_curved_v2_reversegreen":
		case "elvenwood_roof_45_tower_curved_v1_reversegreen":
		case "elvenwood_roof_45_tower_convex_v1green":
		case "elvenwood_roof_45_tower_convex_v1_reversegreen":
		case "elvenwood_roof_45_tower_convex_v2green":
		case "elvenwood_roof_45_tower_convex_v2_reversegreen":
		case "elvenwood_roof_45_tower_straight_v1green":
		case "elvenwood_roof_45_tower_straight_v2green":
		case "elvenwood_roof_45_tower_straight_v2_reversegreen":
		case "elvenwood_roof_45_tower_straight_v1_reversegreen":
		case "elvenwood_roof_45_tower_curved_v1":
		case "elvenwood_roof_45_tower_curved_v2":
		case "elvenwood_roof_45_tower_curved_v2_reverse":
		case "elvenwood_roof_45_tower_curved_v1_reverse":
		case "elvenwood_roof_45_tower_convex_v1":
		case "elvenwood_roof_45_tower_convex_v1_reverse":
		case "elvenwood_roof_45_tower_convex_v2":
		case "elvenwood_roof_45_tower_convex_v2_reverse":
		case "elvenwood_roof_45_tower_straight_v1":
		case "elvenwood_roof_45_tower_straight_v2":
		case "elvenwood_roof_45_tower_straight_v2_reverse":
		case "elvenwood_roof_45_tower_straight_v1_reverse":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 3));
			list.Add(createReq("BronzeNails", 3));
			list.Add(createReq("Stone", 3));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_flatgreen":
		case "elvenwood_roof_top_45green":
		case "elvenwood_roof_top_45_v2green":
		case "elvenwood_roof_top_45_v3green":
		case "elvenwood_roof_45green":
		case "elvenwood_roof_45_v2green":
		case "elvenwood_roof_45_v3green":
		case "elvenwood_roof_icorner_45green":
		case "elvenwood_roof_icorner_45_v2green":
		case "elvenwood_roof_icorner_45_v3green":
		case "elvenwood_roof_ocorner_45green":
		case "elvenwood_roof_ocorner_45_v2green":
		case "elvenwood_roof_ocorner_45_v3green":
		case "elvenwood_roof_ocorner_45_sharpgreen":
		case "elvenwood_roof_ocorner_45_sharp1green":
		case "elvenwood_roof_top_orial":
		case "elvenwood_roof":
		case "elvenwood_roof_flat1":
		case "elvenwood_roof_45":
		case "elvenwood_roof_icorner_45":
		case "elvenwood_roof_ocorner_45":
		case "elvenwood_roof_ocorner_45_sharp":
		case "elvenwood_roof_flat":
		case "elvenwood_roof_45_v2":
		case "elvenwood_roof_icorner_45_v2":
		case "elvenwood_roof_ocorner_45_v2":
		case "elvenwood_roof_flat2":
		case "elvenwood_roof_45_v3":
		case "elvenwood_roof_icorner_45_v3":
		case "elvenwood_roof_ocorner_45_v3":
		case "elvenwood_roof_ocorner_45_sharp1":
		case "elvenwood_roof_top_45":
		case "elvenwood_roof_top_45_v2":
		case "elvenwood_roof_top_45_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 2));
			list.Add(createReq("BronzeNails", 4));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_top_45_peakgreen":
		case "elvenwood_roof_top_45_peak_v2green":
		case "elvenwood_roof_top_45_peak_v3green":
		case "elvenwood_roof_top_45_peak":
		case "elvenwood_roof_top_45_peak_v2":
		case "elvenwood_roof_top_45_peak_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 3));
			list.Add(createReq("BronzeNails", 4));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_window_45green":
		case "elvenwood_roof_window_45_v2green":
		case "elvenwood_roof_ocorner_45_window_v2green":
		case "elvenwood_roof_window_45_v3green":
		case "elvenwood_roof_window_45":
		case "elvenwood_roof_window_45_v2":
		case "elvenwood_roof_ocorner_45_window_v2":
		case "elvenwood_roof_window_45_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 3));
			list.Add(createReq("BronzeNails", 4));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_ocorner_45_window_doublegreen":
		case "elvenwood_roof_ocorner_45_window_double_v2green":
		case "elvenwood_roof_ocorner_45_window_double_v3green":
		case "elvenwood_roof_ocorner_45_window_double":
		case "elvenwood_roof_ocorner_45_window_double_v2":
		case "elvenwood_roof_ocorner_45_window_double_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 6));
			list.Add(createReq("BronzeNails", 8));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_top_45_quartergreen":
		case "elvenwood_roof_top_45_quarter_v2green":
		case "elvenwood_roof_top_45_quarter_v3green":
		case "elvenwood_roof_45_halfgreen":
		case "elvenwood_roof_45_half_v2green":
		case "elvenwood_roof_45_half_v3green":
		case "elvenwood_roof_top_45_quarter":
		case "elvenwood_roof_top_45_quarter_v2":
		case "elvenwood_roof_top_45_quarter_v3":
		case "elvenwood_roof_45_half":
		case "elvenwood_roof_45_half_v2":
		case "elvenwood_roof_45_half_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 1));
			list.Add(createReq("BronzeNails", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_railing_curved":
		case "elvenwood_beam_26":
		case "elvenwood_beam_top2":
		case "elvenwood_beam_side2":
		case "elvenwood_beam_top":
		case "elvenwood_beam_side":
		case "elvenwood_beam_side1":
		case "elvenwood_beam_top1":
		case "elvenwood_beam_45_tile":
		case "elvenwood_beam_45_tile_v2":
		case "elvenwood_beam_45_tile_v3":
		case "elvenwood_railing_2":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_beam_45_tilegreen":
		case "elvenwood_beam_45_tile_v2green":
		case "elvenwood_beam_45_tile_v3green":
		case "elvenwood_beam_topgreen":
		case "elvenwood_beam_sidegreen":
		case "elvenwood_wall_step":
		case "elvenwood_wall_curved_step":
		case "elvenwood_beam_45":
		case "elvenwood_beam_45_v3":
		case "elvenwood_beam_45_v2":
		case "elvenwood_railing_1":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_roof":
		case "elvenwood_wall_top_45":
		case "elvenwood_wall_roof_45":
		case "elvenwood_wall_roof_45_v2":
		case "elvenwood_wall_top_45_v2":
		case "elvenwood_wall_roof_45_v3":
		case "elvenwood_wall_top_45_v3":
		case "elvenwood_wall_roof_45_upsidedown":
		case "elvenwood_wall_roof_45_upsidedown_v2":
		case "elvenwood_wall_roof_45_upsidedown_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("Stone", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_roof_45_double":
		case "elvenwood_wall_roof_45_double_v2":
		case "elvenwood_wall_roof_45_double_v3":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("Stone", 4));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenstone_stair":
		case "elvenwood_wall_curved2":
		case "elven_woodwall":
		case "elven_woodwall_2x1":
		case "elven_woodwall_1x1":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("Stone", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_curved1":
		case "elven_woodwall1":
		case "elven_woodwall2":
		case "elven_woodwall3":
		case "elven_woodwall4":
		case "elven_woodwall6":
		case "elven_woodwall7":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("Stone", 2));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_curved":
		case "elven_woodwall_half":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_curved_large_half":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 3));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_wall_curved_large_door":
		case "elvenwood_wall_curved_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 6));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodwall_half_window":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 1));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodwall_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 4));
			list.Add(createReq("Crystal", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodwall_large1":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 3));
			list.Add(createReq("Crystal", 1));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodwall_large2":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 8));
			list.Add(createReq("Crystal", 4));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_roof_45_largegreen":
		case "elvenwood_roof_45_v2_largegreen":
		case "elvenwood_roof_45_v3_largegreen":
		case "elvenwood_roof_ocorner_45_v2_largegreen":
		case "elvenwood_roof_ocorner_45_largegreen":
		case "elvenwood_roof_ocorner_45_v3_largegreen":
		case "elvenwood_roof_45_large":
		case "elvenwood_roof_45_v2_large":
		case "elvenwood_roof_45_v3_large":
		case "elvenwood_roof_ocorner_45_large":
		case "elvenwood_roof_ocorner_45_v2_large":
		case "elvenwood_roof_ocorner_45_v3_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 4));
			list.Add(createReq("FineWood", 10));
			piece.m_resources = list.ToArray();
			break;
		case "elven_wooddoor":
		case "elven_wooddoor1":
		case "elvenwood_door_curved":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 4));
			list.Add(createReq("FineWood", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_door_curved_double":
		case "elven_wooddoor_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 8));
			list.Add(createReq("FineWood", 4));
			piece.m_resources = list.ToArray();
			break;
		case "elvenstone_stair_railing":
		case "elvenstone_stair1":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("Stone", 10));
			list.Add(createReq("FineWood", 4));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodarch":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("FineWood", 3));
			list.Add(createReq("Stone", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elven_woodarch1":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("FineWood", 4));
			list.Add(createReq("Stone", 2));
			list.Add(createReq("BronzeNails", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_floor_curved_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("FineWood", 5));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_railing_curved_large":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("FineWood", 3));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_railing_curved_medium":
		case "elvenwood_floor2x2":
		case "elvenwood_floor2x2_curved":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_stonecutter");
			list.Clear();
			list.Add(createReq("FineWood", 2));
			piece.m_resources = list.ToArray();
			break;
		case "elvenwood_floor_1x1":
		case "elvenwood_floor_1x1_curved":
			piece.m_name = prefabName;
			piece.m_craftingStation = FindStation(buildPieces, "piece_workbench");
			list.Clear();
			list.Add(createReq("FineWood", 1));
			piece.m_resources = list.ToArray();
			break;
		}
	}
}
public class ShaderReplacment
{
	public static List<GameObject> GOToSwap = new List<GameObject>();

	public string[] shaderlist = new string[49]
	{
		"Custom/AlphaParticle", "Custom/Blob", "Custom/Bonemass", "Custom/Clouds", "Custom/Creature", "Custom/Decal", "Custom/Distortion", "Custom/Flow", "Custom/FlowOpaque", "Custom/Grass",
		"Custom/GuiScroll", "Custom/Heightmap", "Custom/icon", "Custom/InteriorSide", "Custom/LitGui", "Custom/LitParticles", "Custom/mapshader", "Custom/ParticleDecal", "Custom/Piece", "Custom/Player",
		"Custom/Rug", "Custom/ShadowBlob", "Custom/SkyboxProcedural", "Custom/SkyObject", "Custom/StaticRock", "Custom/Tar", "Custom/Trilinearmap", "Custom/UI/BGBlur", "Custom/Vegetation", "Custom/Water",
		"Custom/WaterBottom", "Custom/WaterMask", "Custom/Yggdrasil", "Custom/Yggdrasil/root", "Hidden/BlitCopyHDRTonemap", "Hidden/Dof/DepthOfFieldHdr", "Hidden/Dof/DX11Dof", "Hidden/Internal-Loading", "Hidden/Internal-UIRDefaultWorld", "Hidden/SimpleClear",
		"Hidden/SunShaftsComposite", "Lux Lit Particles/ Bumped", "Lux Lit Particles/ Tess Bumped", "Particles/Standard Surface2", "Particles/Standard Unlit2", "Standard TwoSided", "ToonDeferredShading2017", "Unlit/DepthWrite", "Unlit/Lighting"
	};

	public static List<Shader> shaders = new List<Shader>();

	public static void Replace(GameObject gameObject)
	{
		GOToSwap.Add(gameObject);
	}

	public static void findShadersByName()
	{
		Shader[] collection = Resources.FindObjectsOfTypeAll<Shader>();
		shaders.AddRange(collection);
	}

	public static void ReplaceShadersInObject(Renderer[] renderers)
	{
		foreach (Renderer val in renderers)
		{
			Material[] sharedMaterials = val.sharedMaterials;
			if (sharedMaterials != null && sharedMaterials.Length != 0)
			{
				fixMaterial(sharedMaterials);
			}
		}
	}

	private static void fixMaterial(Material[] shared)
	{
		foreach (Material val in shared)
		{
			if ((Object)(object)val == (Object)null)
			{
				continue;
			}
			Shader shader = val.shader;
			if (!((Object)(object)shader == (Object)null))
			{
				string name = ((Object)shader).name;
				if (!(name == "Standard") && name.Contains("Balrond"))
				{
					setProperValue(val, name);
				}
			}
		}
	}

	private static void setProperValue(Material material, string shaderName)
	{
		string properName = shaderName.Replace("Balrond", "Custom");
		properName = checkNaming(properName);
		Shader val = shaders.Find((Shader x) => ((Object)x).name == properName);
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogWarning((object)("Shader not found " + properName));
		}
		else
		{
			material.shader = val;
		}
	}

	private static string checkNaming(string name)
	{
		string result = name;
		if (name.Contains("Bumped"))
		{
			result = name.Replace("Custom", "Lux Lit Particles");
		}
		if (name.Contains("Tess Bumped"))
		{
			result = name.Replace("Custom", "Lux Lit Particles");
		}
		if (name.Contains("Standard Surface"))
		{
			result = name.Replace("Custom", "Particles");
			result = result.Replace("Standard Surface2", "Standard Surface");
		}
		if (name.Contains("Standard Unlit"))
		{
			result = name.Replace("Custom", "Particles");
			result = result.Replace("Standard Unlit", "Standard Unlit2");
			result = result.Replace("Standard Unlit22", "Standard Unlit2");
		}
		return result;
	}
}