# Inventory

{% hint style="success" %}
Our **BlackMarket** system already includes several default inventories: QB-Inventory for QB-Core, OX Inventory, and Quasar Inventory. You can easily add your own inventory via exports.\
Here is the configuration of the **Quasar** inventory system integrated into our BlackMarket.
{% endhint %}

QS integration into PBlackmarket

```lua
print("^2[PBlackMarket] Inventory QS-INVENTORY loaded ✓^0")

InventoryBridge = {}

function InventoryBridge.AddItem(source, itemName, count)
    return exports['qs-inventory']:AddItem(source, itemName, count)
end

function InventoryBridge.CanCarryItem(source, itemName, count)
    return exports['qs-inventory']:CanCarryItem(source, itemName, count)
end

function InventoryBridge.RemoveItem(source, itemName, count)
    return exports['qs-inventory']:RemoveItem(source, itemName, count)
end

function InventoryBridge.HasItem(source, itemName, count)
    local item = exports['qs-inventory']:GetItemByName(source, itemName)
    if not item then return false end
    return item.amount >= count
end

function InventoryBridge.GetPlayerItems(source, itemList)
    local items = {}

    for _, itemName in ipairs(itemList) do
        local item = exports['qs-inventory']:GetItemByName(source, itemName)
        if item and item.amount > 0 then
            table.insert(items, {
                name = itemName,
                label = item.label or itemName,
                count = item.amount,
                image = itemName .. '.png'
            })
        end
    end

    return items
end

```

{% hint style="info" %}
To integrate your inventory, go to `editable/inv/default/main.lua` and modify the code.\
If you need help, feel free to join our Discord.\
Here is the code from `default/main.lua`.
{% endhint %}

```lua
print("^2[PBlackMarket] Inventory DEFAULT (ESX) loaded ✓^0")

InventoryBridge = {}

local function IsWeapon(itemName)
    return string.sub(string.upper(itemName), 1, 7) == "WEAPON_"
end

function InventoryBridge.AddItem(source, itemName, count)
    if Config.Framework == 'ESX' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if not xPlayer then return false end

        if IsWeapon(itemName) then
            xPlayer.addWeapon(string.upper(itemName), count or 0)
        else
            xPlayer.addInventoryItem(itemName, count)
        end
        return true
    elseif Config.Framework == 'QBCore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if not Player then return false end

        return Player.Functions.AddItem(itemName, count)
    end

    return false
end

function InventoryBridge.CanCarryItem(source, itemName, count)
    if Config.Framework == 'ESX' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if not xPlayer then return false end

        if IsWeapon(itemName) then
            if xPlayer.hasWeapon(string.upper(itemName)) then
                return false
            end
            return true
        end

        local item = xPlayer.getInventoryItem(itemName)
        if not item then return false end

        if item.limit ~= -1 and (item.count + count) > item.limit then
            return false
        end

        return xPlayer.canCarryItem(itemName, count)
    elseif Config.Framework == 'QBCore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if not Player then return false end

        local totalWeight = QBCore.Player.GetTotalWeight(Player.PlayerData.items)
        local itemInfo = QBCore.Shared.Items[itemName:lower()]
        if itemInfo then
            local itemWeight = itemInfo.weight * count
            return (totalWeight + itemWeight) <= QBCore.Config.Player.MaxWeight
        end

        return true
    end

    return true
end

function InventoryBridge.RemoveItem(source, itemName, count)
    if Config.Framework == 'ESX' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if not xPlayer then return false end

        if IsWeapon(itemName) then
            xPlayer.removeWeapon(string.upper(itemName))
        else
            xPlayer.removeInventoryItem(itemName, count)
        end
        return true
    elseif Config.Framework == 'QBCore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if not Player then return false end

        return Player.Functions.RemoveItem(itemName, count)
    end

    return false
end

function InventoryBridge.HasItem(source, itemName, count)
    if Config.Framework == 'ESX' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if not xPlayer then return false end

        if IsWeapon(itemName) then
            return xPlayer.hasWeapon(string.upper(itemName))
        end

        local item = xPlayer.getInventoryItem(itemName)
        if not item then return false end

        return item.count >= count
    elseif Config.Framework == 'QBCore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if not Player then return false end

        local item = Player.Functions.GetItemByName(itemName)
        if not item then return false end

        return item.amount >= count
    end

    return false
end

function InventoryBridge.GetPlayerItems(source, itemList)
    local items = {}

    if Config.Framework == 'ESX' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if not xPlayer then return items end

        for _, itemName in ipairs(itemList) do
            local item = xPlayer.getInventoryItem(itemName)
            if item and item.count > 0 then
                table.insert(items, {
                    name = itemName,
                    label = item.label,
                    count = item.count,
                    image = itemName .. '.png'
                })
            end
        end
    elseif Config.Framework == 'QBCore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if not Player then return items end

        for _, itemName in ipairs(itemList) do
            local item = Player.Functions.GetItemByName(itemName)
            if item and item.amount > 0 then
                table.insert(items, {
                    name = itemName,
                    label = item.label or itemName,
                    count = item.amount,
                    image = itemName .. '.png'
                })
            end
        end
    end

    return items
end

```
