# Item

## 🧸 Item Class

Representation of an item. While it may seem like the Item class is the main class you'll be working with, it's actually not. Chances are, you'll be using the `ItemStack` class far more. Basically, the `Item` class is like an ID for an `ItemStack`, and the `ItemStack` class is what is the inventory stores. Click [here](https://stylishesper.gitbook.io/inventool/inventool-v1/scripting/api/items/item-stack) to learn about item stacks.

> **Namespace:** `Esper.Inventool.Items`\
> **Access:** `public`\
> **Type:** `class`\
> **Inherits:** `InventoolObject`

***

### 📦 Fields

| Access   | Field                       | Type               | Description                                                                         |
| -------- | --------------------------- | ------------------ | ----------------------------------------------------------------------------------- |
| `public` | `itemClass`                 | `ItemClass`        | The class of the item.                                                              |
| `public` | `currencyPouch`             | `CurrencyPouch`    | The currency gained when this item is obtained (only relevant if class = Currency). |
| `public` | `icon`                      | `Sprite`           | The icon displayed in the inventory.                                                |
| `public` | `singleSlotIcon`            | `Sprite`           | The icon displayed in a single-slot item slot.                                      |
| `public` | `hoverImage`                | `Sprite`           | Image used for the hover details popup.                                             |
| `public` | `keyItemsImage`             | `Sprite`           | Image used in the key item section.                                                 |
| `public` | `inventoryBackgroundImage`  | `Sprite`           | Background image in the inventory.                                                  |
| `public` | `singleSlotBackgroundImage` | `Sprite`           | Background image in a single-slot item slot.                                        |
| `public` | `hoverBackgroundImage`      | `Sprite`           | Background image in the hover details popup.                                        |
| `public` | `shopBackgroundImage`       | `Sprite`           | Background image in the shop.                                                       |
| `public` | `profile`                   | `StatProfile`      | The stat profile of this item.                                                      |
| `public` | `enchantmentLimit`          | `int`              | Hard limit on enchantments (only relevant if limit type = Individual).              |
| `public` | `displayName`               | `string`           | The display name shown in-game.                                                     |
| `public` | `localizedDisplayNameKey`   | `string`           | The key of the localized display name string.                                       |
| `public` | `itemType`                  | `ItemType`         | The type of this item.                                                              |
| `public` | `description`               | `string`           | The description shown in-game.                                                      |
| `public` | `localizedDescriptionKey`   | `string`           | The key of the localized description string.                                        |
| `public` | `currencyIdentity`          | `CurrencyIdentity` | The currency identity used for costs.                                               |
| `public` | `buyingPrice`               | `Currency`         | The price when purchasing from vendors.                                             |
| `public` | `sellingPrice`              | `Currency`         | The price when selling to vendors.                                                  |
| `public` | `overrideDropPrefab`        | `GameObject`       | Overrides the default item drop prefab.                                             |
| `public` | `customObject`              | `Object`           | A custom object for any purpose.                                                    |
| `public` | `dismantleResult`           | `List<ItemStack>`  | Items gained when dismantled.                                                       |
| `public` | `enchantment`               | `Enchantment`      | The enchantment this item provides when used to enchant another item.               |
| `public` | `size`                      | `Vector2Int`       | The amount of space (slots) this item takes in the inventory.                       |
| `public` | `weight`                    | `float`            | The weight of the item. *(Obsolete — use `profile.weight` instead)*                 |
| `public` | `hideStats`                 | `bool`             | If stats should not be displayed when hovered.                                      |
| `public` | `dataset`                   | `Dataset`          | The dataset of this item.                                                           |

***

### 🔍 Properties

| Access          | Property                        | Type         | Description                             |
| --------------- | ------------------------------- | ------------ | --------------------------------------- |
| `public`        | `SlotCount`                     | `int`        | The number of slots this item requires. |
| `public`        | `IsKeyItem`                     | `bool`       | If this is a key item.                  |
| `public`        | `Stackable`                     | `bool`       | If this item can be stacked.            |
| `public`        | `LevelingEnabled`               | `bool`       | If this item can level.                 |
| `public`        | `DurabilityEnabled`             | `bool`       | If durability is enabled for this item. |
| `public`        | `DatabaseRecord`                | `ItemRecord` | The database record of this item.       |
| `public static` | `DirectoryPath` *(Editor only)* | `string`     | The directory of items.                 |

***

### 🧰 Methods

