Farmstead Mods
RU

Kits

Item sets, cooldowns, usage limits and giving kits to other players.

On this page

Commands 7#

CommandSyntaxAliasesPermissionDescription
/createkit/createkit <kitname> [<displayname> [<cooldown> [<description>]]]—neoessentials.kits.createCreate a new kitPlayer only (an inventory is needed). <kitname> is a word of [A-Za-z0-9_] up to 32 characters; in storage the name is lower-cased. <displayname> is a String (spaces only in quotes), <cooldown> is whole seconds ≥ 0 (stored as milliseconds in the record), <description> is greedy. The main inventory is copied without armor and the offhand. Repeating with the same name overwrites the kit. The tree also has the makekit and addkit literals; they are not in the help registry.
/delkit/delkit <kitname> [confirm]—neoessentials.kits.deleteDelete a kitThe first call only prints a warning; deletion is /delkit <kitname> confirm, with no stored "pending" state and no timeout. The kits.commandCosts.delkit price is charged on confirm. The extra literals deletekit, removekit, rkit exist in the tree but not in the help registry.
/kit/kit [<kitname> [<player>]]—neoessentials.kits.useClaim a kitWithout arguments — the list of kits you have a per-kit permission for. Giving to someone else requires neoessentials.kit.others on the <player> node (the target will not appear in completion without this permission). The console must specify <player>. The target is looked up among online players only. Cooldown and maxUses are checked on the recipient, the per-kit permission on the sender.
/kitreset/kitreset <kitname> [<player>]—neoessentials.kitreset by conventionReset a kit cooldownResets both the cooldown and the usage counter. For another player — neoessentials.kitreset.others on the <player> node. The console must specify a target. Online targets only.
/kits/kits [page]—neoessentials.kits.listList available kitsThe same implementation as /listkits: page ≥ 1, 10 kits per page. The tree is registered only if commands.listkits is enabled (the commands.kits flag on its own does not disable /kits). A player without neoessentials.kits.override sees only the kits available to them, not the full admin list.
/listkits/listkits [page]—neoessentials.kits.listList available kits (alias)Identical to /kits. Permission neoessentials.kits.list. The economy price kits.commandCosts.listkits is charged on every call, including when paging.
/showkit/showkit <kit>—neoessentials.showkit by conventionPreview kit contents without claimingThe argument is a word, so /showkit starter,vip (no spaces) is split on the comma and shows several kits. The per-kit permission is not checked: neoessentials.showkit is enough. Gives nothing. Registered from MiscItemCommands, not KitCommands.

Examples#

Build a starter kit from your inventory#

You need a set that a new player claims once a day, without editing files by hand.

/createkit starter "Starter Kit" 86400 Bread and a sword for the first day
/showkit starter
/kit starter

createkit takes copies of the items in the main inventory (slots 0…size-5: no armor or offhand); an empty inventory gives "empty_inventory". Chat shows created/updated, the item count, the cooldown and a hint with the neoessentials.kits.starter permission. showkit prints the displayName, description, "24h" and lines of count + item name. /kit starter gives the items to you and prints given; if there is no room, the excess drops at your feet.

Give a kit to another player and reset the limit#

A player hit the cooldown or maxUses — you need to give the kit now and let them claim it again.

/kit starter Steve
/kitreset starter Steve

The first command requires neoessentials.kit.others; Steve must be online, otherwise "player not found". Cooldown and maxUses are checked on Steve, the kit permission on you. Steve gets "received_from". kitreset clears both the timer and the usage counter (without it maxUses would keep blocking the kit) and sends Steve a notify.

Browse the catalogue and delete a kit#

Before deleting, make sure the kit contains what you think and do not wipe it with a single typo.

/listkits
/listkits 2
/delkit starter
/delkit starter confirm

listkits without an argument is page 1, 10 entries each: name, displayName, item count, cooldown if > 0. A non-existent page gives the invalid_page error. The first delkit deletes nothing, only confirm_prompt + instructions. The second removes the record from the kits DataStore collection; a repeated /kit starter gives not_found.

