using System;
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.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
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: AssemblyTitle("CaenosRelics")]
[assembly: AssemblyDescription("A Valheim mod that adds custom relics, statues, and decor.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Caenos")]
[assembly: AssemblyProduct("CaenosRelics Mod")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("2.2.2")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.2.0")]
namespace Moonforged.BuildPieces;
public class ConfigSync
{
private readonly List<OwnConfigEntryBase> _entries = new List<OwnConfigEntryBase>();
public bool IsSourceOfTruth { get; private set; } = true;
public string ModName { get; }
public ConfigSync(string name)
{
ModName = name;
}
public void AddEntry(OwnConfigEntryBase entry)
{
if (entry == null)
{
throw new ArgumentNullException("entry");
}
if (!_entries.Contains(entry))
{
_entries.Add(entry);
}
}
public SyncedConfigEntry<T> AddConfigEntry<T>(ConfigEntry<T> entry)
{
if (entry == null)
{
throw new ArgumentNullException("entry");
}
SyncedConfigEntry<T> syncedConfigEntry = new SyncedConfigEntry<T>(entry);
AddEntry(syncedConfigEntry);
return syncedConfigEntry;
}
public void SetSourceOfTruth(bool isSource)
{
IsSourceOfTruth = isSource;
}
}
public class LampColorSwitcher : MonoBehaviour, Interactable, Hoverable
{
private int index = 0;
private const int OFF_INDEX = -1;
private Light[] lights;
private Renderer[] allRenderers;
private Renderer[] bulbRenderers;
private LightFlicker[] flickers;
private LightLod[] lods;
private ParticleSystem[] particles;
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_INIT = "initialized";
private void Awake()
{
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);
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>("SetLampState", (Action<long, int>)RPC_SetLampState);
ZDO zDO = znv.GetZDO();
if (zDO != null)
{
if (znv.IsOwner() && !zDO.GetBool("initialized", false))
{
index = Random.Range(0, colors.Length);
zDO.Set("LampColorIndex", index);
zDO.Set("initialized", true);
}
index = zDO.GetInt("LampColorIndex", index);
ApplyState();
}
}
public bool Interact(Humanoid user, bool hold, bool alt)
{
if (hold)
{
return false;
}
if (!Object.op_Implicit((Object)(object)znv) || !znv.IsOwner())
{
return false;
}
ZDO zDO = znv.GetZDO();
if (zDO == null)
{
return false;
}
if (index == -1)
{
index = 0;
zDO.Set("LampColorIndex", index);
znv.InvokeRPC(ZNetView.Everybody, "SetLampState", new object[1] { index });
return true;
}
if (index < colors.Length - 1)
{
index++;
}
else
{
index = -1;
}
zDO.Set("LampColorIndex", index);
znv.InvokeRPC(ZNetView.Everybody, "SetLampState", new object[1] { index });
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_SetLampState(long sender, int newState)
{
index = newState;
ApplyState();
}
private void ApplyState()
{
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
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 = 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 (val13.HasProperty("_EmissionColor"))
{
val13.EnableKeyword("_EMISSION");
val13.SetColor("_EmissionColor", val7 * 3f);
}
}
}
}
public string GetHoverText()
{
if (index == -1)
{
return "[E] Turn On";
}
return "[E] Change color (" + names[index] + ")";
}
public string GetHoverName()
{
return "Lamp";
}
}
[BepInPlugin("Moonforged.BuildPieces", "Moonforged Build Pieces", "1.0.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MoonforgedBuildPieces : BaseUnityPlugin
{
public const string PluginGUID = "Moonforged.BuildPieces";
public const string PluginName = "Moonforged Build Pieces";
public const string PluginVersion = "1.0.1";
private AssetBundle relicsBundle;
private static readonly List<GameObject> placedObjects = new List<GameObject>();
public static void TrackAllPrefabsInBundle(AssetBundle bundle)
{
GameObject[] array = bundle.LoadAllAssets<GameObject>();
foreach (GameObject val in array)
{
if ((Object)(object)val != (Object)null && (Object)(object)val.GetComponent<PlacementWatcher>() == (Object)null)
{
val.AddComponent<PlacementWatcher>().RegisterList = placedObjects;
}
}
}
private void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
new Harmony("moonforged.buildpieces.scalingdebug").PatchAll();
RelicConfigManager.Init("Moonforged.BuildPieces", ((BaseUnityPlugin)this).Config);
string[] manifestResourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (string text in manifestResourceNames)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("FOUND RESOURCE: " + text));
}
string resourcePath = "Moonforged.BuildPieces.mbp";
relicsBundle = EmbeddedAssetBundleLoader.LoadBundle(resourcePath);
if ((Object)(object)relicsBundle == (Object)null)
{
((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load embedded AssetBundle.");
return;
}
TrackAllPrefabsInBundle(relicsBundle);
RelicRegistrar.InitConfig(((BaseUnityPlugin)this).Config);
foreach (string allCategory in RelicRegistrar.GetAllCategories())
{
PieceManager.Instance.AddPieceCategory(allCategory);
}
PrefabManager.OnPrefabsRegistered += delegate
{
RelicRegistrar.RegisterAllRelics(relicsBundle);
};
}
}
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;
}
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
return AssetBundle.LoadFromMemory(array);
}
}
public abstract class OwnConfigEntryBase
{
public abstract string GetSerializedValue();
public abstract void SetSerializedValue(string value);
}
public class PlacementWatcher : MonoBehaviour
{
public List<GameObject> RegisterList;
private void Start()
{
if (RegisterList != null && !RegisterList.Contains(((Component)this).gameObject))
{
RegisterList.Add(((Component)this).gameObject);
}
}
private void OnDestroy()
{
if (RegisterList != null)
{
int num = RegisterList.IndexOf(((Component)this).gameObject);
if (num >= 0)
{
RegisterList.RemoveAt(num);
}
}
}
}
public static class RelicConfigManager
{
private static ConfigSync _configSync;
public static void Init(string modName, ConfigFile config)
{
_configSync = new ConfigSync(modName);
}
public static SyncedConfigEntry<T> AddEntry<T>(ConfigFile cfg, string section, string key, T defaultValue, string description)
{
ConfigEntry<T> entry = cfg.Bind<T>(section, key, defaultValue, description);
return _configSync.AddConfigEntry<T>(entry);
}
public static void SetServerSync(bool enabled)
{
_configSync?.SetSourceOfTruth(enabled);
}
}
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 SyncedConfigEntry<string> FurnitureCategoryConfig;
private static SyncedConfigEntry<string> BuildingCategoryConfig;
private static SyncedConfigEntry<string> ClutterCategoryConfig;
private static SyncedConfigEntry<string> StatuesCategoryConfig;
public static readonly List<RelicRegistration> AllRegistrations = new List<RelicRegistration>
{
new RelicRegistration("M_PersianRug_1", "Persian Rug I", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_PersianRug_2", "Persian Rug II", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteBlue", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_PersianRug_3", "Persian Rug III", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_PersianRug_4", "Regal Persian Rug", (RequirementConfig[])(object)new RequirementConfig[2]
{
new RequirementConfig("JuteRed", 4, 0, true),
new RequirementConfig("JuteBlue", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Jute_Stairs_Rug", "Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Jute_Stairs_Rug_Blue", "Blue Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteBlue", 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[1]
{
new RequirementConfig("JuteBlue", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Jute_Stairs_Rug_Small", "Small Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 2, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Jute_Stairs_Runed", "Runed Jute Stair Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 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[1]
{
new RequirementConfig("JuteBlue", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Red_2m_semiround_rug", "Red Semiround Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 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[1]
{
new RequirementConfig("JuteRed", 4, 0, true)
}, "A custom decorative piece.", "furniture"),
new RelicRegistration("M_Jute_Red_Simple_Rug", "Simple Red Jute Rug", (RequirementConfig[])(object)new RequirementConfig[1]
{
new RequirementConfig("JuteRed", 4, 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_Classic_Lamp", "Classic Street Lamp", (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_Japanese_Lamp", "Japanese Street Lamp", (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_Classic_Iron_Bench", "Classic Iron Bench", (RequirementConfig[])(object)new RequirementConfig[2]
{
new RequirementConfig("Iron", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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_BrownBearMozaic", "Bear Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_GreenCloverMozaic", "Clover Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_CrowMozaic", "Crow Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_RoundMozaic", "Round Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ChurchMozaic", "Church Rose Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_WorldTreeMozaic", "World Tree Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_OdinMozaic", "Odin Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowMozaic", "Valkyrie Mosaic Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowGreen", "Green Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowPurple", "Purple Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowPurpleM", "Purple Mosaic Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowRedM", "Red Mosaic Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowRed", "Red Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowBat", "Bat Arched Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ElfMozaic", "Elf Stained Glass Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_WolfMozaic", "Wolf Stained Glass Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_ArchedWindowC", "Arched Stained Glass Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window_1", "H-Pattern Window I", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window_2", "H-Pattern Window II", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window_3", "H-Pattern Window III", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window_2x1", "2×1 Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window_2x2", "2×2 Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Window2x2", "Sunflower 2×2 Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_WoodFrame_Rose_Window", "Rosewood Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Taker2x3", "Underworld 2×3 Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_MageMozaic", "Mage Stained Glass Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building"),
new RelicRegistration("M_Mage_Round_Window_Mozaic", "Mage Round Stained Glass Window", (RequirementConfig[])(object)new RequirementConfig[3]
{
new RequirementConfig("Iron", 10, 0, true),
new RequirementConfig("Wood", 4, 0, true),
new RequirementConfig("Crystal", 4, 0, true)
}, "", "building")
};
public static void InitConfig(ConfigFile cfg)
{
FurnitureCategoryConfig = RelicConfigManager.AddEntry(cfg, "Categories", "FurnitureCategory", "Moonforged Furniture", "Hammer tab name for all Moonforged furniture pieces.");
BuildingCategoryConfig = RelicConfigManager.AddEntry(cfg, "Categories", "BuildingCategory", "Moonforged Building", "Hammer tab name for all Moonforged building pieces.");
ClutterCategoryConfig = RelicConfigManager.AddEntry(cfg, "Categories", "ClutterCategory", "Moonforged Clutter", "Hammer tab name for all Moonforged clutter pieces.");
StatuesCategoryConfig = RelicConfigManager.AddEntry(cfg, "Categories", "StatuesCategory", "Moonforged Statues", "Hammer tab name for all Moonforged statue pieces.");
}
public static IEnumerable<string> GetAllCategories()
{
return AllRegistrations.Select((RelicRegistration r) => CategoryToTab(r.Category)).Distinct();
}
private static string CategoryToTab(string category)
{
string text = category.ToLower();
if (1 == 0)
{
}
string result = text switch
{
"statue" => (StatuesCategoryConfig != null) ? StatuesCategoryConfig.Value : "Moonforged Statues",
"clutter" => (ClutterCategoryConfig != null) ? ClutterCategoryConfig.Value : "Moonforged Clutter",
"building" => (BuildingCategoryConfig != null) ? BuildingCategoryConfig.Value : "Moonforged Building",
"furniture" => (FurnitureCategoryConfig != null) ? FurnitureCategoryConfig.Value : "Moonforged Furniture",
_ => category,
};
if (1 == 0)
{
}
return result;
}
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_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_03f9: Expected O, but got Unknown
//IL_040f: Unknown result type (might be due to invalid IL or missing references)
//IL_0414: Unknown result type (might be due to invalid IL or missing references)
//IL_0420: Expected O, but got Unknown
//IL_0431: Unknown result type (might be due to invalid IL or missing references)
//IL_0436: Unknown result type (might be due to invalid IL or missing references)
//IL_0443: Expected O, but got Unknown
//IL_0480: Unknown result type (might be due to invalid IL or missing references)
//IL_0487: Expected O, but got Unknown
//IL_049e: Unknown result type (might be due to invalid IL or missing references)
//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
//IL_04b0: Expected O, but got Unknown
//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
//IL_04d3: Expected O, but got Unknown
//IL_05dc: Unknown result type (might be due to invalid IL or missing references)
//IL_05e1: Unknown result type (might be due to invalid IL or missing references)
//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
//IL_05ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0608: Unknown result type (might be due to invalid IL or missing references)
//IL_0617: Expected O, but got Unknown
//IL_0620: Unknown result type (might be due to invalid IL or missing references)
//IL_062a: 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)
{
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");
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),
CraftingStation = craftingStation,
Requirements = reg.Requirements
};
PieceManager.Instance.AddPiece(new CustomPiece(val, true, val13));
}
}
public class SyncedConfigEntry<T> : OwnConfigEntryBase
{
public ConfigEntry<T> Entry { get; }
public T Value
{
get
{
return Entry.Value;
}
set
{
Entry.Value = value;
}
}
public SyncedConfigEntry(ConfigEntry<T> entry)
{
Entry = entry;
}
public override string GetSerializedValue()
{
return ((ConfigEntryBase)Entry).GetSerializedValue();
}
public override void SetSerializedValue(string value)
{
((ConfigEntryBase)Entry).SetSerializedValue(value);
}
}