Skip to content
RitomasssCommunity
Product documentation

NexaKits Documentation

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.

21Java target
Paper 1.20+Runtime posture
YAML/SQLite/MySQLStorage modes
Soft hooksOptional integrations

Overview#

Product purpose, audience, feature surface and generated file map.

Use this page as the owner/admin reference. Developer API examples live in api-examples.md.

What is NexaKits?#

A kit platform for servers that need persistent player loadout layouts, not only one static kit inventory.

Who is it for?#

Crystal, Practice, FFA, Lifesteal, BoxPvP and SMP owners who need configurable PvP gear workflows.

Generated files#

config.yml, messages.yml, categories.yml, kits/, ender-chests/, premades/ and menus/.

Main systems#

  • Kit creation, saving, claiming and previewing
  • Personal layout editor with staff modes
  • Ender Chest profile editor
  • Premade kit library
  • Dynamic Kit Room
  • Auto kit rules
  • Backup, restore and migration commands
  • Public API and Bukkit events

Dependencies#

  • Java 21
  • Paper-style server runtime
  • License key in config.yml
  • PlaceholderAPI optional
  • WorldGuard optional
  • Vault, LuckPerms, SkinsRestorer and combat hooks optional

Installation#

Installation gets the plugin to boot. First setup prepares the live PvP workflow.

Do not replace plugin jars while the server is running. Back up configs and data before updates.
Stop the server and upload the NexaKits jar to /plugins.Use the normal jar or the tested obfuscated jar from your release process.
Start once to generate the plugin folder.Confirm plugins/NexaKits/ contains config, messages, categories, kits, premades and menus.
Set license-key in config.yml.The plugin validates LicenseGate before command and listener registration.
Choose storage before real player data exists.Default is SQLite. YAML is useful for simple local files. MySQL is for external database setups.
Restart after license or storage changes.Use /nexakits reload for runtime-safe file changes after the plugin is already enabled.

First Setup#

Recommended order for turning the generated defaults into a production PvP setup.

Make one change at a time, then test with a non-op player account.

Setup checklist#

  1. Set license and storage.
  2. Review kits.default-cooldown-seconds and permission mode.
  3. Create categories in categories.yml.
  4. Use /kit save <name> for each staff-defined kit.
  5. Use /eceditor 1 to prepare common Crystal EC layouts.
  6. Create premades with /premadekit save <id>.
  7. Open /kitroom and verify locked, available and cooldown states.

Production notes#

  • Use LuckPerms or another permission manager for nexakits.kit.<kit> and profile nodes.
  • Keep a backup before changing storage type.
  • Do not claim Folia support unless the full setup is tested for region-thread safety.
  • WorldGuard and combat hooks are optional; missing hooks should not block startup.

Commands#

Primary player, staff and admin commands.

Command aliases are registered in plugin.yml: /k, /kits, /kit1 through /kit7, /itemeditor, /ei, /enderadmin, /premadekits, /pkits, /kroom and /nk. Kit shortcuts stay as /k1 through /k7.
/kitPlayer
Purpose

Open/list kits or claim by name.

Permission

nexakits.kit.<kit>

Example

/kit crystal

Use

Claim a PvP kit with validation.

/kit preview <name>Player
Purpose

Open a read-only kit preview.

Permission

Kit access permission

Example

/kit preview crystal

Use

Inspect gear without claiming it.

/kiteditor <kit>Player
Purpose

Edit personal inventory, armor and offhand layout.

Permission

nexakits.editor

Example

/kiteditor crystal

Use

Save a layout override for one kit.

/kiteditor legacy <kit>Player
Purpose

Open the simpler legacy editor layout.

Permission

nexakits.editor

Example

/kiteditor legacy crystal

Use

Use a classic layout workflow.

/eceditor [profile]Player
Purpose

Edit personal Ender Chest profile.

Permission

nexakits.ec.edit

Example

/eceditor 1

Use

Prepare kit-linked or global EC contents.

/premadekitPlayer/Staff
Purpose

List, load, clone, edit, save and publish premades.

Permission

nexakits.premade.view

