This file consolidates the repository's main docs into a single entrypoint.
Sources (original files are kept):
README.mdRELEASE_NOTES.mdstealthpath_overview_dox.mdstealthpath_arch_dox.mdstealthpath_api_dox.mdstealthpath_overlayui_dox.mdstealthpath_files_dox.mdstealthpath_release_dox.md
Note: language variants (README_*.md) and auto-generated dox__*.md files are intentionally not inlined here to keep this document readable.
偷袭小道是一个纯客户端叠加层模组:根据敌方炮塔/单位的威胁范围,在地图上绘制“更安全 / 受伤更少”的路线预览;并提供自动模式,辅助选中单位集群进行移动与绕行。
当前版本:4.2.0
- 路线叠加显示:一键计算并绘制路径;线宽/透明度/显示时长可调,可选显示起终点与预计受伤文字。
- 威胁过滤:可在“陆军 / 空军 / 全部”之间切换,更贴合当前单位类型。
- 多种目标/显示模式:支持常规目标模式、敌方发电集群模式、玩家→鼠标位置模式等。
- 手动实时预览:按住热键即可实时刷新路径(适合边移动边观察)。
- 自动模式(单位集群):
N:单位集群 → 鼠标位置M:单位集群 → 聊天坐标(<Attack>(x,y))
- 自动移动:在 M/N 模式下,可用“自动移动”热键让选中单位沿最低受伤路线前进(可在设置中开关)。
- OverlayUI/HUD 信息窗:安装 MindustryX 时可显示模式/伤害/控制等窗口;未安装时会回退为普通 HUD 显示。
- 设置菜单:提供常规设置与 Pro Mode 高级设置,便于按个人习惯微调显示与自动模式行为。
- 多人兼容:客户端侧显示与操作辅助,不需要服务器安装。
X:仅敌方炮塔(按住=实时预览)Y:敌方炮塔 + 单位(按住=实时预览)N:自动模式(单位集群 → 鼠标)M:自动模式(单位集群 →<Attack>(x,y))K:切换显示模式L:切换威胁过滤(陆军/空军/全部)自动移动:在 M/N 模式下下发沿路线前进的移动指令
- 起点默认使用“单位集群中心”:优先使用你框选的单位,否则使用你当前控制的单位。
M模式目标:在聊天发送"<Attack>(x,y)"(x,y 为格子坐标)来设置目标点。- 自动模式刷新频率与显示样式可在设置中调节(例如“预览刷新间隔”“自动模式颜色/阈值”等)。
- 选中单位较多或较分散时,可能会按多个集群分别绘制路径与下发移动,以尽量保持队形。
设置入口:设置 → 模组 → 偷袭小道 (Stealth Path)
常用设置包括:路径显示秒数、线条粗细、透明度、预计受伤文字、实时预览刷新间隔、自动模式颜色与安全阈值、自动移动开关等。
- Español:
README_es.md - Français:
README_fr.md - Русский:
README_ru.md - العربية:
README_ar.md
将 stealth-path.zip 放入 Mindustry 的 mods 目录并在游戏内启用。
安卓端需要包含 classes.dex 的 mod 包。请下载 Release 中的 stealth-path-android.jar 并放入 Mindustry 的 mods 目录。
【BEK辅助mod反馈群】:https://qm.qq.com/q/cZWzPa4cTu
在 Mindustry-master 根目录运行:
./gradlew.bat stealth-path:jar输出:mods/stealth-path/build/libs/stealth-path.zip
本仓库本地构建(Android):
./gradlew.bat jarAndroid输出:dist/stealth-path-android.jar
Stealth Path is a client-side overlay mod that draws “safer / lower-damage” route previews based on enemy turret and unit threat ranges. It also includes auto modes to help selected unit groups move and avoid danger.
Current version: 4.2.0
- Path overlay: draw a route preview with configurable duration/width/opacity, optional endpoints, and optional estimated-damage labels.
- Threat filter: switch between ground / air / both to better match your current unit type.
- Multiple target/display modes: includes the normal target mode, enemy generator-cluster mode, and player-to-mouse mode.
- Manual live preview: hold a hotkey to continuously refresh the preview while you aim.
- Auto modes (unit cluster):
N: cluster → mouse positionM: cluster → chat coordinates (<Attack>(x,y))
- Auto move: in M/N mode, press the auto-move keybind to command selected units along the lowest-damage path (can be enabled/disabled in settings).
- OverlayUI/HUD windows: when MindustryX is installed, mode/damage/controls windows can be shown via OverlayUI; otherwise the mod falls back to regular HUD.
- Settings menu: regular settings plus Pro Mode advanced options for finer tuning.
- Multiplayer-friendly: client-side overlay and assistance; no server install required.
X: turrets only (hold = live preview)Y: turrets + units (hold = live preview)N: auto mode (unit cluster → mouse)M: auto mode (unit cluster →<Attack>(x,y))K: cycle display modeL: cycle threat filter (ground/air/both)Auto move: issue movement commands along the preview path in M/N mode
- The start point is the unit-cluster center: selected units if any, otherwise your current controlled unit.
- For
Mmode, send"<Attack>(x,y)"in chat (x,y are tile coordinates) to set the target. - Auto refresh rate and visuals are configurable in settings (e.g. preview refresh interval, auto-mode colors/thresholds).
- Large or spread-out selections may be handled as multiple clusters to keep formation tighter.
Open: Settings → Mods → Stealth Path
Common options include path duration, line width, opacity, estimated-damage labels, live preview refresh interval, auto-mode colors/safe thresholds, and auto-move enable.
- Español:
README_es.md - Français:
README_fr.md - Русский:
README_ru.md - العربية:
README_ar.md
Put stealth-path.zip into Mindustry's mods folder and enable it in-game.
Android requires a mod package that contains classes.dex. Download stealth-path-android.jar from Releases and put it into Mindustry's mods folder.
Discord: https://discord.com/channels/391020510269669376/1467903894716940522
Run from the Mindustry-master repo root:
./gradlew.bat stealth-path:jarOutput: mods/stealth-path/build/libs/stealth-path.zip
Local Android build (from this repo root):
./gradlew.bat jarAndroidOutput: dist/stealth-path-android.jar
- ✅ 这个文件会作为每次 GitHub Release 的说明文本。
- 📝 需要写“本次新增/修复”时,直接在这里追加即可(保留下面的“功能总览”)。
- 🔄 更新弹窗增强:支持展示可下载文件(assets)、镜像下载开关、下载并重启(桌面端)。
- 🗺️ 路径叠加显示:按键快速计算并在地图上绘制路线(可调线宽/透明度/显示时长)。
- ⚔️ 威胁计算:根据敌方炮塔与单位射程/估算 DPS 生成威胁地图,并按移动速度换算预计受伤。
- 🧠 寻路策略:
- 🟢 优先 0 受伤路径(Safe Only),找不到再退化为最小受伤路径(Min Damage)。
- 📏 可选“始终规划最近路径”(Nearest):忽略伤害,直接按最短路规划。
- 🔁 可选寻路算法:A* / DFS(都按当前模式代价选择最优)。
- 🎯 多目标核心预览:核心模式可同时规划到最近的 K 个敌方核心(K 可在设置中调整)。
- 🤖 自动模式(单位集群):
- 🧩 选中单位会按距离自动分割为多个集群规划。
- ⏱️ 自动模式寻路支持“分拆计算到 Tick”,减少卡顿。
- 🛰️ RTS 自动移动:支持路点上限、更新间隔、指令间隔(减轻服务器 DoS 误判)。
- 🪟 OverlayUI 窗口:与 MindustryX OverlayUI 兼容(或回退 HUD),可显示模式/威胁与预计受伤,并提供快捷按钮。
- 🛡️ 绕开无敌盾范围:规划时会将
shield-projector/large-shield-projector盾域视作不可通行区域(防止卡住/穿不过)。 - ⚙️ 设置菜单:MindustryX 风格的单页设置 + Pro Mode 高级选项(可展开/折叠)。
- 🌐 多人兼容:
hidden: true纯客户端显示/辅助逻辑,避免多人服 mod 校验冲突。 - 🔔 启动检测更新:启动后检查 GitHub Releases 是否有新版本,有则弹窗提示并支持跳转/忽略。
- GitHub Releases:https://github.com/DeterMination-Wind/StealthPath/releases
本目录下的 *_dox.md 为 StealthPath 仓库级说明文档,统一放在仓库根目录,便于维护与在整合包(Neon)中同步时查阅。
StealthPath 是一个 纯客户端叠加层 模组,用于基于敌方炮塔/单位威胁范围计算路径,并绘制“最安全/最少受伤”的路径预览;同时提供自动模式(单位集群跟随鼠标/聊天坐标)与 RTS 路点下发(自动移动)。
- 主类:
src/main/java/stealthpath/StealthPathMod.java - 关键算法/数据结构:
src/main/java/stealthpath/StealthPathPathUtil.java(寻路/可通行/路径压缩等工具)src/main/java/stealthpath/StealthPathPathTypes.java(ThreatMap/Node/PathResult 等类型)src/main/java/stealthpath/StealthPathMathUtil.java(几何/网格相关计算)
- UI/设置:
src/main/java/stealthpath/StealthPathSettingsWidgets.java(Settings UI 小组件)src/main/java/stealthpath/StealthPathUiUtil.java(UI 尺寸/通用样式辅助)
- 可选集成:
- MindustryX
OverlayUI:在StealthPathMod内通过 反射 注册窗口;缺失 MindustryX 时回退到 HUD。
- MindustryX
在 StealthPathMod.registerKeybinds() 注册(可在 游戏设置 → Controls 中改键):
sp_path_turrets(默认X):仅炮塔威胁路径sp_path_all(默认Y):炮塔 + 单位威胁路径sp_modifier(默认 unset):修饰键(用于组合操作)sp_mode_cycle(默认K):切换显示模式sp_threat_cycle(默认L):切换威胁过滤(陆/空/混合)sp_auto_mouse(默认N):自动(集群→鼠标)sp_auto_attack(默认M):自动(集群→聊天坐标)sp_auto_move(默认鼠标右键):执行自动移动/下发 RTS
窗口 ID(注册名):
stealthpath-modestealthpath-damagestealthpath-controls
说明与可见性/缩放/可拖拽等行为,见 stealthpath_overlayui_dox.md。
StealthPathMod 解析你自己发送的消息中形如 (x,y) 的坐标(Tile 坐标),用于 M 模式目标缓存。
从 v3.0.1 开始采用 Major.Minor.Patch:
Major:大功能/大改动(可能影响玩法/交互/配置习惯)Minor:小功能/新增能力(向后兼容)Patch:bug 修复/小改动
仓库内 build.gradle 会将 jar/zip 输出并复制到:
dist/stealth-path.zip- (以及仓库上一级目录,用于快速安装)
本文件描述 StealthPath 的核心数据流与模块边界,便于后续维护(性能、联机节流、UI 托管等)。
- 输入:玩家热键 / 自动模式状态 / 目标模式(核心/建筑/鼠标等)
- 威胁图:从世界内容构建
ThreatMap(炮塔射程、单位威胁、护盾等) - 寻路:在 tile 网格上做代价最小路径搜索,得到 tile path
- 后处理:路径压缩、端点/标签位置、集群拆分/合并
- 输出:
- 绘制:显示路径、端点、伤害数字
- 自动移动:把 tile path 转换为 RTS 路点并下发(带节流)
- OverlayUI:同步窗口显示的文本/按钮状态
见 src/main/java/stealthpath/StealthPathPathTypes.java:
ThreatMap:地图宽高与风险数组(按 tile 索引)Node:寻路节点(实现Comparable供优先队列排序)PathResult:寻路结果(tile path、估算伤害等)ControlledCluster:单位集群(用于多集群自动模式与多路径绘制)
实现主要在:
src/main/java/stealthpath/StealthPathMod.java(调度、不同模式选择、结果缓存)src/main/java/stealthpath/StealthPathPathUtil.java(工具函数、可通行、路径压缩/哈希等)
基本原则:
- 以 tile 为节点做图搜索
- 代价由“路径长度 + 风险积分(威胁图)”组合而成(不同模式权重可能不同)
- 单位集群的寻路起点通常为集群中心点(或选中单位的中心)
- N:集群 → 鼠标
- M:集群 → 聊天坐标(解析
(x,y))
自动模式的路径刷新可通过设置项控制(例如预览刷新间隔与“空闲时放慢”)。
StealthPath 会把路径转换为一系列 RTS 路点并下发。为避免服务器误判 DoS:
sp-rts-update-interval:限制重复更新整条路径的最小间隔(不减缓路径本身计算)sp-rts-command-spacing:在每条 RTS 指令包之间插入额外延迟(降低瞬时包量)sp-rts-max-waypoints:限制单次下发的路点数量(避免过长路径带来大量包)
此外,RTS 路点生成有一个关键规则:
- 不在路径起点设置 RTS 路点(避免单位卡住/抖动),而是从起点之后的点开始下发。
见 stealthpath_overlayui_dox.md。
本文件描述“对外可用/可配置/可依赖”的接口:热键、设置项(Core.settings keys)、OverlayUI 窗口、聊天格式,以及各源码文件中主要可复用方法/模块职责。
注册位置:StealthPathMod.registerKeybinds()
| KeyBind 名称 | 默认键位 | 用途 |
|---|---|---|
sp_path_turrets |
X |
仅炮塔威胁路径预览(按住预览) |
sp_path_all |
Y |
炮塔+单位威胁路径预览(按住预览) |
sp_modifier |
unset | 修饰键(用于组合触发/减少误触) |
sp_mode_cycle |
K |
切换显示模式 |
sp_threat_cycle |
L |
切换威胁过滤:陆 / 空 / 混合 |
sp_auto_mouse |
N |
自动模式:集群→鼠标 |
sp_auto_attack |
M |
自动模式:集群→聊天坐标 |
sp_auto_move |
鼠标右键 |
执行自动移动/下发 RTS |
解析规则:仅解析你自己发送的聊天内容中出现的 (x,y)(Tile 坐标):
- 正则:
\\((-?\\d+)\\s*,\\s*(-?\\d+)\\) - 超界坐标会被 clamp 到地图边界
- 主要用途:M 模式下设置目标坐标缓存
窗口 ID:
stealthpath-modestealthpath-damagestealthpath-controls
窗口开关(设置项,见 2.2)会影响:
- MindustryX 安装时:窗口
availability(是否可见) - 未安装时:HUD 回退元素是否挂载到
ui.hudGroup
详细机制见 stealthpath_overlayui_dox.md。
设置项由 Core.settings 管理,默认值在 StealthPathMod.registerDefaults()(或等价位置)写入。
sp-enabled:启用/禁用(总开关)sp-pro-mode:专业模式(展开/显示高级设置折叠区)
sp-ov-window-mode:显示“模式/威胁”窗口sp-ov-window-damage:显示“预估伤害”窗口sp-ov-window-controls:显示“快捷控制”窗口
sp-path-durationsp-path-widthsp-path-alphasp-show-endpointssp-start-dot-scalesp-end-dot-scalesp-show-damage-textsp-damage-text-scalesp-damage-label-at-endsp-damage-offset-scalesp-preview-refresh
sp-threat-modesp-target-modesp-target-block
sp-arrow-colorsp-mouse-path-colorsp-auto-color-safesp-auto-color-warnsp-auto-color-dead
(用于解决多人服 DoS 误判等问题的节流也在这里)
sp-auto-move-enabledsp-rts-max-waypointssp-rts-update-interval:RTS 更新最小间隔(不影响路径计算刷新本身)sp-rts-command-spacing:RTS 指令包之间额外延迟(降低服务器误判 DoS 风险)sp-auto-batch-enabled/sp-auto-batch-size-pct/sp-auto-batch-delay-pctsp-auto-slow-multiplier
sp-auto-cluster-split-tilessp-formation-inflate-pctsp-safe-corridor-bias-pctsp-compute-safe-distancesp-passable-cache-entriessp-gencluster-*(linkdist / near-turret / min-draw / fallback-backtrack 等)
这里的“接口”指模块边界/职责,不建议外部 mod 直接调用 StealthPath 内部方法(StealthPath 不是库)。整合包(Neon)是通过源码合并而非依赖调用。
主要职责模块(可按函数名在文件内检索):
- 输入与模式:热键处理、模式切换、自动模式状态机
- ThreatMap 生成:根据炮塔/单位/护盾等生成风险图
- 寻路:根据 ThreatMap 计算 tile path,并生成 render path
- 绘制:在
Trigger.draw中绘制路径/端点/伤害标签 - 自动移动:根据路径生成 RTS 路点并下发
- OverlayUI:注册 3 个窗口,并同步可见性与回退 HUD
ThreatMap:地图宽高、风险数组等Node:A* / Dijkstra 类寻路节点(含compareTo)PathResult:路径与估算信息ControlledCluster:单位集群(用于多集群分路径/自动模式)
SettingsMenuDialog 的自定义 Setting 组件:
HeaderSetting:分组标题行(目前不带 icon)IconCheckSetting/IconSliderSetting/IconTextSetting:带描述与统一样式的设置项(icon 参数可为null,即不显示 icon)
StealthPath 支持在安装 MindustryX 的情况下,把 UI 内容托管到 OverlayUI(可拖拽、可缩放、可拉伸、可在 OverlayUI 面板管理);未安装 MindustryX 时回退到 HUD 左上角的普通 Table。
| 窗口 ID | 内容 | 说明 |
|---|---|---|
stealthpath-mode |
当前路径模式 + 威胁模式 | 文字信息展示 |
stealthpath-damage |
当前路径预估伤害 | 文字信息展示 |
stealthpath-controls |
X/Y/N/M/威胁切换按钮 | 可交互;支持随窗口尺寸自适应排布 |
实现位置:StealthPathMod.ensureOverlayWindowsAttached()
曾经的问题:每帧/每次检查都把三个窗口强制 enabled=true 且 pinned=true,导致玩家即使在 OverlayUI 面板里关闭某个窗口,也会被立刻重新打开。
现在的策略:
- 仅在“首次注册窗口对象”时,根据当前 Mod 总开关与窗口开关,默认把该窗口设为
enabled=true且pinned=false(不再强制钉住)。 - 后续不再覆盖用户在 OverlayUI 面板中的
enabled/pinned选择。
新增 3 个设置项(同样影响 HUD 回退模式):
sp-ov-window-modesp-ov-window-damagesp-ov-window-controls
当 MindustryX 存在时,这些开关进入窗口的 availability(即窗口是否可见/是否参与 OverlayUI 渲染)。
当无法使用 OverlayUI 时:
- 会把三个
Table挂到ui.hudGroup,并固定在左上角附近 - 当对应窗口开关关闭时,会从
hudGroup移除该元素
OverlayUI 的 Window.endResize() 会 pack() 并将 data.size 写回为 table.width/height;若内容 Table 的 prefWidth/prefHeight 被内容约束为固定值,玩家松手后可能看起来“回弹到默认大小”。
StealthPath 的处理:
- 内容表尾部添加
PreferAnySize占位元素(min=0,pref=当前宽高),允许窗口保持任意尺寸。 - 同时
stealthpath-controls内按钮区域会根据宽度阈值动态重排:窄则竖排,宽则多列。
本文件按“仓库根目录相对路径”列出 StealthPath 的主要文件/目录作用,便于维护与整合包同步(Neon 的 tools/update_submods.py 主要同步 src/main/java/stealthpath 与 src/main/resources/bundles)。
说明范围:以 mod 的可维护代码/资源为主;Gradle wrapper、IDE 配置、构建缓存等不在此详述。
README.md:玩家向说明(功能、热键、设置入口、构建方式等)build.gradle:Gradle 构建脚本(Mindustry core 依赖、zip 输出、复制到dist/)src/main/resources/mod.json:Mindustry Mod 元数据(name/version/minGameVersion/main等)dist/stealth-path.zip:构建产物(发布用;由 Gradle 生成)stealthpath_overview_dox.md:仓库级概览文档(维护者/开发者)stealthpath_api_dox.md:接口说明(热键、设置 key、OverlayUI 窗口、主要方法职责)stealthpath_overlayui_dox.md:OverlayUI/回退 HUD 机制与可见性控制stealthpath_arch_dox.md:核心算法/架构说明(ThreatMap、寻路、自动模式、RTS 下发)stealthpath_release_dox.md:发布流程与版本号规则(含与 Neon 同步建议)
StealthPathMod.java- Mod 主入口:事件注册、输入/热键、设置菜单、绘制、路径计算、自动模式、RTS 路点下发
- 可选集成:MindustryX
OverlayUI(反射注册窗口),缺失时回退 HUD
StealthPathPathUtil.java- 寻路工具:可通行判断、路径压缩/哈希、路径后处理等
StealthPathPathTypes.java- 数据结构:
ThreatMap、PathResult、Node、ControlledCluster等
- 数据结构:
StealthPathMathUtil.java- 数学/几何工具:距离、角度、格子/世界坐标换算等
StealthPathSettingsWidgets.java- 设置 UI 小组件:
HeaderSetting、IconCheckSetting、IconSliderSetting、IconTextSetting - 注意:设置页内 icon 已被上层传入
null(仅保留一级分类 icon)
- 设置 UI 小组件:
StealthPathUiUtil.java- UI 布局通用参数(例如设置项推荐宽度
prefWidth())
- UI 布局通用参数(例如设置项推荐宽度
GithubUpdateCheck.java- GitHub 更新检查/提示(若存在)
mod.json:Mod 元信息bundles/:多语言文本bundle.properties:默认语言(通常英文)bundle_zh_CN.properties:简体中文- 其它
bundle_*.properties:其它语言
采用 Major.Minor.Patch(大功能-小功能-bug 修复):
Major:大功能/大改动(可能影响配置/交互/兼容)Minor:新增小功能(尽量向后兼容)Patch:bug 修复/小调整
版本号需要同时更新:
build.gradle的versionsrc/main/resources/mod.json的"version"README.md的 “Current version”
在 StealthPath 仓库根目录运行:
./gradlew.bat --no-daemon clean jar产物:
dist/stealth-path.zip
Neon 使用 tools/update_submods.py 读取本地 git checkout 的 HEAD 并合并源码:
cd ..\\Neon
python tools/update_submods.py同步后建议:
- 更新 Neon 版本号(
build.gradle、src/main/resources/mod.json,以及 README 的 StealthPath 当前版本行) - 构建验证:
./gradlew.bat --no-daemon clean jar jarAndroid - 提交、推送、打 tag(
vX.Y.Z)触发 GitHub Actions Release
