chore(history): squash 16 commit(s) from 2026-09-09

- docs: Cosmetics Overhaul design spec (slot-based cosmetics + built-in head/back modules)
- chore: drop design doc, implementing directly from TODO.md
- feat: Cosmetics module overhaul — 8 body-zone slots + 3D preview screen
- feat: AlwaysVisibleHand module + KineticLyrics text scale & timing offset
- feat: KillEffect Portal/Tornado procedural shader modes
- feat: KineticLyrics sync — millisecond position prediction (playerctl-style)
- feat: SkyShader Nebula mode, BlockHighlight shader outlines, crosshairs
- feat: CombatLog module — damage dealt/taken log with DPS stats
- refactor(8.5.1): regroup mixins/ 108 files into domain leaf packages (<=4 each) + regenerate mixins.json
- refactor(8.5.1): split accessors into 12 groups, iris/sodium/security into leaves, fix plugin FQNs + mixins.json
- refactor(8.5.1): split visuals/ 67 files into esp/nametags/hats/effects/weather/scene/camera/player/items/fx packages; lyrics->lrc; member visibility fixes; configs untouched (module ids preserved)
- refactor(8.5.1): split features/gui/clickgui/settings 51 files into 18 leaf packages (core/color/slider/text/bind/...); visibility promotion only, no behavior changes
- refactor(8.5.1): split features/gui/hud/draggable/impl 40 files into stats/metrics/status/combat/panels/targethud/scripted leaves; TargetHudModel records nested; visibility-only
- refactor(8.5.1): split events tree (impl 32 -> 8 domains, top -> core/meta); TODO 8.5 progress notes
- refactor(8.5.1): split features/gui/chat 31 files into model/render/text/input/suggestions/menu/messages leaves
- fix(8.5.1 audit): delete dead unregistered ItemRenderStateLayerAccessor, drop ghost sodium FQNs from plugin, remove vestigial visuals.* star import
This commit is contained in:
loki5512344 2026-09-09 23:55:33 +02:00
parent 707820e418
commit fb6e6eb1d3
690 changed files with 5923 additions and 2774 deletions

85
TODO.md
View file

