Inventory+
If you want to buy me a coffee
A Foundry VTT module to enhance the dnd5e inventory. Allows to customize your Inventory in various ways, transfer items instead duplicate between character sheet, ordering the items, and many other feature hidden under the hood.
NOTE: If you are a javascript developer and not a typescript developer, you can just use the javascript files under the dist folder
Installation
It's always better and easier to install modules through in in app browser. Just search for "Mount Up!"
To install this module manually:
- Inside the Foundry "Configuration and Setup" screen, click "Add-on Modules"
- Click "Install Module"
- In the "Manifest URL" field, paste the following url:
https://raw.githubusercontent.com/p4535992/inventory-plus/master/src/module.json
- Click 'Install' and wait for installation to complete
- Don't forget to enable the module in game using the "Manage Module" button
libWrapper
This module uses the libWrapper library for wrapping core methods. It is a hard dependency and it is recommended for the best experience and compatibility with other modules.
Details
This module allows you to create custom inventory categories and sort items into them and the default categories. You can also order the categories around and even disable weight tracking on a per category basis.
Features
Due to collisions, code maintenance problems, and reduction in the number of modules I have rewritten for the inherent use of the module some features of other modules, mentioned in the credits of this document. I invite you to support these authors in their various kofis and patreons. Each feature is non-blocking with the other modules and can be activated / deactivated from a specific module setting, which we list below
Feature: Enable item transfer: Know that you can temporarily disable the transfer feature by pressing the alt key while you move the item.
[Only with 'Feature: Enable item transfer' enabled] Enable currency transfer: When moving an object named "Currency" is transferer it will open a dialog to transfer money instead of transferring the actual item.",
[Only with 'Feature: Enable item transfer' enabled] Enable for actors of the same type: If disabled you will have to rely on the pairs you can define by hand.
[Only with 'Feature: Enable item transfer' enabled] Compatible Actor Types: The body of a JSON map of compatible actor type key-value pairs allowing transfer. By default this module only works between actor sheets of the same type, but some game systems may have other combinations that work. Example 1: "character":"synthetic","synthetic":"vehicles","vehicles":"character". Example 2 (for DnD5e): "character":"vehicle","vehicle":"character" that would enable moving item between characters and vehicles. You can also have multiple actor types as value, example 3: "character":["vehicle", "character"],"vehicle":"character" would enable transfer from character to vehicle, from character to character and from vehicle to character but NOT from vehicle to vehicle (providing that the "actors of the same type" checkbox is unchecked).",
Feature: Enable inventory sorter: Automatically sorts all actors' items (inventory, features, and spells) alphabetically (within each category).
Feature: Equipment Multiplier: Apply a weight multiplier to equipped items
[Only with 'Feature: Equipment Multiplier' enabled] Equipment Multiplier value: What weight multiplier to apply to equipped items
API
game.modules.get('inventory-plus').api.calculateWeightFromActor(actorIdOrName:string) ⇒ number
A method to calculate the weight (the one from the module filters) on inventory array and the current currency present on the actor
Returns: number
Param | Type | Description | Default |
---|---|---|---|
actorIdOrName | string |
The actor id or name (if founded) | undefined |
game.modules.get('inventory-plus').api.isCategoryFulled(actor: Actor, categoryType: string, itemData:ItemData) ⇒ boolean
Returns: boolean
Param | Type | Description | Default |
---|---|---|---|
actor | Actor |
The actor | undefined |
categoryType | string |
The id of the category | undefined |
itemData | ItemData |
The item data to drop on the inventory with specific category type | undefined |
game.modules.get('inventory-plus').api.addCategory(actorId: string, categoryLabel: string, ignoreWeight: boolean | undefined, maxWeight: number | undefined, ownWeight: number | undefined, items: ItemData[] | undefined, explicitTypes: InventoryPlusItemType[]|undefined) ⇒ Promise
Param | Type | Description | Default |
---|---|---|---|
actorId | string |
The actor Id | undefined |
categoryLabel | string |
The label of the category | undefined |
ignoreWeight | boolean |
The boolean value for ignore the weight | false |
maxWeight | number |
The value of the max weight of the category | 0 |
ownWeight | number |
The value of the own weight of the category | 0 |
items | ItemData[] |
The array of itemData to associate to the category. If the item is not present on the actor it will be created so pay attention. | undefined |
explicitTypes | InventoryPlusItemType[] |
The array of InventoryPlusItemType associated to the category |
undefined |
Example
const actorEntityTmp = game.actors?.getName('PARTY INVENTORY');
const actorId = actorEntityTmp.id;
game.modules.get('inventory-plus').api.addCategory(actorId, 'label16')
Models used from API
The InventoryPlusItemType
object is represented like this:
{
id: string;
name: string;
namePl: string;
img: string;
isSelected: boolean;
isInventory: boolean;
}
The Category
object is represented like this:
{
label: string;
dataset: { type: string };
sortFlag: number;
ignoreWeight: boolean;
maxWeight: number;
ownWeight: number;
collapsed: boolean;
items: ItemData[];
}