---
description: >-
  Event hooks allow 3rd party resources to define new behaviour without
  modifying the inventory code directly.
---

# Hooks

{% hint style="danger" %}
All hooks work server-side only.
{% endhint %}

{% hint style="success" %}
Usage is identical to [`ox_inventory`](https://overextended.dev/ox_inventory/Functions/Server/Hooks), with additional features included.

In `ox_inventory`, you can cancel the operation or modify the item's data using `return`. However, this is not possible in `tgiann-inventory`.
{% endhint %}

## RegisterHook <a href="#registerhook" id="registerhook"></a>

```lua
exports["tgiann-inventory"]:RregisterHook(eventName, function(payload) end, options)
```

* eventName: `string`
* payload: `table`
* options?: `table`
  * print?: `boolean`
    * Print to the console when triggering the event.
  * itemFilter?: `{ [string]: true }`
    * The event will only trigger for items defined as keys in a set.
  * inventoryFilter?: `string[]`
    * The event will only trigger for inventories that match one of the [patterns](http://www.easyuo.com/openeuo/wiki/index.php/Lua_Patterns_and_Captures_\(Regular_Expressions\)) in the array.
  * toInventoryFilter?: `string[]`
    * The event will only trigger for other(right Inventory) inventories that match one of the [patterns](http://www.easyuo.com/openeuo/wiki/index.php/Lua_Patterns_and_Captures_\(Regular_Expressions\)) in the array.
  * fromInventoryFilter?: `string[]`
    * The event will only trigger for player(left Inventory) inventories that match one of the [patterns](http://www.easyuo.com/openeuo/wiki/index.php/Lua_Patterns_and_Captures_\(Regular_Expressions\)) in the array.
  * typeFilter?: `{ [string]: true }`
    * The event will only trigger for inventories with one of the provided types (e.g. 'player', 'stash')

Return:

* hookId: `number`

***

### swapItems <a href="#swapitems" id="swapitems"></a>

Triggered when moving any item from one slot to another, or when "giving" an item.\
By returning `false`, you can cancel the action and revert the inventory state.

* Payload: `table`
  * source: `number`
  * action: `'move'` or `'stack'` or `'swap'`&#x20;
  * fromInventory: `table` or `string` or `number`
  * toInventory: `table` or `string` or `number`
  * fromType: `string`
  * toType: `string`
  * fromSlot: `table`
  * toSlot?: `number`
  * count: `number`

**Example**

Blacklists "water" from being moved into or from gloveboxes and trunks.

```lua
local hookId = exports.ox_inventory:registerHook('swapItems', function(payload)
    print(json.encode(payload, { indent = true }))
    return false
end, {
    print = true,
    itemFilter = {
        water = true,
    },
    inventoryFilter = {
        '^glove[%w]+',
        '^trunk[%w]+',
    }
})
```

***

### openInventory <a href="#openinventory" id="openinventory"></a>

* Payload: `table`
  * source: `number`
  * inventoryId: `string`
  * inventoryType: `string`

Triggered when a player tries to open a secondary inventory.

**Example**

```lua
local hookId = exports.ox_inventory:registerHook('openInventory', function(payload)
    print(json.encode(payload, { indent = true }))
end, {
    print = true,
    inventoryFilter = {
        '^glove[%w]+',
        '^trunk[%w]+',
    }
})
```

***

### createItem <a href="#createitem" id="createitem"></a>

* Payload: `table`
  * inventoryId?: `number` or `string`
  * metadata: `table`
  * item: `table`
  * count: `number`

Triggered when an item is created, either by buying it, using AddItem, or when converting inventory data.

**Example**

```lua
local hookId = exports.ox_inventory:registerHook('createItem', function(payload)
    print(json.encode(payload, { indent = true }))
end, {
    print = true,
    itemFilter = {
        water = true
    }
})
```

***

### buyItem <a href="#buyitem" id="buyitem"></a>

* Payload: `table`
  * source: `number`
  * shopType: `string`
  * shopId: `number`
  * toInventory: `number`
  * toSlot: `number`
  * itemName: `string`
  * metadata: `table`
  * count: `number`
  * price: `number`
  * totalPrice: `number`
  * currency?: `string`

Triggered when an item is about to be purchased

**Example**

```lua
local hookId = exports.ox_inventory:registerHook('buyItem', function(payload)
    print(json.encode(payload, { indent = true, sort_keys = true }))
end, {
    print = true,
    itemFilter = {
        water = true
     },
})
```

***

### usingItem

* Payload: `table`
  * source: `number`
  * inventoryId: `string`
  * item: `table`
  * consume: `table`

**Example**

```lua
local hookId = exports.ox_inventory:registerHook('usingItem', function(payload)
    print(json.encode(payload, { indent = true, sort_keys = true }))
end, {
    print = true,
    itemFilter = {
        water = true
     },
})
```

## RemoveHooks <a href="#removehooks" id="removehooks"></a>

Removes a hook created by the invoking resource with the the specified id.\
If no id is specified then all hooks registered by the resource are removed.

```lua
exports["tgiann-inventory"]:RemoveHooks(id)
```

* id?: `number`
