Overview
Kits that arrive exactly the way each player wants them, every single time
Fill your inventory, run /kitlayouts create diamond, and the kit exists. Players pick it from a menu or with /kit diamond. If they want the sword in slot 2 and the pearls in slot 8, they open the editor, drag things where their hands expect them and press Save. From then on that is how the kit arrives for them, every time. Your kit, their layout.
In short
- Create a kit from your inventory with one command
- Every player saves their own slot layout per kit
- Cooldowns and permissions per kit
- Players pick kits from a menu or with /kit
- SQLite built in, no database to set up
- Latest version
- 1.2.0
- Runs on
- Paper or Purpur 1.21.11 (or newer 1.21.x), Java 21
- BuiltByBit
- KitLayouts on BuiltByBit
What changed in 1.2.0
- Kit cooldowns are now saved in layouts.db. A player can no longer reset a cooldown by logging out and back in, and a daily kit stays used across server restarts.
- Cooldowns read as time now ("23h 59m 48s") instead of a long number of seconds. Messages accept {time} next to {seconds}.
- New /kit preview <kit>: a read-only chest with the kit's items, armour and offhand, in the player's own layout when they saved one. Shift-click a kit in the chest selector to preview it.
- Kits a player cannot take yet get a "Look inside" button on the kit screen, so players can see what a rank would give them. Set preview.locked-kits to false to turn this off.
- New /kitlayouts clearcooldown <player> [kit] for admins (permission kitlayouts.admin). Works for offline players too.
- PlaceholderAPI support (optional): %kitlayouts_cooldown_<kit>%, %kitlayouts_cooldown_time_<kit>%, %kitlayouts_ready_<kit>%, %kitlayouts_access_<kit>%, %kitlayouts_layout_<kit>%, %kitlayouts_kits%, %kitlayouts_kits_total%.
- An existing config.yml keeps its old cooldown texts ({seconds}s) and selector lore. To get the new wording and the "Shift-click to preview" line, change them by hand or delete config.yml and let it regenerate. Everything new works without that.
Features
01What makes it different
- Layouts are saved per player and per kit: the same kit arrives in a different slot order for every player who arranged it
- Cooldowns are stored in the database, so a relog or a restart never resets a daily kit
- Locked kits can be looked at read-only, so players see what a rank gives before they buy it
02What you get
- New in v1.3.0: Cooldowns that stick: saved in the database, so logging out or a restart never resets a daily kit, shown as "23h 59m 48s"
- New in v1.3.0: Kit preview: /kit preview or shift-click shows a kit read-only, and locked kits get a "Look inside" button so players see what a rank gives
- New in v1.3.0: PlaceholderAPI (optional): cooldown, ready and access placeholders per kit
- Create a kit from whatever you are holding and wearing: items, armour, offhand, enchantments, names, potions, custom model data, all kept exactly
- Per-player layout editor in a chest menu that mirrors the real inventory (three rows plus hotbar); items cannot leave or enter, only move
- Layouts saved per player per kit; a kit that the admin re-saves with different items resets old layouts automatically
- Kit selector menu with icons, ready / cooldown / locked state on each kit; left-click equips, right-click edits
- Cooldown per kit, permission per kit, display name and icon per kit, all from commands
- Auto kit on join and on respawn for FFA and KitPvP servers
- Optional heal on kit, optional keep-inventory (do not clear before giving)
- Give a kit to somebody else as an admin
- SQLite for layouts, kits.yml for kits, nothing to install
- MiniMessage everywhere, every menu title, lore and message editable
03The kit screen
- /kit opens a real Minecraft dialog window listing every kit with its state: ready, locked, or the seconds left, and whether the player is on their own layout or the default one
- One button takes the kit, the other opens the layout editor for it
- Admins get a manage screen: the display name, the permission and the icon in fields, the cooldown on steppers, a button that replaces the kit with what you are carrying, and one that resets everybody's layout
- The layout editor stays a chest, because arranging 36 slots means dragging items, not clicking buttons
selector.style: chestbrings back the old icon menu if you prefer it
Installation
Requirements
- Server
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit won't work, because it uses Paper-only APIs.
- Minecraft
- 1.21.11 (or newer 1.21.x); plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Needs
- No other plugin
- Works with
PlaceholderAPI, when installed- Libraries
org.xerial:sqlite-jdbc:3.53.2.1, downloaded by the server on first start
The listing also says:
- No other plugins required. A permissions plugin (LuckPerms) if you want per-kit permissions.
- No DRM, no licence key and no licence server; the code is not obfuscated
Steps
- Download
KitLayouts.jarfrom BuiltByBit. There's no licence key to enter. - Stop the server and put the jar in the
pluginsfolder. - Start the server. The plugin writes
plugins/KitLayouts/config.ymlwith the defaults listed under Configuration. - Change
config.ymlto fit your server. - Run
/kitlayouts reload(reload config and kits) to apply your changes, or restart the server.
Setup guide
- Drop KitLayouts.jar into /plugins and restart.
- Put a kit in your inventory (armour on, offhand set) and run /kitlayouts create <name>.
- Optional: /kitlayouts icon, display, cooldown, permission.
- Players run /kit. Right-click a kit to arrange it.
FFA / KitPvP: set auto-kit.on-respawn to your main kit and apply.heal to true. Everybody respawns geared, in their own layout, without a menu in the way.
Duel servers: use it for the lobby or a practice world; players can also use it to learn a layout before ranked games. Cooldowns keep kit spam down.
SMP: a starter kit on join (auto-kit.on-join), a daily kit with a 86400 second cooldown, rank kits behind permissions (rank.vip and so on). Set clear-inventory to false so kits are added to what players already carry.
Commands
Straight from plugin.yml. Where the permission column says "not set", plugin.yml puts no permission on the command itself; the nodes the plugin checks are under Permissions.
| Command | Aliases | Usage | What it does | Permission |
|---|---|---|---|---|
/kit | /kits | /kit [name|edit <name>|preview <name>|reset <name>|list] | Pick a kit, preview it, or edit your layout of one. | not set |
/kitlayouts | /kl | /kitlayouts create|delete|list|give|icon|display|cooldown|permission|clearcooldown|reload | Manage kits. | kitlayouts.admin |
Every subcommand
Players:
/kit Open the kit selector.
/kit <name> Equip a kit.
/kit edit <name> Open the layout editor for a kit.
/kit reset <name> Go back to the default layout of a kit.
/kit list Kits you can use.
/kit preview <kit> Look inside a kit without taking it.
/kitlayouts clearcooldown <player> [kit] (admin) Reset a cooldown, offline players too.
Admins:
/kitlayouts create <name> Save your current inventory as a kit (also updates an existing one).
/kitlayouts delete <name> Delete a kit and every layout of it.
/kitlayouts list All kits with their cooldowns.
/kitlayouts give <player> <kit> Give a kit to a player, ignoring cooldown.
/kitlayouts icon <kit> [material] Set the selector icon (defaults to the item in your hand).
/kitlayouts display <kit> <name...> Set the display name (MiniMessage allowed).
/kitlayouts cooldown <kit> <seconds> Set the cooldown, 0 for none.
/kitlayouts permission <kit> <node|none> Require a permission for the kit.
/kitlayouts reload Reload config and kits.Permissions
From plugin.yml.
| Node | Default | What it allows | Includes |
|---|---|---|---|
kitlayouts.admin | operators | Create and manage kits, give kits, clear cooldowns, reload. | none |
kitlayouts.bypass | operators | Ignore kit cooldowns and kit permissions. | none |
The listing also describes these groups and patterns:
<your own node>: Whatever you set with /kitlayouts permission <kit> <node>
/kit itself needs no permission.
Placeholders
Registered with PlaceholderAPI as kitlayouts. You need PlaceholderAPI installed for these to work.
| Placeholder | Shows |
|---|---|
%kitlayouts_cooldown_<kit>% | seconds until the kit can be taken again, 0 when it can |
%kitlayouts_cooldown_time_<kit>% | the same as "1h 5m 3s", or the placeholder-ready text |
%kitlayouts_ready_<kit>% | true when the player may take the kit right now |
%kitlayouts_access_<kit>% | true when the player has the kit's permission |
%kitlayouts_layout_<kit>% | true when the player saved their own layout of the kit |
%kitlayouts_kits% | how many kits the player may use |
%kitlayouts_kits_total% | how many kits exist |
%kitlayouts_cooldown_time_% | no description |
%kitlayouts_cooldown_% | no description |
%kitlayouts_ready_% | no description |
%kitlayouts_access_% | no description |
Configuration
The default files exactly as they ship in the jar, comments included. The plugin writes them to plugins/KitLayouts/ the first time it starts.
config.yml
| Key | Default | The comment above it |
|---|---|---|
apply | section, 3 keys | none |
auto-kit | section, 2 keys | none |
selector | section, 9 keys | none |
editor | section, 4 keys | none |
preview | section, 4 keys | The kit preview: /kit preview <kit>, shift-click in the chest selector, or the Preview button that a locked kit gets on the kit screen. Shows the items, the armour and the offhand; nothing can be taken out. |
theme | section, 11 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#4ad07b>Open</#4ad07b>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and... |
messages | section, 79 keys | none |
review-reminder | true | One thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off. |
plugins/KitLayouts/config.yml162 lines
# KitLayouts - kits that players arrange themselves.
#
# 1. Put a kit in your own inventory, then /kitlayouts create <name>.
# 2. Players run /kit to pick one, or /kit <name>. Right-click a kit in the menu (or /kit edit <name>)
# to open the layout editor; drag items where you want them and press Save.
# 3. From then on that player gets the kit in their own layout, every time.
apply:
clear-inventory: true # empty the inventory before giving a kit
armor: true # also equip the kit's armour and offhand
heal: false # full health and food when a kit is applied (FFA servers like this)
auto-kit:
on-join: "" # kit name, or empty. Good for lobbies with a fixed loadout.
on-respawn: "" # kit name, or empty. FFA / KitPvP: everybody respawns with this kit.
selector:
# dialog = the kit screen Minecraft draws itself, chest = the old chest menu with icons.
# The layout editor is a chest either way: arranging 36 slots means dragging items.
style: dialog
title: "<dark_green>Kits</dark_green>"
name: "<white>{kit}</white>"
lore:
- "<gray>Left-click to equip</gray>"
- "<gray>Right-click to edit layout</gray>"
- "<gray>Shift-click to preview</gray>"
- ""
- "{status}"
ready: "<green>Ready</green>"
# {time} reads "1h 5m 3s"; {seconds} is the plain number.
on-cooldown: "<yellow>Ready in {time}</yellow>"
locked: "<red>Locked</red>"
hide-locked: false
right-click-edits: true
editor:
title: "<dark_green>Editing {kit}</dark_green>"
save: { name: "<green>Save layout</green>", lore: ["<gray>Keep this arrangement for {kit}.</gray>"] }
reset: { name: "<yellow>Default layout</yellow>", lore: ["<gray>Back to how the kit was made.</gray>"] }
cancel: { name: "<red>Cancel</red>", lore: ["<gray>Close without saving.</gray>"] }
# The kit preview: /kit preview <kit>, shift-click in the chest selector, or the Preview button that a
# locked kit gets on the kit screen. Shows the items, the armour and the offhand; nothing can be taken out.
preview:
# true lets players look inside kits they cannot take yet, so they see what a rank would give them.
locked-kits: true
title: "<dark_green>Preview: {kit}</dark_green>"
take: { name: "<green>Take this kit</green>", lore: ["<gray>Equip {kit} now.</gray>"] }
close: { name: "<red>Close</red>", lore: [] }
# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#4ad07b>Open</#4ad07b>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
accent: "#4ad07b" # your colour: headings and anything the player is meant to click
accent2: "#9be5b6" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
# client's own textures, so there is nothing to install and no resource pack: it needs a
# 1.21.9 or newer client, and older ones simply see the buttons as words.
item-icons: true
messages:
prefix: "<dark_green><bold>Kits</bold></dark_green> <muted>»</muted> "
applied: "<value>{kit}</value><text> equipped.</text>"
cooldown: "<text>You can use </text><value>{kit}</value><text> again in </text><value>{time}</value><text>.</text>"
no-kit-permission: "<bad>You do not have access to </bad><value>{kit}</value><bad>.</bad>"
no-permission: "<bad>You cannot do that.</bad>"
unknown-kit: "<bad>No kit called </bad><value>{kit}</value><bad>.</bad>"
unknown-player: "<bad>Unknown player: </bad><value>{name}</value>"
list: "<text>Kits: </text><value>{kits}</value>"
no-kits: "<text>No kits yet. Admins: fill your inventory and run /kitlayouts create <name>.</text>"
usage-edit: "<text>/kit edit <kit></text>"
usage-reset: "<text>/kit reset <kit></text>"
# /kit preview without a kit name.
usage-preview: "<text>/kit preview <kit></text>"
layout-saved: "<text>Layout for </text><value>{kit}</value><text> saved.</text>"
layout-reset: "<text>Your layout for </text><value>{kit}</value><text> is back to default.</text>"
layout-reset-preview: "<text>Default layout loaded. Press Save to keep it.</text>"
layout-none: "<text>You have no custom layout for </text><value>{kit}</value><text>.</text>"
editor-closed: "<text>Editor closed, nothing saved.</text>"
editor-cursor: "<text>Put the item you are holding down first.</text>"
admin-help: "<text>/kitlayouts create|delete|list|give|icon|display|cooldown|permission|clearcooldown|reload</text>"
usage-create: "<text>/kitlayouts create <name> (saves your current inventory)</text>"
usage-delete: "<text>/kitlayouts delete <kit></text>"
usage-give: "<text>/kitlayouts give <player> <kit></text>"
usage-icon: "<text>/kitlayouts icon <kit> [material] (defaults to the item in your hand)</text>"
usage-display: "<text>/kitlayouts display <kit> <name...></text>"
usage-cooldown: "<text>/kitlayouts cooldown <kit> <seconds></text>"
usage-permission: "<text>/kitlayouts permission <kit> <node|none></text>"
bad-name: "<bad>Kit names: letters, numbers, - and _, up to 24 characters.</bad>"
created: "<text>Kit </text><value>{kit}</value><text> created from your inventory.</text>"
updated: "<text>Kit </text><value>{kit}</value><text> updated. Player layouts for it were reset.</text>"
deleted: "<text>Kit </text><value>{kit}</value><text> deleted.</text>"
gave: "<text>Gave </text><value>{kit}</value><text> to </text><value>{player}</value><text>.</text>"
icon-set: "<text>Icon of </text><value>{kit}</value><text>: </text><value>{value}</value>"
display-set: "<text>Display name of </text><value>{kit}</value><text>: </text><value>{value}</value>"
cooldown-set: "<text>Cooldown of </text><value>{kit}</value><text>: </text><value>{value}s</value>"
permission-set: "<text>Permission of </text><value>{kit}</value><text>: </text><value>{value}</value>"
reloaded: "<value>Config and kits reloaded.</value>"
# /kitlayouts clearcooldown <player> [kit]. Cooldowns are kept in layouts.db, so they survive relogs and restarts.
usage-clearcooldown: "<text>/kitlayouts clearcooldown <player> [kit] (every kit when no kit is given)</text>"
cooldown-cleared: "<text>Cleared </text><value>{count}</value><text> running cooldown(s) of </text><value>{player}</value><text> for </text><value>{kit}</value><text>.</text>"
all-kits: "every kit"
# %kitlayouts_cooldown_time_<kit>% shows this when the kit is ready.
placeholder-ready: "Ready"
# The kit screens. Every line here is a screen title, a button label or a tooltip.
menu-title: "<value>Kits</value>"
menu-close: "<white><icon:close></white><text>Close</text>"
menu-back: "<white><icon:back></white><text>Back</text>"
menu-back-tip: "<text>Back to the screen before.</text>"
menu-everyone: "everyone"
menu-kit-line: "<value>{kit}</value><text> · {state} · {layout}</text>"
menu-layout-own: "<accent2>your layout</accent2>"
menu-layout-default: "<text>default layout</text>"
menu-take: "{icon}<value>Take {kit}</value>"
menu-take-tip: "<text>Equip {kit} now.</text>"
menu-edit: "{icon}<value>Arrange {kit}</value>"
menu-edit-tip: "<text>Open the layout editor and drag the items where you want them.</text>"
# Shown in place of Arrange on a kit the player cannot take yet (preview.locked-kits).
menu-preview: "{icon}<value>Look inside {kit}</value>"
menu-preview-tip: "<text>See every item of {kit} without taking it.</text>"
menu-admin: "<white><icon:staff></white><dark_green>Manage kits</dark_green>"
menu-admin-tip: "<text>Admins: names, icons, cooldowns and permissions.</text>"
menu-admin-title: "<value>Manage kits</value>"
menu-admin-empty: "<text>No kits yet. Fill your inventory and run /kitlayouts create <name>.</text>"
menu-admin-line: "<value>{kit}</value><text> ({name}) · {cooldown}s · {permission}</text>"
menu-admin-open: "<white><icon:staff></white><value>{kit}</value>"
menu-admin-open-tip: "<text>Settings of {kit}.</text>"
menu-kit-title: "<value>{kit}</value>"
menu-kit-head: "<text>{kit}, saved as </text><value>{name}</value><text>, icon {icon}</text>"
menu-kit-facts: "<text>Cooldown {cooldown}s · {permission}</text>"
menu-field-display: "<text>Name players see</text>"
menu-field-permission: "<text>Permission, empty for everyone</text>"
menu-field-icon: "<text>Icon material</text>"
menu-kit-save: "<white><icon:yes></white><good>Save these three</good>"
menu-kit-save-tip: "<text>Write the name, the permission and the icon.</text>"
menu-kit-cooldown: "<white><icon:kit></white>Cooldown"
menu-kit-cooldown-tip: "<text>Seconds before the kit can be taken again.</text>"
menu-kit-items: "<white><icon:kit></white><value>Take items from my inventory</value>"
menu-kit-items-tip: "<text>Replace the kit with what you are carrying. Player layouts are reset.</text>"
menu-kit-reset-layouts: "<white><icon:kit></white><bad>Reset everyone's layout</bad>"
menu-kit-reset-layouts-tip: "<text>Every player goes back to the default arrangement.</text>"
menu-layouts-reset: "<text>Layouts for </text><value>{kit}</value><text> reset.</text>"
menu-bad-icon: "<bad>No material called </bad><value>{icon}</value><bad>.</bad>"
step-up: "<value>{title} +15s</value> <muted>({value}s)</muted>"
step-down: "<value>{title} -15s</value> <muted>({value}s)</muted>"
# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: trueConfig guide
The short annotated version from the listing. If it and the files above disagree, the files are what actually ships.
apply:
clear-inventory: true empty the inventory before giving a kit
armor: true equip the kit's armour and offhand too
heal: false full health and food on every kit (FFA servers like this)
auto-kit:
on-join: "" kit name, or empty
on-respawn: "" kit name, or empty. FFA / KitPvP: everybody respawns with this.
selector: titles, lore lines, ready / cooldown / locked texts, hide-locked
editor: title and the three buttons (Save, Default layout, Cancel)
messages: everything the plugin saysFAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork like Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit won't work. The listing says Minecraft 1.21.11 (or newer 1.21.x). plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No, it runs without any other plugin (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (softdepend), used when it's there. On first start the server downloads org.xerial:sqlite-jdbc:3.53.2.1, so it needs internet access then. The listing adds: No other plugins required. A permissions plugin (LuckPerms) if you want per-kit permissions.
How do I apply config changes?
Edit plugins/KitLayouts/config.yml and run /kitlayouts reload (reload config and kits). Restarting works too.
Does it run on Folia, or for Bedrock players?
I haven't tested it on Folia, and plugin.yml doesn't declare folia-supported. I haven't tested Bedrock players through Geyser either.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 4 short steps.
Can players see what a rank kit contains before buying the rank?
Yes. Kits a player cannot take yet get a "Look inside" button that shows the items read-only.
Links
- BuiltByBit
- KitLayouts
- Support
- discord.gg/KG4ubAZEuw
- Everything
- The Complete Collection on BuiltByBit
- More plugins
- All my plugins
- Custom work
- Commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on BuiltByBit. When something breaks, include your server version and the error from the console.












