Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ItemBlacklist v1.0.1
ItemBlacklist.dll
Decompiled 2 days agousing 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"; }