# LoVisual — План разработки с нуля ## Принципы (в отличие от прошлого кала) - **Никаких пустышек** — файл без реализации не создаётся - **Никаких this-escape** — конструктор не публикует this - **Никакого статика** — `Minecraft.getInstance()` только лениво, никогда в поле - **Никаких мёртвых миксинов** — миксин только если он реально нужен - **Каждый этап компилируется** — перед переходом к следующему - **Никаких 140 папок** — плоская структура, группировка только по смыслу --- ## База: что осталось - `ref/` — ~415 референс-модулей из 8 клиентов (не трогать) - `.omo/` — конфиги opencode - `.git/`, `.gitignore`, `.gitattributes` - `SYSTEM.md` — описание архитектуры (актуализировать по ходу) --- ## Фаза 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` --- ## Фаза 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, 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 ---