head-vault
Серверный мод на Fabric для Minecraft 26.1.2, который позволяет игрокам просматривать и покупать более 90 000 декоративных кастомных голов через внутриигровой GUI без необходимости в клиентских модах или ресурспаках.
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 692
- Подписчиков на Modrinth
- 4
- версий
- 6
- Обновлён
- 28 июля 202628 июл.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
🗿 HeadVault
Серверный магазин кастомных голов для Minecraft Fabric SMP. Просматривайте более 90 000 декоративных голов игроков в аккуратном сундучном GUI — открывайте его командой, NPC-торговцем или именованным жителем. Без клиентских модов. Без ресурспаков. Ванильные игроки просто играют.
Fabric · Только серверная часть
✨ Почему HeadVault?
Кастомные головы оживляют постройки — но выдавать их по одной команде за раз утомительно. HeadVault превращает весь каталог minecraft-heads.com в игровой магазин, который ваши игроки могут просматривать и покупать так, как удобно вам: командой, установленным NPC или жителем, которому вы дали имя. Он работает только на сервере, так что никому не нужно ничего устанавливать.
🎯 Возможности кратко
- 🛒 Настоящий магазинный GUI — категории → постраничная сетка голов → клик для покупки. Отрисовывается нативно на ванильных клиентах.
- 🌍 Весь каталог — около 90 тыс. голов в 10 категориях, загружается в реальном времени и кэшируется на диск. Обновляется в фоне; сервер никогда не лагает.
- 🔌 Всегда работает офлайн — API недоступен? Он отдаёт последний кэш, а затем снимок, вшитый в jar.
- 🔎 Поиск — находите головы по имени или тегу по всему каталогу.
- 🙂 Головы игроков — введите любой ник и получите голову этого игрока как кликабельный результат.
- 🚪 Три способа входа — команда
/heads, постоянные NPC-торговцы и именованные жители. Комбинируйте как угодно. - 🧟 Любой моб может быть торговцем (с 1.1.0) — не только жители. Дайте имя зомби, корове, кому угодно — и сделайте из него магазин. Выбирайте, какие типы мобов подходят, через режим «все», белый или чёрный список.
- 🧊 Заморозка именованных торговцев (с 1.1.0) — опционально: когда бирка с именем превращает моба в торговца, зафиксируйте его на месте (отключает AI), чтобы он не ушёл, как у заспавненного NPC. Возвращается в норму, как только вы переименуете его обратно.
- 💰 Гибкая экономика — бесплатно, за предметы или за опыт (уровни/очки), с ценой для каждой категории. Покупки атомарные.
- 📦 Головы стакаются — одинаковые головы складываются до 64.
- ♻️ Горячая перезагрузка — измените конфиг и выполните
/headvault reload. Без перезапуска. - 🔐 Права — совместимо с LuckPerms, с разумными ванильными OP-фолбэками, когда мода на права нет.
- 🪝 Расширяемость — событие
PurchaseEvent, которое могут слушать другие моды.
🚀 Начало работы
- Требования: сервер на Fabric 26.1.2 или новее с Java 25 или новее и установленным Fabric API.
- Поместите `head-vault-.jar
в папкуmods/` вашего сервера. (sgui и fabric-permissions-api встроены внутрь — больше ничего устанавливать не нужно.) - Запустите сервер. HeadVault запишет конфиг в
config/headvault/config.jsonи начнёт скачивать каталог голов в фоне. - Выполните
/heads— и вы в магазине. 🎉
При первом запуске показывается небольшая встроенная выборка, пока полный каталог не докачается (несколько секунд).
🚪 Режимы доступа
Включайте любую комбинацию в конфиге.
| Режим | Как работает |
|---|---|
| Команда | /heads открывает магазин (по правам). |
| NPC | `/headvault npc spawn ставит неуязвимого торговца-жителя без AI. Он сохраняется между перезапусками; ПКМ открывает магазин. Управление черезnpc list/npc remove`. |
| Именованный житель | Дайте любому жителю настроенное имя (по умолчанию «Head Trader»), и ПКМ по нему откроет магазин для всех — права не нужны. Возьмите бирку, чтобы переименовать его обратно в обычного. С 1.1.0: через access.villager.mode вы можете разрешить любому мобу быть именованным торговцем — не только жителям (все / белый список / чёрный список); а access.villager.freeze может зафиксировать нового торговца на месте. |
💰 Экономика
Выберите один глобальный режим (с необязательными переопределениями для отдельных категорий):
| Режим | Игроки платят… |
|---|---|
FREE | ничего |
ITEM | настраиваемый предмет × количество (например, 1 алмаз) |
XP_LEVELS | уровни опыта |
XP_POINTS | общее количество очков опыта |
Каждая покупка заново проверяет стоимость в момент клика и списывает атомарно — с игрока никогда не спишут плату, не выдав его голову. Головы с ником игрока используют глобальную цену. Выдайте headvault.free-bypass, чтобы кто-то мог покупать бесплатно.
⌨️ Команды
| Команда | Описание | Право (по умолчанию) |
|---|---|---|
/heads | Открыть магазин | headvault.command.use (OP 2) |
| `/heads search ` | Поиск голов по имени/тегу | headvault.command.search |
| `/heads player ` | Получить голову конкретного игрока | headvault.command.use |
| `/heads give ` | Выдать голову бесплатно (head-id = её UUID) | headvault.command.give / headvault.admin |
/headvault reload | Перезагрузить конфиг | headvault.admin |
| `/headvault npc spawn ` | Заспавнить NPC магазина там, где вы стоите | headvault.npc.manage |
/headvault npc remove | Удалить NPC, на которого вы смотрите | headvault.npc.manage |
/headvault npc list | Список загруженных NPC магазина | headvault.npc.manage |
🔐 Права
| Нода | Даёт |
|---|---|
headvault.command.use | Открыть магазин, /heads player |
headvault.command.search | /heads search |
headvault.command.give | /heads give |
headvault.admin | /headvault reload, /heads give |
headvault.npc.manage | Спавн / удаление / список NPC |
headvault.free-bypass | Всегда платить ничего |
Нет мода на права? Ноды команд откатываются к ванильному уровню OP, а режимы NPC / именованного жителя работают для всех без каких-либо прав. С LuckPerms (или любым провайдером) выдавайте ноды как обычно:
/lp group default permission set headvault.command.use true⚙️ Конфигурация
Конфиг лежит в config/headvault/config.json и перезагружается на лету командой /headvault reload. (Это JSON, а не YAML — под капотом Gson.) Вот полный файл со всеми опциями:
{
"_schemaVersion": 1,
"catalog": {
"source": "v1", // откуда берутся головы: "v1" | "v2" | "bundled"
"refreshIntervalHours": 24, // как часто заново скачивать каталог
"requestTimeoutSeconds": 15, // таймаут сети на запрос
"maxRetries": 2, // повторы на категорию перед сдачей
"v2AppUuid": "", // только v2: ваш зарегистрированный App UUID
"v2UrlTemplate": "", // только v2: свой эндпоинт; плейсхолдеры {category}, {appUuid}
"userAgent": "Mozilla/5.0 ... Chrome/126.0.0.0 Safari/537.36" // отправляется с запросами (см. примечание)
},
"economy": {
"mode": "FREE", // "FREE" | "ITEM" | "XP_LEVELS" | "XP_POINTS"
"item": { "id": "minecraft:diamond", "amountPerHead": 1 },
"xp": { "amountPerHead": 1 },
"categoryOverrides": {
// переопределить цену для категории (ключ = слаг категории):
// "monsters": { "mode": "ITEM", "item": { "id": "minecraft:netherite_ingot", "amountPerHead": 1 } }
}
},
"access": {
"command": { "enabled": true, "permissionLevel": 2 },
"npc": { "enabled": true },
"villager": {
"enabled": true,
"name": "Head Trader",
"caseInsensitive": true,
// ── начиная с 1.1.0 ──
"mode": "ONLY_VILLAGER", // какие мобы могут быть именованным торговцем: "ONLY_VILLAGER" | "ALL" | "MOB_WHITELIST" | "MOB_BLACKLIST"
"entityWhitelist": [], // id типов сущностей, разрешённых при mode = "MOB_WHITELIST", например ["minecraft:zombie"]
"entityBlacklist": [], // id типов сущностей, запрещённых при mode = "MOB_BLACKLIST"
"freeze": false // заморозить торговца с именованным тегом на месте (отключает ИИ)
}
},
"ui": {
"title": "HeadVault", // заголовок окна магазина
"showPriceInLore": true, // показывать цену на каждой голове
"headsPerPage": 45 // 9–45 голов на страницу
},
"logging": { "purchaseVerbosity": "INFO" } // "OFF" | "INFO" | "DEBUG"
}
### Справочник по полям
| Ключ | По умолчанию | Что делает |
|---|---|---|
| `catalog.source` | `"v1"` | `v1` = эндпоинт без токена, отдающий весь каталог (рекомендуется). `v2` = лицензированный REST API (нужен App UUID). `bundled` = только офлайн-снимок. |
| `catalog.refreshIntervalHours` | `24` | Интервал фонового обновления. Каталог скачивается заново, только если он старше этого срока. |
| `catalog.requestTimeoutSeconds` / `maxRetries` | `15` / `2` | Настройки устойчивости к сетевым сбоям. |
| `catalog.v2AppUuid` / `v2UrlTemplate` | `""` | Используются только когда `source` равен `v2`. Зарегистрируйтесь на minecraft-heads.com, затем укажите UUID; при необходимости поправьте шаблон под официальную документацию v2. |
| `catalog.userAgent` | строка браузера | minecraft-heads.com **отклоняет не-браузерные агенты (HTTP 403)**, поэтому по умолчанию используется браузерная строка. Оставьте как есть, если не уверены, что API примет ваш агент. |
| `economy.mode` | `"FREE"` | Глобальный режим оплаты. |
| `economy.item` / `economy.xp` | diamond×1 / 1 | Глобальная цена для режимов `ITEM` / `XP_*`. |
| `economy.categoryOverrides` | `{}` | Переопределение цен по категориям, ключ — слаг (`alphabet`, `animals`, `blocks`, `decoration`, `food-drinks`, `humanoid`, `humans`, `miscellaneous`, `monsters`, `plants`). |
| `access.command.enabled` / `permissionLevel` | `true` / `2` | Включает магазин `/heads` и его уровень OP по умолчанию. |
| `access.npc.enabled` | `true` | Включает NPC-торговцев. |
| `access.villager.enabled` / `name` / `caseInsensitive` | `true` / `Head Trader` / `true` | Включает режим именованного торговца, имя-триггер и учёт регистра при совпадении имени. |
| `access.villager.mode` *(с 1.1.0)* | `"ONLY_VILLAGER"` | Какие типы сущностей могут быть именованным торговцем: `ONLY_VILLAGER` (только жители — по умолчанию, поведение не меняется), `ALL` (любой моб), `MOB_WHITELIST` (только id из `entityWhitelist`), `MOB_BLACKLIST` (любой моб, кроме id из `entityBlacklist`). |
| `access.villager.entityWhitelist` / `entityBlacklist` *(с 1.1.0)* | `[]` / `[]` | Id типов сущностей (например, `"minecraft:zombie"`; голый `"zombie"` подразумевает пространство имён `minecraft`, совпадение без учёта регистра), используемые режимами `MOB_WHITELIST` / `MOB_BLACKLIST`. |
| `access.villager.freeze` *(с 1.1.0)* | `false` | Когда табличка с именем превращает моба в торговца, заморозить его на месте — отключает AI, чтобы он перестал бродить, как заспавненный NPC. Автоматически отменяется, когда моба переименовывают так, что он больше не подходит. Выкл. (по умолчанию) = поведение не меняется. |
| `ui.title` / `showPriceInLore` / `headsPerPage` | `HeadVault` / `true` / `45` | Косметические настройки магазина. |
| `logging.purchaseVerbosity` | `"INFO"` | Насколько подробно покупки пишутся в консоль. |
### О источнике каталога
minecraft-heads.com предлагает два API:
- **`v1`** *(по умолчанию)* — эндпоинт `scripts/api.php`. **Без токена**, отдаёт весь каталог. Официально «устарел», но работает по состоянию на 2026; сайт блокирует не-браузерные User-Agent, поэтому стандартный `userAgent` выглядит как браузерный.
- **`v2`** — текущий лицензированный REST API. Требует бесплатный **зарегистрированный App UUID** и видимую атрибуцию Minecraft-Heads.com; коммерческое распространение без одобрения запрещено. Переключайтесь на него, если v1 когда-нибудь отключат.
- **`bundled`** — вообще не обращается к сети; отдаёт небольшой снимок, вшитый в jar.
Если живой источник недоступен, HeadVault автоматически переключается на последний кэш, затем на вшитый снимок — магазин никогда не гаснет.
## 🙌 Благодарности
- Данные голов с [minecraft-heads.com](https://minecraft-heads.com).
- [sgui](https://github.com/Patbox/sgui) и [fabric-permissions-api](https://github.com/lucko/fabric-permissions-api) за GUI и права.
- Вдохновлено [HeadIndex](https://github.com/PotatoPresident/HeadIndex).
## 📄 Лицензия
Распространяется под лицензией MIT.Частые вопросы
Как установить head-vault?
Установите Fabric под свою версию Minecraft, скачайте head-vault под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть head-vault?
У head-vault есть сборки для Minecraft 26.1.2–26.2.
Нужен ли head-vault на сервере?
Ставится только на сервер; игрокам ставить не нужно