Skip to content

Items API

The Items API provides functionality for working with in-game items, item definitions, and item instances.

Namespace

csharp
using S1API.Items;

Key Classes

ItemDefinition

Represents an item definition in-game. A definition describes "what" the item is, such as "This is a Soda".

csharp
public class ItemDefinition : IGUIDReference
{
    // Properties
    public string GUID { get; }
    public string ID { get; }
    public string Name { get; }
    public string Description { get; }
    public ItemCategory Category { get; }
    public int StackLimit { get; }
    
    // Methods
    public virtual ItemInstance CreateInstance(int quantity = 1);
    
    // Equality operators
    public override bool Equals(object? obj);
    public override int GetHashCode();
    public static bool operator ==(ItemDefinition? left, ItemDefinition? right);
    public static bool operator !=(ItemDefinition left, ItemDefinition right);
}

ItemInstance

Represents an item instance in the game. An instance is the item existing in the game world, such as "I have five sodas in my hand."

csharp
public class ItemInstance
{
    public ItemDefinition Definition { get; }
}

ItemCategory

Enum representing different categories of items.

csharp
public enum ItemCategory
{
    /// <summary>
    /// Represents items such as Cocaine, Weed, etc.
    /// Oddly, SpeedGrow is in this category as of (v0.3.4f8).
    /// </summary>
    Product,
    
    /// <summary>
    /// Represents items such as Baggies, Bricks, Jars, etc.
    /// </summary>
    Packaging,
    
    /// <summary>
    /// Represents items such as Soil, Fertilizer, Pots, etc. 
    /// </summary>
    Growing,
    
    /// <summary>
    /// Represents equipment tools such as the clippers.
    /// Oddly, trash bags is in this category as of (v0.3.4f8).
    /// </summary>
    Tools,
    
    /// <summary>
    /// Represents items such as TV, Trash Can, Bed, etc.
    /// </summary>
    Furniture,
    
    /// <summary>
    /// Represents items such as Floor Lamps, Halogen Lights, etc.
    /// </summary>
    Lighting,
    
    /// <summary>
    /// Represents cash-based items.
    /// </summary>
    Cash,
    
    /// <summary>
    /// Represents items such as Cuke, Energy Drink, etc.
    /// </summary>
    Consumable,
    
    /// <summary>
    /// Represents items such as Drying Rack, Brick Press, Mixing Station, etc.
    /// </summary>
    Equipment,
    
    /// <summary>
    /// Represents items such as Acid, Banana, Chili, etc.
    /// </summary>
    Ingredient,
    
    /// <summary>
    /// Represents items such as GoldBar, WallClock, WoodSign, etc.
    /// </summary>
    Decoration,
    
    /// <summary>
    /// Represents clothing items.
    /// </summary>
    Clothing
}

ItemManager

Static class for managing items across the game.

csharp
public static class ItemManager
{
    /// <summary>
    /// Gets the definition of an item by its ID.
    /// </summary>
    /// <param name="itemID">The ID of the item.</param>
    /// <returns>An instance of the item definition.</returns>
    public static ItemDefinition GetItemDefinition(string itemID);
}

ItemSlotInstance

Represents an item slot within the game. These are present within storage, the hot bar, etc.

csharp
public class ItemSlotInstance
{
    /// <summary>
    /// The quantity of item in this slot.
    /// </summary>
    public int Quantity { get; }
    
    /// <summary>
    /// The item instance the slot contains.
    /// </summary>
    public ItemInstance? ItemInstance { get; }
    
    /// <summary>
    /// Adds a quantity to the item in this slot.
    /// NOTE: Negative numbers are supported and allowed.
    /// </summary>
    /// <param name="amount"></param>
    public void AddQuantity(int amount);
}

Specialized Item Types

The API includes several specialized item types that inherit from the base classes:

ProductDefinition and ProductInstance

csharp
// Specialized item definition for product items
public class ProductDefinition : ItemDefinition { }

// Specialized item instance for product items
public class ProductInstance : ItemInstance { }

CashDefinition and CashInstance

csharp
// Specialized item definition for cash items
public class CashDefinition : ItemDefinition { }

// Specialized item instance for cash items
public class CashInstance : ItemInstance { }

Usage Examples

Getting an Item Definition

csharp
// Get an item definition by its ID
var sodaDefinition = ItemManager.GetItemDefinition("cuke");

// Access properties of the definition
Console.WriteLine($"Name: {sodaDefinition.Name}");
Console.WriteLine($"Description: {sodaDefinition.Description}");
Console.WriteLine($"Category: {sodaDefinition.Category}");
Console.WriteLine($"Stack Limit: {sodaDefinition.StackLimit}");

Creating an Item Instance

csharp
// Get an item definition
var cukeDefinition = ItemManager.GetItemDefinition("cuke");

// Create an instance of the item with a quantity of 5
var cukeInstance = cukeDefinition.CreateInstance(5);

Working with Item Slots

csharp
// Example: Working with an item slot
public void AddItemToSlot(ItemSlotInstance slot, ItemDefinition itemDef, int quantity)
{
    // Check if slot is empty or contains the same item type
    if (slot.ItemInstance == null || slot.ItemInstance.Definition.ID == itemDef.ID)
    {
        // Create a new instance if needed
        if (slot.ItemInstance == null)
        {
            var instance = itemDef.CreateInstance(quantity);
            // Code to add instance to slot would go here
        }
        else
        {
            // Add to existing quantity
            slot.AddQuantity(quantity);
        }
    }
}

Checking Item Categories

csharp
// Get an item definition
var itemDef = ItemManager.GetItemDefinition("cuke");

// Check item category
if (itemDef.Category == ItemCategory.Consumable)
{
    // Handle consumable item
    Console.WriteLine("This is a consumable item");
}
else if (itemDef.Category == ItemCategory.Tools)
{
    // Handle tool item
    Console.WriteLine("This is a tool item");
}

Using Specialized Item Types

csharp
// Working with Cash items (requires both namespaces)
using S1API.Items;
using S1API.Money;

// Get a cash item definition
var cashDef = ItemManager.GetItemDefinition("cash");

// Check if it's a cash definition
if (cashDef is CashDefinition cashDefinition)
{
    // Create a cash instance with initial value
    var cashInstance = (CashInstance)cashDefinition.CreateInstance(100);
    
    // Use cash-specific methods
    cashInstance.AddQuantity(50.5f);  // Add 50.5 to the cash amount
    cashInstance.SetQuantity(1000f);  // Set cash amount directly to 1000
}

Released under the MIT License.