Киты
Наборы предметов, кулдауны, лимиты использований и выдача другим игрокам.
Команды 7#
Примеры#
Собрать стартовый кит из инвентаря#
Нужен набор, который новичок забирает раз в сутки, без правки файлов руками.
/createkit starter "Starter Kit" 86400 Хлеб и меч на первый день
/showkit starter
/kit starter
createkit забирает копии предметов из основного инвентаря (слоты 0…size-5: без брони и offhand); пустой инвентарь даст «empty_inventory». В чат приходит created/updated, число предметов, кулдаун и подсказка с правом neoessentials.kits.starter. showkit печатает displayName, описание, «24h» и строки count + имя предмета. /kit starter выдаёт предметы себе, пишет given; если места нет — лишнее падает под ноги.
Выдать кит другому игроку и сбросить лимит#
Игрок упёрся в кулдаун или maxUses — нужно выдать кит сейчас и вернуть ему возможность забрать снова.
/kit starter Steve
/kitreset starter Steve
Первая команда требует neoessentials.kit.others; Steve должен быть онлайн, иначе «player not found». Кулдаун и maxUses проверяются у Steve, право на кит — у вас. Steve получает «received_from». kitreset снимает и таймер, и счётчик использований (без этого maxUses так и блокировал бы кит) и шлёт Steve notify.
Посмотреть каталог и удалить кит#
Перед удалением убедиться, что в ките то, что нужно, и не снести его одним опечаткой.
/listkits
/listkits 2
/delkit starter
/delkit starter confirm
listkits без аргумента — страница 1, по 10 записей: имя, displayName, число предметов, кулдаун если > 0. Несуществующая страница — ошибка invalid_page. Первый delkit ничего не удаляет, только confirm_prompt + инструкцию. Второй — запись исчезает из DataStore-коллекции kits; повторный /kit starter даст not_found.
Тонкие места#
Определения китов живут в DataStore, kits.json после импорта мёртв#
KitManager хранит киты в коллекции kits активного storage.type (по умолчанию JSON в neoessentials/store/), кулдауны — kit_cooldowns, счётчики — kit_usages. Поставляемый config/neoessentials/kits.json читается один раз: только если все три коллекции пусты и storage.autoMigrate включён. Файл после этого не пишется и не перечитывается — правки в нём не видны ни в /kit, ни после /neoe reload. /neoe reload вызывает KitManager.reload() и заново читает DataStore, не kits.json.
Что делать: Новые киты — /createkit, удаление — /delkit … confirm. Поле commands и maxUses /createkit не задаёт: их правят в записи коллекции kits (или оставляют значения по умолчанию: maxUses −1, commands пустой).
Команды на клейме есть, но /createkit их не пишет#
Английская вики утверждает, что киты «только предметы». В коде у Kit есть массив commands: после успешной выдачи предметов runKitCommands выполняет каждую строку от консоли с подстановкой {player} (ведущий / снимается). /createkit всегда создаёт кит с пустым массивом и maxUses: -1. Шаблон в kits.json как раз показывает commands: ["say Welcome…"] — это попадёт в DataStore только при том самом первом импорте.
Что делать: Нужную консольную команду допишите в JSON-запись кита в хранилище и сделайте /neoe reload. Через /createkit команды не добавить.
skipUsedOneTimeKitsFromKitList прячет и «безлимитные» киты#
canUseKit считает maxUses > 0 лимитом, а −1 — без ограничений. Фильтр /listkits при kits.skipUsedOneTimeKitsFromKitList: true прячет кит, если maxUses == 1 или maxUses < 0 и игрок уже брал его хотя бы раз. /createkit как раз пишет maxUses: -1. Итог: кит по-прежнему забирается через /kit <name>, но пропадает из /kits//listkits после первого клейма.
Что делать: Одноразовый кит — поставьте в записи maxUses: 1. Фильтр для списка лучше не включать, пока у китов с /createkit не проставлен явный maxUses.
/kit и /kits — разные команды и разные права#
/kit — neoessentials.kits.use плюс per-kit neoessentials.kits.<name> (или поле permission записи). /kits//listkits — neoessentials.kits.list. Без neoessentials.kits.override (и включённого kits.allowKitOverride) /listkits показывает те же киты, что автодополнение /kit, а не «все киты сервера». neoessentials.kits.nocooldown и neoessentials.kits.<name>.nocooldown обходят только кулдаун; override обходит ещё enabled/maxUses/maxKitsPerPlayer. Консоль в /kit per-kit право не проверяет.
Что делать: Игрокам выдавайте kits.use + нужные kits.<name>. Обзор всех китов для персонала — kits.list вместе с kits.override.
Имя кита и состав при создании#
Конструктор Kit оставляет в имени только [a-z0-9_] в нижнем регистре. /createkit заранее отвергает дефис (иначе vip-kit молча стал бы vipkit и не совпал бы с тем, что ввели). Броня и offhand в кит не попадают: цикл 0 … containerSize-5. Повтор /createkit с тем же именем обновляет предметы, displayName, кулдаун и описание, но не трогает commands/maxUses уже лежащей записи — createKit собирает новый объект с пустыми командами и −1.
Что делать: Дефисы в id не используйте. Броня — положите её в основной инвентарь перед /createkit. Обновляя кит через команду, заново пропишите commands/maxUses в хранилище, если они были.
pastebinCreatekit не сохраняет кит#
При kits.pastebinCreatekit: true /createkit не вызывает kitManager.createKit. Вместо этого сериализует JSON и возвращает URL вида https://pastebin.com/mock/<hash> — загрузки на Pastebin в коде нет. Кит на сервере не появляется.
Что делать: Держите pastebinCreatekit в false (значение по умолчанию). Для экспорта скопируйте запись из коллекции kits.
Цели только онлайн, цены и newPlayerKit#
/kit <name> <player> и /kitreset <kit> <player> ищут игрока через getPlayerByName — офлайн не находится, очереди нет. kits.commandCosts.<command> списывается с отправителя до выдачи (kit, createkit, listkits, delkit на confirm). kits.newPlayerKit.enabled + kitName выдают кит при первом входе; кита с таким именем на момент входа может не быть — это отдельный путь, не /kit.
Что делать: Офлайн-выдачу делайте, когда игрок зайдёт. Цены проверяйте, если экономика включена. Имя в newPlayerKit.kitName должно совпадать с id кита после санитизации.
Известные проблемы#
kits.pastebinCreatekit отдаёт поддельный URL и не создаёт кит#
uploadToPastebin в CreateKitCommand — заглушка: всегда возвращает https://pastebin.com/mock/…, HTTP-вызова нет. При включённом флаге ветка сохранения в DataStore пропускается целиком, поэтому /kit этот кит не видит.
Что делать: Оставьте kits.pastebinCreatekit: false. Нужен JSON — заберите его из коллекции kits в хранилище.
Конфигурация#
kits.json#
Права 8#
Подробное руководство#
Раздел ниже — исходная документация проекта (docs/Wiki/KitManagement.md). Ссылки на другие страницы вики переписаны на этот сайт; текст самих руководств не редактируется, чтобы синк с апстримом не давал конфликтов.
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 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