Edge cases#

Kit definitions live in the DataStore; kits.json is dead after import#

KitManager stores kits in the kits collection of the active storage.type (JSON in neoessentials/store/ by default), cooldowns in kit_cooldowns, counters in kit_usages. The shipped config/neoessentials/kits.json is read once: only if all three collections are empty and storage.autoMigrate is on. After that the file is neither written nor re-read — edits to it are visible neither in /kit nor after /neoe reload. /neoe reload calls KitManager.reload() and re-reads the DataStore, not kits.json.

What to do: New kits — /createkit, deletion — /delkit … confirm. /createkit does not set the commands field or maxUses: edit them in the record of the kits collection (or keep the defaults: maxUses −1, commands empty).

Commands on claim exist, but /createkit does not write them#

The English wiki claims kits are "items only". In code Kit has a commands array: after the items are given successfully, runKitCommands runs each line from the console with {player} substituted (a leading / is stripped). /createkit always creates a kit with an empty array and maxUses: -1. The template in kits.json does show commands: ["say Welcome…"] — that reaches the DataStore only on that very first import.

What to do: Add the console command you need to the kit's JSON record in storage and run /neoe reload. Commands cannot be added through /createkit.

skipUsedOneTimeKitsFromKitList also hides "unlimited" kits#

canUseKit treats maxUses > 0 as a limit and −1 as unlimited. The /listkits filter with kits.skipUsedOneTimeKitsFromKitList: true hides a kit if maxUses == 1 or maxUses < 0 and the player has claimed it at least once. /createkit writes exactly maxUses: -1. Result: the kit can still be claimed with /kit <name>, but disappears from /kits//listkits after the first claim.

What to do: For a one-time kit, set maxUses: 1 in the record. Better not to enable the list filter until kits made with /createkit have an explicit maxUses.

/kit and /kits are different commands with different permissions#

