Contents
Commands
All subcommands are under /money. The root command /balance is an alias for /money.
| Command | Description | Permission |
|---|---|---|
| /money | Show your own balance | kmoney.command.money |
| /money balance | Show your own balance | kmoney.command.money |
| /money balance <player> | Show another player's balance | kmoney.command.money |
| /money pay <player> <amount> | Send money to another player | kmoney.command.money.pay |
| /money top [page] | Show the richest players (10 per page) | kmoney.command.money.top |
| /money withdraw <amount|all> [notes] | Convert balance into a physical money check item | kmoney.command.money.withdraw |
| /money add <player> <amount> | Add money to a player's balance | kmoney.command.money.add |
| /money remove <player> <amount|all> | Remove money from a player's balance | kmoney.command.money.remove |
| /money set <player> <amount> | Set a player's balance to an exact value | kmoney.command.money.set |
| /money admin <on|off> | Toggle your own admin join notification | kmoney.command.money.admin |
| /money reload | Reload all configuration files live | kmoney.command.money.reload |
Amount Format
All amount arguments accept shorthand suffixes (case-insensitive). Comma-separated numbers are also accepted. The keyword all is supported by /money remove and /money withdraw.
| Input | Value |
|---|---|
| 100 | 100 |
| 1k | 1,000 |
| 1m | 1,000,000 |
| 1b | 1,000,000,000 |
| 1t | 1e12 |
| 1q | 1e15 |
| … | up to tvg = 1e72 |
Permissions
| Permission | Default | Description |
|---|---|---|
| kmoney.command.money | everyone | Balance checks |
| kmoney.command.money.pay | everyone | Pay other players |
| kmoney.command.money.top | everyone | View rich list |
| kmoney.command.money.withdraw | everyone | Create money checks |
| kmoney.command.money.add | op | Add money to players |
| kmoney.command.money.remove | op | Remove money from players |
| kmoney.command.money.set | op | Set player balances |
| kmoney.command.money.admin | op | Toggle admin join message |
| kmoney.command.money.reload | op | Reload configuration |
| kmoney.admin | op | Grants all of the above |
Money Checks
- A money check is a physical in-game item (default: Paper) representing a fixed monetary value.
- Players use
/money withdrawto convert balance into checks; right-clicking a check claims its value. - The item material is configurable via
check-materialinconfig.yml. /money withdraw <amount> <notes>creates a stack of up to 64 checks, each worthamount. Total cost isamount × notes.- Item lore shows the per-note value and the creator's name.
- Checks are protected against duplication through hoppers, villager trades, and piglin bartering.
Leaderboard
- The rich list is built asynchronously and cached in memory —
/money topis always instant regardless of server size. - Results are paginated at 10 entries per page.
- Cache refresh interval is set by
top-update-interval-secondsinconfig.yml(default: 300 s). - The interval is re-applied immediately on
/money reload. - Before each refresh, all pending balance changes are flushed to disk so the leaderboard reflects up-to-date data.
Storage
- Balances are stored as individual YAML files at
plugins/kMoney/players/<uuid>.yml. - The economy manager keeps an in-memory write-back cache: reads hit the cache first; a miss loads from disk and populates the cache.
- Writes go to the cache and mark the entry dirty.
- Dirty entries are flushed to disk every 30 seconds via an async autosave task.
- All dirty entries are also flushed synchronously on plugin shutdown.
- Balances can never go negative —
removeBalanceclamps at zero.
Sounds
Every economy action plays a configurable sound. All sounds are defined in sounds.yml. Each entry supports enabled, sound, pitch (0.1–2.0), and volume. The entire system can be disabled by setting enabled: false at the top of sounds.yml.
| Event | Default Sound |
|---|---|
| pay | block.note_block.pling |
| add | block.note_block.chime |
| set | block.note_block.pling |
| remove | block.note_block.chime |
| withdraw | entity.item.pickup |
| redeem (claim check) | entity.player.levelup |
| top | block.note_block.pling |
| reload | entity.player.levelup |
Messages & Formatting
- All player-facing text is defined in
messages.ymlusing MiniMessage format. - Every message automatically receives the global
prefix. - Item lore (check name/value) uses raw messages without the prefix.
- Setting
small-font: trueinmessages.ymlreplaces all standard Latin characters with Unicode small-caps equivalents — a stylised look without a resource pack.
Formatted amounts use small-caps Unicode suffixes:
ᴋ M ʙ ᴛ ǫ ǫǫ ѕ ѕѕ ᴏᴄ ɴᴏ ᴅᴄ ᴜᴅᴄ … up to ᴛᴠɢ (1e72)
PlaceholderAPI
When PlaceholderAPI is installed, the following placeholders are available:
| Placeholder | Returns |
|---|---|
| %kMoney_balance% | Raw balance (no symbol, no suffix) |
| %kMoney_balance_formatted% | Formatted balance with symbol and suffix |
| %kMoney_symbol% | The configured currency symbol |
Vault
- kMoney registers itself as a Vault Economy provider.
- Any plugin that uses the Vault Economy API will automatically use kMoney's balances.
- Bank operations are not supported.
Admin Join Notifications
- Operators with
kmoney.adminreceive a brief status message on join. - If the running version matches the latest release on Modrinth: a confirmation message with a GitHub link.
- If a newer version is available: an update notice with a clickable Modrinth download link.
- Each admin can disable this for themselves with
/money admin off.
Configuration Files
All three files are reloaded live with /money reload.
| File | Purpose |
|---|---|
| config.yml | Currency symbol, check material, default balance, leaderboard interval, join-message and update-warning toggles |
| messages.yml | All player-facing text, prefix, small-font toggle |
| sounds.yml | Per-event sound keys, pitch, volume, and enable flags |