This release modernizes the plugin, hardens the pocket item against spoofing, improves offhand usability, updates the pocket item presentation (flower pot + glint), and switches persistence to SQLite by default with an automatic one-time migration from legacy YAML.
Highlights
SQLite is now the default storage (YAML still supported).
Pocket item spoofing via anvil renaming is fixed (PDC-based authenticity).
Offhand support for GUI open + placement mode.
Pocket item is now a flower pot with a hidden glint, and old pockets are upgraded automatically.
Pickup-to-pocket works even when the player inventory is full.
Added
SQLite persistence backend (default)
Stores player data in storage.db
Optional legacy YAML backend Still supports storage.yml as a backend if you explicitly choose it
Automatic migration (YAML → SQLite) On first startup with SQLite enabled, if the SQLite table is empty and storage.yml exists, data is imported once
After successful import, storage.yml is renamed to storage.yml.bak as a backup
Item authenticity marker (PDC) Pocket items are now identified primarily via a server-side marker, not just the display name
Legacy items are upgraded automatically during normalization
Fixed Anvil spoof exploit Players can no longer rename a random item to match the pocket name and have it treated as a pocket
Offhand interaction gaps Opening the GUI and placement mode flows now work properly when the pocket is in the offhand
Inventory-full pickup edge case When a pickup is prevented due to a full inventory, tracked items can still be absorbed into the pocket (instead of failing to collect)
RECOMMENDED UPGRADE STEPS
Stop the server
Back up plugins/PocketDimension/ (especially storage.yml if you’re coming from older versions)
delete config.yml
Replace the jar with v3.3
Start the server and watch the console:
If you had storage.yml, it will migrate into SQLite (first run only, DB must be empty)
A backup rename to storage.yml.bak is attempted after successful migration
If you want to stay on YAML
Set storage.backend: yaml in the config (otherwise it defaults to SQLite)