2 releases, newest first.
Every player-facing surface moves onto the Sn brand palette. The 2.0.0 rebuild adopted SnLib's structure but kept its own colors, so SnKits looked like a different product next to the rest of the pack.
₢f2,
replacing the ad-hoc 7FFFF and a stray 7FF55 on page 2 of the kits menu&6/&9/&d/&4/&b one-offs for the accent
color; destructive actions unify on &c; the back button reads the same in all
three menus that have one%snkits_onetime_used_<id>%Existing installs keep their current colors: SnLib never overwrites a value already
on disk. To adopt the new look, delete lang/messages_en.yml and guis/ and let
them re-seed, or restyle the keys by hand.
Kits plugin for Paper 1.20.x and 1.21.x, built to be run from the menus and edited in-game. Every kit lives in its own file, every menu is a YAML file you can add to, and nothing about a kit needs a text editor: /kit edit <kit> opens the whole thing.
One kit is one file, kits/<id>.yml. Items are stored with Bukkit's own serialization, so enchantments, custom names, lore, custom model data, leather colors, skull textures and shulker contents all survive a round trip untouched.
Each kit carries a cooldown and six flags, all of them toggles in /kit edit: enabled, requires-permission, one-time, auto-armor, auto-offhand and drop-items-when-full.
A claim never overwrites what a player is wearing or holding. If the helmet slot is taken, the kit's helmet goes to the inventory instead. With drop-items-when-full: false a claim into a full inventory is refused rather than dropped on the ground, and refusing costs the player nothing: no cooldown, no spent one-time.
/kit edit <kit> then the items button opens a 6-row grid. Slots 0 to 52 are the kit contents at the exact position the preview will show them; drag anything in from your own inventory. Closing the grid saves, including with Escape. Any item can be the kit's off-hand item: shift-right-click it. Shields and totems still auto-equip by material.
Slot 53 adds a command item: an item that is not given but runs commands when the kit is claimed. Right-click it to set its display item, add commands, and choose whether each runs as the console or as the player. A command item with no display is invisible in the preview and still runs.
guis/kits-main.yml and guis/kits-more.yml ship as examples, and any other file you drop in guis/ becomes a menu you can open by name. Left-click claims, right-click previews. Each kit declares four icons, one per state (available, on cooldown, one-time used, disabled), and the plugin picks the one that matches the viewer.
Kit items resolve placeholders: put %player_name% or any PlaceholderAPI token, and & or &#RRGGBB colors, in an item's name or lore and it renders per player, both in the preview and on the item that lands in the inventory.
Lets a player claim the same kit more than once before its cooldown is over, one extra claim per extra copy they own. It is built for selling kits: the amount lives in a permission (snkits.uses.<kit>.<n>), so your shop only ever runs a LuckPerms command. The highest amount wins, so you never have to unset the previous node, and each claim carries its own cooldown so copies recharge one by one rather than all at once. Off by default.
Hands configured kits to players when they join, in first-join or every-join mode, through the same claim path as everything else. A denied give is always silent, so nobody is told about a cooldown every time they log in. Off by default.
Players claim from the menus. /kit opens one and that is the intended path; /kit claim <kit> exists for command blocks, shops and anyone who prefers typing.
Admin side: /kit create builds a kit from your current inventory, /kit edit, /kit delete, /kit enable and /kit disable, /kit give <player> <kit> bypasses every claim rule, /kit reset clears stored usage for one player, one kit, or everyone, and /kit gui <gui> [player] opens a specific menu. /kit import converts the kits of PlayerKits2. Every argument tab-completes for real, including kit ids filtered to what you may actually claim.
Optional. Without it everything works; with it, %snkits_cooldown_<id>%, %snkits_available_<id>%, %snkits_onetime_used_<id>%, %snkits_uses_left_<id>% and %snkits_uses_max_<id>% resolve anywhere. Inside the plugin's own menus and messages, {cooldown}, {uses_left} and {uses_max} do the same job without PlaceholderAPI installed.