Back to mods

Vintage Story Mod DB · Vintage Story mod

CarryOnLib

CarryOnLib is the shared API and library behind the CarryOn mod. It provides stable interfaces and core models so modders can interact with carryable blocks, entities and inventories - and so any mod can include optional CarryOn functionality. Carry On 2.0 de

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which CarryOnLib release should I use?

Updated 2 days ago
Latest stable file 1.0.0-rc.1
Game version 1.22.0, 1.22.1, 1.22.2
Loader Built-in Vintage Story mod system

CarryOnLib 1.0.0-rc.1 targets 1.22.0, 1.22.1, 1.22.2. It must be installed on the client. Installation on the dedicated server is optional. No extra mods listed for this file.

Where it goes

Is CarryOnLib required on the client, server, or both?

It must be installed on the client. Installation on the dedicated server is optional.

Client Required
Dedicated server Optional
Loader for this release Built-in Vintage Story mod system
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

This release supports both sides, but the source does not require it on the server.

What else does CarryOnLib 1.0.0-rc.1 need?

1.0.0-rc.1. Change the file and its required mods may change too.

No extra mods listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

This file does not list any required or optional mods.

Before you install it

Add CarryOnLib without breaking your instance.

Built for CarryOnLib 1.0.0-rc.1. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use 1.0.0-rc.1. It targets 1.22.0, 1.22.1, 1.22.2; another release may have different loader, side or dependency requirements.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Put it on the correct side

    It must be installed on the client. Installation on the dedicated server is optional.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside 1.0.0-rc.1. It opens that exact file at the source.

About this project

What does CarryOnLib add?

CarryOnLib is the shared API and library behind the CarryOn mod. It provides stable interfaces and core models so modders can interact with carryable blocks, entities and inventories - and so any mod can include optional CarryOn functionality.

Carry On 2.0 depends on CarryOnLib, so install it alongside Carry On. Other mods can list CarryOnLib as a dependency to use carry functionality when Carry On is present; if Carry On is not loaded, CarryOnLibSystem.CarryManager is null and integrating mods should check for that.

CarryOnLib 1.0.0-rc.1 - release candidate

This is the first release candidate of the CarryOnLib 1.0 line. It requires Vintage Story 1.22.0 or newer. As a release candidate the public API can still change before 1.0.0, and mods built against the 1.0.0-pre.* releases must update (see Breaking changes below).

What's new in 1.0

  • Carryable entities. Pick up whole entities with ICarryableEntityPickupHandler, spawn them back with ICarryEntitySpawnerFactory (registered on ICarryManager for dependency injection), and attach single carried blocks to entity slots (boats, packs) with ICarryableEntitySlotHandler.
  • Full spawn context. Spawner factories receive the carried block, owner uid, position, block position, dropped-vs-placed state, and an optional hit face/position via EntitySpawnContext.
  • Spawn helpers. SpawnPositionHelper (face-aware, collision-aware placement with depenetration), GravitySpawnHelper (gravity drop resolution), and the shared BlockCollisionUtils.
  • Language-aware errors. CarryErrorHelper resolves a full language key verbatim and prefixes bare codes with carryon:, then shows or sends the message in the player's language.
  • Priority permission handlers. CarryEvents.RegisterCheckPermissionAt(priority, handler) runs handlers in ascending priority order; the first non-null result decides.
  • Protected carried-data reads. CarriedBlockTreeSerializer.DeserializeSafe returns CarriedBlockReadResult (Ok / Empty / Failed) with stored-code recovery, so a present-but-unreadable carry - for example from a removed mod - is never silently dropped.
  • Manager additions. ICarryManager gains GetCarriedReadResult, IsCarrySlotOccupied, GetRenderableCarried and SetCarriedRaw (for unreadable carries), ground-storage bag entry points, entity transform group resolver registration, and registries for the handler families.
  • Carried block additions. CarriedBlock gains SpawnerFactoryCode and SpawnAsEntityOnPlacement, persisted in carry state.

Breaking changes since 1.0.0-pre.*

  • ICarryableTransfer becomes ICarryableBlockSlotHandler, with per-slot routing and validation (GetSlotIndex, IsValidSlot, IsSlotEmpty, IsSlotCarryable), a separate GetInteractDelay, and a Can*/Try* split.
  • ICarryableEntityHandler splits into ICarryableEntityPickupHandler and ICarryEntitySpawnerFactory.
  • Failure codes are now full language keys (for example mymod:slot-full); {0} placeholders are gone and the __continue__ sentinel is retired (__ignore__ / __default__ / __stop__ keep their meaning).
  • The client no longer invokes Try*; the server re-validates authoritatively.
  • ICarryManager.TryAttach / TryDetach (manager-level entity attach) are removed - use slot handlers.
  • The CarryEvents.CheckPermissionAt C# event is removed - use RegisterCheckPermissionAt.
  • IEntityTransformGroupResolver.GetCacheSignature is removed (the framework never read it).
  • JsonHelper.TryGetValueTrimmedIgnoreCase / TryGetTrailingWildcardValue moved to WildcardMatcher.
  • InventoryConverter conversions return null (not empty trees); BlockDroppedEventArgs is init-only.
  • CarriedBlockReadResult / CarriedBlockReadStatus now live in CarryOn.API.Common.Models (moved out of CarryOn.Utility).

The full interface reference and step-by-step migration notes are in the CarryOnLib README.

Mods using CarryOnLib

Installation

  1. Download CarryOnLib from this page.
  2. If you use Carry On, download Carry On as well.
  3. Open the mod folder from the in-game Mod Manager and copy the .zip file(s) in without extracting them.

Alternatively, use the Vintage Story Launcher to manage the mod.

For modders

Reference CarryOnLib in your mod project to access carry operations via ICarryManager, listen for carry events, implement custom transform group resolvers, implement ICarryableBlockSlotHandler for block entity inventory integration, use the inventory conversion and attribute tree utilities, and register carryable block behaviors.

Note: CarryOnConfig, CarryCodes and related configuration types live in the CarryOn mod itself, not in CarryOnLib. CarryOnLib provides CarryConstants as a small subset of codes for modder use.

Source, interface reference and issues: GitHub.

Support the author

Coffee and Gears

Please support my caffeine consumption

Project description from Vintage Story Mod DB.

Pick your setup

CarryOnLib releases for each Vintage Story version.

Choose the version and loader you play, then open the matching release.

8 available setups

Check the dependencies, then try the file in a copied instance before changing a world you care about.

Recent files

CarryOnLib versions and loaders

8 of 8 releases match

Looking for an older file? The official Vintage Story Mod DB project page is in Resources.