LoVisual/mod/docs/api/addons.md
loki5512344 9d08fa910a chore(history): squash 59 commit(s) from 2026-09-23
- refactor(hud/weather/render): Scoreboard 931→240 + Rain 903→159 + UiMeshGeometry 956→99 (8.5.2)
- refactor(chams): Chams 985 → 129 + 4×≤195 (8.5.2)
- refactor(module): Module 1031 → 139 + 4×≤134 (8.5.2)
- refactor(tooltips): BetterTooltips 960 → 181 + 4×≤199 (8.5.2)
- refactor(clickgui): ClickGuiPickerState 970→166 + ModulesMenuScreen 966→145 (8.5.2)
- refactor(clickgui): CombatProtocolHeuristicsEditorState 932→79 + 4×≤192 (8.5.2)
- refactor(hud): CompactHudStatModel 894 → 125 + 4×≤175 (8.5.2)
- refactor(iris): ShaderPatchCompiler 843→66 + 4×≤174 (8.5.2)
- refactor(tab): CustomTabList 834→136 + 4×≤166 (8.5.2)
- refactor(relations): OnlineRelationPlayerPickerComponent 837→74 + 4×≤192 (8.5.2)
- refactor(hits): HitEffect 770→120 + 4×≤176 (8.5.2)
- refactor(predict): Predictions 815→150 + 4×≤195 (8.5.2)
- refactor(config): ConfigProfilesComponent 799→125 + 4×≤195 (8.5.2)
- refactor(sim): PlayerMovementSimulation 757→157 + 4×≤194 (8.5.2)
- refactor(predict): ProjectilePuncher 747→104 + 3×≤134 (8.5.2)
- refactor(crosshair): Crosshair 743→143 + 4×≤167 (8.5.2)
- refactor(mediaplayer): MediaPlayer 743→174 + 4×≤196 (8.5.2)
- refactor(hud): Itemizer 699→193 + Cooldowns 707→151 (8.5.2)
- refactor(hud): Potions 617→176 + 4×≤166 (8.5.2)
- refactor(hud): Admins 702→118 + 4×≤138 (8.5.2)
- refactor(hud): Keybinds 611→157 + 4×≤160 (8.5.2)
- refactor(hud): ModuleList 499→181 + 3×≤150 (8.5.2)
- refactor(hud): Radar 392→161 + 2×≤124 (8.5.2)
- refactor(hud): Fps 309→168 + 3×≤107 (8.5.2)
- refactor(hud): Memory 304→151 + 3×≤144 (8.5.2)
- refactor(hud): Tps 339→154 + 3×≤143 (8.5.2)
- refactor(hud): Ping 309→145 + 3×≤125 (8.5.2)
- refactor(hud): SpeedBps 334→156 + 3×≤142 (8.5.2)
- refactor(hud): GameTime 314→150 + 3×≤127 (8.5.2)
- refactor(hud): SystemTime 300→136 + 3×≤130 (8.5.2)
- refactor(hud): Coordinates 337→174 + 2×≤172 (8.5.2)
- refactor(hud): Armor 324→162 + 2×≤148 (8.5.2)
- refactor(hud): Inventory 476→153 + 3×≤181 (8.5.2)
- docs(todo): обновлён 8.5.2 — отмечены готовые гиганты (BetterButtons/InventorySwap/Svg/Темы/WorldParticles/Module/Chams и хвост)
- docs(api): папка combatant-client-26.2/docs + addons.md (API можно ломать при рефакторе)
- refactor(visuals): BlockHighlight 692→271 + 4×≤200 (8.5.2)
- refactor(mixins): GameRendererMixin 830→344 (хуки) + 4 хелпера (8.5.2)
- refactor(visuals): WorldParticles 821→260 + 6×≤200, режимы добиты (8.5.2)
- docs(todo): 8.5.2 — WorldParticles/GameRendererMixin/BlockHighlight отмечены ГОТОВО
- refactor(render): MeshBuilder 738→447 (фасад write-API) + 3 хелпера, FrameStats снесён (8.5.2)
- docs(todo): Фаза 10 — дизайн платформы (аккаунты/конфиги/аватарки), backlog RPC-чата
- docs(todo): Подсистема 3 — Аддоны 2.0 (скрипты/версии) + витрина аддонов + админка
- docs(todo): Подсистема 2 — RPC-чат/друзья/виджеты-телеметрия + рейт-лимиты, доп. правки Подсистемы 3
- chore: переименование combatant-client-26.2 -> mod, добавлены backend/ и frontend/
- docs(backend): implementation plan for accounts-service (Подсистема 1, часть 1)
- chore: пересоздать backend/frontend через cargo new и bun create vite + tailwind; убрать таблицу компонентов из TODO.md
- docs(backend): edition 2024 в плане вместо 2021
- chore: обновить версии до реально актуальных (проверено компиляцией)
- docs: правила платформы (лимит 250 строк, антипаттерны backend/frontend по итогам ресёрча) + frontend/ARCHITECTURE.md
- docs: добавить правило ≤4 файла на папку в правила платформы (backend/frontend)
- docs: commit messages in English from now on
- chore: gitignore .superpowers/ scratch directory
- docs: commit messages in English from now on (mod)
- feat(backend): scaffold accounts-service with health check
- chore(backend): remove target/ build artifacts from git, add gitignore
- chore: track docs/ in git (was accidentally gitignored, never committed)
- chore(backend): convert to Cargo workspace, plan full microservice layout
- feat(backend): accounts/avatars/device_links schema + migration
- feat(backend): argon2id password hashing
2026-09-23 22:38:08 +02:00

