This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
@reldens/items-system (v0.45.0) is a comprehensive items and inventory management system for Reldens. It provides:
- Inventory management (add/remove items, quantity control, limits)
- Item type system (base, single, equipment, usable, and combinations)
- Item groups (categorized inventories with separate limits)
- Exchange/trading platform (player-to-player, NPC trading, buying/selling)
- Item modifiers system (stat bonuses, effects via @reldens/modifiers)
- Client/Server communication (Sender/Receiver pattern)
- Events system for extensibility
- Comprehensive error handling
# Run tests
npm testItemsServer (lib/server.js):
- Server-side package wrapper
- Combines ItemsManager with Sender for client communication
- Entry point for server-side item management
ItemsManager (lib/manager.js):
- Extends Inventory class with advanced features
- Creates item instances from model data
- Manages item groups
- Handles owner-specific events
- Uses @reldens/modifiers for item effects
Inventory (lib/item/inventory.js):
- Core inventory functionality
- Add/remove items with validation
- Quantity modification (set, increase, decrease)
- Inventory locking mechanism
- Item limits (total items, per-item quantity)
- Event-driven architecture
- Error tracking via ItemsError
ItemGroup (lib/item/group.js):
- Extends Inventory for categorized item storage
- Separate limits per group
- Use cases: equipment bags, consumables bag, quest items, etc.
ItemBase (lib/item/type/item-base.js):
- Base class for all items
- Properties: key, uid, id, item_id, label, description, qty, modifiers
- Modifier application/reversion
- Event handling
- Custom data support
ItemSingle (lib/item/type/single.js):
- Single-instance items (quantity grouped in one inventory slot)
- Example: stackable items like potions, arrows
ItemEquipment (lib/item/type/equipment.js):
- Equippable items with modifier support
- Equip/unequip functionality
- Automatic modifier application on equip
Usable (lib/item/type/usable.js):
- Consumable/usable items
- Execute functionality for item usage
SingleEquipment (lib/item/type/single-equipment.js):
- Combination of Single + Equipment
- Stackable equippable items
SingleUsable (lib/item/type/single-usable.js):
- Combination of Single + Usable
- Stackable consumable items
ItemTypes (lib/item/item-types.js):
- Registry of item type classes
- Type ID to class mapping
- Type constants: ITEM_BASE (10), EQUIPMENT (1), USABLE (2), SINGLE (3), SINGLE_EQUIPMENT (4), SINGLE_USABLE (5)
ExchangePlatform (lib/exchange/exchange-platform.js):
- Trading between two inventories (A and B)
- Locks inventories during exchange
- Confirmation system (both parties must confirm)
- Requirements and rewards processing
- Drop exchange mode (e.g., selling to NPC without them receiving the item)
- Comprehensive validation before finalization
RequirementsCollection + RequirementsProcessor:
- Define what items are required for exchange
- Validate requirements are met
- Process requirement removal on exchange
RewardsCollection + RewardsProcessor:
- Define what items are given as rewards
- Validate rewards can be given
- Process reward addition on exchange
ExchangeRequirement + ExchangeReward:
- Individual requirement/reward items
- Quantity and validation logic
Sender (lib/server/sender.js):
- Server-side message sender
- Sends item updates to client
- Event-driven communication
Receiver (lib/client/receiver.js):
- Client-side message receiver
- Processes server item updates
- Updates client-side state
ItemsDataGenerator (lib/items-data-generator.js):
- Generates item data structures
- Prepares items for manager initialization
- Processes item modifiers from
itemModel.related_items_item_modifiersrelation - Converts modifier data to Modifier instances indexed by modifier ID
- Automatically converts numeric values for non-set operations
GroupsDataGenerator (lib/groups-data-generator.js):
- Generates group data structures
- Prepares groups for manager initialization
ModelEntity (lib/item/model-entity.js):
- Database model wrapper for items
- Bridges ORM entities with item system
ItemsError (lib/items-error.js):
- Custom error class for items system
- Error codes and structured error data
ItemsEvents (lib/items-events.js):
- Event name constants
- Events: MANAGER_INIT, ADD_ITEM, REMOVE_ITEM, MODIFY_ITEM_QTY, EQUIP_ITEM, UNEQUIP_ITEM, EXCHANGE events, etc.
Constants (lib/constants.js):
- Item type constants
- Action constants
- Error code constants
- Trade action constants (BUY, SELL, TRADE)
For detailed technical documentation, see:
.claude/architecture.md- Complete class hierarchy, methods, properties, usage patterns.claude/events-and-errors.md- Events catalog, error codes reference, constants
- Items entities have been extracted and integrated in the main Reldens platform under
D:\dap\work\reldens\src\lib\inventory\server - Relation keys pattern: Item modifiers use
related_items_item_modifiersproperty (follows Reldensrelated_*prefix convention for database relations) - Items are database-driven - configured via admin panel
- Uses @reldens/modifiers package for item effects and stat bonuses
- Uses @reldens/utils package for helpers (Shortcuts, Logger, EventsManager)
- Server authoritative - all item operations validated on server
- Event-driven architecture allows extensive customization
- Supports single-instance items (stackable) and unique-instance items
- Inventory locking prevents concurrent modifications during exchanges
- Comprehensive error handling with specific error codes for debugging