Decompiled source of ItemCensorer v1.0.0

plugins/SillyItemCensor.dll

Decompiled 4 months ago
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using On.RoR2;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;

[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.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("SillyItemCensor")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SillyItemCensor")]
[assembly: AssemblyTitle("SillyItemCensor")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace SillyItemCensor;

[BepInPlugin("com.TheTimeSweeper.SillyItemCensor", "SillyItemCensor", "0.1.0")]
public class SillyItemCensorPlugin : BaseUnityPlugin
{
	private static string itemList;

	private string[] censoredItems;

	private Mesh cubeMesh;

	private AssetBundle bundle;

	private Dictionary<string, Sprite> cachedSprites = new Dictionary<string, Sprite>();

	private void Awake()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		ItemCatalog.SetItemDefs += new hook_SetItemDefs(ItemCatalog_SetItemDefs);
		cubeMesh = Addressables.LoadAssetAsync<Mesh>((object)"Decalicious/DecalCube.asset").WaitForCompletion();
		bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "itemcensorer"));
		ReadConfig();
	}

	private string getItemTierSpriteName(ItemTier tier)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Expected I4, but got Unknown
		ItemTier val = tier;
		ItemTier val2 = val;
		switch ((int)val2)
		{
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
			return ((object)(ItemTier)(ref tier)).ToString().ToLowerInvariant();
		case 6:
		case 7:
		case 8:
		case 9:
			return "void";
		default:
			return "consumed";
		case 10:
			return "default";
		}
	}

	private Sprite getIconSprite(ItemTier tier)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		string itemTierSpriteName = getItemTierSpriteName(tier);
		if (cachedSprites.ContainsKey(itemTierSpriteName))
		{
			return cachedSprites[itemTierSpriteName];
		}
		return cachedSprites[itemTierSpriteName] = bundle.LoadAsset<Sprite>(itemTierSpriteName);
	}

	private void ReadConfig()
	{
		itemList = ((BaseUnityPlugin)this).Config.Bind<string>("Hello", "CensoredItemsList", "Syringe", "List of Items to be censored, comma separated").Value;
		censoredItems = itemList.Replace(", ", ",").Split(new char[1] { ',' });
	}

	private void ItemCatalog_SetItemDefs(orig_SetItemDefs orig, ItemDef[] newItemDefs)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		foreach (ItemDef val in newItemDefs)
		{
			if (!ItemIsCensored(val))
			{
				continue;
			}
			val.pickupIconSprite = getIconSprite(val.tier);
			if (!((Object)(object)val.pickupModelPrefab == (Object)null))
			{
				SkinnedMeshRenderer[] componentsInChildren = val.pickupModelPrefab.GetComponentsInChildren<SkinnedMeshRenderer>();
				for (int j = 0; j < componentsInChildren.Length; j++)
				{
					componentsInChildren[j].sharedMesh = cubeMesh;
				}
				MeshFilter[] componentsInChildren2 = val.pickupModelPrefab.GetComponentsInChildren<MeshFilter>();
				for (int k = 0; k < componentsInChildren2.Length; k++)
				{
					componentsInChildren2[k].mesh = cubeMesh;
				}
			}
		}
		orig.Invoke(newItemDefs);
	}

	private bool ItemIsCensored(ItemDef itemDef)
	{
		for (int i = 0; i < censoredItems.Length; i++)
		{
			bool flag = false;
			string text = censoredItems[i].ToLowerInvariant();
			if (((Object)itemDef).name.ToLowerInvariant().Contains(text))
			{
				flag = true;
			}
			string text2 = Language.GetString(itemDef.nameToken, "en").ToLowerInvariant();
			if (text2.Contains(text))
			{
				flag = true;
			}
			if (text2.Replace(" ", "").Contains(text.Replace(" ", "")))
			{
				flag = true;
			}
			if (flag)
			{
				((BaseUnityPlugin)this).Logger.LogMessage((object)("Found item for entry " + censoredItems[i] + ", censoring " + ((Object)itemDef).name));
				return true;
			}
		}
		return false;
	}
}