Sueta

✨ xInventories

1.2.1

Per-world inventory separation with groups, patterns, and multi-storage support

·Plugin
  1. 1.2.1latestFixes: 1.2.1last week
    What's Changed Fixed · /xinv migrate ran the import command - both convert and import claimed the migrate alias and the import command won, so /xinv migrate yaml sqlite answered "Unknown import source: yaml". The alias belongs to convert again. · Inventory editor could not accept or release items - Every click in the admin's own inventory was cancelled while a menu was open, so the editor's documented "pick up / place" workflow never worked and items could only be deleted. GUIs can now declare editable slots: the editor (/xinv gui editor <player> [group]) holds the stored items in slots 0-35 and the admin moves them like in a chest (click, drag, split, shift-click in and out of their own inventory). Because items really leave the editor, every close saves, and an online target standing in that group gets the saved inventory applied immediately, so taking an item out can never duplicate it. · Restriction hopper - The item-restrictions menu's "drop an item on the hopper" action works again for the same reason (an item can be picked up from the admin's own inventory while a menu is open). · Multiverse-Inventories import found nothing - The importer looked for an API class that never existed under that name (com.onarandombox...MultiverseInventoriesApi; MVI 4.x has no API class, 5.x moved to org.mvplugins.multiverse.inventories), read every top-level key of groups.yml as a group (so it found one group called groups), and looked for groups/<group>/<uuid>.yml profiles, while MVI writes groups/<group>/<player name>.json; JSON profiles were skipped as "not yet supported". It now uses the MVI 5.x API through MVI's class loader when the plugin is enabled, and otherwise reads the real 4.x/5.x files: groups under groups:, name-keyed JSON profiles mapped back to UUIDs through playernames.json / players/<uuid>.json, per-gamemode profile sections (falling back to SURVIVAL when MVI does not separate game modes), ConfigurationSerialization items as well as Base64 byte-serialized ones, armor, off-hand, ender chest, stats and potions. · PerWorldInventory import found nothing - It read data/<group>/<uuid>.yml with one YAML section per game mode, a layout no PerWorldInventory version wrote. It now reads what PerWorldInventory-kt 2.x (and the Java 1.x plugin) write: data/<uuid>/<group>.json and <group>_creative|_adventure|_spectator.json, in data format 4 (serialized PlayerProfile) and the older formats 1-3, with inventory, armor, off-hand, ender chest, stats, potion effects and balance. Old item maps are upgraded by the server (e.g. DIG_SPEED becomes minecraft:efficiency). PWI cannot run on current servers, so the import is always file-based. · MyWorlds import detected on every server and imported empty inventories - Detection fired whenever any world folder had a playerdata directory, which every vanilla 1.20.5 - 1.21.x world has; it now requires MyWorlds (My_Worlds) or its plugins/My_Worlds folder. Without BKCommonLib the importer imported no items at all, the BKCommonLib path used reflection that did not match BKCommonLib, and files were only looked for in <world>/playerdata. It now takes MyWorlds' world inventories from its API or from inventories.yml / config.yml (useWorldInventories), reads each inventory's file from its shared world's player folder (Paper 26.x layout world/players/data and <dimension>/data/my_worlds/playerdata, or <world>/playerdata), and converts items through Paper's ItemStack.deserializeBytes, so the server's data converter upgrades them; armor and off-hand are read from the 1.21.5+ equipment compound as well as the older inventory slots, plus ender chest, stats and potion effects. · /xinv convert skipped recent saves - Saves still waiting in the write-behind cache (cache.write-behind-seconds) were not on disk yet, so a conversion right after players saved or switched worlds migrated nothing for them. Pending saves are now flushed before the source is read. · /xinv reload ignored storage changes - After converting, changing storage.type (or the SQLite file / MySQL settings) and reloading kept the old backend until a restart, without saying so. Reload now switches the running backend: pending saves are flushed to the old one, the cache is dropped, and the reload reports Storage backend switched: YAML -> SQLITE; if the new backend cannot start, the old one stays in use and the error is reported. Changed · Paper 26.3 support. The main source set stays compiled against paper-api 26.1.2 on purpose: Paper 26.3 ships Adventure 5, and a jar compiled against it throws NoSuchMethodError on 26.1/26.2 servers (TextComponent.Builder.build()), while Adventure 5 keeps the Adventure-4 descriptors as bridges. Tests run on the 26.3 API. Still Java 21 bytecode, runs on 1.20.5 - 26.3. · Menus still block every way of pulling a button or display item out (shift-click, hotbar and offhand swaps, drop, double-click collect, creative middle-click clone, drag); this is now covered by an end-to-end suite that drives each path with a real client. · Unit tests on MockBukkit 26.3. The suite runs on mockbukkit-v26.3:4.118.0-pcx.1, the pcxgg fork of MockBukkit for Paper 26.3 (build 181), instead of mockbukkit-v26.2:4.117.0, which no longer matched the 26.3 API (647 of 3679 tests failed). All 3880 tests pass (40 skipped, unchanged). JaCoCo 0.8.15, since 0.8.12 cannot instrument Java 25 class files. · End-to-end tests on Paper 26.3. The plugwright suite (36 tests) runs on Paper 26.3 instead of 26.1.2, through the pcxgg plugwright fork 3.1.0-pcx.1, whose bots speak the 26.3 protocol. Both forks resolve locally for now (mavenLocal() and a file: link to the runner); see "Running Tests" in the README. · End-to-end coverage for converters and importers. Three plugwright environments now run in the matrix: local (the 36 existing tests, now pinned to it, plus /xinv convert YAML -> SQLite -> YAML with the backend switched by /xinv reload, and import detection on a plain server), imports (real Multiverse-Core 5.8.1 + Multiverse-Inventories 5.3.6, PerWorldInventory-kt 2.3.2 data files, and MyWorlds data left behind without the plugin) and myworlds (real MyWorlds 2.0.1 + BKCommonLib on Paper 26.3, and Multiverse-Inventories data without the plugin). Each import is checked by loading the imported inventories into the players. New integration test StorageBackendSwitchTest (3885 unit tests).
    3 downloads
  2. 1.2.006/16/2026Jun 19, 2026
    What's Changed Added · Minecraft 26.1.2 support - Updated for Mojang's new year-based versioning (26.1.2 = year 2026, drop 1, hotfix 2). The plugin compiles against paper-api 26.1.2 on JDK 25 but emits Java 21 bytecode, so a single jar runs on both Java 21 servers (1.20.5 - 1.21.x) and Java 25 servers (26.1.x). Fixed · GUI item leak - Items could occasionally be moved out of an xInventories menu while the button handler never fired. GUI inventories now carry a dedicated InventoryHolder, so clicks are cancelled by the inventory's intrinsic identity rather than a side tracking map that could desync (for example after /xinv reload while a menu was open). · Inventory loss on logout - The quit save could read the player a tick after they were removed and persist an empty/partial inventory. The snapshot is now captured synchronously when the player quits, then persisted asynchronously. · Async save never persisting - When async-saving was enabled but write-behind was disabled, saves were only cached and never written until shutdown. Such saves now persist via a background write. · Write-behind data loss on failure - A failed batch flush no longer marks entries clean; unsaved entries stay dirty and are retried on the next flush. · Stuck cross-server lock - The distributed transfer lock is now always released on quit, even if the save throws. · Inventory version drift - The version is no longer double-incremented on the write-behind path. · Deserialization resilience - A single corrupt or unknown item no longer discards the entire inventory; bad entries are logged and skipped. Changed · Armor handling updated for the Paper 26.1 API (armor getters are now non-null). · Building/testing from source now requires JDK 25; CI updated accordingly. The released jar remains Java 21 bytecode and runs on Java 21+ servers.
    84 downloads
  3. 1.1.0The Full StackFeb 13, 2026
    [1.1.0] - 2026-01-30 Added Data Foundation · Inventory Versioning - Automatic version history for player inventories · Configurable version retention and triggers (save, world-change, gamemode-change) · Commands: /xinv version list, /xinv version restore, /xinv version diff · Rollback to any previous version with preview · Death Recovery - Recover inventories lost on death · Configurable retention period and max records per player · Commands: /xinv death list, /xinv death restore, /xinv death preview · Automatic cleanup of old records Player State Separation · Statistics Separation - Per-group player statistics (kills, deaths, blocks mined, etc.) · Advancements Separation - Per-group advancement/achievement progress · Recipes Separation - Per-group unlocked recipe tracking · PWI-Style Player Settings - Extended player state options · Flying state (save-flying, save-allow-flight) · Fall distance, fire ticks, air levels · Display name preservation · Inventory toggle (save-inventory) to disable inventory sync per-group · Global defaults in config.yml with per-group overrides · All existing state (ender chest, XP, potion effects, health/hunger) now fully per-group Content Control · Templates - Pre-defined inventory templates for groups · Apply templates on first join or group entry · Commands: /xinv template list, /xinv template apply, /xinv template create · Template editor GUI for viewing/editing template contents · Support for starter kits, event loadouts, etc. · Item Restrictions - Control which items players can use per group · Whitelist or blacklist modes with material patterns · Actions: prevent, drop, remove, or move to vault · Per-group restriction configurations · Confiscation Vault - Storage for restricted items · Items removed with MOVE_TO_VAULT action are stored safely · Players can view and reclaim confiscated items via GUI · Commands: /xinv vault, /xinv vault claim, /xinv vault <player> · Admin access to view/manage other players' vaults · NBT Filters - Advanced item filtering by NBT data · Filter by enchantments (with level ranges) · Filter by custom model data · Filter by display name/lore patterns (regex) · Shared Slots - Share specific inventory slots across groups · Configure shared slots, armor slots, or offhand · Real-time sync across group transitions Advanced Groups · Conditional Groups - Dynamic group assignment based on conditions · Permission-based: permission: "group.vip" · Schedule-based: Time ranges with timezone support · Cron-based: Complex schedules like "weekends only" · PlaceholderAPI: Evaluate placeholders for group selection · World Group Inheritance - Groups inherit settings from parent groups · Reduces configuration duplication · Child groups override parent settings · Circular inheritance detection · Temporary Groups - Time-limited group assignments · Assign players to groups for events/minigames · Auto-restore original group on expiration · Commands: /xinv tempgroup assign, /xinv tempgroup remove, /xinv tempgroup list · Events: TemporaryGroupExpireEvent, TemporaryGroupAssignEvent · Inventory Locking - Temporarily lock player inventories · Commands: /xinv lock, /xinv unlock, /xinv lock list · Configurable duration, scope (all/group/slots), and bypass permissions · Events: InventoryLockEvent, InventoryUnlockEvent Admin Tools · Audit Logging - Track all inventory modifications · Who modified what, when, and what changed · Commands: /xinv audit <player>, /xinv audit search, /xinv audit export · Configurable retention and action filtering · Bulk Operations - Apply actions to all players in a group · Commands: /xinv bulk clear, /xinv bulk apply-template, /xinv bulk reset-stats · Progress tracking and cancellation support · Anti-Dupe Detection - Detect potential item duplication exploits · Rapid switch detection, item count anomaly detection · Configurable sensitivity (LOW, MEDIUM, HIGH) · Admin notifications and optional inventory freeze · Statistics Dashboard - Plugin performance metrics · Commands: /xinv stats, /xinv stats cache, /xinv stats performance · Storage usage, cache hit rates, operation timing · Inventory Comparison - Side-by-side player inventory comparison GUI · Inventory Search - Search across all player inventories for specific items · Inventory Expiration - Auto-delete inactive player data · Configurable inactivity threshold · Exclusion by permission or UUID · Commands: /xinv expiration status, /xinv expiration preview, /xinv expiration run External Integrations · Vault Economy - Per-group economy balances · Separate balances per inventory group · Transfer money between groups · Full Vault provider compatibility · LuckPerms Contexts - Expose current group as LuckPerms context · Context key: xinventories:group · Enables permission tracks based on inventory group · PlaceholderAPI Expansion - Extended placeholders · %xinventories_group%, %xinventories_item_count%, %xinventories_empty_slots% · %xinventories_version_count%, %xinventories_death_count%, %xinventories_balance% · %xinventories_locked%, %xinventories_lock_reason%, %xinventories_last_save% · Plugin Import - Import data from other inventory plugins · PerWorldInventory (PWI) support · MultiVerse-Inventories (MVI) support · MyWorlds support · Commands: /xinv import detect, /xinv import <plugin> Network Sync · Cross-Server Sync - Redis-based synchronization for networks · Real-time inventory sync across BungeeCord/Velocity networks · Distributed locking to prevent data conflicts · Configurable conflict resolution strategies (latest-wins, merge) · Server heartbeat monitoring · Cache invalidation across servers Backwards Compatibility · Spigot Support - Runtime dependency loading for Spigot servers · Automatically downloads required libraries (Kotlin, coroutines, serialization, etc.) from Maven Central · SHA-256 checksum verification for all downloaded dependencies · Isolated classloader ensures no conflicts with other plugins · Works transparently on Spigot 1.20.5+ and older Paper versions · On Paper 1.21+, uses server-provided libraries for optimal performance · Dependencies cached in plugins/xInventories/libraries/ folder Quality of Life · Inventory Merge - Merge two groups' inventories · Strategies: COMBINE, REPLACE, KEEP_HIGHER, MANUAL · Preview and conflict resolution GUI · Commands: /xinv merge, /xinv merge confirm, /xinv merge cancel · Export/Import JSON - Export inventories for external tools · Commands: /xinv export, /xinv export all, /xinv importjson · Full inventory data including effects, XP, statistics · Config Versioning - Automatic config migration on updates · Preserves user settings during upgrades · Automatic backup before migration · Startup Branding - ASCII art logo and colorized console output · Displays version, storage type, groups loaded, sync status GUI Enhancements (20+ new screens) · Core Management: Player Lookup, Inventory Editor, Version Browser, Death Recovery Panel · Administration: Template Manager, Group Browser, Bulk Operations Panel, Inventory Search · Configuration: Item Restrictions Editor, Shared Slots Editor, Lock Manager,
    89 downloads
  4. 1.0.1[1.0.1] - 2026-01-29Jan 30, 2026
    Added - Comprehensive test suite with 991 passing tests - Unit tests for serializers, models, cache, and configuration - Integration tests for storage backends, services, and API - Test framework dependencies (JUnit 5, MockK, MockBukkit, kotlinx-coroutines-test) - SQLite JDBC driver for test environment - Testing documentation section in README Fixed - Fixed null pointer exception in InventoryService when using null group for global bypass - Changed internal set implementation to support null values for global bypass tracking - Fixed WorldPattern equality comparison - Two patterns with the same regex string now correctly compare as equal - Added proper equals() and hashCode() implementations
    13 downloads
  5. 1.0.0Jan 29, 2026
    13 downloads

Similar projects

Plugin →