Links
Tags
Creators
Details
1.1.0
Compatibility
Changes
MikuHAProxy 1.1.0 —— 1.0.1 之后的第一个正式版。
这一版把 1.0.1 的全量代码审计结果全部修掉:一个会让代理连接被误掐的真实缺陷,外加健壮性、文案、死代码与性能问题。
修复
- 换装重名兜底必然失败:当管道里已经存在同名处理器时,兜底路径复用了同一个解码器实例。Netty 的
replace是「先查复用、后查重名」,第一次调用已把该实例标记为「已加入过」,于是复用必抛ChannelPipelineException—— 结果是每一条代理连接都被断开。现改为换新实例,并把兜底捕获放宽到RuntimeException。 whitelist-file写成非法路径时不再导致插件启动失败,改为报告问题并回退默认文件名。- 「数据目录是否为同一个」的判定改用
Files.isSameFile。此前用Path.equals,在 macOS 上会把同一个目录判成两个,然后提示用户「合并后删掉旧目录」——照做等于删掉配置。 ChannelHook的若干状态字段补上volatile,避免热重载时的可见性问题。
文案与文档
- 「未注入」计数与注入告警的措辞由「管道首位」改为「管道里」。其他插件占用管道首位时本插件仍会退化为按类型查找并成功注入,原文案会把这种正常共存误报成「请反馈该问题」。
- 去掉「Velocity 自身会打印一条替换告警」的说法(实测不会打印任何日志)。
- 配置模板明确写出:白名单只约束代理连接、不限制直连;出厂放行回环是有意的信任设定,并说明了它的代价。
内部整理
- 删除不可达的
isSingleDecode()覆写,把「只判定一次」的真实机制写进注释。 Counters不再对外交出可变的LongAdder,改为计数方法与只读快照。LogThrottle的全量清理由「每个新地址触发一次」改为「每个时间窗至多一次」,超限兜底仍是 O(1)。- 清理
.gitignore中的构建模板残留。
兼容性
- 需要 Velocity 4.x(Java 25)。
- 配置项与白名单格式与 1.0.1 完全一致,可直接替换 jar。
MikuHAProxy 1.1.0 — the first stable release after 1.0.1.
This release addresses every finding from the full audit of 1.0.1: one real defect that could drop every proxied connection, plus robustness, wording, dead-code and performance issues.
Fixed
- The duplicate-name fallback during decoder swap always failed. It reused an already-added decoder instance; Netty's
replacechecks reuse before duplicate names, so the second attempt threwChannelPipelineExceptionand closed every proxied connection. It now installs a fresh instance. - An invalid
whitelist-filepath no longer prevents the plugin from starting. - "Same directory" detection now uses
Files.isSameFile; a plain path comparison misreports on macOS and could lead users to delete their own configuration. - Added
volatileto several state fields inChannelHook.
Docs and wording
- The whitelist only constrains proxied connections and does not restrict direct connections — now stated explicitly in the config template, along with the reasoning behind shipping with loopback allowed.
Internal
- Removed an unreachable
isSingleDecode()override;Countersno longer exposes a mutableLongAdder;LogThrottleno longer performs a full sweep on every new address.
Compatibility
- Requires Velocity 4.x (Java 25).
- Configuration and whitelist format are unchanged from 1.0.1 — drop-in replacement.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:SPh6m4k5:tKbPufSQ"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:SPh6m4k5:tKbPufSQ"
}

