LoVisual/TODO.md
loki5512344 25060c9fa9 chore(history): squash 6 commit(s) from 2026-09-16
- feat(balancer): новый модуль Balancer + команда %tier — тиры с mctiers.com
- docs(todo): отмечен Balancer как выполненный
- feat(trinket): новый модуль Trinket — прыгающий шарик-компаньон у ног игрока
- docs(todo): отмечен Trinket как выполненный
- feat(chams): добавлен режим Invert руки (HandsShader) — закрывает Фазу 7
- docs(todo): Фаза 7 полностью закрыта
2026-09-16 10:11:16 +02:00

11 KiB
Raw Blame History

LoVisual

Проект состоит из одного компонента — мода.

Компонент Стек TODO
combatant-client-26.2/ Java 25, Fabric (MC 26.2) combatant-client-26.2/TODO.md

Лаунчер (Rust + Slint) и backend (Rust + axum) удалены из проекта — развитие только мода.


Правила (для мода, продублированы в его TODO)

  • KISS / DRY / SOLID
  • Макс. 200 строк на файл (фасады-делегаты исключение)
  • Макс. 4 файла на папку
  • Никакого статика, никаких this-escape, никаких мёртвых миксинов
  • Без пустышек; каждый этап компилируется (./gradlew build)
  • Тесты обязательны для новых модулей (JUnit)

Статус

  • Фаза 1: Ребрендинг combatant → lovisual
  • Фаза 2: Выкинуть Runtime/JarReplacement + Panic
  • Фаза 3: Разбивка 12 файлов-гигантов
  • Фаза 3.5: Удаление читерских модулей (легит-направление)
  • Фаза 4: Security (BackdoorProtection, StaffTracker)
  • Фаза 5: Нормализация модулей (ленивый Minecraft, GameClock)
  • Фаза 6: Тесты (EventBus, конфиг, утилиты) — см. combatant-client-26.2/TODO.md
  • Фаза 7: Новые модули по мотивам SoupVisuals — ЗАВЕРШЕНА 2026-09-16 (Cosmetics Overhaul 2026-09-11; Gps/HitBubbles/AmbientParticles/EndCrystal/Balancer/Trinket/ HandsShader — 2026-09-15…16, см. ниже)
  • Фаза 8.5: Аудит структуры ≤200/≤4 — 8.5.1 (папки >4) ЗАВЕРШЕНА 2026-09-10 (0 папок >4, коммиты 8846d53…303b17e); далее 8.5.2 (гиганты >600), план в combatant-client-26.2/TODO.md
  • Фаза 9: Оптимизация FPS — 9.1 (мёртвые грузы) ЗАВЕРШЕНА 2026-09-11 (137121e…4d60d3d); 9.2 Optimize гейтится Фазой 8.5, 9.3 A/B-мерка needs запуск на Windows

Фаза 7: Новые модули — референс SoupVisuals

