Releases: AUGUHDAR/VoxLink
Release list
1.0.9
VoxLink 1.0.9
无限重试 / 无限打洞
连接失败后不再放弃,底层持续重试打洞,仅当你主动取消或对端取消时才停止。等待期间不再出现"连接失败了 :(" 的提示打断你。
###主菜单新增"前往网站"按钮
主菜单"浏览房间"按钮下方新增"前往网站",点击直接用系统浏览器打开官网(支持 Windows / macOS / Linux)。
新增 Forge 支持
- 新增 Forge 加载器支持,覆盖 MC 1.20 ~ 26.2(含独立 1.20 版本)
- 至此 Fabric / Forge / NeoForge 三大加载器共 26 个版本 全部可用
多语言
新增"前往网站"等文案的 13 种语言翻译(简体中文 / 繁體中文 / English / 日本語 / 한국어 / Français / Deutsch / Español / Русский / Português / العربية / 文言文 / 拉丁文)
支持的版本
| 加载器 | 版本数 | 覆盖范围 |
|---|---|---|
| Fabric | 8 | 1.20 ~ 26.2 |
| Forge | 10 | 1.20 ~ 26.2 |
| NeoForge | 8 | 1.20.1~ 26.2 |
1.0.8
Voxlink 1.0.8
新增
- NeoForge 加载器支持(1.20.1 ~ 26.2),共 8 个版本
- 加载器区分功能:房间卡片显示加载器标识,房间列表支持按加载器筛选
- 当前已支持 Fabric 与 NeoForge,Quilt / Forge 尚未适配,筛选选项已预留
- 一键构建脚本 build_merged.py,自动切换 JDK 批量构建 16 个版本
修复
- 创建房间玩家数硬编码,提取为常量(范围 2~100)
- 房间显示玩家数为信令系统加入量而非真实 MC 在线数,改为房主心跳上报 mcPlayerCount
- STUN 超时回归导致卡在"正在探测网络环境"(3s → 10s)
- P2P 中继在打洞失败后自动触发,改为仅手动按钮触发
其他
- 新增加入状态提示"正在加入房间...",与网络探测状态分离
- Fabric 目录重构为 8 个聚合目录,便于维护
1.0.7
# VoxLink 1.0.7 — 史诗级更新 (・ω・)ノ
对比 1.0.6 新增 4 大功能模块 + 20+ 关键 bug 修复,连接稳定性大幅提升。
支持 23 个 MC 版本 × 13 种语言,覆盖 1.20 ~ 1.21.11 和 26.1/26.1.1/26.1.2/26.2。
四大新增模块
1. 智能打洞系统
全新 NatClass/ProtocolNegotiator/PunchStrategy 等模块,实现:
- NAT 类型自动分类识别
- RTT 感知 + 失败历史感知(连续 3 次同原因自动切策略)
- 每轮打洞 socket 数递增,提高成功率
- 打洞失败原因智能分类
2. 陶瓦状态机 + CN 节点注入
- 完整状态机:Bootstrap / Waiting / Scanning / GuestOk / HostOk / Exception
- CN 时区节点自动注入(Asia/Urumqi/Chongqing/Harbin)
- 严格遵循 Terracotta 0.4.2 状态机硬约束
3. Android JNI 集成(抄 FCL)
- 不再用 ProcessBuilder 拉 .so,改为 JNI 直接调用
- 新增 TerracottaAndroidBridge + TerracottaVpnService + AndroidContextHelper
- VpnService 生命周期由前台服务承载
- 直接下载 .so 二进制(arm64v8a/armv7/x86/x86_64)+ SHA256 校验
4. LAN 命令系统
- LAN 模式下原生注册 9 个命令(op/deop/ban/ban-ip/banlist/pardon/pardon-ip/whitelist/kick)
- Mixin 修改 requires 谓词放行 LAN 房主
- 完整保留原生 Tab 补全和 @a/@p 等选择器
连接稳定性(核心修复)
无限重试机制
CONTINUOUS_RETRY_MAX_ROUNDS 提升至 Integer.MAX_VALUE,仅玩家退出房间或对端 cancel_connection 才停。双方支持 CAP_CONTINUOUS_RETRY 时启用,老版本走 maxCycles=8 降级。
6 个关键 bug 修复
- 主机桥建立后停所有打洞(stopAllPunchingAfterHostBridge)
- killAllConnectionAttempts 检查 connectionWon → 修复异地联机中断
- handleDisconnect 调 clearHostPunchingState → 修复"正在探测网络环境"卡死
- sendHolepunchOffer 后 punch_info 等待超时 15 秒
- handleJoinRequest 排队重试无条件继续 → 修复 joiner 静默丢弃
- joiner 桥建立后停所有打洞 → 修复"正在加入服务器最后失败"
ReliableUdpTransport 稳定性
- 卡死检测改用 System.currentTimeMillis() 真实时间(禁用 waitCount 累加假阳性)
- Throwable catch + sendBytes 超时 + close 死锁修复
状态机修复
- TCP_FALLBACK 允许转回 STUN_PROBE/UDP_PUNCH(支持周期重试)
- 完整状态转换校验
陶瓦集成改进
Android
- 直接下载 .so + SHA256 校验 + 跳过执行权限检查(JNI 加载无需执行权限)
- 双 P2P 竞速:waitForDownload 下载完成后再判断(修复手机端陶瓦不显示)
PC 端
- --hmcl 参数对齐 HMCL-3.15.2
- isAlive() 信任 httpPort → 修复 Windows UAC 后不显示房间号
- startInternalRetry 等 portFile 10 秒
- secondary 模式识别(同机 host+joiner 场景)
Terracotta 0.4.2 状态机
- 修复 setIdle 端点为 /state/ide(不是 /state/idle)
- ensureReady() 正确处理 Ready 非 Waiting 时先 setIdle 再 initialize
- 完整 HTTP API 支持
进程清理(双保险)
- 退出世界 DISCONNECT 事件无条件兜底杀陶瓦
- joinRoom 入口杀残留陶瓦
- startRedownload 先杀进程(防 Windows 文件占用)
OP / 权限系统
房主 OP / 访客 OP 分离
- allowCommands = guestOp(访客 OP 控制世界命令开关)
- 房主 OP 由 applyOpPolicy 独立管理
- 房主 OP 关 → 房主 OP 也被撤回
- 访客 OP 关 → 访客无论如何都无 OP
- 1.21.11 用 NameAndId 方案,其他版本用字符串命令方案
LAN 命令注册
- 调用原生 register 方法注册 9 个命令
- 保留原生 Tab 补全和 @a/@p 选择器
- Mixin 放行 LAN 房主
UI / UX
- 简单配置:「加入时陶瓦: 开/关」明确区分陶瓦配置的「陶瓦: 开/关」
- 陶瓦删除按钮:下载时禁用,完成或失败时恢复
- 更新检查:移除 AtomicBoolean,每次进入世界都检查并提示(除非玩家关闭)
- 联机大厅:VERSION_SAME 从排序改为真筛选,过滤异版本房间
- TitleScreenMixin 小窗口防溢出
- drawCenteredClipped 统一渲染
协议 / 网络层
- handleTcpSimopenRequest:host 桥已 listening 时跳过 SimOpen(hostPort 被占用时 bind 必失败)
- SignalingClient:data 字段 JsonArray 容错,HTTP_EXECUTOR 固定 4 线程(防线程爆炸)
- ConnectionHelper:强引用 + 字段 resetTask + 取消 + owner 校验
- 1.20/1.20.1 走 (String,String,boolean) 分支,1.20.2~26.x 走 ServerData.Type.class 类字面量分支
- stubs sourceSet:编译但不打包进 jar,仅用于 PC 端编译期符号引用
下载
支持 23 个 MC 版本,请根据你的游戏版本选择对应的 jar:
1.20 系列:1.20 / 1.20.1 / 1.20.2 / 1.20.3 / 1.20.4 / 1.20.5 / 1.20.6
1.21 系列:1.21.0 / 1.21.1 / 1.21.2 / 1.21.3 / 1.21.4 / 1.21.5 / 1.21.6 / 1.21.7 / 1.21.8 / 1.21.9 / 1.21.10 / 1.21.11
26.x 系列:26.1 / 26.1.1 / 26.1.2 / 26.2
依赖:Fabric Loader + Fabric API
多语言
简体中文 / 繁体中文(台) / 繁体中文(港) / 文言文 / English / العربية / Deutsch / Español / Français / 日本語 / 한국어 / Português(BR) / Русский
从 1.0.6 升级的用户:直接替换 jar 即可,配置文件向后兼容。
感谢使用 VoxLink ᕕ( ᐛ )ᕗ
1.0.6
VoxLink 1.0.6
本次更新主要修复创建房间取消时的提示错误,优化陶瓦二进制下载速度,并清理了一批死代码。
新增
- 陶瓦下载镜像竞速:新增 Gitee 镜像源,客户端会并发探测 GitHub / Gitee / ghproxy 三个源(单源 4 秒超时,总 6 秒超时),自动选最快的链接下载。若全部探测失败则回退原顺序下载。
- 玩家版本号上报:建房时自动上传当前 MC 版本到服务器,用于大厅的"同版本"筛选。
修复
- 创建房间取消提示错误:之前在创建房间过程中按 ESC 或点击取消按钮,会错误显示"出了点意外,再来一次吧 qwq"。现在正确显示"已取消创建房间"。内部机制:新增 cancelled 标志位,用户主动取消后静默丢弃迟到的 future 结果,不再触发 error 分支。
- 更新提示样式丢失:UpdateChecker 中多余的
.withStyle(ChatFormatting.WHITE)覆盖了 AQUA 前缀色,已移除。 - fabric.mod.json 版本范围:
depends.minecraft从>=${minecraft_version}改为${minecraft_version},精确匹配当前 MC 版本,避免加载到不兼容版本。
重构
- 死代码清理(23 个版本同步):
- 删除 6 个无调用文件:
DataRouter/GlobalIPs/FirewallHelper/fw/FirewallGuard/fw/PlatformFirewall/fw/PortDiscovery - 移除 46 个未被调用的 public 方法
- 删除 6 个无调用文件:
- GAME_VERSION 集中管理:新建
VoxLinkConstants.java,各版本从gradle.properties读取minecraft_version写入编译期常量,避免运行时依赖和硬编码。 - UI 代码规范化:
VoxLinkScreenBase新增drawCenteredComponent/fontWidth工具方法CreateRoomScreen提取布局常量,文案改用Component.append().withStyle()链式调用
1.0.5
修复
游戏菜单按钮重命名为"房间管理"
修复更改房间配置后,房间名审核提示反复横跳(先显示未过审又显示过审)
修复每次正常关闭游戏都会出现报错
修复陶瓦进程不自动关闭:关房间/关游戏后陶瓦不再后台残留,删除陶瓦不再失败
修复双 P2P 竞速不公平:VoxLink 和陶瓦现在真正公平竞速,哪边先连上用哪边
修复访客 OP 逻辑:作弊开启但访客 OP 设为否时,访客不再残留 OP 权限
优化
陶瓦解压改纯 Java 实现,全平台支持,不再依赖系统 tar 命令
新增 GitHub 更新检查(可在简单配置中开关)
更新提示开关文案统一加 VoxLink 前缀,13 种语言同步
HTTP 错误日志加中英双语解释
1.0.4
兼容1.20以上的所有fabric版本!
兼容陶瓦联机(陶瓦联机是一个MC社区成熟的外部联机工具,MOD内做了可选下载)
修复已知BUG提高稳定性
Compatible with all Fabric versions 1.20 and above!
Supports TerraClient multiplayer (TerrariaClient is a mature external MC multiplayer tool, an optional download is included in the mod)
Fixed known bugs and improved stability