Changelog¶
1.2.0 — 2026-10-18¶
Modern-version features: the plugin now takes advantage of what new servers offer while keeping the same jar working on 1.8.
Added¶
- Vault picker:
/pvwithout arguments opens a menu with one icon per vault (item count in the lore)./pv 3opens a specific vault as always and/pv helpshows the text help;vaults.picker: falserestores the old behaviour. - MiniMessage colours (
messages-format: auto | legacy | minimessage): on servers with Adventure (Paper and its forks) a message written with tags such as<gradient:#2ec4b6:#12727f>,<#ff8800>,<click:run_command:'/pv 1'>or<hover:show_text:'...'>is sent as a Component. It applies to chat, action bars, inventory titles and the picker item names/lore.autois the default: messages that use&keep working exactly as before, on every version. - NBT item storage for the SQL backend (
storage.item-format: auto | nbt | bukkit). On Paper 1.20.5+ vaults are stored withItemStack.serializeItemsAsBytes, which Paper documents as safer for data migrations than Bukkit's own serialization, and which keeps slot order and gaps by design. Every blob records its format, so data written by 1.0.0-1.1.0 still loads. storage.yaml-format: readable | nbt: the YAML backend can store each vault as Base64 NBT instead of hand-editable slots (readable stays the default).storage.mysql.driver-jarand automatic loading of any.jarplaced inplugins/JPPlayerVaults/lib/: the database backend no longer depends on the server shipping the JDBC driver. (plugin.ymldocuments Paper'slibraries:as an alternative, commented out because it makes every server start need internet.)vaults.title-max-length(default 32,0= no limit): with Components available the 1.8-1.12 title cap can be lifted.- Paper/Folia scheduler support: the autosave and the migration use
GlobalRegionSchedulerwhen it exists, and anything that touches a player (closing a vault, saving it) is scheduled on that player's region thread viaEntityScheduler. /pv adminlooks names up with Paper'sgetOfflinePlayerIfCachedinstead of walking the whole player cache.
Changed¶
- Messages are only sent as Components when the message actually uses MiniMessage; legacy messages keep the plain string path, so nothing about existing texts changes.
- The integration harness grew to cover the new surface: 102 checks on Paper 26.3 and 64 on Paper 1.8.8, including an NBT round-trip, the compatibility of pre-1.2.0 blobs, MiniMessage in both modes, the picker and the schedulers.
Notes¶
- Folia scheduling is implemented (region-aware), but the plugin does not declare
folia-supported: trueyet because it has not been tested on a real Folia server. - On a server without Adventure the MiniMessage tags of a message are stripped so the text stays readable, and a warning is logged once.
1.1.0 — 2026-10-18¶
Database storage and administrator tools.
Added¶
- Optional SQL storage (
storage.type: mysql) alongside the YAML files. Any database reachable over JDBC works; MySQL and MariaDB are preconfigured, tables are created automatically and every vault is written inside a transaction. /pv adminsubcommands, behind the newjpvaults.adminpermission (OP by default):/pv admin open <player|uuid> <number>— open another player's vault, online or offline./pv admin info [player]— plugin status, or a report for one player./pv admin delete <player|uuid> <number> confirm— wipe one vault./pv admin migrate [force]— copy the YAML files into the database, in batches, keeping the originals.
- Database settings in
config.yml: host, port, database, credentials, table prefix, pool size, connection timeout, driver class and a raw JDBC URL for other engines. - When stored data cannot be read, the plugin refuses to open the vault and asks the player to contact an administrator, instead of showing an empty vault that the next save would write over.
Changed¶
- A vault can only be open for one person at a time, so an administrator cannot edit a vault while its owner has it open (and the other way round).
/pv reloadreports when storage settings changed and a restart is needed.
1.0.0 — 2026-10-18¶
First public release.
Added¶
- Private vaults per player with
/pv <number>, aliases/playervaultsand/jpvaults. - Rank-based vault count: the plugin grants the highest
jpvaults.vaults.<n>permission the player has, withvaults.default-amountfor players without one. - Configurable vault size from 9 to 54 slots (multiple of 9).
- Autosave of open vaults, plus saving on close, quit and server shutdown.
- YAML storage, one readable file per player (
data/<uuid>.yml), with atomic writes. - Anti-dupe protections: durable save on close,
Q/Ctrl+Qblocked in the GUI, clicks outside the window blocked, off-hand swap guarded, stale vault views closed after a reload. - English and Spanish messages, selected with
languageinconfig.yml; any other language can be added with amessages_<code>.ymlfile. /pv reloadfor config and messages.jpvaults.usepermission (default true) to enable or disable the command per group.
Safety and robustness¶
- Vault data is read from disk when a vault opens and dropped when the player quits, so a restart always starts from the real file.
- If a player file cannot be parsed, a timestamped
.bakcopy is kept before it can be overwritten; a single item that fails to deserialize does not block the rest of the vault. - Asynchronous saves mark data clean only after the write succeeds and only if the data did not change meanwhile, so a failed write is retried instead of being silently dropped.
- Invalid configuration values are clamped and reported in the console instead of breaking the plugin.
- Inventory titles are capped at 32 visible characters so a long title cannot crash 1.8–1.12 clients.
Compatibility¶
- One jar for Minecraft 1.8 through the latest version, built against the Spigot 1.8.8 API with Java 8 bytecode.
- No NMS, no Vault, no database, no bStats, no update checker, no network access.
- Tested on Paper 1.8.8 (Java 8, integration test and a real 1.8 client) and Paper 26.3 (Java 25, integration test).