Референс: ref/soupvisuals-src/ — SoupVisuals 3.2.0 (MC 1.21.11, лицензия SOUP-1.0). Код референса НЕ копируем (чужая лицензия + декомпил) — только пере-реализация идей под наши правила (≤200 строк/файл, ≤4 файла/папку, без статики, тесты). Модули референса лежат в ref/soupvisuals-src/padej/soup/implement/features/modules/.

  • Hitboxes (visuals) — цветные хитбоксы сущностей, как у Soup: ТОЛЬКО рендер контейнера с настройкой цвета/видимости, БЕЗ увеличения хитбокса (увеличение — чит, удалён в Фазе 3.5). Референс: visuals/Hitboxes.java
  • Watermark (HUD, draggable) — обещан в README, в коде отсутствует
  • Gps (world) — ЗАВЕРШЕНО 2026-09-15: компас-стрелка + маркер к точке (visuals/world/Gps.java, util/world/GpsBearing.java чистая математика + тесты, команда %gps <x> <y> <z> | clear). Референс: world/Gps.java — идея взята (стрелка+маркер+дистанция+авто-удаление), код не копировался. Xaero-связка НЕ сделана (была опциональной идеей, не в скоупе запроса). Коммит fb0b288.
  • Light (world) — кастомный цвет освещения (у Soup 41 стр.). Референс: world/Light.java
  • HitBubbles (particles) — ЗАВЕРШЕНО 2026-09-15: отдельный модуль visuals/effects/HitBubbles.java (не режим HitEffect.BUBBLES — независимое включение, трёхфазная анимация появление/жизнь/исчезновение через новый ThreeStageProgress). Заодно вынесены общие хелперы из HitEffect (DRY): AttackHitPoint, OrientedQuadRenderer, AnimatedColorModeOptions. Референс: particles/HitBubbles.java (идея взята, код не копировался; интерполяции/множественные текстуры Soup не портированы). Коммит 5f2fc70.
  • AmbientParticles + FireFlyParticle (particles) — ЗАВЕРШЕНО 2026-09-15: модуль visuals/particles/AmbientParticles.java, два режима — Ambient (плывущие мошки) и Firefly (блуждание + кольцевой буфер шлейфа вместо Trail-объектов референса). 19 визуальных стилей референса (Stars/Hearts/Bloom/.../Pyramid, asset-тяжёлые) НЕ портированы — фича-крип чит-клиента вне направления проекта; цвет через уже существующий AnimatedRenderColors вместо своей Sync/Custom-системы. Коммит 28ec166.
  • NameProtect (misc) — подмена своего ника и ников друзей в тексте чата/скорборда (у Soup 42 стр.). Референс: other/NameProtect.java
  • EndCrystal (visuals) — ЗАВЕРШЕНО 2026-09-15: visuals/scene/EndCrystal.java + mixins/render/entity/EndCrystalRendererMixin.java (WrapOperation на ModelPart.render, различает 2 вызова glass + 1 cube счётчиком-ordinal — тонировка/скрытие частей) + inject в ClientLevelMixin.removeEntity (осколки-вспышка на месте разрушения, т.к. ваниль убирает сущность мгновенно). Референс: other/EndCrystal.java — идея взята (кастомный цвет, "доиграть" разрушение), Sync/Custom×4-цвета+Wave/Vertex упрощены до общего AnimatedRenderColors. Коммит 50db8e3.
  • Trinket (не "2.0" — CosmeticDisplay удалён откатом 2026-09-11, апгрейдить нечего) — ЗАВЕРШЕНО 2026-09-16: отдельный модуль visuals/items/Trinket.java в стиле текущих ChinaHat/TazikHat. util/physics/TrinketPhysics (чистая, тесты) — шарик на пружине у ног игрока (гравитация/отскок/тетер). Рендер — тонированный billboard (наш AnimatedRenderColors) + затухающий шлейф (кольцевой буфер) + звук на отскок (ванильный SoundEvents.SLIME_JUMP). Библиотека 10 иконок-спутников референса и 8 кастомных звуковых тем НЕ портированы — нужны новые ассеты. Референс: other/Trinket.java (там тоже почти нет реализации — только настройки). Коммит 840a716.
  • Cosmetics Overhaul (Unified Cosmetics) — ЗАВЕРШЁН 2026-09-11: слоты CosmeticSlot (MODEL/PET/HEAD/SHOULDERS/BACK/WAIST/LEGS/HELD), парсинг slot из avatar.json + эвристика по имени папки, CosmeticManager на EnumMap (аксессуары — несколько одновременно), CosmeticsScreen (3D-превью drag/zoom + хотспоты + правая панель live-apply с "None" первым), per-slot offset/rot/scale через NumberValue-поля, built-in ChinaHat/TazikHat/BackSword в cosmetics/builtin/ (старые модули chinahat/tazikhat/backsword удалены), i18n en+ru, тесты CosmeticSlotTest/CosmeticsHotspotTest. - CosmeticDisplay 232 / TazikHatRenderer 242 / BackSwordRenderer 231 >200 — разбиты: CosmeticDisplay 196 + CosmeticBuiltins (значения+диспетчер built-in), TazikHat 186 (палитра-математика переиспользует ChinaHatPalette), BackSword 200 (edge/glow слиты в параметризованный drawKatana). - Не сделано из плана (следующий заход): иконки-превью built-in в списке слота, правка слотов SHOULDERS/LEGS/PET из экрана (сейчас только HEAD/BACK built-in), предпросмотр до эквипа.
  • Balancer (mctiers) — ЗАВЕРШЕНО 2026-09-16: features/module/modules/misc/Balancer.java (fixType Vanilla/UHC/Pot/NethOP/SMP/Sword/Axe/Mace) + util/mctiers/MCTiersCache (асинхронный кэш, паттерн SkinManager) + util/mctiers/MCTiersTier (форматирование, тесты) + команда %tier <ник> [режим]. Референс mctiers/Balancer.java почти пуст — логика была в недоступной McTiersModule-базе; реальный публичный API mctiers.com найден и проверен через сторонний open-source плагин (sinnayuh/MCTier): GET https://mctiers.com/api/search_profile/<username>. Коммит cf81ee4.
  • HandsShader — ЗАВЕРШЕНО 2026-09-16: сверка показала, что Chams уже реализует 9/10 режимов Soup (Solid/Chroma/Balatro/Smoke/Stripes/Glow/Glass/Snow + свои Metallic/Noise) и полный dual/blend-набор (Mix/Add/Multiply/Screen/Overlay/ Difference, HandBlendUniforms) — сверх ожиданий. Не хватало только "Invert": добавлен hand_chams_invert.frag (RGB-инверт под маской руки через уже существующий UBO HandChams/u_Mix.x, без HSV-тумблеров и edge-glow референса — это дублировало бы наш Glow) + регистрация пайплайна + вписан в оба mode-списка Chams (основной и dual shader1/shader2). Референс: visuals/HandsShader.java. Коммит 76ffdec. Это был последний пункт Фазы 7 — SoupVisuals-раздел закрыт полностью (Gps/HitBubbles/AmbientParticles/EndCrystal/Balancer/Trinket/HandsShader).
  • Фикс ChinaHat — текущая геометрия кривая (смахивает на самбреро/зонт); переделать модель в нормальную конусную шляпу по референсу Soup (visuals/ChinaHat.java + ChinaHatModel.java).