Frostyh

KitLayouts

Kits players arrange themselves: per-player layout editor, cooldowns, permissions, respawn kits.

Price
$8.99
Runs on
Paper 1.21.11+, Java 21
Version
v1.2.0

Buy on BuiltByBitTry it liveRead the docs

KitLayouts cover

In game

See it on a real server

5 screenshots and a short clip, all taken on a real server. Click a screenshot to see it full size.

Clip
KitLayouts: kit selector
KitLayouts: layout editor drag
KitLayouts: layout arranged
KitLayouts: kit taken own layout
KitLayouts: scene kits

01 / 06

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
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

  1. 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
  2. 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
  3. 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: chest brings 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

  1. Download KitLayouts.jar from BuiltByBit. There's no licence key to enter.
  2. Stop the server and put the jar in the plugins folder.
  3. Start the server. The plugin writes plugins/KitLayouts/config.yml with the defaults listed under Configuration.
  4. Change config.yml to fit your server.
  5. Run /kitlayouts reload (reload config and kits) to apply your changes, or restart the server.

Setup guide

  1. Drop KitLayouts.jar into /plugins and restart.
  2. Put a kit in your inventory (armour on, offhand set) and run /kitlayouts create <name>.
  3. Optional: /kitlayouts icon, display, cooldown, permission.
  4. 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.

CommandAliasesUsageWhat it doesPermission
/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|reloadManage 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.

NodeDefaultWhat it allowsIncludes
kitlayouts.adminoperatorsCreate and manage kits, give kits, clear cooldowns, reload.none
kitlayouts.bypassoperatorsIgnore 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.

PlaceholderShows
%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

KeyDefaultThe comment above it
applysection, 3 keysnone
auto-kitsection, 2 keysnone
selectorsection, 9 keysnone
editorsection, 4 keysnone
previewsection, 4 keysThe 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.
themesection, 11 keysEvery 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...
messagessection, 79 keysnone
review-remindertrueOne 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: true

Config 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 says

FAQ

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.

Try it live

Play with it first

KitLayouts runs on my public demo server, set up so you can use it yourself. Join, try it, then decide.

try.zeropvp.xyz:25570

Java Edition 1.21.11. In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go kitlayouts to land at its booth, or right-click the compass and pick it. The world resets every night.

Also mine

Run a Discord too?

ZeroBot is my Discord bot: moderation, tickets, welcome messages, logs, backups and raid protection, all set up from a web dashboard. It's free to add; Premium plans unlock more.

Its Minecraft Link connects your server to your Discord through the free ZeroBot Link plugin (coming to Modrinth soon): a live status card, a chat bridge, join and death lines, and account linking. Outgoing HTTPS only, no port to open.

See ZeroBot

Custom work

Need something that isn't here? I make custom Paper plugins, change these ones to fit your server, and do server setup and config work. Small plugins start at 50 EUR; bigger jobs get a quote.

How commissions work