public override void HandleItemDrag(string name, ItemBase draggedItem, DragAndDropManager.DragRemoveItem dragDelegate, SegmentEntity targetEntity)
    {
        ExtraStorageHoppers hopper      = targetEntity as ExtraStorageHoppers;
        ItemBase            itemForSlot = this.GetItemForSlot(hopper, name);
        bool flag = true;

        if (itemForSlot != null)
        {
            flag = (draggedItem.mnItemID == itemForSlot.mnItemID);
        }
        if (hopper.OT && hopper.IsEmpty() && !hopper.ExemplarSet)
        {
            hopper.SetExemplar(draggedItem);
        }
        if (name == "ItemSlot" + this.SlotCount && flag && hopper.IsNotFull() && hopper.CheckExemplar(draggedItem))
        {
            ItemBase itemBase         = ItemManager.CloneItem(draggedItem);
            int      currentStackSize = ItemManager.GetCurrentStackSize(itemBase);
            if (hopper.RemainingCapacity < currentStackSize)
            {
                ItemManager.SetItemCount(itemBase, hopper.RemainingCapacity);
            }
            ExtraStorageHopperWindowNew.StoreItems(WorldScript.mLocalPlayer, hopper, itemBase);
            InventoryPanelScript.mbDirty = true;
            SurvivalHotBarManager.MarkAsDirty();
            SurvivalHotBarManager.MarkContentDirty();
            ExtraStorageHopperWindowNew.networkRedraw = true;
        }
    }
    private void PlayerExtractRequest()
    {
        Player player    = WorldScript.mLocalPlayer;
        int    lensCount = 0;

        if (player == null)
        {
            return;
        }

        if (mStoredLenses != null)
        {
            lensCount = mStoredLenses.GetAmount();
        }
        if (lensCount > 0)
        {
            Debug.Log("[Auto Lens Swapper] Removing " + lensCount + " lenses from machine, placing into " + player.mUserName);
            if (!player.mInventory.AddItem(mStoredLenses))
            {
                ItemManager.instance.DropItem(mStoredLenses, player.mnWorldX, player.mnWorldY, player.mnWorldZ, Vector3.zero);
                Debug.Log("[Auto Lens Swapper] Player's inventory did not accept lenses. Dropping at player's feet.");
            }
        }
        mStoredLenses = null;
        mTargetLens   = null;

        if (mStatus == eStatuses.Running)
        {
            mbHaltedEarly = true;
            mStatus       = eStatuses.Done;
        }
        else if (mStatus == eStatuses.Done)
        {
            mnTrackLPTs      = 0;
            mnTrackSwaps     = 0;
            mnSegmentEIndex1 = 0;
            mnSegmentEIndex2 = 0;
            mnSegmentID      = 0;
            mbHaltedEarly    = false;
            mStatus          = eStatuses.Stopped;
        }


        MarkDirtyDelayed();
        RequestImmediateNetworkUpdate();
        player.mInventory.VerifySuitUpgrades(); //Shouldn't be needed, but lets be safe.
        SurvivalHotBarManager.MarkAsDirty();
        SurvivalHotBarManager.MarkContentDirty();
        UIManager.ForceNGUIUpdate = 0.1f;
        RequestImmediateNetworkUpdate();
        AudioHUDManager.instance.OrePickup();
    }
    private void PlayerStoreRequest()
    {
        int      lnAvailable = 0;
        ItemBase itemToStore = UIManager.instance.GetCurrentHotBarItemOrCubeAsItem(out lnAvailable, true);
        Player   player      = WorldScript.mLocalPlayer;

        if (player == null)
        {
            return;
        }
        if (lnAvailable < 0)
        {
            return;
        }
        if (itemToStore == null)
        {
            return;
        }
        if (!isValidLensID(itemToStore.mnItemID))
        {
            Debug.Log("[Auto Lens Swapper] Player " + player.mUserName + " tried inserting a non-lens, but was denied!");
            Debug.Log("[Auto Lens Swapper] itemID: " + itemToStore.mnItemID + " itemName: " + itemToStore.GetName());
            return;
        }
        if (mTargetLens != null)
        {
            if (itemToStore.mnItemID != mTargetLens.mnItemID && getStorageAvailable() < mnStorageMax)
            {
                Debug.Log("[Auto Lens Swapper][info] Player " + player.mUserName + " tried inserting a differing lens than what was still in the machine!");
                return;
            }
        }

        //Easy case, only setting target, not modifying storage.
        //(User didn't have any lenses on them, but they had the target in their hotbar)
        if (lnAvailable == 0)
        {
            Debug.Log("[Auto Lens Swapper][info] Player " + player.mUserName + " set target (new) lens without depositing any.");
            mTargetLens = ItemManager.SpawnItem(itemToStore.mnItemID);
            if (player.mbIsLocalPlayer)
            {
                Color lCol = Color.red;
                FloatingCombatTextManager.instance.QueueText(mnX, mnY + 1L, mnZ, 0.75f, string.Format("Lens Swapper set to: \n", (object)player.GetItemName(itemToStore)), lCol, 1.5f, 64f);
            }
            return;
        }

        int amount           = lnAvailable;
        int storageAvailable = getStorageAvailable();
        int maxStackSize     = ItemManager.GetMaxStackSize(itemToStore);

        //Determine amount that can be transfered.
        if (itemToStore.mnItemID == -1)
        {
            return;
        }
        if (amount > 10 && Input.GetKey(KeyCode.LeftShift))
        {
            amount = 10;
        }
        if (amount > 1 && Input.GetKey(KeyCode.LeftControl))
        {
            amount = 1;
        }
        if (amount > getStorageAvailable())
        {
            amount = getStorageAvailable();
        }
        if (amount > ItemManager.GetMaxStackSize(itemToStore))
        {
            amount = ItemManager.GetMaxStackSize(itemToStore);
        }
        ItemManager.SetItemCount(itemToStore, amount);

        if (!player.mInventory.RemoveItemByExample(itemToStore, true))
        {
            Debug.Log("[Auto Lens Swapper][info] Player " + player.mUserName + " doesnt have " + itemToStore.GetName());
            return;
        }
        mTargetLens = ItemManager.SpawnItem(itemToStore.mnItemID);
        if (mStoredLenses == null || mStoredLenses.mnItemID != mTargetLens.mnItemID)
        {
            mStoredLenses = ItemManager.SpawnItem(itemToStore.mnItemID);
            AddLenses(-1);// SpawnItem starts with the amount as 1.
        }
        AddLenses(amount);
        player.mInventory.VerifySuitUpgrades(); //Shouldn't be needed, but lets be safe.
        Debug.Log("[Auto Lens Swapper][info] Player " + player.mUserName + " stored lenses manually!");

        //render in-world pop-up text.
        if (player.mbIsLocalPlayer)
        {
            Color lCol = Color.cyan;
            FloatingCombatTextManager.instance.QueueText(mnX, mnY + 1L, mnZ, 0.75f, string.Format(PersistentSettings.GetString("Stored_X"), (object)player.GetItemName(itemToStore)), lCol, 1.5f, 64f);
        }
        //else
        //StorageHopperWindowNew.networkRedraw = true;
        player.mInventory.VerifySuitUpgrades();

        /*
         * if (!WorldScript.mbIsServer)
         *  NetworkManager.instance.SendInterfaceCommand(nameof(StorageHopperWindowNew), nameof(StoreItems), (string)null, itemToStore, (SegmentEntity)hopper, 0.0f);
         */
        // ^^^ Reimplement?

        MarkDirtyDelayed();
        RequestImmediateNetworkUpdate();
        UIManager.ForceNGUIUpdate = 0.1f;
        AudioHUDManager.instance.HUDOut();
        SurvivalHotBarManager.MarkAsDirty();
        SurvivalHotBarManager.MarkContentDirty();
    }