Advanced Item Ownership System
Turn your server's most important items into registered assets —
with real ownership records, transfer history, and protection against misuse.
─────────────────────────────────────────────────────────────
SoulLedger is a lightweight item ownership plugin for Spigot servers.
Unlike basic soulbound plugins that simply lock items to a player, SoulLedger treats each registered item as an asset with a passport — recording its origin, current owner, transfer history, and status.
Every bound item carries its identity with it across worlds, server restarts, and inventory changes — with no database required.
Perfect for RPG, Survival, Economy, and Roleplay servers that need:
- Proof of who owns an item
- An auditable record of every ownership change
- Protection against theft, duplication exploits, and inventory abuse
- A solid foundation for item-based economy systems
─────────────────────────────────────────────────────────────
- Bind any item to a specific player via command
- Bind to yourself or directly to another player
- Bind-on-pickup — items automatically bind to the first player who picks them up (configurable)
- Bind-on-use — items automatically bind when a player first right-clicks with them (configurable)
- Each bound item receives a unique Soul ID, owner name, and bind date — written visually into the item's lore
- Inspect the full ownership record of any bound item at any time
- Transfer ownership through transfer contracts — the recipient must accept before ownership changes
- Recipients can accept or decline pending transfer contracts
- Owners can lock items to prevent transfers until they explicitly unlock them
- Unbind items (admin action) — cleanly removes all ownership data and lore without touching original lines from other plugins
- /sl list — any player can list their own bound items without any extra permission
- /sl list <player> — admins can list another player's bound items
- /sl history — any player can view the transfer history of their own bound items
- /sl history <player> — admins can view transfer history for any player
- Each history entry shows the sender, receiver, and timestamp of every ownership change
- Create and manage SoulLedger groups directly inside the plugin — no guild/faction dependency required
- Bind items to a group instead of a single player
- Transfer existing bound items from a player or group to another SoulLedger group
- Group members can access group-owned items
- Group managers can bind, transfer, lock, and manage group-owned items
- Groups are stored in groups.yml, keeping SoulLedger fully standalone and database-free
- Prevent owners from accidentally dropping their bound items
- Prevent other players from picking up items that belong to someone else or to a group they are not part of
- Prevent bound items from being placed inside chests, barrels, or any container
- Hoppers and dispensers cannot steal or move bound items
- Keep on death — bound items automatically return to the owner's inventory on respawn (permission-based or global)
- Delete on death — bound items are permanently destroyed on death (permission-based or global)
- Both modes can be configured globally in config.yml or granted per-player via permissions
- Every bound item displays a clean lore section showing the current owner, Soul ID, and bind date
- Lore is automatically updated whenever ownership is transferred
- Locked items display their lock state in the item passport/lore
- Unbinding cleanly removes SoulLedger lore without touching lore from other plugins
- Hot reload — apply config changes without restarting the server
- Debug mode toggle — detailed console logging for diagnostics, persisted to disk
- Full tab completion for all commands
- All messages fully configurable in messages.yml
- All behavior settings configurable in config.yml
- Versioned config/message migration — existing files are backed up and regenerated from the newest commented templates
- Transfer contract timeout configurable in config.yml
- Per-player bind limits via permission nodes (e.g. soulledger.limit.5)
─────────────────────────────────────────────────────────────
Main command: /soulledger — Aliases: /sl, /soul
| Command | Description |
|---|---|
| /sl bind [player] | Bind the item in your hand to yourself or another player |
| /sl bindgroup <group> | Bind the item in your hand to a SoulLedger group you manage |
| /sl unbind | Remove the SoulLedger binding from the item in your hand |
| /sl inspect | View the full ownership record (Item Passport) of the item in hand |
| /sl transfer <player> | Send a transfer contract to an online player. Ownership changes only after the recipient accepts |
| /sl transfergroup <group> | Transfer the item in your hand to a SoulLedger group you manage |
| /sl accept [item-id] | Accept a pending transfer contract |
| /sl decline [item-id] | Decline a pending transfer contract |
| /sl lock <on|off> | Lock or unlock the owned item in your hand to control whether it can be transferred |
| /sl group create <name> | Create a built-in SoulLedger group |
| /sl group add <group> <player> | Add a player to a group you manage |
| /sl group remove <group> <player> | Remove a player from a group you manage |
| /sl group promote <group> <player> | Promote a group member to manager |
| /sl group demote <group> <player> | Demote a group manager back to regular member |
| /sl group info <group> | View group owner, member count, and manager count |
| /sl group list | List all SoulLedger groups |
| /sl list [player] | Without [player]: lists your own bound items. With [player]: lists another player's items (requires admin permission) |
| /sl history [player] | Without [player]: shows your own transfer history. With [player]: shows another player's history (requires admin permission) |
| /sl reload | Reload config.yml, messages.yml, and groups.yml without restarting |
| /sl debug | Toggle debug logging on/off (persisted to config.yml) |
| /sl help | Display the in-game command reference |
─────────────────────────────────────────────────────────────
| Permission | Default | Description |
|---|---|---|
| soulledger.admin | OP | Grants all SoulLedger permissions at once, including the ability to transfer items to yourself |
| soulledger.use | All Players | Access to /inspect, /help, /list (own items only) and /history (own items only) |
| soulledger.bind | OP | Bind items to players |
| soulledger.unbind | OP | Unbind items |
| soulledger.transfer | All Players | Offer, accept, and decline transfer contracts |
| soulledger.group | All Players | Use built-in SoulLedger group commands |
| soulledger.group.bind | OP | Bind items to groups the player manages |
| soulledger.group.transfer | All Players | Transfer managed items to groups |
| soulledger.lock | All Players | Lock and unlock owned items |
| soulledger.list | OP | List bound items of other players (without this, players can only list their own) |
| soulledger.history | OP | View transfer history of other players (without this, players can only view their own) |
| soulledger.reload | OP | Reload the plugin configuration |
| soulledger.debug | OP | Toggle debug mode |
| soulledger.bypass.pickup | false | Pick up items bound to other players |
| soulledger.bypass.drop | false | Drop items bound to self (overrides drop prevention) |
| soulledger.keep-on-death | false | Bound items return to inventory on respawn |
| soulledger.delete-on-death | false | Bound items are destroyed on death |
| soulledger.limit.<n> | false | Maximum number of bound items for this player (e.g. soulledger.limit.5) |
─────────────────────────────────────────────────────────────
SoulLedger uses two separate files for clean organization:
config.yml — Server behavior settings:
- Enable or disable drop prevention for bound items
- Enable or disable pickup prevention by non-owners
- Enable or disable container and hopper storage prevention
- Global keep-on-death and delete-on-death toggles
- Bind-on-pickup — automatically bind items when first picked up (on/off)
- Bind-on-use — automatically bind items on first right-click (on/off)
- Group ownership — enable/disable built-in group item ownership
- Group-owned item keep-on-death behavior
- Transfer contract timeout in seconds
- Debug mode on/off
messages.yml — All player-facing messages:
- Every message is fully customizable
- Supports & color codes (&6, &a, &c, etc.)
- Supports placeholders: {player}, {item}, {from}, {target}, {label}, {group}, {action}, {id}, {date}, {type}, {status}, {locked}, {count}, {entry}, {max}
- Customize the plugin prefix, all notifications, inspect lines, list/history output, and more
groups.yml — Built-in group ownership data:
- Stores SoulLedger group IDs, display names, owners, members, and managers
- No database required
- Reloadable with /sl reload
Safe file updates
- config.yml and messages.yml include version fields
- Older files are backed up as config.old-vX.yml and messages.old-vX.yml
- New files are regenerated from the newest commented templates
- Existing compatible settings/messages are copied back into the new files
─────────────────────────────────────────────────────────────
| Property | Value |
|---|---|
| Platform | Spigot (pure Bukkit API — no Paper or Folia required) |
| Tested Version | 26.1.2 or newer ( if you have - Spigot 1.21.2 contact me ) |
| Paper Compatible | Yes |
| Java Version | 17 or higher |
| Dependencies | None — fully standalone |
| Database | None — item ownership data is stored inside the items; groups are stored in groups.yml |
─────────────────────────────────────────────────────────────
- RPG servers — Register rare weapons, artifacts, and quest items with a verified owner
- Survival servers — Protect players' most valuable gear from theft and accidental drops
- Economy servers — Establish a clear chain of ownership for traded goods
- Roleplay servers — Give items a history and identity tied to characters
- Guild/Faction-style servers — Share ownership of important items through SoulLedger's built-in groups
- Event servers — Award unique items to winners that cannot be stolen or duplicated
─────────────────────────────────────────────────────────────
Completed items are marked below; remaining items are planned for future versions.
Version 0.5.x
Transfer contracts — recipient must accept before ownership changes(Done in 0.5)Item lock — owner can lock an item to prevent transfers without explicit unlock(Done in 0.5)Multi-owner support through built-in SoulLedger groups(Done in 0.5.1)- PlaceholderAPI integration (%soulledger_item_owner%)
- Import tool for legacy soulbound plugins
- Compatibility with popular custom item plugins: ItemsAdder, Oraxen, MMOItems, SlimeFun, ExecutableItems
Version 1.0
- Optional database storage (SQLite / MySQL) for large-scale audit logs
- Web dashboard for server admins to browse item ownership history
- Economy plugin integration for item-secured systems
─────────────────────────────────────────────────────────────
SoulLedger stores all ownership data directly inside the item using Minecraft's built-in data system.
This means there is no separate database to set up for normal use.
Item data travels with the item across worlds and server restarts automatically.
This is version 0.5.1 — stable and production-ready for all features listed above.
Future updates will be released progressively as outlined in the roadmap.
— stutiguias
SoulLedger — because every important item deserves a history.