4 KiB
Raw Permalink Blame History

LoVisual Addon API (api/v0)

Аддоны — обычные Fabric-моды, которые расширяют LoVisual. Точка входа lovisual:addon в fabric.mod.json. Можно свободно менять публичный API при рефакторинге — владелец разрешил ломать совместимость ради KISS.

Entrypoint

fabric.mod.json:

{
  "schemaVersion": 1,
  "id": "my-addon",
  "name": "My Addon",
  "entrypoints": {
    "lovisual:addon": ["com.example.MyAddon"]
  },
  "custom": {
    "lovisual:addon": { "api": 0, "icon": "assets/my-addon/icon.png" }
  }
}

Класс:

public class MyAddon implements LoVisualAddon {
    public void onConfigureModules(LoVisualModuleLoadContext ctx) {
        ctx.disableBuiltInModule("killAura"); // выключить встроенный модуль до его создания
    }
    public void onInitialize(LoVisualAddonContext ctx) {
        ctx.registerModule(MyModule.class);
        ctx.registerDraggableHudElement(MyHud.class);
        ctx.registerStaticHudElement(MyStaticHud.class);
        ctx.registerCommand(new MyCommand());
        ctx.registerClickGuiSection(new MySection());
        ctx.addRenderCallback(LoVisualRenderStage.HUD_RAW, (c) -> { /* 2D */ });
    }
    public void onClientReady(LoVisualAddonRuntimeContext ctx) {}
    public void onShutdown(LoVisualAddonRuntimeContext ctx) {}
    public void onRuntimeSuspended(LoVisualAddonRuntimeContext ctx) {} // при выкл. аддона
    public void onRuntimeResumed(LoVisualAddonRuntimeContext ctx) {}
}

LoVisualAddon.API_VERSION = 0 — сверяется в AddonManager.java:438, несовпадение → WARNING.

Жизнь аддона (AddonManager.java:39)

  1. discoverEntrypoints:211 — FabricLoader.getEntrypointContainers → ADDONS map, ENABLED_OVERRIDES из AddonStateStore (вкл/выкл сохраняется).
  2. prepareModuleLoading:58 — configureEnabledAddons:230 → onConfigureModules (до ModuleAutoLoader).
  3. init:65 — reconcileModuleExclusions:255 + initializeEnabledAddons:272 → onInitialize.
  4. notifyClientReady:79 — onClientReady после загрузки конфигов.
  5. Вкл/выкл из LoVisualAddonManagerScreen.java:548 AddonManager.setEnabled:160 — suspend/resumeRuntimeContributions:363 глушит модули/HUD, пишет AddonStateStore.

Статусы AddonStatus.java:12: DISCOVERED → ACTIVE / DISABLED / ERROR / SUSPENDED.

Что может аддон

  • Модули ctx.registerModule(Class<? extends Module>) — обычный @ModuleInfo, попадёт в ModuleManager, конфиг addon:ID:module:ID.
  • HUD registerDraggableHudElement / registerStaticHudElement — @HudElementInfo / @HudElementRegister, конфиг addon:ID:hud.*.
  • Команды registerCommand(ClientCommand) — @CommandInfo, префикс %.
  • ClickGui секции registerClickGuiSection(LoVisualClickGuiSection).
  • Рендер addRenderCallback(stage, callback) / addPostProcessCallback — LoVisualRenderStage (HUD_RAW, WORLD_*).
  • Расширения модулей LoVisualModuleExtension — beforeEnable/afterTick и т.д. через ModuleExtensionManager.

Профили: AddonManager.moduleProfileOwnerId:129 → addon:ID:module:ID для .lvcfg.

Пример минимального аддона

См. api/v0 JavaDoc и addon/core/AddonManager.java:211, addon/pipeline/AddonSnapshot.java:14, features/gui/mainmenu/LoVisualAddonManagerScreen.java:48 (UI).

Примечание по рефакторингу

Публичный Java API аддонов можно ломать свободно — KISS важнее обратной совместимости (решение владельца 2026-09-05, TODO.md:9). При рефакторе меняй сигнатуры, удаляй делегирование, обновляй вызывающих.