Decompiled source of ItemBlacklist v1.0.1

ItemBlacklist.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CSync.Extensions;
using CSync.Lib;
using GameNetcodeStuff;
using HarmonyLib;
using LethalNetworkAPI;
using Unity.Netcode;
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("ConfigurableJesterFear")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ConfigurableJesterFear")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("b0a5a24d-58b0-4c44-95ec-dfeec6436431")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ItemBlacklist;

public class ConfigHandler : SyncedConfig2<ConfigHandler>
{
	public ConfigEntry<bool> debugMode;

	[SyncedEntryField]
	public SyncedEntry<string> blacklist;

	public ConfigHandler(ConfigFile cfg)
		: base("ZetaArcade.ItemBlacklist")
	{
		blacklist = SyncedBindingExtensions.BindSyncedEntry<string>(cfg, "Blacklist", "Item Blacklist", "", "Comma seperated list of items to be blacklisted. When picked up, they are destroyed immediately.");
		debugMode = cfg.Bind<bool>("Debugging", "Print Debug Info", false, "If true, prints debug info into the log, such as the name of the item you last picked up.");
		ConfigManager.Register<ConfigHandler>((SyncedConfig2<ConfigHandler>)this);
	}
}
public static class ItemBlacklistNetworking
{
	public class ItemPickup
	{
		public ulong playerID;

		public string itemID;
	}

	public static LNetworkMessage<ItemPickup> ItemPickupMessage;

	public static void Init()
	{
		ItemPickupMessage = LNetworkMessage<ItemPickup>.Create("ItemPickup", (Action<ItemPickup, ulong>)OnItemPickup, (Action<ItemPickup>)null, (Action<ItemPickup, ulong>)null);
	}

	private static void OnItemPickup(ItemPickup message, ulong senderClientId)
	{
		if (NetworkManager.Singleton.IsHost && !((Object)(object)ItemBlacklist.Instance == (Object)null))
		{
			ItemBlacklist.Logger.LogInfo((object)$"OnItemPickup called by client {senderClientId}:{message.itemID}");
			ItemBlacklist.Instance.DestroyBlacklistedItem(message.playerID, message.itemID);
		}
	}

	public static void SendItemPickup(ulong playerID, string itemID)
	{
		if (NetworkManager.Singleton.IsListening)
		{
			ItemBlacklist.Logger.LogInfo((object)$"SendItemPickup called by player: {playerID} for item: {itemID}");
			ItemPickupMessage.SendServer(new ItemPickup
			{
				playerID = playerID,
				itemID = itemID
			});
		}
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency("com.sigurd.csync", "5.0.0")]
[BepInPlugin("ZetaArcade.ItemBlacklist", "ItemBlacklist", "1.0.1")]
public class ItemBlacklist : BaseUnityPlugin
{
	[HarmonyPatch(typeof(GrabbableObject), "GrabItem")]
	internal class EquipItemPatch
	{
		[HarmonyPostfix]
		private static void Postfix(GrabbableObject __instance)
		{
			if (Config.debugMode.Value)
			{
				Logger.LogInfo((object)("Detected item: " + __instance.itemProperties.itemName));
			}
			if ((Object)(object)__instance == (Object)null)
			{
				return;
			}
			string itemName = __instance.itemProperties.itemName;
			string[] source = (from s in Config.blacklist.Value.Split(new char[1] { ',' })
				select s.Trim().ToLowerInvariant()).ToArray();
			if (source.Contains(itemName.ToLowerInvariant()))
			{
				Logger.LogInfo((object)("Item " + itemName + " is blacklisted"));
				PlayerControllerB playerHeldBy = __instance.playerHeldBy;
				if (!((Object)(object)playerHeldBy == (Object)null) && playerHeldBy.playerClientId == NetworkManager.Singleton.LocalClientId)
				{
					ItemBlacklistNetworking.SendItemPickup(playerHeldBy.playerClientId, itemName);
				}
			}
		}
	}

	private Harmony harmony = new Harmony("ZetaArcade.ItemBlacklist");

	public static ManualLogSource Logger;

	public static ItemBlacklist Instance;

	internal static ConfigHandler Config;

	private void Awake()
	{
		if ((Object)(object)Instance == (Object)null)
		{
			Instance = this;
		}
		Logger = ((BaseUnityPlugin)this).Logger;
		ItemBlacklistNetworking.Init();
		Config = new ConfigHandler(((BaseUnityPlugin)this).Config);
		Logger.LogInfo((object)"Plugin is loaded!");
		harmony.PatchAll();
	}

	public void DestroyBlacklistedItem(ulong playerID, string itemName)
	{
		if ((Object)(object)StartOfRound.Instance == (Object)null)
		{
			return;
		}
		PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB p) => p.playerClientId == playerID));
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		GrabbableObject[] itemSlots = val.ItemSlots;
		foreach (GrabbableObject val2 in itemSlots)
		{
			if (!((Object)(object)val2 == (Object)null) && !(val2.itemProperties.itemName != itemName))
			{
				Logger.LogInfo((object)("Item " + itemName + " destroyed."));
				val.carryWeight = Mathf.Clamp(val.carryWeight - (val2.itemProperties.weight - 1f), 1f, 10f);
				val.DestroyItemInSlot(Array.IndexOf(val.ItemSlots, val2));
				break;
			}
		}
	}
}
internal class PluginInfo
{
	public const string modGUID = "ZetaArcade.ItemBlacklist";

	public const string modName = "ItemBlacklist";

	public const string modVersion = "1.0.1";
}