public override object ActivateSlot(int slotId, ItemSlot mouseSlot, ref ItemStackMoveOperation op)
        {
            // Player clicked an item from the selling list, move to buying cart
            if (slotId <= 15)
            {
                AddToBuyingCart(slots[slotId] as ItemSlotTrade);
                return(InvNetworkUtil.GetActivateSlotPacket(slotId, op));
            }

            // Player clicked an item in the buying cart, remove it
            if (slotId <= 19)
            {
                ItemSlotTrade cartSlot = slots[slotId] as ItemSlotTrade;

                if (op.MouseButton == EnumMouseButton.Right)
                {
                    // Just remove one batch on right mouse
                    if (cartSlot.TradeItem?.Stack != null)
                    {
                        cartSlot.TakeOut(cartSlot.TradeItem.Stack.StackSize);
                        cartSlot.MarkDirty();
                    }
                }
                else
                {
                    cartSlot.Itemstack = null;
                    cartSlot.MarkDirty();
                }

                return(InvNetworkUtil.GetActivateSlotPacket(slotId, op));
            }

            // Player clicked an item on the buy slot, ignore it
            if (slotId <= 34)
            {
                return(InvNetworkUtil.GetActivateSlotPacket(slotId, op));
            }

            // Player clicked an item in the selling cart, act like a normal slot
            if (slotId <= 39)
            {
                return(base.ActivateSlot(slotId, mouseSlot, ref op));
            }

            return(InvNetworkUtil.GetActivateSlotPacket(slotId, op));
        }