| Access            | Method                                   | Returns     | Description                                                              |
| ----------------- | ---------------------------------------- | ----------- | ------------------------------------------------------------------------ |
| `public`          | `DeleteDatabaseRecord()` *(Editor only)* | `void`      | Deletes the record of this object from the database.                     |
| `public`          | `UpdateDatabaseRecord()` *(Editor only)* | `void`      | Updates the record of this object in the database.                       |
| `public`          | `GetEnchantmentLimit()`                  | `int`       | Gets the enchantment limit.                                              |
| `public`          | `GetLocalizedDisplayName()`              | `string`    | Gets the localized display name string.                                  |
| `public`          | `GetInterpolatedDescription()`           | `string`    | Gets the description with variable interpolation (localized if enabled). |
| `public`          | `GetSprite(SpriteType spriteType)`       | `Sprite`    | Gets a specific item sprite, with fallbacks.                             |
| `public`          | `GetBackground(SpriteType spriteType)`   | `Sprite`    | Gets a specific background sprite, with fallbacks.                       |
| `public`          | `CreateNewItemStack(int amount = 1)`     | `ItemStack` | Creates a new stack of this item.                                        |
| `public`          | `SetData(Item item)`                     | `void`      | Sets this item’s data from another item.                                 |
| `public`          | `GenerateDataset()`                      | `void`      | Generates the dataset with the dataset reference (editor only).          |
| `public static`   | `Create()`                               | `Item`      | Creates a new instance of an item (editor only).                         |
| `public`          | `UpdateAssetName()` *(Editor only)*      | `void`      | Updates the name of the asset.                                           |
| `public override` | `Save()`                                 | `void`      | Saves the item and updates its database record (editor only).            |
| `public static`   | `GetFullPath(Item item)` *(Editor only)* | `string`    | Gets the full path of an item.                                           |
| `public static`   | `CreateCopy(Item original)`              | `Item`      | Creates a copy of another item.                                          |

***

### 🧩 Nested Types

#### `public enum SpriteType`

| Name         | Description           |
| ------------ | --------------------- |
| `Inventory`  | The inventory sprite. |
| `SingleSlot` | Single slot sprite.   |
| `Hover`      | The on-hover sprite.  |
| `KeyItem`    | The key item sprite.  |
| `Shop`       | The shop sprite.      |

#### `public enum ItemClass`

| Name       | Description                                                                |
| ---------- | -------------------------------------------------------------------------- |
| `Normal`   | Represents a custom item. Treated as a normal item.                        |
| `Currency` | Represents a currency. Won’t appear in inventory; adds currency to player. |

***

## Creating Items

It's not at all recommended to create items at runtime, but it is possible. Items are scriptable objects which cannot be created as assets at runtime for later use. You would need to load your generated items on your own.

```csharp
Item myItem = ScriptableObject.CreateInstance<Item>();
```

Item IDs must be unique. When creating items from the [items](https://stylishesper.gitbook.io/inventool/inventool-v1/editors/inventool/items "mention") tab, unique IDs are set automatically. However, this is not done when creating items at runtime. You'd need to create your own method of ensuring IDs of generated items are unique.

## Getting Items

Items created through the [items](https://stylishesper.gitbook.io/inventool/inventool-v1/editors/inventool/items "mention") tab can be retrieved at runtime.

### Get a Single Item

You can get an item by its ID or display name with the `Inventool.GetItem` method.

```csharp
Item myItem = Inventool.GetItem("My Item Name");
```

### Get All Items

```csharp
var items = Inventool.GetallItems();
```

## Creating an Item Stack

You can create an [item-stack](https://stylishesper.gitbook.io/inventool/inventool-v1/scripting/api/items/item-stack "mention") from an `Item` with the `CreateNewItemStack` method. This method accepts a integer which represents the stack amount. Note that if an item is not stackable, it will always create a stack of 1.

```csharp
// Create an item stack of 10
ItemStack myItemStack = myItem.CreateNewItemStack(10);
```

## Getting Icon/Background

You can get a specific item image or background with the `GetSprite` and `GetBackground` methods. These methods are generally good to use because they will fallback to an available sprite if the one requested was not set.

```csharp
var sprite = myItem.GetSprite(spriteType);
```

```csharp
var background = myItem.GetBackground(spriteType);
```

## Interpolated Description

You can get the item description with text interpolation with the `GetInterplatedDescription` method. This essentially helps display stats in item descriptions. Read more about this [here](https://stylishesper.gitbook.io/inventool/inventool-v1/editors/inventool/items#stat-text-tags).

```csharp
string description = myItem.GetInterpolatedDescription();
```
