Dex Cosmetics
Шляпы. Крылья. Частицы снежной бури. Кастомные скины предметов. Всё на стороне сервера. Твоим игрокам не нужно ничего устанавливать.
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 492
- Подписчиков на Modrinth
- 5
- версии
- 4
- Обновлён
- 7 июня 20267 июн.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
Dex Cosmetics
Серверный мод на косметику для Fabric 1.21.1. Шляпы, предметы на спине (плащи, крылья, рюкзаки), скины для предметов и визуальные эффекты (частицы, светящиеся контуры, частицы в формате Bedrock). Устанавливается на 100% на сервере — ванильные клиенты видят всё благодаря автоматически раздаваемому ресурспаку Polymer.
Требования
- Minecraft: 1.21.1
- Загрузчик модов: Fabric 0.19.2 или новее
- Только на сервере — клиенты играют на ванилле; установка на клиент не нужна
Зависимости
| Зависимость | Версия | Тип | Роль |
|---|---|---|---|
fabric-api | 0.116.12+1.21.1 | Обязательно | Основные API Fabric (события, команды, сеть) |
fabric-language-kotlin | 1.13.11 / Kotlin 2.3.21 | Обязательно | Мод написан на Kotlin |
polymer | 0.9.19+1.21.1 | Обязательно | Серверные кастомные предметы + регистрация моделей |
text-placeholder-api | 2.4.2+1.21 | Обязательно (транзитивно) | Парсинг текста в стиле MiniMessage |
LuckPerms | 5.4 API | Опционально | Проверка прав для админ-команд; при отсутствии откатывается на ванильный op-уровень |
Cobblemon | 1.7.3+1.21.1 | Опционально | Нужен только для эффектов частиц снежной бури; проверяется во время работы |
Установка
- Закиньте jar мода в папку
mods/вашего сервера вместе с обязательными зависимостями (Fabric API, Fabric Language Kotlin, все четыре модуля Polymer, sgui, placeholder-api). - Запустите сервер один раз — при первом запуске он создаст
config/dex_cosmetics/с файлом настроек по умолчанию, примерами косметики и структурой папок для добавления своей. - (Опционально) Установите LuckPerms, если хотите доступ к админ-командам по правам. Без него админ-команды требуют op-уровень 4.
- (Опционально) Установите Cobblemon, если хотите эффекты частиц снежной бури. Без него эта косметика всё равно загружается, но ничего не отрисовывает.
Клиенты подключаются как обычно — Polymer-autohost автоматически раздаёт ресурспак при входе. По умолчанию пак помечен как обязательный; отказавшиеся игроки будут кикнуты. Это настраивается.
Конфигурация
Глобальный конфиг — config/dex_cosmetics/config.json
{
"require_resource_pack": true,
"resource_pack_kick_message": "This server requires the Dex Cosmetics resource pack.",
"autosave_interval_seconds": 300,
"particle_tick_budget_per_player": 32,
"admin_permission": "dexcosmetics.admin",
"allow_item_skin_sharing": true,
"rename_item_to_skin_name": false,
"resource_pack_mode": "auto",
"custom_model_data_start": 2000,
"menu_categories": {
"ITEM": true,
"HAT": true,
"BACK": true,
"EFFECT": true,
"BALLOON": false,
"POKEMON": false
},
"menu_focus": "HAT"
}require_resource_pack— еслиtrue, отказавшиеся от пака клиенты кикаются с сообщениемresource_pack_kick_message. Поставьтеfalse, чтобы пускать игроков без него (они увидят всё ванильным).autosave_interval_seconds— сейчас носит информационный характер; данные игроков сохраняются при каждой выдаче/изъятии/надевании.particle_tick_budget_per_player— сейчас носит информационный характер; косметика с частицами ограничивается черезinterval_ticksдля каждой косметики.admin_permission— нода прав LuckPerms, проверяемая для/cosmetics give/take/list/reload/generatepack. Без LuckPerms требуется op-уровень 4.allow_item_skin_sharing— еслиtrue(по умолчанию), предметы со скинами сохраняют скин при выбросе/обмене. Еслиfalse, компонент скина снимается в момент, когда предмет подбирает не владелец.rename_item_to_skin_name— еслиtrue, предметы с нанесённым скином показывают отображаемое имя косметики вместо ванильного имени предмета. Подмена имени происходит при синхронизации на клиентской копии, так что обмен не переименовывает сам стак навсегда.
Определения косметики — `config/dex_cosmetics/cosmetics//.json`
Один JSON-файл на косметику, сгруппированы в четыре подкаталога:
hats/— экипировка для головы (type: HAT)back/— плащи, крылья, рюкзаки (type: BACK)items/— скины для предметов в руке (type: ITEM)effects/— частицы, свечение, снежная буря (type: EFFECT)
Каждый файл определяет:
{
"id": "my_cosmetic",
"type": "HAT",
"display_name": "<gold>My Hat</gold>",
"description": ["Lore line 1", "Lore line 2"],
"model": "dex_cosmetics:hats/my_cosmetic",
"texture": "dex_cosmetics:hats/my_cosmetic/my_cosmetic",
"model_parent": "minecraft:item/generated",
"transform": {
"offset_x": 0, "offset_y": 0, "offset_z": 0,
"scale_x": 1, "scale_y": 1, "scale_z": 1
}
}По типам:
- HAT — использует
transform, чтобы запечь смещение/масштаб в перспективуdisplay.headмодели. - BACK — читается только
scale.x(равномерный масштаб через атрибут SCALE). Позиция задаётся ванильной логикой крепления на стойке для брони. - ITEM — нужен
item_skin: { compatible_items: [...] }. Каждая запись — это id предмета (minecraft:diamond_sword) или тег (#minecraft:swords). - EFFECT — нужен
effect: { kind: "particle" | "glow" | "snowstorm", ... }. Смотри примеры в комплекте вcosmetics/effects/.
Модели — `config/dex_cosmetics/model//.json`
Положи сюда экспорт из Blockbench с именем по id косметики; пак подхватит его автоматически. Если файла нет, создаётся простая модель {parent, layer0} из полей model_parent и texture косметики.
Для инструментов в руке (скины предметов и т.п.) убедись, что у модели есть "parent": "minecraft:item/handheld" и корректный display.
Текстуры — `config/dex_cosmetics/textures///`
Файл по пути textures/hats/my_hat/example.png попадает в пак как assets/dex_cosmetics/textures/hats/my_hat/example.png и доступен по ссылке dex_cosmetics:hats/my_hat/example. Файлы .mcmeta рядом с PNG проходят насквозь, так что анимированные текстуры работают.
Частицы снежной бури — `config/dex_cosmetics/snowstorm_particles/.particle.json`
Определения частиц в формате Bedrock. Поле description.identifier внутри JSON — это то, на что ссылается косметика EFFECT через effect.snowstorm.particle_id. BedrockParticleEffectRepository из Cobblemon подхватывает их во время сборки пака.
Возможности
Типы косметики
Шляпы — отправляются через фейковый EntityEquipmentUpdateS2CPacket, так что их рендерит ванильный конвейер брони на кости шлема. Поворот головы, смещение вперёд по наклону, идеальное отслеживание. Настоящий шлем носителя остаётся в его инвентаре нетронутым.
Предметы на спине — невидимая сущность-маркер, прикреплённая пассажиром к носителю, с косметическим предметом в слоте экипировки HEAD. Автоматически скрывается во время поз SWIMMING / FALL_FLYING / SLEEPING / SPIN_ATTACK и возвращается при выходе из позы.
Скины предметов — игроки применяют скины через GUI косметики, держа нужный предмет и кликая по иконке скина. Есть опциональная настройка, снимающая скин, когда предмет подбирает не владелец.
Эффекты — три вида через поле kind:
- Particle: ванильные частицы. Два режима создания — встроенные готовые формы (
point/trail/halo/orbit/square) с параметрами тип частицы + количество + радиус, ИЛИ сырые ванильные команды, выполняемые в позиции носителя с op-уровнем и без вывода в чат. - Glow: ванильный эффект статуса GLOWING, обновляемый каждый тик. Цвет контура для каждой косметики через членство в команде скорборда (одна команда `dex_glow_` на каждый цвет Formatting).
- Snowstorm: вспышка частиц в формате Bedrock через
SpawnSnowstormParticlePacketиз Cobblemon. Ограничивается поinterval_ticks, рассылается в пределахbroadcast_radiusблоков от носителя.
Личная собственность для каждого игрока
Учёт косметики для каждого игрока на базе SQLite. Игроки видят весь каталог в GUI, но могут надеть только ту косметику, которой владеют. Админы выдают/забирают её через команды.
Хранилище лежит в `/dex_cosmetics/cosmetics.db. Две таблицы: player_owned (uuid, cosmetic_id)иplayer_equipped (uuid, type, cosmetic_id)`. Схема создаётся при первом запуске.
Интеграция с кейсами / магазином
Существующие плагины кейсов, магазины и таблицы лута выдают косметику, выполняя:
/cosmetics give <player> <cosmetic_id>(или /cosmetics take, чтобы забрать). Это поддерживаемая точка интеграции — всё, что умеет выполнять консольную команду, может выдавать косметику.
Команды игрока
| Команда | Право | Описание |
|---|---|---|
/cosmetics | нет | Открывает GUI косметики |
/cosmetics remove | нет | Убирает нанесённый скин с предмета в руке |
| `/cosmetics give ` | админ | Выдаёт владение косметикой |
| `/cosmetics take ` | админ | Забирает владение |
| `/cosmetics list ` | админ | Показывает, чем владеет игрок |
/cosmetics reload | админ | Перезагружает все конфиги косметики и пересобирает ресурспак |
/cosmetics generatepack | админ | Вручную генерирует ресурспак |
Сборка ресурспака происходит на SERVER_STARTING после загрузки тегов:
CosmeticItems.registerAllвыделяет по одному CMD на каждую косметику + на каждый вариант (скин, предмет) черезPolymerResourcePackUtils.requestModel.DexCosmetics.buildResourcePackзапускаетRESOURCE_PACK_CREATION_EVENTот Polymer.- Обработчики события выполняют
pipeUserTextures,pipeSnowstormParticles,PackModelGenerator.writeAll,GlowIconGenerator.writeAllи записывают переопределения атласа блоков + частиц. - polymer-autohost раздаёт получившийся
polymer/resource_pack.zipпри последующих заходах.
Создание косметики
- Модель: в Blockbench сделайте косметику. Используйте тип проекта Java Block/Item, чтобы экспорт включал блоки
parentиdisplay. - Текстура: экспортируйте PNG и положите его в `config/dex_cosmetics/textures///.png`.
- Конфиг косметики: напишите JSON-файл в `config/dex_cosmetics/cosmetics//.json` (по образцу приложенных примеров).
- Файл модели (необязательно, но часто нужен): если у вас экспорт из Blockbench с несколькими текстурами, кастомными элементами и т. д., сохраните его как `config/dex_cosmetics/model//.json`.
- Перезагрузка:
/cosmetics reloadили перезапуск сервера. Игрокам нужно переподключиться, чтобы заново скачать обновлённый пак.
Частые вопросы
Как установить Dex Cosmetics?
Установите Fabric под свою версию Minecraft, скачайте Dex Cosmetics под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Dex Cosmetics?
У Dex Cosmetics есть сборки для Minecraft 1.21.1.
Нужен ли Dex Cosmetics на сервере?
Ставится только на сервер; игрокам ставить не нужно