Example

/premadekit clone crystal-aggressive crystal

Use

Reuse staff-approved layouts.

/kitroomPlayer
Purpose

Open dynamic kit browser.

Permission

nexakits.kitroom.open

Example

/kitroom favorites

Use

Browse, preview, load and favorite kits.

/nexakitsAdmin
Purpose

Reload, hooks, storage, backup, restore and migration.

Permission

nexakits.admin or specific admin node

Example

/nexakits hooks

Use

Operate the plugin safely.

Permissions#

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 true
nexakits.admin

Full NexaKits administration.

Default: opOwner/Admin
nexakits.reload

Runtime config and menu reload.

Default: op
nexakits.backup

Create YAML/data backups.

Default: op
nexakits.restore

Restore a named backup folder.

Default: op
nexakits.migrate

Run storage migration command paths.

Default: op
nexakits.kit.*

Access every configured kit.

Default: op
nexakits.kit.<kit>

Access one configured kit.

Custom per kit
nexakits.kit.create

Create and save kit definitions.

Default: op
nexakits.kit.delete

Delete kit definitions.

Default: op
nexakits.kit.give

Give a kit to another player.

Default: op
nexakits.kit.bypass.cooldown

Bypass kit cooldowns.

Default: op
nexakits.kit.bypass.world

Bypass world allow/block checks.

Default: op
nexakits.kit.bypass.region

Bypass WorldGuard-style region checks.

Default: op
nexakits.editor

Open the personal kit editor.

Default: true
nexakits.editor.reset

Reset personal layouts.

Default: true
nexakits.editor.staff

Staff edit or reset another player's layout.

Default: op
nexakits.ec.edit

Open Ender Chest editor.

Default: true
nexakits.ec.admin

View, edit and reset other players' EC profiles.

Default: op
nexakits.ec.slots.1/2/3

Unlock EC profile slots 1 through 3.

Slot 1: trueSlots 2-3: op
nexakits.premade.view

View premade kit library.

Default: true
nexakits.premade.clone

Clone premades to personal layouts.

Default: true
nexakits.premade.admin

Create, edit, save and delete premades.

Default: op
nexakits.premade.publish

Publish premade kits.

Default: op
nexakits.kitroom.open

Open Kit Room.

Default: true
nexakits.kitroom.admin

Use Kit Room admin/editor command path.

Default: op

Configuration#

Generated YAML files and key options. Snippets are excerpts, not full files.

Back up YAML before changing storage, license or production kit data.
config.yml main runtime settings

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: true
Reload

Most message/menu/category changes can use /nexakits reload. License and storage changes should use a restart.

Safety

Bukkit inventory access stays on the server thread; storage writes are separated through services.