/kit needs neoessentials.kits.use plus the per-kit neoessentials.kits.<name> (or the record's permission field). /kits//listkits need neoessentials.kits.list. Without neoessentials.kits.override (and kits.allowKitOverride enabled), /listkits shows the same kits as /kit completion, not "all kits on the server". neoessentials.kits.nocooldown and neoessentials.kits.<name>.nocooldown bypass only the cooldown; override also bypasses enabled/maxUses/maxKitsPerPlayer. The console does not check the per-kit permission in /kit.

What to do: Give players kits.use + the kits.<name> they need. For staff to see all kits — kits.list together with kits.override.

Kit name and contents at creation#

The Kit constructor keeps only lower-case [a-z0-9_] in the name. /createkit rejects a hyphen up front (otherwise vip-kit would silently become vipkit and not match what was typed). Armor and the offhand do not go into the kit: the loop is 0 … containerSize-5. Repeating /createkit with the same name updates the items, displayName, cooldown and description, but does not keep the existing record's commands/maxUses — createKit builds a new object with empty commands and −1.

What to do: Do not use hyphens in ids. For armor, put it in the main inventory before /createkit. When updating a kit via the command, re-enter commands/maxUses in storage if they were set.

pastebinCreatekit does not save the kit#

With kits.pastebinCreatekit: true, /createkit does not call kitManager.createKit. Instead it serializes JSON and returns a URL like https://pastebin.com/mock/<hash> — there is no upload to Pastebin in the code. The kit does not appear on the server.

What to do: Keep pastebinCreatekit at false (the default). To export, copy the record from the kits collection.

Online targets only, prices and newPlayerKit#

/kit <name> <player> and /kitreset <kit> <player> look the player up via getPlayerByName — offline players are not found and there is no queue. kits.commandCosts.<command> is charged to the sender before the kit is given (kit, createkit, listkits, delkit on confirm). kits.newPlayerKit.enabled + kitName give a kit on first join; a kit with that name may not exist at join time — this is a separate path, not /kit.

What to do: Give offline players their kit when they join. Check prices if the economy is enabled. The name in newPlayerKit.kitName must match the kit id after sanitization.

Known issues#

kits.pastebinCreatekit returns a fake URL and does not create the kit#

uploadToPastebin in CreateKitCommand is a stub: it always returns https://pastebin.com/mock/…, with no HTTP call. With the flag on, the branch that saves to the DataStore is skipped entirely, so /kit does not see this kit.

What to do: Keep kits.pastebinCreatekit: false. If you need the JSON, take it from the kits collection in storage.

Configuration#

kits.json#

KeyDefaultDescription
kits
kits.name"starter"—
kits.cooldown86400Cooldown in seconds before the kit can be claimed again (86400 = 24 hours, -1 = one-time)
kits.items
kits.items.item"minecraft:stone_sword"—
kits.items.count1—
kits.items.nbt"{}"—
kits.item"minecraft:bread"—
kits.count16—
kits.nbt"{}"—
commands — Commands run as console when the kit is claimed ({player} = player name)

Permissions 8#

NodeIn registryWhat it grants
neoessentials.kitresetregistry: noReset own kit cooldown
neoessentials.kitreset.othersregistry: noReset another player's kit cooldown
neoessentials.kits.createregistry: noCreate kits via /createkit
neoessentials.kits.deleteregistry: noDelete kits via /delkit
neoessentials.kits.listregistry: yesList available kits
neoessentials.kits.nocooldownregistry: noBypass kit cooldowns
neoessentials.kits.overrideregistry: noOverride kit restrictions
neoessentials.kits.useregistry: yesUse kit system

Detailed guide#

The section below is the project's original documentation (docs/Wiki/KitManagement.md). Links to other wiki pages are rewritten to this site; the guides themselves are not edited, so upstream syncs stay conflict-free.

Version: 1.0.5+build.54 · Last verified: 2026-08-25 · Config: config.json → kits section (kit definitions themselves live in the DataStore, not kits.json — see below)


Overview#

Create item kits with cooldowns, permission gates, and command execution on claim. Players can preview kits before claiming. Staff can give kits to other players and reset cooldowns.


Commands#

Command Syntax Permission Description
/kit /kit neoessentials.kits.use List kits available to you, with cooldown status
/kit /kit <name> [player] per-kit permission (see below) + neoessentials.kit.others to target another player Claim a kit (or give to another player)
/kits, /listkits /kits [page] neoessentials.kits.list Admin overview: paginated list of all kits with item counts, cooldowns, permissions, and descriptions — not an alias of /kit
/showkit /showkit <name>[,<name2>,...] neoessentials.showkit Preview one or more kits' contents without claiming
/createkit /createkit <name> [displayname] [cooldownSeconds] [description] neoessentials.kits.create Create/update a kit from your current inventory (main inventory only; armor/offhand excluded)
/makekit, /addkit alias same Aliases
/delkit /delkit <name> then /delkit <name> confirm neoessentials.kits.delete Delete a kit (two-step confirmation)
/deletekit, /removekit, /rkit alias same Aliases
/kitreset /kitreset <kit> [player] neoessentials.kitreset / neoessentials.kitreset.others Reset a kit cooldown

Note: /kit, /kits//listkits, and /showkit are three distinct commands with different permissions and purposes — /kit is for claiming, /kits//listkits is an admin-facing overview of every kit, and /showkit previews a specific kit's contents.

There is no built-in support for running server commands on kit claim — kits only grant items.


Permissions#

Node Default Description
neoessentials.kits.use ✅ Use /kit to list/claim kits
neoessentials.kits.list ✅ Use /kits//listkits (admin overview)
neoessentials.kit.others 🔒 Give a kit to another player via /kit <name> <player>
neoessentials.kits.create 🔒 Create kits with /createkit
neoessentials.kits.delete 🔒 Delete kits with /delkit
neoessentials.kits.override 🔒 Bypass all kit cooldowns/restrictions (requires allowKitOverride also enabled)
neoessentials.kits.nocooldown 🔒 Bypass cooldowns only (kept even if allowKitOverride is off)
neoessentials.showkit ✅ Preview kit contents with /showkit
neoessentials.kitreset 🔒 Reset your own kit cooldown
neoessentials.kitreset.others 🔒 Reset another player's cooldown
neoessentials.kits.<name> auto-registered per kit Default per-kit permission, required to see/claim that kit
neoessentials.kits.<name>.nocooldown 🔒 Bypass cooldown for one specific kit

Kit Data Format#

Kit definitions are persisted through the pluggable DataStore backend (JSON by default — see Storage Backend), one record per kit under the kits collection — not a single kits.json file anymore. Each record has this shape (shown here as JSON for reference; edit kits via /createkit//delkit rather than hand-editing storage files):

{
  "name": "starter",
  "displayName": "Starter Kit",
  "description": "Given to new players",
  "cooldownMillis": 86400000,
  "permission": "neoessentials.kits.starter",
  "maxUses": -1,
  "enabled": true,
  "items": [
    { "item": "minecraft:stone_sword", "count": 1, "components": {} },
    { "item": "minecraft:bread", "count": 16 }
  ]
}
Field Description
name Kit name (used in /kit <name>)
displayName Human-readable name shown in messages/previews (defaults to name)
description Shown by /showkit and /kits (defaults to empty)
cooldownMillis Milliseconds between claims (0 = no cooldown). A legacy cooldown field (in seconds) is still read for backward compatibility if cooldownMillis is absent
permission Permission required to see/claim the kit; defaults to neoessentials.kits.<name> if omitted
maxUses Max claims per player (-1 = unlimited); /listkits's skipUsedOneTimeKitsFromKitList treats maxUses == 1 (or a negative legacy value) as "one-time"
enabled Whether the kit is currently claimable (defaults to true)
items List of items — item (registry ID), count, and either components (preferred — the item's full DataComponentMap: enchantments, custom name, dyed color, etc.) or a legacy nbt string (CUSTOM_DATA only, from kits saved before components support was added)

There is no commands field — kits only grant items, they do not run server commands on claim.

Legacy file: config/neoessentials/kits.json is the pre-DataStore on-disk format. It's only read once, automatically, to migrate its contents into the DataStore kits collection — never written to again afterward. If it still exists alongside DataStore data, editing it has no effect; /neoe startup logs (and isLegacyKitsFileNowInert()) flag this case.


Config (config.json → kits)#

Key Default Description
skipUsedOneTimeKitsFromKitList false Hide one-time kits from /listkits once claimed
kitAutoEquip false Auto-equip armour from kits into empty armour slots
maxKitsPerPlayer 10 Max simultaneous active cooldowns (-1/any non-positive = unlimited)
allowKitOverride true Allow neoessentials.kits.override bypass
newPlayerKit.enabled false Enable/disable giving a kit automatically on first join (nested under kits.newPlayerKit, not a flat key)
newPlayerKit.kitName (none) Kit name to auto-give on first join when newPlayerKit.enabled is true (nested under kits.newPlayerKit, not a flat key)
logKitUsage true Log kit claims to console
pastebinCreatekit false If enabled, /createkit uploads the kit JSON instead of saving it locally
commandCosts.<command> 0 Economy cost to run a given kit command (e.g. createkit, kit, delkit, listkits)

/showkit has no dedicated config toggle — it's always available to anyone with neoessentials.showkit.


How Cooldowns Work#

  • Cooldown starts the moment a kit is successfully claimed
  • Staff with neoessentials.kits.override bypass everything (requires allowKitOverride: true); neoessentials.kits.nocooldown (or the per-kit neoessentials.kits.<name>.nocooldown) bypasses just the cooldown
  • /kitreset <kit> clears a specific cooldown
  • /kitreset <kit> <player> requires neoessentials.kitreset.others
  • A kit becomes permanently unclaimable for a player once maxUses is reached (there's no -1 "cooldown" sentinel — use maxUses: 1 for one-time kits)

Back to Wiki Home