With the changes made to Minecraft, we've also decided to rebrand this whole plugin. We are changing to a new repository called Tome of Echoes, and it will be hosted on Modrinth and Github exclusively. Follow any changes here
https://modrinth.com/project/tome-of-echoes
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)
Added Placement Mode: right-click a block in the pocket GUI and your pocket temporarily turns into that block (with a glint) so you can hold right-click to place like vanilla, consuming from your stored count each placement.
Added an easy way to exit placement mode: Shift + Left Click disables it (works in air or while looking at a block), then a second Shift + Left Click opens the pocket GUI.
Improved placement feedback: plays the correct block placement sound for the block being placed.
Auto-pickup storage keeps working during placement mode, and the placement item’s lore now stays synced as your stored counts go up/down.
Added an update reminder system for server owners (startup/periodic check + optional OP join notice) so servers know when a newer plugin version is available.
Added a per-player “Placement Mode” for the Dimensional Pocket: right-click a block icon in the pocket GUI to select it, then right-click a block in the world while holding the pocket to place that block.
Each placement consumes 1 from the pocket’s stored count for that material (storage is clamped so it won’t go negative).
Easy “turn it off”: right-click the same icon again in the GUI, or shift-right-click while holding the pocket.
Opening the pocket GUI always resets back to normal mode (no placement mode selected)