Skip to content

Storages API

The Storages API provides functionality for working with storage containers in the game.

Namespace

csharp
using S1API.Storages;

Key Classes

StorageInstance

Represents a storage container in-game.

csharp
public class StorageInstance
{
    public ItemSlotInstance[] Slots { get; }
    
    public bool CanItemFit(ItemInstance itemInstance, int quantity = 1);
    public void AddItem(ItemInstance itemInstance);
    
    public event Action OnOpened;
    public event Action OnClosed;
}

ItemSlotInstance

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

csharp
public class ItemSlotInstance
{
    public int Quantity { get; }
    public ItemInstance? ItemInstance { get; }
    
    public void AddQuantity(int amount);
}

ItemInstance

Represents an item instance in the game.

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

ItemDefinition

Represents an item definition in-game.

csharp
public class ItemDefinition
{
    public string GUID { get; }
    public string ID { get; }
    public string Name { get; }
    public string Description { get; }
    public ItemCategory Category { get; }
    public int StackLimit { get; }
    
    public ItemInstance CreateInstance(int quantity = 1);
}

ItemManager

Provides access to managing items across the game.

csharp
public static class ItemManager
{
    public static ItemDefinition GetItemDefinition(string itemID);
}

ItemCategory

A list of item categories available in-game.

csharp
public enum ItemCategory
{
    Product,
    Packaging,
    Growing,
    Tools,
    Furniture,
    Lighting,
    Cash,
    Consumable,
    Equipment,
    Ingredient,
    Decoration,
    Clothing
}

Usage Examples

Working with Storage Containers

csharp
// Access slots in a storage container
public void DisplayStorageContents(StorageInstance storage)
{
    Console.WriteLine($"Storage contains {storage.Slots.Length} slots:");
    
    foreach (var slot in storage.Slots)
    {
        if (slot.ItemInstance != null)
        {
            Console.WriteLine($"- {slot.ItemInstance.Definition.Name} x{slot.Quantity}");
        }
        else
        {
            Console.WriteLine("- Empty slot");
        }
    }
}

// Check if an item can fit in storage
public bool TryAddItemToStorage(StorageInstance storage, ItemInstance item, int quantity)
{
    if (storage.CanItemFit(item, quantity))
    {
        storage.AddItem(item);
        return true;
    }
    
    Console.WriteLine("Item doesn't fit in this storage container.");
    return false;
}

Listening to Storage Events

csharp
// Subscribe to storage events
public void SetupStorageListeners(StorageInstance storage)
{
    storage.OnOpened += () => 
    {
        Console.WriteLine("Storage has been opened!");
        // Play sound effect, show UI, etc.
    };
    
    storage.OnClosed += () => 
    {
        Console.WriteLine("Storage has been closed!");
        // Hide UI, save state, etc.
    };
}

Managing Items in Slots

csharp
// Remove items from storage
public void RemoveItemsFromStorage(StorageInstance storage, string itemID, int quantityToRemove)
{
    foreach (var slot in storage.Slots)
    {
        if (slot.ItemInstance != null && slot.ItemInstance.Definition.ID == itemID)
        {
            int amountToRemove = Math.Min(slot.Quantity, quantityToRemove);
            slot.AddQuantity(-amountToRemove);
            quantityToRemove -= amountToRemove;
            
            if (quantityToRemove <= 0)
                break;
        }
    }
}

// Count items in storage
public int CountItemsInStorage(StorageInstance storage, string itemID)
{
    int total = 0;
    
    foreach (var slot in storage.Slots)
    {
        if (slot.ItemInstance != null && slot.ItemInstance.Definition.ID == itemID)
        {
            total += slot.Quantity;
        }
    }
    
    return total;
}

Finding Item Definitions

csharp
// Get an item definition by ID
public ItemDefinition GetItemByID(string itemID)
{
    return ItemManager.GetItemDefinition(itemID);
}

// Create a new instance of an item to add to storage
public void CreateAndAddToStorage(StorageInstance storage, string itemID, int quantity)
{
    var itemDef = ItemManager.GetItemDefinition(itemID);
    if (itemDef != null)
    {
        var itemInstance = itemDef.CreateInstance(quantity);
        if (storage.CanItemFit(itemInstance, quantity))
        {
            storage.AddItem(itemInstance);
            Console.WriteLine($"Added {quantity}x {itemDef.Name} to storage");
        }
    }
}

Released under the MIT License.