diff --git a/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedInventoryItemEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedInventoryItemEventArgs.cs
new file mode 100644
index 0000000000..4bd590dc55
--- /dev/null
+++ b/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedInventoryItemEventArgs.cs
@@ -0,0 +1,65 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) ExMod Team. All rights reserved.
+// Licensed under the CC BY-SA 3.0 license.
+//
+// -----------------------------------------------------------------------
+
+namespace Exiled.Events.EventArgs.Scp914
+{
+ using API.Features;
+ using API.Features.Items;
+ using global::Scp914;
+ using Interfaces;
+ using InventorySystem.Items;
+ using InventorySystem.Items.Pickups;
+
+ ///
+ /// Contains all information before SCP-914 upgrades an item.
+ ///
+ public class UpgradedInventoryItemEventArgs : IItemEvent
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public UpgradedInventoryItemEventArgs(Player player, ItemBase item, Scp914KnobSetting knobSetting, ItemBase[] result)
+ {
+ Player = player;
+ Item = Item.Get(item);
+ KnobSetting = knobSetting;
+ Result = result;
+ }
+
+ ///
+ /// Gets SCP-914 working knob setting.
+ ///
+ public Scp914KnobSetting KnobSetting { get; }
+
+ ///
+ /// Gets a list of items to be upgraded inside SCP-914.
+ ///
+ public Item Item { get; }
+
+ ///
+ /// Gets the who owns the item to be upgraded.
+ ///
+ public Player Player { get; }
+
+ ///
+ /// Gets the array of items created as a result of SCP-914 upgraded.
+ ///
+ public ItemBase[] Result { get; }
+ }
+}
\ No newline at end of file
diff --git a/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedPickupEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedPickupEventArgs.cs
new file mode 100644
index 0000000000..5bd2c9d952
--- /dev/null
+++ b/EXILED/Exiled.Events/EventArgs/Scp914/UpgradedPickupEventArgs.cs
@@ -0,0 +1,64 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) ExMod Team. All rights reserved.
+// Licensed under the CC BY-SA 3.0 license.
+//
+// -----------------------------------------------------------------------
+
+namespace Exiled.Events.EventArgs.Scp914
+{
+ using Exiled.API.Features.Pickups;
+ using Exiled.Events.EventArgs.Interfaces;
+ using global::Scp914;
+ using InventorySystem.Items.Pickups;
+ using UnityEngine;
+
+ ///
+ /// Contains all information before SCP-914 upgrades an item.
+ ///
+ public class UpgradedPickupEventArgs : IPickupEvent
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public UpgradedPickupEventArgs(ItemPickupBase item, Vector3 newPos, Scp914KnobSetting knobSetting, ItemPickupBase[] result)
+ {
+ Pickup = Pickup.Get(item);
+ OutputPosition = newPos;
+ KnobSetting = knobSetting;
+ Result = result;
+ }
+
+ ///
+ /// Gets a list of items to be upgraded inside SCP-914.
+ ///
+ public Pickup Pickup { get; }
+
+ ///
+ /// Gets the position the item will be output to.
+ ///
+ public Vector3 OutputPosition { get; }
+
+ ///
+ /// Gets SCP-914 working knob setting.
+ ///
+ public Scp914KnobSetting KnobSetting { get; }
+
+ ///
+ /// Gets the array of items created as a result of SCP-914 upgraded.
+ ///
+ public ItemPickupBase[] Result { get; }
+ }
+}
\ No newline at end of file
diff --git a/EXILED/Exiled.Events/Handlers/Scp914.cs b/EXILED/Exiled.Events/Handlers/Scp914.cs
index a9efe220a1..8d271661df 100644
--- a/EXILED/Exiled.Events/Handlers/Scp914.cs
+++ b/EXILED/Exiled.Events/Handlers/Scp914.cs
@@ -22,11 +22,21 @@ public static class Scp914
///
public static Event UpgradingPickup { get; set; } = new();
+ ///
+ /// Invoked after SCP-914 upgrades a Pickup.
+ ///
+ public static Event UpgradedPickup { get; set; } = new();
+
///
/// Invoked before SCP-914 upgrades an item in a player's inventory.
///
public static Event UpgradingInventoryItem { get; set; } = new();
+ ///
+ /// Invoked after SCP-914 upgrades an item in a player's inventory.
+ ///
+ public static Event UpgradedInventoryItem { get; set; } = new();
+
///
/// Invoked before SCP-914 upgrades a player.
///
@@ -48,12 +58,24 @@ public static class Scp914
/// The instance.
public static void OnUpgradingPickup(UpgradingPickupEventArgs ev) => UpgradingPickup.InvokeSafely(ev);
+ ///
+ /// Called after SCP-914 upgrades a item.
+ ///
+ /// The instance.
+ public static void OnUpgradedPickup(UpgradedPickupEventArgs ev) => UpgradedPickup.InvokeSafely(ev);
+
///
/// Called before SCP-914 upgrades an item in a player's inventory.
///
/// The instance.
public static void OnUpgradingInventoryItem(UpgradingInventoryItemEventArgs ev) => UpgradingInventoryItem.InvokeSafely(ev);
+ ///
+ /// Called after SCP-914 upgrades an item in a player's inventory.
+ ///
+ /// The instance.
+ public static void OnUpgradedInventoryItem(UpgradedInventoryItemEventArgs ev) => UpgradedInventoryItem.InvokeSafely(ev);
+
///
/// Called before SCP-914 upgrades a player.
///
diff --git a/EXILED/Exiled.Events/Patches/Events/Scp914/UpgradedPickup.cs b/EXILED/Exiled.Events/Patches/Events/Scp914/UpgradedPickup.cs
new file mode 100644
index 0000000000..64842911da
--- /dev/null
+++ b/EXILED/Exiled.Events/Patches/Events/Scp914/UpgradedPickup.cs
@@ -0,0 +1,73 @@
+// -----------------------------------------------------------------------
+//
+// Copyright (c) ExMod Team. All rights reserved.
+// Licensed under the CC BY-SA 3.0 license.
+//
+// -----------------------------------------------------------------------
+
+namespace Exiled.Events.Patches.Events.Scp914
+{
+ using System.Collections.Generic;
+ using System.Reflection.Emit;
+
+ using API.Features.Pools;
+ using Exiled.Events.Attributes;
+ using Exiled.Events.EventArgs.Scp914;
+
+ using global::Scp914;
+
+ using Handlers;
+
+ using HarmonyLib;
+
+ using static HarmonyLib.AccessTools;
+
+ ///
+ /// Patches .
+ /// Adds the event.
+ ///
+ [EventPatch(typeof(Scp914), nameof(Scp914.UpgradedPickup))]
+ [HarmonyPatch(typeof(Scp914Upgrader), nameof(Scp914Upgrader.ProcessPickup))]
+ internal static class UpgradedPickup
+ {
+ private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator)
+ {
+ List newInstructions = ListPool.Pool.Get(instructions);
+
+ int index = newInstructions.FindLastIndex(instruction => instruction.opcode == OpCodes.Ldloc_2);
+
+ List