Farmstead Mods
EN

Киты

Наборы предметов, кулдауны, лимиты использований и выдача другим игрокам.

На этой странице

Команды 7#

КомандаСинтаксисАлиасыПравоОписание
/createkit/createkit <kitname> [<displayname> [<cooldown> [<description>]]]—neoessentials.kits.createCreate a new kitТолько игрок (нужен инвентарь). <kitname> — слово [A-Za-z0-9_] длиной ≤ 32; в хранилище имя приводится к нижнему регистру. <displayname> — String (пробелы только в кавычках), <cooldown> — целые секунды ≥ 0 (в записи становятся миллисекундами), <description> — greedy. Копируется основной инвентарь без брони и второй руки. Повтор с тем же именем перезаписывает кит. В дереве также есть литералы makekit и addkit, в реестре справки их нет.
/delkit/delkit <kitname> [confirm]—neoessentials.kits.deleteDelete a kitПервый вызов только печатает предупреждение; удаление — /delkit <kitname> confirm, без сохранённого «ожидания» и без таймаута. Цена kits.commandCosts.delkit списывается на confirm. Дополнительные литералы deletekit, removekit, rkit в дереве есть, в реестре справки — нет.
/kit/kit [<kitname> [<player>]]—neoessentials.kits.useClaim a kitБез аргументов — список китов, на которые у вас есть per-kit право. Выдача другому требует neoessentials.kit.others на узле <player> (в автодополнении цель не появится без этого права). Консоль обязана указать <player>. Цель ищется только среди онлайн. Кулдаун и maxUses проверяются у получателя, per-kit право — у отправителя.
/kitreset/kitreset <kitname> [<player>]—neoessentials.kitreset по соглашениюReset a kit cooldownСбрасывает и кулдаун, и счётчик использований. Чужому игроку — neoessentials.kitreset.others на узле <player>. Консоль обязана указать цель. Цель только онлайн.
/kits/kits [page]—neoessentials.kits.listList available kitsТа же реализация, что /listkits: page ≥ 1, по 10 китов на страницу. Дерево регистрируется только если включён commands.listkits (флаг commands.kits сам по себе /kits не выключает). Игрок без neoessentials.kits.override видит лишь доступные ему киты, не полный админ-список.
/listkits/listkits [page]—neoessentials.kits.listList available kits (alias)Идентично /kits. Право neoessentials.kits.list. Экономическая цена kits.commandCosts.listkits списывается при каждом вызове, в том числе при листании страниц.
/showkit/showkit <kit>—neoessentials.showkit по соглашениюPreview kit contents without claimingАргумент — word, поэтому /showkit starter,vip (без пробелов) разобьётся по запятой и покажет несколько китов. Per-kit право не проверяется: достаточно neoessentials.showkit. Ничего не выдаёт. Регистрируется из MiscItemCommands, не из KitCommands.

Примеры#

Собрать стартовый кит из инвентаря#

Нужен набор, который новичок забирает раз в сутки, без правки файлов руками.

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

КлючПо умолчаниюОписание
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)

Права 8#

УзелВ реестреЧто даёт
neoessentials.kitresetреестр: нетReset own kit cooldown
neoessentials.kitreset.othersреестр: нетReset another player's kit cooldown
neoessentials.kits.createреестр: нетCreate kits via /createkit
neoessentials.kits.deleteреестр: нетDelete kits via /delkit
neoessentials.kits.listреестр: даList available kits
neoessentials.kits.nocooldownреестр: нетBypass kit cooldowns
neoessentials.kits.overrideреестр: нетOverride kit restrictions
neoessentials.kits.useреестр: даUse kit system

Подробное руководство#

Раздел ниже — исходная документация проекта (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 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