@ -29,6 +29,10 @@
- [x] Фаза 5: Нормализация модулей (ленивый Minecraft, GameClock)
- [x] Фаза 6: Тесты (EventBus, конфиг, утилиты) — см. `combatant-client-26.2/TODO.md`
- [ ] Фаза 7: Новые модули по мотивам SoupVisuals — см. ниже
- [ ] Фаза 8.5: Аудит структуры ≤200/≤4 (244 файла, 86 папок) — гейт перед Фазой 9.2,
план в `combatant-client-26.2/TODO.md`
- [ ] Фаза 9: Оптимизация FPS (9.1 фиксы мёртвых грузов → 9.2 модуль Optimize),
план в `combatant-client-26.2/TODO.md`
---
@ -58,6 +62,87 @@
иконки-спутники (Atom/Ball/Cat/Donut/Flame/Flower/Gem/Ghost/MCTiers), трейл
(цвет sync/custom, длина, толщина), звуки (типы + громкость), частицы
(у Soup 315 стр.). Референс: `other/Trinket.java`
- [ ] **Cosmetics Overhaul (Unified Cosmetics)** — сейчас модуль бесполезен (next/prev
keybind без экрана). План (обсуждён в брейнсторме, черновик, детали могут
измениться):
- **Слоты вместо типов**: новый `CosmeticSlot` enum — `MODEL, PET, HEAD,
SHOULDERS, BACK, WAIST, LEGS, HELD` (8 шт). `CosmeticType` (MODEL/PET/ACCESSORY)
остаётся внутри `CosmeticModel` как есть (анимация/рендер-логика не трогается).
- Аксессуары (ACCESSORY) получают поле `slot` — парсится из `avatar.json`
(`"slot": "head"`), при отсутствии — вывод по имени папки (существующая
эвристика witch/hat→HEAD, wing→BACK, wheel→WAIST, иначе→HELD).
- `CosmeticManager`: `EnumMap<CosmeticSlot, CosmeticModel>` вместо 3 полей.
MODEL/PET — по одному активному. 6 accessory-слотов — **можно носить
несколько одновременно** (шляпа + крылья + пояс разом).
- Экран `CosmeticsScreen`: левая панель — живая 3D-модель игрока
(`InventoryScreen.renderEntityInInventoryFollowsMouse` или свой вызов
EntityRenderDispatcher), drag ЛКМ по превью — вращение (yaw/pitch,
pitch ограничен ±30°), скролл — zoom (0.5–2.0), кнопка сброса угла.
Открывается через **ПКМ по модулю в ClickGUI** (спецкейс вместо обычной
settings-панели — прецедент есть в `ClickGuiEditorScreen`).
- Hotspot-зоны поверх 3D-модели (HEAD/SHOULDERS/BACK/WAIST/LEGS + иконка
HELD сбоку) — клик открывает правую панель выбора модели для этого слота.
- Offset/rotation/scale — **на слот** (не на модель, т.к. модулей может быть
десятки, а статичных SettingDef-полей на каждую не сделать): 6 стандартных
num()-хелперов модуля (per-slot), visibleWhen(активный слот). Смена модели
в слоте может потребовать подстройки — ок, вписывается в существующий
SettingDef/SettingFactory конвейер без новой инфраструктуры.
- Цвета из Theme.theme() (windowBg/accent/textMuted), файлы по правилам
≤200 строк/≤4 файла на папку: `CosmeticsModule`, `CosmeticsScreen`,
`CosmeticsSlot`(=CosmeticSlot), `CosmeticsSlotPanel`.
- i18n: `module.cosmetics.*`, `setting.cosmetics.active_slot`,
`offset_x/y/z`, `rotation`, `scale`, `setting.cosmetics.slot.<slot>` и т.д.
(en_us + ru_ru обязательно).
- Открытые вопросы для следующего захода: точные хитбокс-координаты зон
по проценту региона превью, формат хранения per-slot offset в .lvcfg,
нужен ли предпросмотр модели до эквипа в правой панели.
- **Портирование процедурных head/back-модулей в слоты** — из всех
`visuals/*` только 3 модуля реально являются «надетыми на игрока»
процедурными косметиками (нашёл через grep по HeadAnchor-хелперу):
- `ChinaHat` (+`ChinaHatModel`, `ChinaHatPalette`, 295+107+144 стр.) —
конус на голове → встроенная опция слота **HEAD**.
- `TazikHat` (859 стр.! требует разбивки на файлы ≤200 стр. при
портировании — геометрия/палитра/модуль отдельно, как у ChinaHat) —
«тазик»/чаша на голове → **HEAD**.
- `BackSword` (287 стр.) — катана на спине → **BACK**.
Остальные visuals-модули (ESP, Chams, Trails, Rain, PostFX и т.д.) —
НЕ переносятся, это общие эффекты, а не надеваемые предметы.
План: каждый становится встроенным вариантом (built-in entry, не
.bbmodel) внутри соответствующего слота — юзер выбирает между
своими .bbmodel-моделями И этими процедурными built-in вариантами
в одном и том же слоте. Настройки самого варианта (цвет/размер/сегменты
и т.д.) показываются в правой панели слота, когда built-in выбран
активным. Старые `@ModuleInfo`-модули `chinahat`/`tazikhat`/`backsword`
удаляются как отдельные модули из списка Visuals (их функциональность
полностью переезжает в Cosmetics) — конфиг-миграция/бэккомпат не нужны
(легит-клиент, публичного релиза со старыми конфигами ещё не было —
уточнить у пользователя перед удалением).
- **"None" в каждом слоте** — обязательный первый вариант в списке выбора
любого слота (Model/Pet/Head/Shoulders/Back/Waist/Legs/Held): "ничего
не надето", слот пуст, `CosmeticManager.active` для этого слота = null.
Не путать с выключенным модулем `CosmeticDisplay` целиком — None это
per-slot состояние, остальные слоты продолжают рендериться.
- Подтверждено пользователем: точно только 3 built-in кандидата
(ChinaHat/TazikHat/BackSword), остальные visuals-модули не переносятся.
- **Решённые вопросы (финал черновика):**
1. Hotspot-координаты — **вариант B**: проекция костей игрока (голова/тело/
ноги vanilla-модели) в экранные координаты через `ScreenProjection`
(уже есть в `render/helpers/`), а не фиксированные проценты региона —
точнее держит зоны при вращении/приседе. Fallback на фикс-проценты,
если в реализации окажется дороже, чем стоит.
2. Хранение offset/rot/scale — **обычные `NumberValue`-поля модуля**
(6 слотов × offset_x/y/z/rot/scale), сохраняются в `.lvcfg` как
обычные настройки — без нового ConfigValue-типа.
3. Правая панель — **live-apply**: клик по модели в списке слота сразу
применяет и показывает на превью, без отдельной кнопки Apply.
4. Built-in процедурные варианты (ChinaHat/TazikHat/BackSword) — **просто
обычные записи в списке слота** (с иконкой-превью), не выделяются в
отдельную секцию; настройки открываются так же, как у .bbmodel-моделей.
5. `TazikHat` (859 стр.) при портировании — **разбить как ChinaHat**:
`TazikHatGeometry` + `TazikHatPalette` + встраиваемый рендер-класс без
собственного `@ModuleInfo`/Module-обвязки (вызывается из слота HEAD).
6. Старые модули `chinahat`/`tazikhat`/`backsword` — **удаляются
полностью** из списка Visuals, функциональность только в Cosmetics.
- [ ] **Balancer** (mctiers) — тиры игроков с mctiers.info (у Soup отдельная категория
MCTiers). Референс: `mctiers/Balancer.java`
- [ ] **HandsShader: новые шейдеры руки** — у Soup 10 режимов (Solid, Chroma, Balatro,