chore(history): squash 10 commit(s) from 2026-07-31
- feat: Фаза 1 ребрендинг combatant → lovisual + восстановление config - refactor: Фаза 2 — выкинуть Runtime/JarReplacement, заменить на Lifecycle - refactor: Фаза 3.5 — удалить читерские модули, ESP под легит - refactor: Фаза 3 — разбить Renderer2D (3379→2150 фасад + 14 хелперов ≤200) - refactor: Фаза 3 — разбить BetterChatRenderer (2870→210 фасад + 21 хелпер ≤200) - refactor: Фаза 3 — разбить UnifiedSettingRenderer (2798→208 фасад + 24 хелпера ≤200) - refactor: Фаза 3 — разбить ClickGuiRenderer (1887→542 фасад + 15 хелперов ≤200) - refactor: Фаза 3 — разбить NameTags (1791→438 фасад + 11 хелперов ≤200) - refactor: Фаза 3 — разбить TargetHud (1655→340 фасад + 11 хелперов ≤200) - refactor: Фаза 3 — разбить ESP (1538→269 фасад + 11 хелперов ≤200)
This commit is contained in:
parent
8084ac50b3
commit
52d87368c9
1595 changed files with 35857 additions and 51145 deletions
123
combatant-client-26.2/TODO.md
Normal file
123
combatant-client-26.2/TODO.md
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
# LoVisual Mod (combatant-client-26.2) — план переписи
|
||||
|
||||
Мод — форк Combatant Client, переписываем под LoVisual.
|
||||
|
||||
## Правила (ОБЯЗАТЕЛЬНЫЕ, нарушение = откат)
|
||||
- **KISS / DRY / SOLID** — простая структура, без оверинжиниринга
|
||||
- **Макс. 200 строк на файл** (было >1500) — превышение = разбить на модули
|
||||
- **Макс. 3 файла на папку** — больше = новая подпапка по смыслу
|
||||
- **Никакого статика** — `Minecraft.getInstance()` только лениво, никогда в поле
|
||||
- **Никаких this-escape** — конструктор не публикует `this`
|
||||
- **Никаких мёртвых миксинов** — миксин только если реально нужен; `cancellable=true` только при реальном cancel
|
||||
- **Без пустышек** — файл без реализации не создаётся
|
||||
- **Каждый этап компилируется** — `./gradlew build` перед переходом к следующему
|
||||
- **Тесты обязательны** для новых модулей (JUnit)
|
||||
|
||||
---
|
||||
|
||||
## СТАТУС ПРОБЛЕМ (что вижу сейчас)
|
||||
|
||||
### 1. Ребрендинг не закончен (пункт 2)
|
||||
- 288 файлов / **1464 упоминания** `combatant` в main-коде
|
||||
- Классы: `CombatantRenderSystem`, `CombatantRenderEngineBootstrap`, `CombatantRenderPipelines`, `CombatantVulkanBackend`, `CombatantFrameGraph`, `CombatantTerrainVertex` и др.
|
||||
- Заголовки файлов: «This file is part of the Combatant Client distribution» / `copyright (c) pivosos2007`
|
||||
|
||||
### 2. Файлы-гиганты (пункт 3) — 12 файлов > 1500 строк
|
||||
| Файл | Строк |
|
||||
|------|-------|
|
||||
| render/engine/renderer/Renderer2D.java | 3379 |
|
||||
| features/gui/chat/BetterChatRenderer.java | 2870 |
|
||||
| features/gui/clickgui/settings/UnifiedSettingRenderer.java | 2798 |
|
||||
| features/module/modules/player/Scaffold.java | 2416 |
|
||||
| features/module/modules/combat/AttributeSwap.java | 1922 |
|
||||
| features/gui/clickgui/ClickGuiRenderer.java | 1900 |
|
||||
| features/module/modules/visuals/NameTags.java | 1791 |
|
||||
| features/module/modules/combat/ElytraTarget.java | 1711 |
|
||||
| features/gui/hud/draggable/impl/TargetHud.java | 1687 |
|
||||
| features/module/modules/visuals/ESP.java | 1520 |
|
||||
| features/module/modules/combat/AutoCrystal.java | 1516 |
|
||||
| features/gui/hud/nondraggable/impl/CustomBar.java | 1496 |
|
||||
|
||||
### 3. Runtime / JarReplacement (пункт 4)
|
||||
- `runtime/` (ClientRuntime, RuntimeGate, ClientRuntimeState, SOFT_PANIC/JAR_REPLACEMENT_PANIC, shutdown/resume-участники)
|
||||
- `runtime/loader/` (JarReplacementCoordinator, LoaderBridge, PanicOnlyJarReplacementCoordinator)
|
||||
- **Моё предложение: выкинуть.** Живая замена jar в памяти — источник classloader-утечек, хрупкая, для клиента не нужна (обновление делает лаунчер). Заменить на простой Lifecycle.
|
||||
|
||||
### 4. Security (пункт 7)
|
||||
- `features/security/BackdoorProtection` — на деле защита от SSRF/translate-инъекций (порт ExploitPreventer, MIT). Полезное, но `enum`-синглтон со статикой.
|
||||
- `features/relations/StaffTracker` + `StaffHeuristicsMatcher` — детект «стафа» по эвристикам TAB. Сомнительно, решить оставить/выкинуть.
|
||||
|
||||
### 5. Тесты (пункт 6)
|
||||
- 5 тестов на ~213k строк. Добавлять по мере переписи модулей.
|
||||
|
||||
---
|
||||
|
||||
## Фаза 1: Ребрендинг (пункт 2)
|
||||
- [x] **Восстановлен `config/`-пакет** (55+3 файла) из `ref/zip/combatant-client-26.2 (1).zip` — он отсутствовал в форке, без него проект не собирался. Переименован `combatant.client.config` → `dev.loki.lovisual.config`. `compileJava` ✓
|
||||
- [x] Заменить `combatant` → `lovisual` в main-коде (1464 вхождения, 288 файлов)
|
||||
- [x] Переименовать классы `Combatant*` → `LoVisual*` (23 шт., включая `IrisCombatantFrameHooks` → `IrisLoVisualFrameHooks`)
|
||||
- [x] Заголовки файлов → LoVisual, пересобрать копирайты (GPLv3 форка)
|
||||
- [x] Проверить `fabric.mod.json` / `lovisual.mixins.json` на остатки
|
||||
- [x] Проверить строки/сообщения/логи на «combatant»
|
||||
- [x] JNI-имена в native: `Java_combatant_client_` → `Java_dev_loki_lovisual_` (34 шт.) + FindClass-пути
|
||||
|
||||
### Проверка: `rg -i combatant src` → 0 ✓, `./gradlew build` ✓ (1406 файлов изменено)
|
||||
|
||||
## Фаза 2: Выкинуть Runtime/JarReplacement (пункт 4)
|
||||
> **Вместе с рантаймом удалить и модуль Panic** (`features/module/modules/misc/Panic.java`),
|
||||
> интерфейс `RuntimeControlModule`, команду `RuntimeCommand` и все ветки на них
|
||||
> в `ModuleManager`/`Module`. Panic — единственная реализация `RuntimeControlModule`,
|
||||
> без него они становятся мёртвым кодом.
|
||||
- [x] Удалить `runtime/` и `runtime/loader/` (14 файлов)
|
||||
- [x] Удалить `Panic.java` + `RuntimeControlModule.java` + `RuntimeCommand.java`
|
||||
- [x] Убрать ветки `instanceof RuntimeControlModule` и `tickRuntimeControllers()` из ModuleManager/Module
|
||||
- [x] Убрать `RuntimeGate` из точек входа (LoVisual.java, модули, рендер) — заменён на `Lifecycle`
|
||||
- [x] Заменить на простой Lifecycle-класс (`dev.loki.lovisual.Lifecycle`: INIT → ACTIVE → SHUTDOWN, гейты `canRunRender/Hud/ShaderBridge` + `RenderResourceReadiness`)
|
||||
- [x] Panic-фичи удалены; `ModuleManager.disableAll()` оставлен как простая утилита
|
||||
- [x] Мёртвые cleanup-методы удалены (`shutdownForRuntime`, `clearRuntimeReferences`, `VanillaChatRuntimeCleanup`, i18n-ключи panic/runtime)
|
||||
|
||||
### Проверка: `./gradlew build` ✓, тесты ✓ (13), `rg runtime-подсистема` → 0
|
||||
|
||||
## Фаза 3: Разбивка файлов-гигантов (пункт 3) — ОТЛОЖЕНА, сначала чистка модулей
|
||||
- [ ] Сначала удалены читерские модули (см. Фазу 3.5) — рефакторить удалённые файлы не нужно
|
||||
- [ ] Renderer2D (3379) → renderer + пакеты (текст, примитивы, deferred-слои)
|
||||
- [ ] BetterChatRenderer (2870) → рендер, парсинг, кэш
|
||||
- [ ] UnifiedSettingRenderer (2798) → по типам настроек
|
||||
- [ ] ClickGuiRenderer (1900), NameTags (1791), TargetHud (1687), ESP (1538), CustomBar (1495)
|
||||
|
||||
### Проверка: после каждого файла `./gradlew build`; цель ≤200 строк/файл
|
||||
|
||||
## Фаза 3.5: Удаление читерских модулей (легит-направление)
|
||||
> Пользователь решил: LoVisual — легитное приложение. Все читерские модули удаляются.
|
||||
- [x] combat: удалены AttributeSwap, AutoAnchor, AutoAttack, AutoBed, AutoBow, AutoCrystal, Backtrack,
|
||||
Criticals, ElytraTarget, Hitbox, KillAura, KTLeave, MaceKill. **Оставлены:** ProjectilePuncher,
|
||||
PvpCooldowns, Reach, RubberHand, SpearAssist, TPSSync
|
||||
- [x] movement: удалены ВСЕ модули (AirJump, AutoDodge, ElytraFly, ElytraHelper, Flight, Freeze,
|
||||
InventoryMove, NoFall, NoPush, NoStun, Parkour, Phase, ReverseStep, SafeWalk, Speed, Sprint,
|
||||
Step, Strafe, SuperFirework, TargetStrafe, Timer, Velocity, WindJump) — 22 файла
|
||||
- [x] player: удалены AirPlace, AutoArmor, AutoEat, AutoTotem, Scaffold, XCarry.
|
||||
**Оставлены:** AutoTool, ClickPearl, FakeLag, NoDelay, NoInteract, ShitDropper
|
||||
- [x] Осиротевшие хелпер-пакеты: удалены `combat/autocrystal/` (17), `combat/autobed/` (9),
|
||||
`combat/autoanchor/` (9), `util/block/scaffold/` (10), `BlockPlacer` + тест ScaffoldPlacementGateTest
|
||||
- [x] Enum-заглушки: `KillAura.RaycastMode/RotationTiming/AngleSmoothMode` → локальные enum в
|
||||
ProjectilePuncher/Reach; `Criticals.SelectionMode` → удалено; `Hitbox`-зависимость убрана из ESP
|
||||
- [x] ESP переписан под легит: новые настройки `only_visible` (LOS-луч от камеры), `skip_invisible`,
|
||||
`only_armor` (без брони не подсвечивать) — по умолчанию `true`, только для игроков
|
||||
|
||||
### Проверка: `./gradlew build` ✓, тесты ✓ (13), остатки только в комментариях/строках
|
||||
|
||||
## Фаза 4: Security (пункт 7)
|
||||
- [ ] BackdoorProtection: убрать `enum`-синглтон, сделать инстансный сервис, ленивый `Minecraft.getInstance()`
|
||||
- [ ] Решить судьбу StaffTracker/StaffHeuristics — согласовать и выкинуть или переписать
|
||||
- [ ] Покрыть логику фильтров тестами
|
||||
|
||||
## Фаза 5: Модули — нормализация под правила
|
||||
- [ ] Прочесать все 131 модуль: убрать `static final Minecraft` в полях (6 шт. уже найдено)
|
||||
- [ ] Проверить модули на `System.currentTimeMillis()` → заменить на игровое время
|
||||
- [ ] Разнести addon/events/mixininterface по смыслу
|
||||
|
||||
## Фаза 6: Тесты (пункт 6)
|
||||
- [ ] Юнит-тесты: EventBus, конфиг, утилиты (игровые классы — mock)
|
||||
- [ ] По мере переписи модулей — тест на каждый
|
||||
|
||||
### Проверка: `./gradlew test` зелёный
|
||||
Loading…
Add table
Add a link
Reference in a new issue