Most kit plugins hand everyone the same loadout. PerPlayerKit gives every player nine kit slots and nine enderchest slots of their own, built from a kit room you stock with the items you approve. Players arrange their kit once, then load it with /k1 mid-warmup and get straight back to fighting.
It is the kit system behind many crystal, pot, UHC, and sword practice servers, and it runs on Paper or Spigot 1.19+.
Why servers pick it
- Players own their kits. Nine kits and nine enderchest kits per player by default, up to 99. Saved to a database, so they survive restarts and follow the player across your network.
- You keep control. The kit room is the only source of items. Optional item filtering caps enchantment levels, potion levels and durations, and blocks unbreakable items, custom attributes, and illegal NBT.
- Playable in one command.
/perplayerkit autosetupfills the kit room and nine public kits with a ready-made crystal, mace, netherite, pot, UHC, sword, axe, FFA, and cart setup. - Built for fights. Rekit on respawn, rekit the killer after every kill, and
/rgto restock pearls, crystals, and potions from the loaded kit without opening a menu. - No lock-in. Free, open source under AGPL-3.0, with an importer for KitsX and export/import of all kit data between servers.
Features
Kits and enderchest kits
Players open /kit, take items from the kit room, arrange a full inventory including armor and off-hand, and close the editor to save. /k1 through /k9 load kits instantly. /ec1 through /ec9 do the same for enderchest kits. Swap slots, delete slots, and optionally heal, feed, saturate, or clear effects on every load.
Public kits
Server-wide preset kits anyone can load from /publickit. Declare them in config, hold the inventory you want, and run /savepublickit <id>.
Automatic rekit
Give the last loaded kit back on respawn, with a configurable delay. Turn on rekit-on-kill to regear the killer instantly after every kill. Either trigger can instead pick a public kit by world, or by WorldGuard region, so the Nether arena hands out crystal kits and the sword arena hands out sword kits.
Regear
/rg and /regear restock whitelisted items from the player's loaded kit. Run them as instant commands or hand out a regear shulker box. Damage timers, cooldowns, and an elytra check stop it being abused mid-combo.
Sharing and transfers
/sharekit <slot> <player>sends a kit. They click [ACCEPT] in chat./sharekit <slot>prints a share code anyone can redeem with/copykitfor 15 minutes./transferkits <player>copies every kit to a new account.
Item filtering and anti-exploit
Off by default, on in one block of config. Limit kits to kit room items only, cap enchantment levels per enchantment, reject over-levelled or incompatible enchantments, cap potion effect level and duration, and block unbreakable items and custom attribute modifiers. Rules apply on load, on save, on import, and on regear, and per-material overrides let Protection V through on chestplates while everything else stays at vanilla limits. Shulkers and bundles are checked recursively.
Staff tools
/inspectkit <player> and /inspectec <player> open any player's kits. /purgeitem deletes every copy of an item from every stored kit, across all 99 slots, when something slips through.
Storage
SQLite out of the box. MySQL, MariaDB, PostgreSQL, or Redis for networks that share kits between servers. Switch later with /perplayerkit migrate <from> <to>. Export and import kit rooms, public kits, or player data as portable .ppk files.
Everything else
- Menu accent color and filler glass are configurable, and titles accept MiniMessage.
- Every message lives in a language file. Fourteen languages ship bundled: English, Chinese, Spanish, Portuguese, French, Ukrainian, Danish, Italian, Polish, Romanian, Dutch, German, Swedish, and Finnish.
- Per-world and per-region rules for every feature, with optional WorldGuard support.
- PlaceholderAPI placeholders in messages.
- Sounds, join messages, and scheduled broadcasts.
- A small Java API for listing public kits and applying one to a player.
Get started
- Install it. Drop the jar in
plugins/, restart, pick a database if you are not happy with SQLite. - Stock the kit room. Or run
/perplayerkit autosetupand skip straight to playing. - Give out permissions.
perplayerkit.usefor players,perplayerkit.stafffor moderators,perplayerkit.adminfor you.
About five minutes. Requires Paper or Spigot 1.19+ and Java 17+.
Documentation
Everything is at perplayerkit.com.
| Player commands | Every command a player can run |
| Admin commands | Kit room, public kits, purge, export, migrate |
| Permissions | Every node, plus LuckPerms recipes |
| config.yml reference | Every setting and what it does |
| Storage and databases | SQLite, MySQL, PostgreSQL, Redis |
| Upgrading | What to check before updating |
| Troubleshooting | Fixes for the problems people hit most |
| FAQ | Short answers to common questions |
| Java API | For plugin developers |
Support
Ask in the Discord. Report bugs on the issue tracker.
Dev builds of every commit are on Jenkins. They are compiled, not tested. Back up your kit data before running one on a live server.
Open source
PerPlayerKit is licensed under the AGPL-3.0. The code is on GitHub.
All Versions
+ Add VersionUpgrade guide: [https://perplayerkit.com/upgrading](https://perplayerkit.com/upgrading)
## Breaking
- Config v3. Existing v1 and v2 configs are backed up and migrated automatically. Everything below is converted for you unless noted.
- Player-facing messages moved from
config.ymltolang/<code>.yml. Custom messages are carried over. - Message placeholders
%player%and%kitname%renamed to{player}and{kitname}. Existing messages are rewritten. max-kitsrenamed tokits.max-slots.disabled-command-worldsand rekit-on-kill world lists replaced bylocationsrules.- Kit room material and import filters replaced by
item-filter. - World names and storage type values are now case-insensitive. Review world entries that previously relied on exact case.
perplayerkit.adminnow includes kit room editing and staff inspection.- Remembered kit selections are stored in the database. Load a kit once after upgrading to save your selection.
## Added
- PostgreSQL storage backend.
- 14 bundled languages.
- WorldGuard support (optional).
- Configurable kit limit, 1 to 99, with a paginated
/kitmenu and/k10../k99,/ec10../ec99. - Up to 99 kit room pages with grouped page navigation.
locationsrules: allow or deny any feature per world or WorldGuard region.- Per-world and per-region public kits for rekit-on-kill and rekit-on-respawn.
rekit-on-respawndelay in ticks.item-filterrules: unbreakable items, custom attributes, item flags, enchantment level caps, incompatible enchantments, potion level and duration caps, per-material overrides. Applies inside shulkers, containers, bundles, and enchanted books.- Remembered kit selections persist across reconnects, restarts, and server switches. Optional
restore-enderchest. - Bundled starter kit room pages and public kits.
/perplayerkit autosetupto fill an empty kit room and public kits.add-kitsandreset confirmvariants./perplayerkit location [feature]to check which world and region rules apply./sharekit <slot> <player>and/shareec <slot> <player>with/shareacceptand/sharedecline./transferkits <player>to copy all kits and enderchests to another player./deleteec <slot>./purgeitemto remove an item type from all stored kits./kitdata exportand/kitdata importfor.ppkfiles.{kitname}placeholder in kit load broadcasts.- Permissions
perplayerkit.staff,perplayerkit.editkitroom,perplayerkit.kitnotify,perplayerkit.deleteenderchest. - Documentation site at [https://perplayerkit.com](https://perplayerkit.com)
## Changed
- Update checks run asynchronously, cache for one hour, and retry after one minute on failure.
- SQLite backups use
VACUUM INTOfor a consistent snapshot instead of copying the live file. - Storage failures are reported so queued saves can retry.
- Players with unloaded or failed kit data get a message instead of an empty kit.
- Item filtering now applies to accepted shares and transfers.
- Clearing a personal kit editor and closing it deletes the kit.
- Public kits with an unknown icon material are skipped instead of preventing plugin enable.
- Failed WorldGuard lookups block the action instead of falling back to a world-wide kit.
- Chat is sent through Paper's Adventure API when available.
- Redis errors are logged as errors with stack traces.
- Dependency updates: Adventure 4.26, Jedis 6.2, HikariCP 6.3.3, PostgreSQL driver 42.7.13, SQLite 3.53, bStats 3.2, okhttp2 replaced with okhttp3.
## Fixed
- Restricted items could bypass the regear filter inside a shulker box.
- Ghost offhand item after kit load or regear.
/inspectkitand/inspecteclag and failures for offline players./inspectecopened the inspector's enderchest instead of the target's.- Kit editor changes lost during menu redraws.
- Item name formatting in menus.
/deletekitand/swapkitaccepted out-of-range slots.- KitsX import continued after reporting missing files.
- HikariCP
idleTimeoutwarning on startup with SQLite. - Kits loaded on the main thread when the plugin was re-enabled.
- Duplicate save on player quit.
- Pending respawn restoration not cancelled on disconnect or a second respawn.
- MiniMessage Formatting Support** - Messages now support modern MiniMessage format with RGB colors, named colors, and text formatting (bold, italic, underline, etc.). Old
&color codes are no longer used. - Configurable Regear Behavior** -
/rgand/regearcommands are now more configurable
## Config Changes
- New Messages Section** - Added
messagesconfig section with granular control over kit action broadcasts, plus adisable-kit-messagestoggle to suppress all kit messages at once - MiniMessage Format** - All color/text formatting in config now uses MiniMessage format with examples and documentation in CONFIG.md
## Fixes & Improvements
- Fixed item filter bug affecting shulkers, bundles, and NBT chests
- Fixed sound and GUI bugs
- Improved notification management
This update introduces a variety of new features, essential bug fixes, and quality-of-life improvements.
- New Features:**
- PlaceholderAPI Integration:** Added support for PlaceholderAPI in the messages section of the configuration, allowing for more dynamic and personalized messages.
- Enhanced Kit Management:** Implemented a display name option for the
%player%placeholder, offering greater customization. - Interactive UI/UX:** Incorporated new sounds for saving kitroom items and enhanced the kit GUI with more interactive sound feedback.
- Improved Regear Shulker:** Introduced new features for the regear shulker, including an option to prevent players from placing items into the regear inventory.
- Setup Guide:** A new setup guide has been added to assist with initial configuration and usage.
- Bug Fixes & Improvements:**
- Connection Stability:** Resolved a critical connection leak in
SQLStorage.javaand improved SQL resource management by implementing try-with-resources. - Visual Corrections:** Fixed a visual bug where inventories were not updating correctly on repair and addressed an issue with fill items in view-only ender chests.
- Command Enhancements:** The
/inspectkitcommand has been significantly improved, now allowing administrators to change player kits. The/enderchest1-9command also received a fix. - Performance & Reliability:** Added a CI pipeline to improve development consistency, and implemented measures to prevent public kit load spam. Configuration options for
maximumPoolSizehave been added for both MySQL and SQLite to enhance database connection management. - Configuration & Reverts:** Clarified button functionality and updated the default regear item whitelist. Reverted changes related to Hikari for SQLite and
sqlite maximumPoolSizesetting to ensure stability. - Minor Adjustments:** Included a
DisabledCommandcheck toRegearCommand.javaand made various minor code and configuration updates to refine functionality.