using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.VFX;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ItemLightsAndEffectsFix")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ItemLightsAndEffectsFix")]
[assembly: AssemblyTitle("ItemLightsAndEffectsFix")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace ItemLightsAndEffectsFix
{
public class Config
{
public ConfigFile configFile;
public string VFX_WHITELISTED { get; set; }
public string LIGHT_WHITELISTED { get; set; }
public string VFX_BLACKLISTED { get; set; }
public string LIGHT_BLACKLISTED { get; set; }
public Config(ConfigFile cfg)
{
configFile = cfg;
}
private T ConfigEntry<T>(string section, string key, T defaultVal, string description)
{
return configFile.Bind<T>(section, key, defaultVal, description).Value;
}
public void BindConfig()
{
VFX_WHITELISTED = ConfigEntry("Whitelists", "VFX Whitelist", "", "The mod will always change the item's VFX state if it is present in this list \nExemple: itemName1,itemName2,itemName3,");
LIGHT_WHITELISTED = ConfigEntry("Whitelists", "Light Whitelist", "", "The mod will always change the item's Light state if it is present in this list \nExemple: itemName1,itemName2,itemName3,");
VFX_BLACKLISTED = ConfigEntry("Blacklists", "VFX Blacklist", "", "The mod will not change the item's VFX state if it is present in this list \nExemple: itemName1,itemName2,itemName3,");
LIGHT_BLACKLISTED = ConfigEntry("Blacklists", "Light Blacklist", "", "The mod will not change the item's Light state if it is present in this list \nExemple: itemName1,itemName2,itemName3,");
}
}
[HarmonyPatch(typeof(GrabbableObject))]
internal class EnableItemMeshesPatch_Patch
{
[HarmonyPostfix]
[HarmonyPatch("EnableItemMeshes")]
private static void EnableItemMeshesPatch(GrabbableObject __instance, ref bool enable)
{
VisualEffect[] componentsInChildren = ((Component)__instance).gameObject.GetComponentsInChildren<VisualEffect>();
Light[] componentsInChildren2 = ((Component)__instance).gameObject.GetComponentsInChildren<Light>();
string item = __instance.itemProperties?.itemName ?? "Item_Name_Not_Found";
string item2 = ((Component)__instance).GetComponentInChildren<ScanNodeProperties>()?.headerText ?? "Item_Name_Not_Found";
if (!Plugin.VFX_blacklist.Contains(item) && !Plugin.VFX_blacklist.Contains(item2) && (!__instance.itemProperties.requiresBattery || Plugin.VFX_whitelist.Contains(item) || Plugin.VFX_whitelist.Contains(item2)))
{
for (int i = 0; i < componentsInChildren.Length; i++)
{
if (!((Component)componentsInChildren[i]).gameObject.CompareTag("DoNotSet") && !((Component)componentsInChildren[i]).gameObject.CompareTag("InteractTrigger"))
{
((Behaviour)componentsInChildren[i]).enabled = enable;
}
}
}
if (Plugin.Light_blacklist.Contains(item) || Plugin.Light_blacklist.Contains(item2) || (__instance.itemProperties.requiresBattery && !Plugin.Light_whitelist.Contains(item) && !Plugin.Light_whitelist.Contains(item2)))
{
return;
}
for (int j = 0; j < componentsInChildren2.Length; j++)
{
if (!((Component)componentsInChildren2[j]).gameObject.CompareTag("DoNotSet") && !((Component)componentsInChildren2[j]).gameObject.CompareTag("InteractTrigger"))
{
((Behaviour)componentsInChildren2[j]).enabled = enable;
}
}
}
}
[BepInPlugin("Entity378.ItemLightsAndEffectsFix", "ItemLightsAndEffectsFix", "1.1.1")]
public class Plugin : BaseUnityPlugin
{
private Harmony harmony = new Harmony("Entity378.ItemLightsAndEffectsFix");
private const string GUID = "Entity378.ItemLightsAndEffectsFix";
private const string NAME = "ItemLightsAndEffectsFix";
private const string VERSION = "1.1.1";
public static List<string> VFX_whitelist;
public static List<string> Light_whitelist;
public static List<string> VFX_blacklist;
public static List<string> Light_blacklist;
public static Config cfg { get; private set; }
private void Awake()
{
cfg = new Config(((BaseUnityPlugin)this).Config);
cfg.BindConfig();
VFX_whitelist = cfg.VFX_WHITELISTED.Split(',').ToList();
Light_whitelist = cfg.LIGHT_WHITELISTED.Split(',').ToList();
VFX_blacklist = cfg.VFX_BLACKLISTED.Split(',').ToList();
Light_blacklist = cfg.LIGHT_BLACKLISTED.Split(',').ToList();
harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"ItemLightsAndEffectsFix: Plugin Loaded!");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "ItemLightsAndEffectsFix";
public const string PLUGIN_NAME = "ItemLightsAndEffectsFix";
public const string PLUGIN_VERSION = "1.0.0";
}
}