What is NexaKits?#
A kit platform for servers that need persistent player loadout layouts, not only one static kit inventory.
NexaKits is a PvP kit core for Paper-style servers. It combines configurable kits, personal player layouts, Ender Chest profiles, premade loadouts, Kit Room browsing, MiniMessage messages, SQL/YAML storage and a Bukkit API.
Product purpose, audience, feature surface and generated file map.
api-examples.md.A kit platform for servers that need persistent player loadout layouts, not only one static kit inventory.
Crystal, Practice, FFA, Lifesteal, BoxPvP and SMP owners who need configurable PvP gear workflows.
config.yml, messages.yml, categories.yml, kits/, ender-chests/, premades/ and menus/.
config.ymlInstallation gets the plugin to boot. First setup prepares the live PvP workflow.
/plugins.Use the normal jar or the tested obfuscated jar from your release process.plugins/NexaKits/ contains config, messages, categories, kits, premades and menus.license-key in config.yml.The plugin validates LicenseGate before command and listener registration./nexakits reload for runtime-safe file changes after the plugin is already enabled.Recommended order for turning the generated defaults into a production PvP setup.
kits.default-cooldown-seconds and permission mode.categories.yml./kit save <name> for each staff-defined kit./eceditor 1 to prepare common Crystal EC layouts./premadekit save <id>./kitroom and verify locked, available and cooldown states.nexakits.kit.<kit> and profile nodes.Primary player, staff and admin commands.
plugin.yml: /k, /kits, /kit1 through /kit7, /itemeditor, /ei, /enderadmin, /premadekits, /pkits, /kroom and /nk. Kit shortcuts stay as /k1 through /k7./kitPlayerOpen/list kits or claim by name.
nexakits.kit.<kit>
/kit crystal
Claim a PvP kit with validation.
/kit preview <name>PlayerOpen a read-only kit preview.
Kit access permission
/kit preview crystal
Inspect gear without claiming it.
/kiteditor <kit>PlayerEdit personal inventory, armor and offhand layout.
nexakits.editor
/kiteditor crystal
Save a layout override for one kit.
/kiteditor legacy <kit>PlayerOpen the simpler legacy editor layout.
nexakits.editor
/kiteditor legacy crystal
Use a classic layout workflow.
/eceditor [profile]PlayerEdit personal Ender Chest profile.
nexakits.ec.edit
/eceditor 1
Prepare kit-linked or global EC contents.
/premadekitPlayer/StaffList, load, clone, edit, save and publish premades.
nexakits.premade.view
/premadekit clone crystal-aggressive crystal
Reuse staff-approved layouts.
/kitroomPlayerOpen dynamic kit browser.
nexakits.kitroom.open
/kitroom favorites
Browse, preview, load and favorite kits.
/nexakitsAdminReload, hooks, storage, backup, restore and migration.
nexakits.admin or specific admin node
/nexakits hooks
Operate the plugin safely.
Permission nodes from the current plugin surface.
/lp group default permission set nexakits.kitroom.open true/lp group vip permission set nexakits.ec.slots.2 trueGenerated YAML files and key options. Snippets are excerpts, not full files.
Main license, language, storage, kit, editor, EC, premade, Kit Room, auto-kit and hook settings.
license-key: "LICENSE"
color-format: "MINIMESSAGE"
storage:
type: "sqlite" # yaml, sqlite, mysql
async-save: true
save-debounce-ticks: 20
sqlite:
file: "storage/nexakits.db"
wal: true
kits:
default-cooldown-seconds: 0
permission-mode: "EXPLICIT"
allow-player-layouts: true
editor:
enabled: true
save-confirmation: true
unsaved-close-warning: true
prevent-number-key: true
disabled-commands:
- "/shop"
- "/trade"
ender-chest:
max-profiles: 3
permission-prefix: "nexakits.ec.slots."
kit-room:
page-size: 28
search-enabled: true
show-locked-kits: true
auto-kit:
enabled: true
on-join: false
on-respawn: false
on-world-change: false
on-kill: false
ignore-combat-on-kill: trueReloadMost message/menu/category changes can use /nexakits reload. License and storage changes should use a restart.
SafetyBukkit inventory access stays on the server thread; storage writes are separated through services.
Categories control grouping, display priority and category icons.
categories:
crystal:
display-name: "<gradient:#a855f7:#ec4899>Crystal</gradient>"
priority: 10
icon:
material: "END_CRYSTAL"
sword:
display-name: "<aqua>Sword</aqua>"
priority: 20
icon:
material: "NETHERITE_SWORD"Kit files store definition metadata and Base64 item snapshots for inventory, armor and offhand.
crystal:
display-name: "<gradient:#a855f7:#ec4899>Crystal Kit</gradient>"
category: "crystal"
permission: "nexakits.kit.crystal"
cooldown: 0
clear-inventory: true
clear-armor: true
auto-give: false
allow-editor: true
save-player-layout: true
load-ender-chest: false
restrictions:
allowed-worlds: []
blocked-worlds: []
allowed-regions: []
blocked-regions: []
inventory-base64: ""
armor-base64: ""
offhand-base64: ""Premade kits are public/private or approved/community loadouts that can be loaded or cloned.
crystal-aggressive:
display-name: "<red>Aggressive Crystal</red>"
category: "crystal"
permission: "nexakits.premade.crystal-aggressive"
public: true
approved: true
icon:
material: "END_CRYSTAL"
glow: true
inventory-base64: ""
armor-base64: ""
offhand-base64: ""MiniMessage-first typed messages with chat, actionbar, title, bossbar and sound support.
<kit>, <player>, <profile>, <cooldown> and <error> intact.Most message keys are objects with enabled, type and either text, title fields or sound fields. This keeps player-facing output configurable.
<green>Loaded kit <white><kit></white>.
<red>You do not have permission.
type: "actionbar"
sound: "UI_BUTTON_CLICK"prefix: "<gradient:#22d3ee:#a855f7>NexaKits</gradient> <dark_gray>| "
kit-loaded:
enabled: true
type: "chat"
text: "<green>Loaded kit <white><kit></white>."
kit-cooldown:
enabled: true
type: "actionbar"
text: "<red>Kit cooldown: <white><cooldown>s</white>"
menu-click:
enabled: true
type: "sound"
sound: "UI_BUTTON_CLICK"
volume: 0.7
pitch: 1.0How kit definitions, player layouts and Ender Chest layouts interact.
YAML, SQLite and MySQL provider posture plus backup and migration workflows.
yaml: readable local files under data/.sqlite: default local SQL database under storage/nexakits.db.mysql: external database configuration for larger deployments.data/player_layouts or SQL tabledata/ender_chests or SQL tablepremades/*.yml and provider storagebackups/backup-yyyyMMdd-HHmmss/nexakits storage
/nexakits backup
/nexakits restore backup-20260513-180000
/nexakits migrate yaml sqlite
/nexakits migrate sqlite mysql
Optional PlaceholderAPI expansion values for displays, menus and scoreboards.
| Placeholder | Example output | Description |
|---|---|---|
%nexakits_kits_total% | 12 | Total loaded kits. |
%nexakits_kits_available% | 8 | Kits available to the player. |
%nexakits_selected_kit% | crystal | Selected or last known kit id when tracked. |
%nexakits_last_kit% | crystal | Last claimed kit id. |
%nexakits_cooldown_crystal% | 0 | Remaining cooldown seconds for a kit. |
%nexakits_layout_status_crystal% | saved | Player layout state for a kit. |
Soft hooks and the behavior they influence.
/nexakits hooks to inspect detected hooks and versions.Registers the nexakits expansion for kit, cooldown and layout display values.
Used for region allow/block checks when kit or auto-kit region restrictions are configured.
Economy hook point for future cost/unlock workflows. Missing Vault falls back cleanly.
Reads EC profile limits from meta keys such as nexakits-ec-profiles or ec-profiles when available.
Bridge point for exposing NexaKits events to Skript style automation.
Skin/head integration hook point for GUI or preview surfaces.
Combat-state checks can block auto-kit or editor behavior when configured.
Public provider, service methods and Bukkit events for plugin developers.
softdepend: [NexaKits] or depend: [NexaKits] in your plugin depending on whether your plugin can run without it.NexaKitsAPI api = NexaKitsProvider.get();
api.kit("crystal").ifPresent(kit -> {
player.sendMessage("Found " + kit.id());
});
boolean loaded = api.claimKit(player, "crystal");KitClaimEventKitPreviewEventKitCooldownCheckEventKitEditorOpenEvent, menu, save and reset eventsEnderChestEditorOpenEvent, save and reset eventsKitRoomOpenEvent, render and select eventsPremadeKitLoadEvent, create, clone and publish eventsPlayerAutoKitApplyEventNexaKitsReloadEventSee docs/nexakits/api-examples.md for extended examples.
Prepare the Paper/Spigot runtime, storage, license and generated configuration before exposing kit commands to players.
plugins/NexaKits/ directory before editing YAML.license-key and confirm LicenseGate validation before gameplay services register.storage:
type: "sqlite"
async-save: true
kits:
permission-mode: "EXPLICIT"
preview-enabled: true
editor:
enabled: true
ender-chest:
enabled: true
kit-room:
enabled: true
regear:
enabled: trueUse /nexakits reload or /kit reload for runtime YAML changes. Treat storage and license changes as maintenance-window changes.
Define logical kit slots, permissions, cooldowns, inventory clearing, world rules and claim behavior.
kits:
default-cooldown-seconds: 0
permission-mode: "EXPLICIT"
clear-inventory-default: true
clear-armor-default: true
load-ender-chest-default: false
default-kits: kit-1 ... kit-7Each entry has an id, display name and category. Gate access with nexakits.kit.<kit> or nexakits.kit.*.
/kit list or /kitroom to discover available kits./kit preview <kit> before claiming./kit <kit>, /k1–/k7 or readable aliases.Cancel a claim through the event/API path, attempt a claim in a blocked world, and claim with a missing permission. The player's previous state must not be partially replaced when validation fails.
Let players customize inventory, armor and offhand per kit while keeping shared kit definitions protected.
/kit edit <kit> or /kiteditor <kit>./kiteditor legacy <kit> only when the legacy flow is intentionally required.editor.save-confirmation and unsaved-close-warning protect unfinished changes.nexakits.editor.share and nexakits.editor.import as separate permissions.editor.enabled: true
editor.require-kit-permission: true
editor.save-confirmation: true
editor.auto-save-on-close: false
editor.prevent-drop: true
editor.share.visibility: "NEARBY"
editor.share.expire-seconds: 600Configure the item editor for names, stacks, enchantments, flags, unbreakable state, trims and nested shulker contents.
/edit-item, /itemeditor or /ei.menus/shulker-editor.yml.item-editor.enabled controls the feature; nexakits.itemeditor controls player access.nexakits.itemeditor.admin is reserved for staff-level editing.Give players separate high-capacity PvP storage profiles that can be opened independently or loaded with a kit.
/eceditor for profile 1 or /eceditor <profile> for a specific profile./eceditor import <uuid> for a shared snapshot when permitted.kits.load-ender-chest-default enabled only after testing replacement behavior.ender-chest.enabled: true
ender-chest.default-profiles: 7
ender-chest.max-profiles: 7
ender-chest.permission-prefix: "nexakits.ec.slots."Use nexakits.ec.slots.<number>, nexakits.ec.edit, nexakits.ec.share and nexakits.ec.import. Staff uses /ecadmin view|edit|reset <player> [profile].
Build a searchable, categorized kit browser with favorites, recent kits, sorting, pagination and preview/load/edit actions.
kitroom.yml; save staff changes deliberately./kitroom or /kroom./kitroom category <category>./kitroom search <query> across kit names, descriptors and materials./kitroom sort <mode> to refine results.kitroom.yml./kitroom edit <category>./kitroom save <category>.kitroom.yml during peak hours; take a backup before bulk category edits.Manage staff-authored YAML loadouts as shareable global content while allowing players to load or clone approved presets.
/premadekit create <id> or /premadekit save <id>./premadekit edit <id> and verify item metadata./premadekit publish <id> after review./premadekit delete <id> after checking references.premades/ backup when sharing between servers./premadekit, /premadekits or /pkits./premadekit list, recent and favorites to find a loadout./premadekit load <id> or clone with /premadekit clone <premade> <kit>.Use premade-kits.require-approval-for-community and the permissions nexakits.premade.view, clone, admin and publish to separate access.
Apply a selected kit on join, respawn, world change or kill while respecting combat, region and world restrictions.
auto-kit.enabled: true
auto-kit.kit: ""
auto-kit.on-join: false
auto-kit.on-respawn: false
auto-kit.on-world-change: false
auto-kit.on-kill: false
auto-kit.delay-ticks: 5
auto-kit.block-in-combat: true
auto-kit.ignore-combat-on-kill: trueauto-give: true.Give players a controlled shulker that restores missing items from their last kit after combat.
nexakits.regear and run /regear.regear.enabled: true
regear.owner-only: true
regear.drop-on-break: true
regear.combat-clear-seconds: 3
regear.fallback-to-empty-slots: true
regear.excluded-materials:
- "TOTEM_OF_UNDYING"Test with CombatLogX/PvPManager states, full inventories, occupied original slots and a missing last-kit record.
Persist player layouts, cooldowns, favorites, Ender Chest profiles and audit logs in SQL while keeping premades and staff data shareable as YAML.
premades/ directory before updates, resets or storage migrations.storage/nexakits.db with WAL enabled by default./nexakits storage and record provider health/counts./nexakits backup before changing storage./nexakits migrate sqlite mysql only on a tested copy first./nexakits restore <backup> during maintenance.Connect optional PvP, permissions, region, economy, scripting and cosmetics hooks without making them hard dependencies.
/nexakits hooks after every dependency change and test the related behavior with a fresh player.WorldGuard controls region restrictions. CombatLogX and PvPManager protect auto-kit/regear timing. NexaCombat can participate in the local PvP ecosystem.
LuckPerms metadata can scale Ender Chest profile access. Vault is available for economy-aware integrations. Skript exposes a bridge surface for server automation.
SkinsRestorer and PlaceholderAPI provide optional display/integration surfaces. Missing plugins should skip registration safely and appear in the hook report.
/nexakits hooks.Expose kit claims, editors, Kit Room, premades and Ender Chest changes to addons and server automation.
NexaKitsAPI through NexaKitsProvider.get().integrations.placeholderapi.%nexakits_kits_total%
%nexakits_kits_available%
%nexakits_selected_kit%
%nexakits_last_kit%
%nexakits_cooldown_<kit>%
%nexakits_layout_status_<kit>%Separate player kit use from staff publishing, layout administration, backup, restore and migration operations.
/nexakits reload
/nexakits hooks
/nexakits storage
/nexakits backup
/nexakits restore <backup>
/kit give <player> <kit>
/kiteditor staff <player> <kit>
/ecadmin view|edit|reset <player> [profile]nexakits.kit.<kit>, nexakits.editor, nexakits.ec.edit, nexakits.kitroom.open, nexakits.regear.nexakits.editor.staff, nexakits.ec.admin, nexakits.itemeditor.admin.nexakits.premade.admin, nexakits.premade.publish, nexakits.kit.delete.nexakits.reload, backup, restore, migrate.Move from one test kit to a complete PvP loadout platform with player layouts, premades, profiles, auto-kit and regear.
Separate global kit content, personal layouts, Ender Chest profiles and premade publishing.
/kit save <name> or the configured premade workflow, then preview it from /kitroom./kitroom, search/favorite a kit and use preview before claiming./kit <name> or the configured shortcut./kiteditor <kit> for the personal inventory/armor/offhand layout./eceditor [profile] for a kit-linked Ender Chest profile.editor:
enabled: true
save-confirmation: true
unsaved-close-warning: true
prevent-number-key: true
ender-chest:
max-profiles: 3
kit-room:
search-enabled: true
show-locked-kits: trueGate kits with nexakits.kit.<kit>, give each mode a category, and keep cooldowns/world restrictions consistent with the practice plugin. Use approved premades for staff loadouts so player edits never mutate the shared source.
Ready scenarios for typical PvP server types.
Use crystal category kits, EC profile 1, premade aggressive/defensive loadouts and no cooldowns for arena servers.
Use Kit Room categories and personal layouts so players can repeatedly claim consistent loadouts between fights.
Use permissions, world restrictions, region checks and cooldowns to keep kits controlled outside PvP arenas.
Gate kit ids behind nexakits.kit.<kit> and EC profiles behind nexakits.ec.slots.<n>.
Create approved premades and let players clone them into personal layouts instead of editing global kits.
Use SQLite for one server, MySQL for larger deployments, and backup before migrating from YAML.
Start with console logs, hook status and generated YAML files.
Check license-key. The default LICENSE placeholder will not validate. Also inspect the first YAML parse error in console.
Check kit id, permission, cooldown, world restrictions, region restrictions and whether another plugin cancelled KitClaimEvent.
Verify kits.allow-player-layouts, kit-level save-player-layout, and that the player saved the layout through the editor.
Review armor slot type, offhand whitelist, filler item slots and blocked editor actions in config.yml.
Give nexakits.ec.edit and the matching nexakits.ec.slots.<profile> node. LuckPerms meta can increase profile count when configured.
Install PlaceholderAPI, restart, check /nexakits hooks, then reload the scoreboard/tab plugin using the placeholders.
Create a backup first, verify database credentials and test the migration on a copy. Use /nexakits storage to inspect provider health.
Short answers for common buyer, owner and staff questions.
No. PlaceholderAPI is optional and only needed for external displays.
No Folia support is claimed in this docs page. Treat it as a Paper-style plugin unless region-thread safety is verified.
Normal players edit personal layouts. Staff can save and edit global kit definitions with admin permissions.
Yes. Use premade-kits.enabled and auto-kit.enabled in config.yml.
Yes. The generated defaults are MiniMessage-first with typed message entries.
YAML stores them under data/player_layouts; SQL stores them in provider tables.
Build and obfuscation commands for local release preparation.
& 'C:\Program Files\Apache\maven\bin\mvn.cmd' -DskipTests packageThe normal release jar is written to target/NexaKits-1.0.0.jar.
$env:JAVA_HOME='C:\Program Files\Java\jdk-21'
$env:Path="$env:JAVA_HOME\bin;$env:Path"
& 'C:\Program Files\Apache\maven\bin\mvn.cmd' -Pobfuscate -DskipTests packageThe obfuscated jar is written to target/NexaKits-1.0.0-obfuscated.jar.
See docs/nexakits/build.md for the shorter build note.
Send enough information to reproduce the issue.
/nexakits hooks and /nexakits storage.Plugin: NexaKits
Plugin version:
Server software/version:
Java version:
Storage type:
Installed hooks:
License status:
Error log:
Steps to reproduce:
Expected behavior:
Screenshots/video: