Description
InventoryManagerAPI
A Hytale server plugin that provides a powerful API for managing player inventories with persistent save/load functionality.
Now support PostgreSQL!
Purpose
InventoryManagerAPI solves the common problem of inventory persistence in Hytale servers. Whether you're building minigames that need to save/restore player inventories, creating custom gamemodes with inventory presets, or developing plugins that require temporary inventory storage, this API provides a clean, modular solution.
What It Does
- Save player inventories to persistent storage (JSON files)
- Restore inventories on demand with full item data preservation
- Multiple storage modes for different use cases:
- UUID-based - Simple player-specific storage
- UUID + Suffix - Multiple named variants per player (e.g.,
kit_pvp,kit_builder) - Custom names - Shared/global inventory presets accessible to any player
Features
For Server Administrators
- Built-in commands for manual inventory management
- Configurable behavior (clear inventory on save, delete inventory file on load)
- Persistent configuration with in-game modification
For Plugin Developers
- Clean API accessible via
InventoryManagerAPIPlugin.get().getInventoryStorageManager() - Async operations using
CompletableFuturefor non-blocking I/O - Strategy pattern allows custom storage backends
- Full inventory support: hotbar, storage, backpack, armor, and utility slots
Commands
| Command | Description |
|---|---|
/invm save |
Save your current inventory |
/invm load |
Restore a saved inventory |
/invm list |
List available saved inventories |
/invm config view |
View current configuration |
/invm config set <key> <value> |
Modify configuration |
/invm config save |
Save configuration to disk |
/invm config reload |
Reload configuration from disk |
Command Options
Save/Load options:
--suffix <name>- Use player-specific named variant--name <name>- Use shared/global inventory name--clear true|false- Override clear-on-save setting--delete true|false- Override delete-on-load setting--player <name>- apply operation on another player
List options:
--name- Show custom-named inventories--suffix- Show suffix-based inventories--uuid <player>- Filter by specific player
Configuration
The configuration file is located at mods/DjCtavia.InventoryManagerAPI/InventoryManagerAPI.json.
General Settings
| Setting | Default | Description |
|---|---|---|
StorageDirectory |
mods/.../inventories |
Where inventory files are stored (JSON storage only) |
ClearInventoryOnSave |
true |
Clear player inventory after saving |
DeleteFileOnLoad |
true |
Delete inventory file after restoring |
StorageType |
Json |
Storage backend to use (Json or PostgreSQL) |
PostgreSQL Settings
These settings are only used when StorageType is set to PostgreSQL.
| Setting | Default | Description |
|---|---|---|
Host |
localhost |
PostgreSQL server hostname |
Port |
5432 |
PostgreSQL server port |
Database |
postgres |
Database name |
Username |
postgres |
Database username |
Password |
(empty) | Database password |
TableName |
inventories |
Table name for storing inventories |
Example Configurations
JSON Storage (Default)
{
"StorageDirectory": "mods/DjCtavia.InventoryManagerAPI/inventories",
"ClearInventoryOnSave": true,
"DeleteFileOnLoad": true,
"StorageType": "Json",
"PostgreSQL": {
"Host": "localhost",
"Port": 5432,
"Database": "postgres",
"Username": "postgres",
"Password": "",
"TableName": "inventories"
}
}
PostgreSQL Storage
{
"StorageDirectory": "mods/DjCtavia.InventoryManagerAPI/inventories",
"ClearInventoryOnSave": true,
"DeleteFileOnLoad": true,
"StorageType": "PostgreSQL",
"PostgreSQL": {
"Host": "localhost",
"Port": 5432,
"Database": "hytale_server",
"Username": "postgres",
"Password": "your_password",
"TableName": "inventories"
}
}
API Usage
// Get the manager
InventoryStorageManager manager = InventoryManagerAPIPlugin.get().getInventoryStorageManager();
// Save inventory by UUID
manager.saveInventory(playerUUID, inventory);
// Save with a suffix (e.g., for different game modes)
manager.saveInventoryWithSuffix(playerUUID, inventory, "arena");
// Save as a named preset (shared across players)
manager.saveInventoryByName("starter_kit", inventory);
// Restore inventory
manager.restoreInventory(playerRef, store);
// Restore with suffix
manager.restoreInventory(playerRef, store, "arena", null);
// Restore from named preset
manager.restoreInventoryByName(playerRef, store, "starter_kit", null);
// List available inventories
List<String> namedInventories = manager.listNamedInventories();
List<String> playerInventories = manager.listSuffixInventories(playerUUID);

