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:
loki5512344 2026-07-31 23:14:14 +02:00
parent 8084ac50b3
commit 52d87368c9
1595 changed files with 35857 additions and 51145 deletions

264
TODO.md
View file

@ -1,248 +1,36 @@
# LoVisual — План разработки с нуля
# LoVisual — структура проекта
## Принципы (в отличие от прошлого кала)
- **Никаких пустышек** — файл без реализации не создаётся
- **Никаких this-escape** — конструктор не публикует this
- **Никакого статика** — `Minecraft.getInstance()` только лениво, никогда в поле
- **Никаких мёртвых миксинов** — миксин только если он реально нужен
- **Каждый этап компилируется** — перед переходом к следующему
- **Никаких 140 папок** — плоская структура, группировка только по смыслу
Репозиторий разбит на 3 независимых компонента. **У каждого свой TODO, корневой TODO больше не ведётся.**
| Компонент | Стек | TODO |
|-----------|------|------|
| `combatant-client-26.2/` | Java 25, Fabric (MC 26.2) | [`combatant-client-26.2/TODO.md`](combatant-client-26.2/TODO.md) |
| `backend/` | Rust 2024 + axum | [`backend/TODO.md`](backend/TODO.md) |
| `launcher/` | Rust 2024 + Slint | [`launcher/TODO.md`](launcher/TODO.md) |
---
## База: что осталось
- `ref/` — ~415 референс-модулей из 8 клиентов (не трогать)
- `.omo/` — конфиги opencode
- `.git/`, `.gitignore`, `.gitattributes`
- `SYSTEM.md` — описание архитектуры (актуализировать по ходу)
## Общие правила для Rust-компонентов (backend + launcher)
- KISS / DRY / SOLID
- Макс. 200 строк на файл
- Макс. 3 файла на папку
- Обязательно: `cargo fmt` + `cargo clippy --all-targets` + `cargo test`
- Запрещено `#[allow(dead_code)]`
- Запрещено `unsafe` в собственной логике
- Без пустышек: модуль создаётся только с рабочей реализацией
- Каждый этап компилируется
---
## Фаза 0: Project Setup
- [ ] Создать `mod/` (NeoForge 1.21.1, Gradle, Java 21)
- build.gradle.kts (userdev, checkstyle)
- settings.gradle.kts
- META-INF/neoforge.mods.toml
- access_transformer.cfg (только нужные записи)
- mixins.json (только файлы, которые реально есть)
- LoVisual.java — entry point
- LoVisualClient.java — client init
- [ ] Создать `backend/` (Go 1.24)
- go.mod
- cmd/server/main.go
- internal/config/config.go (!! существует до main.go)
- [ ] Создать `launcher/` (Rust)
- Cargo.toml
- src/main.rs
## Статус
### Проверка: `./gradlew build`, `go build ./cmd/server`, `cargo build`
### Backend
- [x] Каркас: config, /health, graceful shutdown, CORS
- [ ] Auth (argon2 + JWT), профили, конфиги, IRC — см. `backend/TODO.md`
---
## Фаза 1: Core Systems (мод)
- [ ] EventBus — свой, нестатический, с поддержкой cancellation
- Event.java (abstract), EventBus.java
- EventHandler аннотация
- post() прекращает итерацию при cancel
- [ ] Module base — без `Minecraft.getInstance()` в статике
- Module.java: lazy getMc(), рефлексия для settings, toggle/enable/disable
- ModuleInfo аннотация
- ModuleCategory enum (COMBAT, MOVEMENT, RENDER, PLAYER, MISC)
- [ ] Setting system — 6 типов:
- Setting<T>, BooleanSetting, SliderSetting, ModeSetting, ColorSetting, BindSetting, MultiSelectSetting
- [ ] ModuleManager — регистрация, получение по имени/категории
- [ ] Command system — toggle, bind, help, config
- [ ] ConfigManager — .loconf, профили, автосейв (только после полной инициализации)
- [ ] Theme / ThemeManager — без garbage (Color кэш или прямые int)
### Проверка: мод запускается, не падает, `/lovisual help` работает
---
## Фаза 2: Mixins (только нужные)
- [ ] MinecraftClientMixin — runTick() → TickEvent
- [ ] InGameHudMixin — render → Render2DEvent
- [ ] GameRendererMixin — renderLevel → Render3DEvent
- [ ] ClientConnectionMixin — send/receive → PacketEvent
- [ ] KeyboardHandlerMixin — keyPress → KeyPressEvent
- [ ] MouseHandlerMixin — click → MouseClickEvent
- [ ] ClientPlayerEntityMixin — travel → MoveEvent (если нужен)
### НИКАКИХ пустых миксинов. Никаких `cancellable=true` без cancel.
### Проверка: все события постится, можно залогировать из любого модуля
---
## Фаза 3: Первый рабочий модуль
- [ ] Sprint (MOVEMENT) — полный цикл:
- Вкл/выкл через `/lovisual toggle Sprint`
- onEnable → подписка, onDisable → отписка
- TickEvent → зажим CTRL
- Сохраняется в конфиг
- Клавиша привязывается через `/lovisual bind Sprint 29`
### Проверка: модуль работает, конфиг сохраняется/грузится
---
## Фаза 4: Modules — по одному, каждый рабочий
### Combat (4)
- [ ] AutoClicker — CPS на клик, не юзать System.currentTimeMillis()
- [ ] Trajectories — Render3DEvent, предсказание траектории
- [ ] Criticals — фолл-криты
- [ ] Velocity — анти-отбрасывание
### Movement (3)
- [ ] Sprint ↑ (готов)
- [ ] Speed — страф/вода/эйр
- [ ] AutoWalk — зажим W
### Render (12)
- [ ] FullBright — гамма
- [ ] NoHurtCam — отмена тряски
- [ ] NoWeather — отмена погоды
- [ ] NoBobbing — отмена качания
- [ ] Zoom — FOV smooth (без глитча при disable)
- [ ] Crosshair — кастомный
- [ ] Nametags — ники над игроками
- [ ] HealthTags — хп под никами
- [ ] HitParticles — частицы при ударе
- [ ] Chams — подсветка (миксин читает настройки модуля)
- [ ] Animations — свайпы/рука
- [ ] CustomGlint — кастомный глинт
### Player (8)
- [ ] AutoTool — автосмена инструмента
- [ ] ExpThrower — авто-бросок опыта
- [ ] InvManager — сортировка/мусор
- [ ] MiddleClickFriend — добавить в друзья
- [ ] InventorySort — сортировка по клику
- [ ] Refill — авто-заполнение стаков
- [ ] NoInteract — блокировка кликов по сущностям
- [ ] Friends — список друзей
### Misc (6)
- [ ] AntiAFK — анти-афк
- [ ] AutoRespawn — авто-респавн
- [ ] AutoReconnect — авто-переподключение
- [ ] IRC — WebSocket чат
- [ ] Spammer — авто-спам в чат
- [ ] NameProtect — защита ника
### Extra (из ref/: только если реально нужны)
- [ ] KillAura
- [ ] ESP
- [ ] Scaffold
- [ ] Freecam
- [ ] Blink
- [ ] ElytraFlight
- [ ] AntiBot
- [ ] HitBox
- [ ] Tracers
- [ ] ItemPhysics
- [ ] ChestStealer
- [ ] AutoFish
- [ ] AutoEat
### Проверка после каждого: модуль компилируется, включается/выключается, не крашит
---
## Фаза 5: GUI
### ClickGUI
- [ ] ClickGuiScreen — Screen
- [ ] CategoryPanel — чипсы категорий + поиск
- [ ] ModuleGrid — сетка модулей (ЛКМ toggle, ПКМ настройки, СКМ бинд)
- [ ] SettingsPanel — рендер настроек
- [ ] ThemePanel — слайдеры цветов
### HUD (10 элементов)
- [ ] Watermark
- [ ] ModuleList
- [ ] TargetHUD
- [ ] ArmorHUD
- [ ] PotionsHUD
- [ ] Keystrokes
- [ ] Scoreboard
- [ ] Coords
- [ ] ComboCounter
- [ ] Notifications
### MainMenu
- [ ] LoVisualMainMenu — кастомный экран
### Проверка: GUI рендерится, кликабельно, модули togglятся
---
## Фаза 6: Backend (Go)
### Config (существует до main.go)
- [ ] internal/config/config.go — Port, DB.Path, JWT.Secret, CORS origins
### DB
- [ ] internal/repository/db.go — SQLite, миграции
- [ ] internal/repository/users.go
- [ ] internal/repository/configs.go
- [ ] internal/repository/profiles.go
### Auth
- [ ] internal/service/auth.go — bcrypt, JWT (не SHA256)
- [ ] internal/handler/auth.go — register/login/logout
- [ ] internal/middleware/auth.go — Bearer token (не panic, возвращает 401)
### Profile
- [ ] internal/service/profile.go
- [ ] internal/handler/profile.go — get/update/playtime/search/friends
- [ ] JSON decode errors НЕ игнорировать
### Configs API
- [ ] internal/handler/config.go — upload/download (auth check, user_id из токена, не из тела)
- [ ] 16-byte share keys (минимум)
### IRC
- [ ] internal/irc/hub.go — WebSocket хаб (gorilla/websocket, не deprecated x/net)
### Middleware
- [ ] CORS — настраиваемые origins
- [ ] RateLimit — с cleanup горутиной (без утечки)
- [ ] Log — запросы
### Проверка: `go build ./cmd/server` проходит, сервер стартует, эндпоинты отвечают
---
## Фаза 7: Launcher (Rust)
### API клиент
- [ ] api.rs — reqwest, таймауты, десериализация с rename_all
- [ ] Версия читается из Cargo.toml (не хардкод)
### Экраны
- [ ] login.rs — регистрация/логин
- [ ] dashboard.rs — профиль, playtime, version check
- [ ] settings.rs — кастомная команда (ЧИТАЕТСЯ на Play, не stale)
### Launch
- [ ] launch.rs — запуск MC (команда из настроек, защита от пустой строки)
- [ ] save_session — только при логине, при logout удалять
### Проверка: `cargo run` — лаунчер открывается, логин/регистрация работают
---
## Фаза 8: Polish
- [ ] Sound system (49 звуков из ref/)
- [ ] Animation system (SpringAnimator)
- [ ] Style system (6 стилей для HUD)
- [ ] Cloud config sharing (если бэкенд готов)
- [ ] Auto-updater
- [ ] Loading screen
- [ ] AltManager
---
### Launcher
- [x] Каркас: окно логина, фоновая проверка /health
- [ ] Auth, dashboard, settings, launch — см. `launcher/TODO.md`
### Мод (combatant-client-26.2)
- [ ] Полный rewrite: ребрендинг (1464 `combatant`), разбивка 12 файлов >1500 строк, выкинуть Runtime/JarReplacement, тесты — см. `combatant-client-26.2/TODO.md`