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 PrintToInventory v1.3.1
PrintToInventory.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using EntityStates; using EntityStates.Duplicator; using EntityStates.MealPrep; using EntityStates.Scrapper; using IL.EntityStates.MealPrep; using IL.EntityStates.Scrapper; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.Duplicator; using On.RoR2; using RoR2; using UnityEngine; using UnityEngine.Networking; [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("PrintToInventory")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+01d2f2afe37ea8542ba94441fe97bd75a0840986")] [assembly: AssemblyProduct("PrintToInventory")] [assembly: AssemblyTitle("PrintToInventory")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace PrintToInventory { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Moffein.PrintToInventory", "PrintToInventory", "1.3.1")] public class PrintToInventory : BaseUnityPlugin { public static bool affectScrappers = true; public static bool affectPrinters = true; public static bool affectCauldrons = true; public static bool affectCleanse = true; public static bool affectWanderingChef = true; public static bool multiplayerOnly = true; private static bool hooksAdded = false; public void Awake() { //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Expected O, but got Unknown //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown if (Chainloader.PluginInfos.ContainsKey("com.funkfrog_sipondo.sharesuite")) { Debug.LogError((object)"PrintToInventory: ShareSuite detected! PrintToInventory will be disabled due to incompatibilities."); return; } multiplayerOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Multiplayer Only", true, "Only active this mod in multiplayer.").Value; affectCauldrons = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Cauldron", true, "Affect this interactable.").Value; affectPrinters = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Printer", true, "Affect this interactable.").Value; affectScrappers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Scrapper", true, "Affect this interactable.").Value; affectCleanse = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Cleansing Pool", true, "Affect this interactable.").Value; affectWanderingChef = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Affect Wandering Chef", true, "Affect this interactable.").Value; Run.Start += new hook_Start(Run_Start); Run.OnDestroy += new hook_OnDestroy(Run_OnDestroy); } private void Run_OnDestroy(orig_OnDestroy orig, Run self) { orig.Invoke(self); RemoveHooks(); } private void Run_Start(orig_Start orig, Run self) { orig.Invoke(self); if (!multiplayerOnly || !RoR2Application.isInSinglePlayer) { AddHooks(); } } public void AddHooks() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown if (!hooksAdded) { hooksAdded = true; if (affectPrinters) { Duplicating.OnEnter += new hook_OnEnter(Duplicating_OnEnter); } if (affectCauldrons || affectCleanse) { PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(ImmediatelyGiveItem); ShopTerminalBehavior.DropPickup += new hook_DropPickup(PreventDrop); } if (affectScrappers) { ScrappingToIdle.OnEnter += new Manipulator(ScrappingToIdle_DirectToInventory); } if (affectWanderingChef) { MealPrepController.BeginCookingServer += new hook_BeginCookingServer(MealPrepController_BeginCookingServer); CookingToIdle.DropItem += new Manipulator(DisableMealPrepDrop); } } } public void RemoveHooks() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown if (hooksAdded) { hooksAdded = false; if (affectPrinters) { Duplicating.OnEnter -= new hook_OnEnter(Duplicating_OnEnter); } if (affectCauldrons || affectCleanse) { PurchaseInteraction.OnInteractionBegin -= new hook_OnInteractionBegin(ImmediatelyGiveItem); ShopTerminalBehavior.DropPickup -= new hook_DropPickup(PreventDrop); } if (affectScrappers) { ScrappingToIdle.OnEnter -= new Manipulator(ScrappingToIdle_DirectToInventory); } if (affectWanderingChef) { MealPrepController.BeginCookingServer -= new hook_BeginCookingServer(MealPrepController_BeginCookingServer); CookingToIdle.DropItem -= new Manipulator(DisableMealPrepDrop); } } } private void MealPrepController_BeginCookingServer(orig_BeginCookingServer orig, MealPrepController self, Interactor activator, PickupIndex[] itemsToTake, PickupIndex reward, int count) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Invalid comparison between Unknown and I4 //IL_0069: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, activator, itemsToTake, reward, count); if (!NetworkServer.active || !Object.op_Implicit((Object)(object)activator)) { return; } CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component.inventory)) { PickupDef pickupDef = PickupCatalog.GetPickupDef(reward); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { component.inventory.GiveItemPermanent(pickupDef.itemIndex, count); } } } private void DisableMealPrepDrop(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(NetworkServer), "get_active") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<bool, CookingToIdle, bool>>((Func<bool, CookingToIdle, bool>)delegate(bool active, CookingToIdle self) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Invalid comparison between Unknown and I4 PickupDef pickupDef = PickupCatalog.GetPickupDef(((MealPrepBaseState)self).pickupToDrop); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { if (NetworkServer.active) { self.itemsDropped++; } return false; } return active; }); } else { Debug.LogError((object)"PrintToInventory: CookingToIdle_DropItem DisableMealPrepDrop IL hook failed."); } } private void ScrappingToIdle_DirectToInventory(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<ScrapperController>(x, "IsRewardPickupQueueEmpty") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<bool, ScrappingToIdle, bool>>((Func<bool, ScrappingToIdle, bool>)delegate(bool queueEmpty, ScrappingToIdle self) { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) if (!queueEmpty && Object.op_Implicit((Object)(object)((ScrapperBaseState)self).scrapperController) && Object.op_Implicit((Object)(object)((ScrapperBaseState)self).scrapperController.interactor) && ((ScrapperBaseState)self).scrapperController.pickupPrintQueue != null) { CharacterBody component = ((Component)((ScrapperBaseState)self).scrapperController.interactor).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory)) { List<UniquePickup> list = new List<UniquePickup>(); foreach (UniquePickup item in ((ScrapperBaseState)self).scrapperController.pickupPrintQueue) { PickupDef pickupDef = PickupCatalog.GetPickupDef(item.pickupIndex); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { component.inventory.GiveItemPermanent(pickupDef.itemIndex, 1); list.Add(item); } } foreach (UniquePickup item2 in list) { ((ScrapperBaseState)self).scrapperController.pickupPrintQueue.Remove(item2); } return ((ScrapperBaseState)self).scrapperController.IsRewardPickupQueueEmpty(); } } return queueEmpty; }); } else { Debug.LogError((object)"PrintToInventory: Scrapper IL hook failed."); } } private void Duplicating_OnEnter(orig_OnEnter orig, Duplicating self) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Invalid comparison between Unknown and I4 //IL_009f: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!NetworkServer.active) { return; } PurchaseInteraction component = ((EntityState)self).GetComponent<PurchaseInteraction>(); ShopTerminalBehavior component2 = ((EntityState)self).GetComponent<ShopTerminalBehavior>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component2)) { return; } CharacterBody component3 = ((Component)component.lastActivator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component3) && Object.op_Implicit((Object)(object)component3.inventory)) { PickupDef pickupDef = PickupCatalog.GetPickupDef(component2.pickup.pickupIndex); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { component3.inventory.GiveItem(pickupDef.itemIndex, 1); component2.SetHasBeenPurchased(true); self.hasDroppedDroplet = true; self.hasStartedCooking = true; } } } private void ImmediatelyGiveItem(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Invalid comparison between Unknown and I4 //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Invalid comparison between Unknown and I4 //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Invalid comparison between Unknown and I4 //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Invalid comparison between Unknown and I4 orig.Invoke(self, activator); PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>(); if (!Object.op_Implicit((Object)(object)component)) { return; } bool flag = affectCauldrons && component.displayNameToken == "BAZAAR_CAULDRON_NAME"; bool flag2 = affectCleanse && component.displayNameToken == "SHRINE_CLEANSE_NAME"; if (!(flag || flag2)) { return; } CharacterBody component2 = ((Component)activator).GetComponent<CharacterBody>(); ShopTerminalBehavior component3 = ((Component)self).GetComponent<ShopTerminalBehavior>(); if (!Object.op_Implicit((Object)(object)component2) || !Object.op_Implicit((Object)(object)component2.inventory) || !Object.op_Implicit((Object)(object)component3)) { return; } PickupDef pickupDef = PickupCatalog.GetPickupDef(component3.pickup.pickupIndex); if (pickupDef != null && (int)pickupDef.itemIndex != -1) { int num = 1; if (flag && component.cost == 1 && ((int)component.costType == 6 || (int)component.costType == 5) && ((int)component3.itemTier == 0 || (int)component3.itemTier == 6 || (int)component3.itemTier == 3)) { num = 3; } component2.inventory.GiveItem(pickupDef.itemIndex, num); component3.SetHasBeenPurchased(true); component.lastActivator = null; } } private void PreventDrop(orig_DropPickup orig, ShopTerminalBehavior self) { if (NetworkServer.active) { PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>(); if (Object.op_Implicit((Object)(object)component)) { bool flag = affectCauldrons && component.displayNameToken == "BAZAAR_CAULDRON_NAME"; bool flag2 = affectCleanse && component.displayNameToken == "SHRINE_CLEANSE_NAME"; if ((flag || flag2) && (Object)(object)component.lastActivator == (Object)null) { return; } } } orig.Invoke(self); } } } namespace R2API.Utils { [AttributeUsage(AttributeTargets.Assembly)] public class ManualNetworkRegistrationAttribute : Attribute { } }