
Dimensional Pocket
A plugin that adds configurable portable item storage that's tracked per-player
Список изменений
Overview
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)
Upgrade Notes
Requirements Spigot 26.1+ Java 21+ 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)
Compatibility / Behavior Notes
Pocket item identification is stricter (by design). Legacy pockets are still supported via automatic tagging/upgrade, but name-only items won’t be accepted anymore. SQLite migration is intentionally conservative: it only imports when the DB is empty to avoid duplicate data.