categories.yml kit room categories

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"
kits/*.yml staff-defined kits

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: ""
premades/*.yml staff loadout library

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

Messages & Language#

MiniMessage-first typed messages with chat, actionbar, title, bossbar and sound support.

Keep placeholders such as <kit>, <player>, <profile>, <cooldown> and <error> intact.

Message structure#

Most message keys are objects with enabled, type and either text, title fields or sound fields. This keeps player-facing output configurable.

Format examples#

<green>Loaded kit <white><kit></white>.
<red>You do not have permission.
type: "actionbar"
sound: "UI_BUTTON_CLICK"
messages.yml short excerpt
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.0

Kits, Layouts And Editors#

How kit definitions, player layouts and Ender Chest layouts interact.

The staff-defined kit is the source of truth. Player layouts are overrides applied during kit claim when enabled.

Kit claim order#

  1. Find kit by id.
  2. Check permission unless bypassed.
  3. Check cooldown and fire cooldown event.
  4. Check world and optional region rules.
  5. Fire claim event.
  6. Clear inventory/armor if configured.
  7. Apply saved player layout or base kit items.
  8. Load Ender Chest if enabled.
  9. Apply potion effects and cooldown.

Editor protections#

  • Number key and shift-click handling
  • Top/bottom inventory movement control
  • Drag, drop, swap-hand and creative clone protection
  • Filler item lock
  • Armor slot validation
  • Offhand whitelist validation
  • Unsaved close warning and save confirmation

Storage#

YAML, SQLite and MySQL provider posture plus backup and migration workflows.

Always run backups before migration and test storage changes on a copy of production data.

Storage modes#

  • yaml: readable local files under data/.
  • sqlite: default local SQL database under storage/nexakits.db.
  • mysql: external database configuration for larger deployments.

Data surfaces#

  • Player layouts: data/player_layouts or SQL table
  • Ender Chest layouts: data/ender_chests or SQL table
  • Premades: premades/*.yml and provider storage
  • Backups: backups/backup-yyyyMMdd-HHmmss
/nexakits storage
/nexakits backup
/nexakits restore backup-20260513-180000
/nexakits migrate yaml sqlite
/nexakits migrate sqlite mysql

PlaceholderAPI#

Optional PlaceholderAPI expansion values for displays, menus and scoreboards.

Install PlaceholderAPI before using these values. Missing PlaceholderAPI does not block NexaKits startup.
Placeholder examples identifier: nexakits
PlaceholderExample outputDescription
%nexakits_kits_total%12Total loaded kits.
%nexakits_kits_available%8Kits available to the player.
%nexakits_selected_kit%crystalSelected or last known kit id when tracked.
%nexakits_last_kit%crystalLast claimed kit id.
%nexakits_cooldown_crystal%0Remaining cooldown seconds for a kit.
%nexakits_layout_status_crystal%savedPlayer layout state for a kit.

Integrations#

Soft hooks and the behavior they influence.

Run /nexakits hooks to inspect detected hooks and versions.
PlaceholderAPI Optional

Registers the nexakits expansion for kit, cooldown and layout display values.

WorldGuard Optional

Used for region allow/block checks when kit or auto-kit region restrictions are configured.

Vault Optional

Economy hook point for future cost/unlock workflows. Missing Vault falls back cleanly.

LuckPerms Optional

Reads EC profile limits from meta keys such as nexakits-ec-profiles or ec-profiles when available.

Skript Optional

Bridge point for exposing NexaKits events to Skript style automation.

SkinsRestorer Optional

Skin/head integration hook point for GUI or preview surfaces.

CombatLogX / PvPManager / NexaCombat Optional

Combat-state checks can block auto-kit or editor behavior when configured.

API & Events#

Public provider, service methods and Bukkit events for plugin developers.

Add softdepend: [NexaKits] or depend: [NexaKits] in your plugin depending on whether your plugin can run without it.

Provider entry point#

NexaKitsAPI api = NexaKitsProvider.get();
api.kit("crystal").ifPresent(kit -> {
    player.sendMessage("Found " + kit.id());
});

boolean loaded = api.claimKit(player, "crystal");

Common events#

  • KitClaimEvent
  • KitPreviewEvent
  • KitCooldownCheckEvent
  • KitEditorOpenEvent, menu, save and reset events
  • EnderChestEditorOpenEvent, save and reset events
  • KitRoomOpenEvent, render and select events
  • PremadeKitLoadEvent, create, clone and publish events
  • PlayerAutoKitApplyEvent
  • NexaKitsReloadEvent

See docs/nexakits/api-examples.md for extended examples.

Platform & Module Enablement#

Prepare the Paper/Spigot runtime, storage, license and generated configuration before exposing kit commands to players.

Use Java 21 bytecode-compatible runtime settings and keep the test license bypass limited to automated tests.

Bootstrap checklist#

  1. Install the supported Paper/Spigot API 1.20+ server and Java runtime.
  2. Copy the generated plugins/NexaKits/ directory before editing YAML.
  3. Set license-key and confirm LicenseGate validation before gameplay services register.
  4. Choose SQLite for a small server or MySQL for a network, then restart to create the schema.
  5. Grant only the kit permissions needed by a test group and verify with a non-op account.

Core baseline#

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

Use /nexakits reload or /kit reload for runtime YAML changes. Treat storage and license changes as maintenance-window changes.

Kit Definitions & Claim Flow#

Define logical kit slots, permissions, cooldowns, inventory clearing, world rules and claim behavior.

A kit definition is the shared contract; a player's saved layout is stored separately in SQL.

Default kit configuration#

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

Each entry has an id, display name and category. Gate access with nexakits.kit.<kit> or nexakits.kit.*.

Player claim workflow#

  1. Use /kit list or /kitroom to discover available kits.
  2. Preview with /kit preview <kit> before claiming.
  3. Claim with /kit <kit>, /k1–/k7 or readable aliases.
  4. Verify cooldown, kit permission, blocked/allowed world and optional WorldGuard region.
  5. Confirm inventory/armor clearing, Ender Chest injection and potion effects with a test account.
Claim QA safe failure behavior

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.

Personal Kit Layout Editor#

Let players customize inventory, armor and offhand per kit while keeping shared kit definitions protected.

Personal edits belong to the player layout; do not grant global editor permissions to normal players.

Editor entry points#

  1. Open /kit edit <kit> or /kiteditor <kit>.
  2. Use /kiteditor legacy <kit> only when the legacy flow is intentionally required.
  3. Arrange slots 0–35, armor and offhand through the 54-slot editor.
  4. Use Save, Reset, Share, Import Shared Kit, Rename, Help and Back controls.
  5. Close and reopen the editor to verify the SQL layout was saved.

Protection and sharing#

  • editor.save-confirmation and unsaved-close-warning protect unfinished changes.
  • Drop, number-key, hand-swap, creative-pickup and disabled-command protections remain active while editing.
  • Helmet, armor and offhand placement is validated by slot.
  • Sharing uses temporary UUID snapshots, nearby visibility and expiration.
  • Use 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: 600

Item & Modular Shulker Editor#

Configure the item editor for names, stacks, enchantments, flags, unbreakable state, trims and nested shulker contents.

Test nested containers and combat-critical items before allowing item editor access on a live PvP server.

Item editing flow#

  1. Hold an item and run /edit-item, /itemeditor or /ei.
  2. Edit the title through AnvilGUI and adjust amount where allowed.
  3. Open enchantment, flags or trims menus and verify max-level/registry values.
  4. Open a shulker to transition into menus/shulker-editor.yml.
  5. Save and inspect serialized item metadata before using it in a kit.

Safety boundaries#

  • item-editor.enabled controls the feature; nexakits.itemeditor controls player access.
  • nexakits.itemeditor.admin is reserved for staff-level editing.
  • Nested shulker exploit protection prevents unsafe recursive content mutations.
  • Trim materials/patterns can use registry defaults or configured overrides.
  • Test enchantment caps and invalid material fallback after reload.

Ender Chest Profiles#

Give players separate high-capacity PvP storage profiles that can be opened independently or loaded with a kit.

Profile access is permission-based; a visible profile count is not the same as permission to use every slot.

Player profile flow#

  1. Open /eceditor for profile 1 or /eceditor <profile> for a specific profile.
  2. Arrange and save the profile through the Ender Chest editor.
  3. Use /eceditor import <uuid> for a shared snapshot when permitted.
  4. Claim a kit with kits.load-ender-chest-default enabled only after testing replacement behavior.
  5. Restart and verify each profile remains independent.

Profile permissions#

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

Dynamic Kit Room & Catalog#

Build a searchable, categorized kit browser with favorites, recent kits, sorting, pagination and preview/load/edit actions.

Kit Room content is runtime-rendered from memory and kitroom.yml; save staff changes deliberately.

Player browsing flow#

  1. Open /kitroom or /kroom.
  2. Choose a category or use /kitroom category <category>.
  3. Search with /kitroom search <query> across kit names, descriptors and materials.
  4. Use favorites, recents and /kitroom sort <mode> to refine results.
  5. Left-click load, right-click preview, shift-right-click favorite and middle-click edit when permitted.

Staff category workflow#

  1. Configure category slots and item content in kitroom.yml.
  2. Open the category and verify potions, arrows, equipment and PvP materials.
  3. Edit in memory with /kitroom edit <category>.
  4. Persist a reviewed category with /kitroom save <category>.
  5. Reopen the room and confirm pagination/search/favorite state.
Do not overwrite kitroom.yml during peak hours; take a backup before bulk category edits.

Premade Kits & Publishing#

Manage staff-authored YAML loadouts as shareable global content while allowing players to load or clone approved presets.

Premade YAML is intentionally human-readable; publishing and deletion permissions should be restricted.

Staff workflow#

  1. Create/save with /premadekit create <id> or /premadekit save <id>.
  2. Edit with /premadekit edit <id> and verify item metadata.
  3. Publish with /premadekit publish <id> after review.
  4. Delete only with /premadekit delete <id> after checking references.
  5. Keep the premades/ backup when sharing between servers.

Player workflow#

  1. Open /premadekit, /premadekits or /pkits.
  2. Use /premadekit list, recent and favorites to find a loadout.
  3. Load with /premadekit load <id> or clone with /premadekit clone <premade> <kit>.
  4. Verify clone overwrites only the selected personal layout.

Use premade-kits.require-approval-for-community and the permissions nexakits.premade.view, clone, admin and publish to separate access.

Auto Kit Triggers & Combat Rules#

Apply a selected kit on join, respawn, world change or kill while respecting combat, region and world restrictions.

Auto Kit must be tested with combat hooks enabled; automatic regear during combat can invalidate PvP state.

Trigger configuration#

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

Rollout checklist#

  1. Set an explicit kit id or use the first definition with auto-give: true.
  2. Configure allowed/blocked worlds and WorldGuard regions.
  3. Test join, respawn, world change and kill independently.
  4. Enter combat through CombatLogX/PvPManager and verify the block rule.
  5. Test broadcast radius and ensure the kit is not duplicated after reconnect.

Regear Shulker & Post-Combat Refill#

Give players a controlled shulker that restores missing items from their last kit after combat.

Regear is a refill path, not a second kit claim; exclude totems and keep the combat delay enforced.

Player flow#

  1. Grant nexakits.regear and run /regear.
  2. Place and right-click the configured shulker.
  3. Wait for the configured combat-clear period, then choose Regear.
  4. Verify only missing items are filled and occupied slots are preserved.
  5. Break the shulker and confirm the configured drop behavior.

Safety configuration#

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.

SQL Storage, YAML Data & Migration#

Persist player layouts, cooldowns, favorites, Ender Chest profiles and audit logs in SQL while keeping premades and staff data shareable as YAML.

Back up both SQL and the premades/ directory before updates, resets or storage migrations.

Provider setup#

  • SQLite uses storage/nexakits.db with WAL enabled by default.
  • MySQL uses HikariCP pool settings for network deployments.
  • Player tables include layouts, Ender Chest profiles, cooldowns, favorites and audit log.
  • Premades remain human-readable YAML rather than thousands of player files.
  • Async save/debounce reduces synchronous disk work; verify flush on shutdown.

Maintenance workflow#

  1. Run /nexakits storage and record provider health/counts.
  2. Run /nexakits backup before changing storage.
  3. Use /nexakits migrate sqlite mysql only on a tested copy first.
  4. Restore with /nexakits restore <backup> during maintenance.
  5. Reopen an existing kit/editor/Ender Chest profile and verify data after migration.

Integrations & Hook Verification#

Connect optional PvP, permissions, region, economy, scripting and cosmetics hooks without making them hard dependencies.

Use /nexakits hooks after every dependency change and test the related behavior with a fresh player.

Gameplay hooks#

WorldGuard controls region restrictions. CombatLogX and PvPManager protect auto-kit/regear timing. NexaCombat can participate in the local PvP ecosystem.

Account hooks#

LuckPerms metadata can scale Ender Chest profile access. Vault is available for economy-aware integrations. Skript exposes a bridge surface for server automation.

Cosmetic hooks#

SkinsRestorer and PlaceholderAPI provide optional display/integration surfaces. Missing plugins should skip registration safely and appear in the hook report.

Integration acceptance test optional dependency
  1. Start NexaKits without optional plugins and confirm no initialization crash.
  2. Enable one hook and inspect /nexakits hooks.
  3. Test region denial, combat blocking, permission metadata and placeholder output.
  4. Disable the hook and confirm the base kit/editor workflow still works.

API, Events & Placeholders#

Expose kit claims, editors, Kit Room, premades and Ender Chest changes to addons and server automation.

Use the provider accessor and event cancellation points instead of mutating internal layout/storage state directly.

Developer surface#

  • Access NexaKitsAPI through NexaKitsProvider.get().
  • Observe kit claim, preview and cooldown checks.
  • Observe editor open/save/reset and Ender Chest open/save/reset events.
  • Observe Kit Room open/render/select and premade load/create/clone/publish events.
  • Use the API for custom menus, stats, claim gates and addon integrations.

Placeholder setup#

  1. Enable integrations.placeholderapi.
  2. Use total/available kit placeholders in scoreboards and menus.
  3. Use selected/last kit values to connect Regear and player profile displays.
  4. Use per-kit cooldown and layout status placeholders for feedback.
  5. Test unknown kit ids and offline players before publishing the display.
%nexakits_kits_total%
%nexakits_kits_available%
%nexakits_selected_kit%
%nexakits_last_kit%
%nexakits_cooldown_<kit>%
%nexakits_layout_status_<kit>%

Admin Commands, Permissions & Recovery#

Separate player kit use from staff publishing, layout administration, backup, restore and migration operations.

Reserve global edit/delete, other-player editing and restore permissions for trusted administrators.

Admin command workflow#

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

Permission boundaries#

  • Player access: nexakits.kit.<kit>, nexakits.editor, nexakits.ec.edit, nexakits.kitroom.open, nexakits.regear.
  • Staff layout: nexakits.editor.staff, nexakits.ec.admin, nexakits.itemeditor.admin.
  • Publishing: nexakits.premade.admin, nexakits.premade.publish, nexakits.kit.delete.
  • Maintenance: nexakits.reload, backup, restore, migrate.
Recovery procedure audit first
  1. Back up SQL and premades before an intervention.
  2. Record player, kit/profile and reason.
  3. Reset only the affected layout/profile.
  4. Restore the backup only during a maintenance window.
  5. Reopen kit, editor and Ender Chest flows with the affected account.

Production Rollout & Verification#

Move from one test kit to a complete PvP loadout platform with player layouts, premades, profiles, auto-kit and regear.

Go live only after claim, edit, reset, import/export, profile, combat and restart tests pass.

Stage 1 — sandbox#

  • Use SQLite and kit-1/kit-2 only.
  • Test claim, preview, cooldown and personal editor.
  • Confirm no item duplication on close, reset or reconnect.

Stage 2 — pilot#

  • Add categories, premades, Ender Chest profiles and Kit Room search.
  • Test multiple ranks, worlds, regions and combat states.
  • Measure async saves, SQL health and backup restore time.

Stage 3 — live#

  • Enable auto-kit/regear only after combat tests.
  • Restrict staff/global editor and restore permissions.
  • Record plugin, server, storage, hook and premade versions.
Go-live acceptance checklist sign off each item
  1. Claim each kit and verify cooldown/world/permission behavior.
  2. Save, reset, share, import and export a personal layout.
  3. Open all Ender Chest profiles allowed by rank.
  4. Publish/load/clone a premade and test Kit Room controls.
  5. Test auto-kit join/respawn/world/kill and regear after combat.
  6. Restart, back up and restore a staging copy before player-wide access.

Operational Reference#

Separate global kit content, personal layouts, Ender Chest profiles and premade publishing.

Edit a global kit only through staff/admin workflows. Players should normally edit their personal layout, not the kit definition.

Staff: publish a kit#

  1. Create the kit/category and choose its permission id.
  2. Load the intended items, armor and offhand into the editor.
  3. Save with /kit save <name> or the configured premade workflow, then preview it from /kitroom.
  4. Test claim, cooldown, disabled world and item restoration with a normal player.
  5. Publish only after the kit icon, lore, category and permission are correct.

Player: claim and customize#

  1. Open /kitroom, search/favorite a kit and use preview before claiming.
  2. Claim with /kit <name> or the configured shortcut.
  3. Use /kiteditor <kit> for the personal inventory/armor/offhand layout.
  4. Use /eceditor [profile] for a kit-linked Ender Chest profile.
  5. Reopen the kit after a restart to verify saved layout persistence.

Safe editor settings#

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

Ranked/PvP rollout#

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

Common Setups#

Ready scenarios for typical PvP server types.

Tune permissions, categories and cooldowns to match your economy and rank structure.

Crystal PvP#

Use crystal category kits, EC profile 1, premade aggressive/defensive loadouts and no cooldowns for arena servers.

Practice / FFA#

Use Kit Room categories and personal layouts so players can repeatedly claim consistent loadouts between fights.

SMP PvP#

Use permissions, world restrictions, region checks and cooldowns to keep kits controlled outside PvP arenas.

Ranked kits#

Gate kit ids behind nexakits.kit.<kit> and EC profiles behind nexakits.ec.slots.<n>.

Staff loadout library#

Create approved premades and let players clone them into personal layouts instead of editing global kits.

SQL deployment#

Use SQLite for one server, MySQL for larger deployments, and backup before migrating from YAML.

Troubleshooting#

Start with console logs, hook status and generated YAML files.

The first startup error is usually more useful than repeated follow-up errors.
Plugin disables on startup license or config

Check license-key. The default LICENSE placeholder will not validate. Also inspect the first YAML parse error in console.

Kit does not load validation

Check kit id, permission, cooldown, world restrictions, region restrictions and whether another plugin cancelled KitClaimEvent.

Player layout does not apply layout

Verify kits.allow-player-layouts, kit-level save-player-layout, and that the player saved the layout through the editor.

Editor blocks item movement protection

Review armor slot type, offhand whitelist, filler item slots and blocked editor actions in config.yml.

Ender Chest profile is denied permission

Give nexakits.ec.edit and the matching nexakits.ec.slots.<profile> node. LuckPerms meta can increase profile count when configured.

Placeholder values are blank hook

Install PlaceholderAPI, restart, check /nexakits hooks, then reload the scoreboard/tab plugin using the placeholders.

Migration fails storage

Create a backup first, verify database credentials and test the migration on a copy. Use /nexakits storage to inspect provider health.

FAQ#

Short answers for common buyer, owner and staff questions.

Does NexaKits require PlaceholderAPI?#

No. PlaceholderAPI is optional and only needed for external displays.

Does NexaKits support Folia?#

No Folia support is claimed in this docs page. Treat it as a Paper-style plugin unless region-thread safety is verified.

Can players edit global kits?#

Normal players edit personal layouts. Staff can save and edit global kit definitions with admin permissions.

Can I disable premades or auto-kit?#

Yes. Use premade-kits.enabled and auto-kit.enabled in config.yml.

Can messages use MiniMessage?#

Yes. The generated defaults are MiniMessage-first with typed message entries.

Where are player layouts saved?#

YAML stores them under data/player_layouts; SQL stores them in provider tables.

Build#

Build and obfuscation commands for local release preparation.

Do not build after every small edit. Build after a full part or final verification step.

Normal jar#

& 'C:\Program Files\Apache\maven\bin\mvn.cmd' -DskipTests package

The normal release jar is written to target/NexaKits-1.0.0.jar.

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

The obfuscated jar is written to target/NexaKits-1.0.0-obfuscated.jar.

See docs/nexakits/build.md for the shorter build note.

Support#

Send enough information to reproduce the issue.

Join Discorddiscord.gg/fANhQcyA7XInclude logs, configs and exact steps. Screenshots alone are not enough for config or storage issues.

Before asking for support#

  • Test the latest available jar.
  • Check Java and server versions.
  • Run /nexakits hooks and /nexakits storage.
  • Attach changed YAML files when config is involved.
  • Include the first console error after startup.
Plugin: NexaKits
Plugin version:
Server software/version:
Java version:
Storage type:
Installed hooks:
License status:
Error log:
Steps to reproduce:
Expected behavior:
Screenshots/video: