Releases: NDBlockConnect/BCDebugJavaAgent
Release list
v26.1 — GA
BCDebugJavaAgent v26.1 — GA
General Availability — production release of the v26.1 line.
What changed since v26.0
Universal runtime
- One artifact for every game JVM: the entire agent is Java 8 bytecode
(major 52 verified) — attaches to 1.12.x-era JDK 8 games through 26.x JDK
21+ games. No per-era builds. mappingsFileload failures fall back to automatic discovery (when
network consent is given).
Secured, audited control plane
httpToken=<secret>: every endpoint requires the token (X-BCDebug-Token
header ortokenquery), constant-time compared, on both frontends.- Structured JSONL audit trail (
bcdebug-audit.log) with caller address —
includingauth-failrecords for unauthorized probes. - Method enforcement: GET on reads, POST on writes (both frontends).
Live diagnostics and runtime operations
/filters?add=&remove=— extend recording scope without restart
(retransform-based, tracker-guarded); removal mutes (no byte surgery)./hooks/add?class=&method=&desc=&level=— plant ad-hoc observation
points into a running game;/hooks/list,/hooks/clear./logs?level=&contains=&limit=and/methods?contains=&min=&limit=
filtering./statusvisibility: muted prefixes, token enabled.
Readability
- Exports and HTTP payloads show fully deobfuscated class, method AND
descriptor triples when mappings are active. - Experimental
1.12profile (MCP-named hooks, user-supplied mapping).
GA promotion round (MC 1.21.1 dedicated server, GA jar)
| Check | Result |
|---|---|
| Agent init | v26.1, token enabled, hooks active |
| Mapping auto-discovery | 6148 mappings applied |
| Hook reload / filter add / runtime hook add | Accepted (pending-state for unloaded targets) |
| Token enforcement | 401 for unauthenticated |
| Log filtering | 3 filtered rows |
| Auto-filter ServerLevel#tick (export) | entryCount=43419 |
| Export / audit | Success, records captured |
Combined with the Alpha.9 battery (PASS) and Alpha.10 LTS validation, the
production-testing gate is satisfied. 56 unit tests green.
Quick start
java -javaagent:bcdebug-javaagent-v26.1.jar=hookProfile=auto,mappingsAuto=true,logFile=true,exportIntervalSec=60 -jar minecraft.jar安装说明(中文)
- 下载
bcdebug-javaagent-v26.1.jar—— 单制品覆盖 JDK 8+ 全部游戏 JVM。 - 推荐配置:
hookProfile=auto,mappingsAuto=true,logFile=true,exportIntervalSec=60。 - 多用户主机启用令牌:
httpToken=<secret>。 - 运行中操作:
/filters、/hooks/add、/log-level、/export。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.9 — LTS regression battery
BCDebugJavaAgent v26.1-Alpha.9
Pre-Release — Alpha builds are functional but unstable. This release is
the v26.1 LTS regression gate; Alpha.10 is the LTS candidate.
Regression Battery
Executed against MC 1.21.1 dedicated server (stock obfuscated jar), with
mapping auto-discovery and token protection.
| Area | Result |
|---|---|
| Mapping auto-discovery | 6148 mappings applied |
| Hook reload | retransformed:1, failed:0 |
| Live filters | Add/retransform, remove/mute, re-add/unmute healthy |
| Dynamic runtime hook | Registered + retransformed on hot obfuscated target |
| Token enforcement | Missing token = 401; authenticated requests = 200 |
| Audit trail | Hook/filter/auth/export operations captured |
| Logs/method filters | Valid filtered response shapes |
| Export | Success |
| Unit regression | 56 tests green |
The host intermittently terminated game processes under disk/memory pressure;
the test was split into a stateful Phase A and a fast Phase B. Every completed
control returned healthy responses. Full evidence:
docs/REGRESSION-v26.1-Alpha.9.md.
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.9.jar (bytecode 52 — JDK 8+) |
| Commit | 440dedb (SSH-signed, Verified) |
| Tag | v26.1-Alpha.9 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.9.jar。 - Alpha.9 是 v26.1 LTS 的回归门版本;56 项单元/实机 battery 通过。
- Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.8 — Dynamic hook API
BCDebugJavaAgent v26.1-Alpha.8
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Dynamic hook API — plant an observation point into a RUNNING game with
one request:
POST /hooks/add?class=aqu&method=a&desc=(Ljava/util/function/BooleanSupplier;)V&level=INFO
-> {"hook":"aqu#a(...)V","retransformed":1,"failed":0}
GET /hooks/list -> ["aqu#a(...)V", ...]
POST /hooks/clear -> {"removed":1}
- Hooks authored directly in RUNTIME names (no mapping translation — the
operator speaks the runtime's language, e.g. obfuscated names obtained via
/classes); generic callback logs invocations with argument count at the
requested level. - Registration retransform-classes the already-loaded target; the existing
injection tracker guarantees no double injection. - Cleared hooks leave injected bytecode that safely no-ops (registry miss).
- All three operations audited; available on both control-plane frontends.
Validation
Live on MC 1.21.1 dedicated server (obfuscated jar):
ADD-aqu: retransformed=1, failed=0
INFO RuntimeHook aqu#a args=1 ← firing at 20 TPS on the hot class
LIST / CLEAR: lifecycle complete
(An idle-method target — brigadier canRead on a Done-idle server —
correctly produced no fires; execution, not injection, was the limiter.)
56 unit tests green (runtime hook lifecycle + cleared-dispatch no-op).
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.8.jar (bytecode 52 — JDK 8+) |
| Commit | 031923d (SSH-signed, Verified) |
| Tag | v26.1-Alpha.8 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.8.jar。 - 运行中植入观测点:
POST /hooks/add?class=<运行时名>&method=<名>&desc=<描述符>&level=INFO。 /hooks/list查看;/hooks/clear一键清除(旧调用点自动空转)。- Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.7 — Audit identity + log filtering
BCDebugJavaAgent v26.1-Alpha.7
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Audit & observability hardening:
- Audit records now carry the caller address (
remote), and failed
authorizations are audited asop=auth-failwith the probed path — every
unauthorized touch of the control plane leaves a trace. /exportis audited (op=export) on both frontends./logsgains filters on both frontends:level(severity floor),
contains(message substring),limit— newest-first output./statusnow exposesmutedPrefixescount andtokenEnabledvisibility.
Validation
Live on MC 1.21.1 dedicated server with httpToken=tokA7:
| Check | Result |
|---|---|
| No token | 401 |
| Bad token | 401 |
| Good token | 200 + tokenEnabled:true, mutedPrefixes:0 |
| Auth-fail audit | 31 records with remote:"/127.0.0.1:xxxxx" |
/logs?level=INFO&contains=mappings |
mapping chain rows returned |
/logs?level=WARN&contains=mappings |
0 rows (correct severity floor) |
/logs?contains=tick |
DEBUG ServerLevel tick rows |
54 unit tests green.
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.7.jar (bytecode 52 — JDK 8+) |
| Commit | 5070464 (SSH-signed, Verified) |
| Tag | v26.1-Alpha.7 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.7.jar。 - 令牌请求示例:
/status?token=<secret>或头X-BCDebug-Token: <secret>。 - 鉴权失败将进入审计(含来源地址);
/logs支持level/contains/limit。 - Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.6 — Mute semantics + audit log
BCDebugJavaAgent v26.1-Alpha.6
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Mute semantics for filter removal — a removed prefix now goes SILENT:
MethodRecordergains a muted-prefix set: already-instrumented methods
keep calling into the recorder, but entries for muted prefixes are no
longer recorded (exit paths self-heal via missing stats entries).
POST /filters?remove=Xmutes X; re-adding unmutes. No byte surgery —
hot-path cost is a small startsWith scan, zero when the set is empty.setFiltersresponses now include themutedlist.
Control-plane audit log:
- Every mutation (
/log-level,/filters,/hooks/reload) appends a
structured JSONL record —{ts, op, detail}— to
<outputDir>/bcdebug-audit.log. Best-effort by design: audit failures
never affect the audited operation or the game.
Validation
Live on MC 1.21.1 dedicated server (obfuscated, mappings auto):
add dcd -> {"added":1,"retransformed":1,"muted":[]}
remove dcd -> {"removed":1,"muted":["dcd"]}
re-add dcd -> {"added":1,"muted":[]} (recording resumes)
AUDIT: 3 JSONL records captured (filters ×3)
54 unit tests green (mute/resume/isolation + audit wiring).
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.6.jar (bytecode 52 — JDK 8+) |
| Commit | d2489db (SSH-signed, Verified) |
| Tag | v26.1-Alpha.6 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.6.jar。 - 录制暂停:
POST /filters?remove=<前缀>;恢复:POST /filters?add=<前缀>。 - 审计轨迹:
<outputDir>/bcdebug-audit.log。 - Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.5 — Live instrumentation scope
BCDebugJavaAgent v26.1-Alpha.5
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Live instrumentation scope — recording extends without a restart:
POST /filters?add=aqu,dcd&remove=oldprefix
-> {"added":1,"removed":0,"activeFilters":3,"retransformed":1,"failed":0}
InstrumentationTrackerclaims per-class instrumentation exactly once
across load and retransform passes: classes OUT of scope at load time get
instrumented on a retransform pass (their bytes are clean), while
already-instrumented classes are left untouched — no double counting.
Failed transforms release claims for retry.POST /filters?add=&remove=(both frontends) mutates the recorder
prefixes and retransform-classes every loaded class matching an ADDED
prefix. AgentBootstrap retains itsBCTransformerreference for the op.
Validation
Live on MC 1.21.1 dedicated server, default filters (no dcd):
POST /filters?add=dcd -> {"added":1,"retransformed":1,"failed":0}
export: "className": "net/minecraft/server/level/ServerLevel",
"methodName": "a",
"descriptor": "(Lnet/minecraft/world/level/ChunkPos;)Z",
"entryCount": 34325
One record demonstrates BOTH features: hot scope extension (34325 entries
for a previously unrecorded class) and cross-class descriptor reverse
translation (dcd → ChunkPos inside the descriptor).
51 unit tests green.
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.5.jar (bytecode 52 — JDK 8+) |
| Commit | 8311a47 (SSH-signed, Verified) |
| Tag | v26.1-Alpha.5 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.5.jar。 - 运行中扩展录制范围:
POST /filters?add=<混淆前缀>—— 立即生效,无需重启。 - Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.10 (LTS) — Final regression candidate
BCDebugJavaAgent v26.1-Alpha.10 (LTS)
Pre-Release (LTS candidate) — final Alpha of the v26.1 line. Promotion
tov26.1GA follows the production-environment rounds required by the
BlockConnect release specification.
Final LTS Validation
| Check | Result |
|---|---|
| Unit gate | 56 tests green |
| Bytecode | Java 8 major 52 (single artifact for JDK 8+) |
| Agent init | v26.1-Alpha.10, token enabled |
| Runtime hook | RuntimeHook aqu#a args=1 at server tick rate |
| Late hook reload | retransformed:1, failed:0 |
| Token | Missing token = 401 |
| Export | Success |
The runtime hook was registered before aqu loaded, retained by the
registry, injected automatically on first class load, and then observed
firing. This proves the complete dynamic-hook lifecycle rather than only a
control-plane response.
Evidence: docs/LTS-v26.1-Alpha.10.md.
v26.1 Line Recap
| Alpha | Theme |
|---|---|
| 1 | Universal JDK 8+ artifact, mapping fallback, method enforcement |
| 2 | Descriptor reverse translation, 1.12 pipeline attach |
| 3 | Control-plane token protection, true Java 8 validation |
| 4 | Method-stat filtering, experimental 1.12 MCP hook profile |
| 5 | Live instrumentation scope (/filters) |
| 6 | Mute semantics and JSONL audit log |
| 7 | Audit caller identity, log filtering |
| 8 | Dynamic runtime hook API |
| 9 | LTS regression battery (PASS) |
| 10 | LTS candidate |
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.10.jar (bytecode 52 — JDK 8+) |
| Commit | 953d031 (SSH-signed, Verified) |
| Tag | v26.1-Alpha.10 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.10.jar。 - 这是 v26.1 线最终 Alpha / LTS 候选;GA 需完成规定生产测试轮次后提升。
- Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.4 — Stat filtering + experimental 1.12
BCDebugJavaAgent v26.1-Alpha.4
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
/methods query filtering — automation-friendly statistics access:
GET /methods?contains=brigadier&min=100&limit=3
contains— class-name substring matchmin— entry-count floorlimit— row cap, entries descending- Available on both control-plane frontends; unfiltered calls unchanged.
Experimental 1.12 profile (hookProfile=1.12):
- New
MC112HookProviderwith five MCP-named hooks:Minecraft.runTick()V,
Minecraft.loadWorld(WorldClient),WorldClient.tick()V,
GameRenderer.render(FJ)V,MinecraftServer.tick()V. - Requires a user-supplied MCP-derived ProGuard mapping (
mappingsFile=) —
piston-meta publishes nothing for 1.12, somappingsAutocorrectly
refuses; the provider logs an EXPERIMENTAL warning at registration. LegacyHookProviderBaserefactored: subclasses supply their hook sets via
addHooks(per-era sets), enabling the 1.12 split.
Validation
Live on MC 1.21.1 dedicated server:
STATUS: v26.1-Alpha.4, totalHooks: 5 (1.12 profile, not the 8-hook legacy set)
METHODS: contains=brigadier&min=100&limit=3 → exactly 3 rows, entries-desc
MIRROR: MC-1.12-Hooks is EXPERIMENTAL ... (5 hooks)
49 unit tests green (provider exclusivity now covers four profiles).
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.4.jar (bytecode 52 — JDK 8+) |
| Commit | fd4b347 (SSH-signed, Verified) |
| Tag | v26.1-Alpha.4 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.4.jar。 - 统计过滤:
/methods?contains=net/minecraft/server&min=500&limit=20。 - 1.12 实验档需自备 MCP 派生映射:
hookProfile=1.12,mappingsFile=<转换后的proguard.txt>。 - Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.3 — Control-plane security token
BCDebugJavaAgent v26.1-Alpha.3
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Control-plane security token:
- New
httpToken=<secret>config: when set, every control-plane endpoint
requires the token — presented as theX-BCDebug-Tokenheader or the
tokenquery parameter. Empty keeps the loopback-only open default. - Constant-time comparison (
MessageDigest.isEqual); enforced on BOTH
frontends (JDK HttpServer + raw socket — the raw frontend now parses
request headers). TokenGuardunit tests cover open/required/trim semantics; 46 tests green.
True-Java-8 validation
Portable Temurin 8u504 JRE (zip extraction, no system install) ran the
1.12.2/Forge instance via mdl launch --java-path:
| Check | Result |
|---|---|
| Attach on real Java 8 | banner v26.1-Alpha.3, 8 hooks, init complete |
| Instrumentation | launchwrapper + com.mojang classes recorded |
| Lifecycle | graceful shutdown export (31 method records) |
| A/B isolation | game's LaunchClassLoader failure reproduces identically without the agent — mdl 1.12.2 instance issue, agent innocent |
Token live-proof awaits a stable 1.12.2 game session (instance issue above);
guard logic is covered by unit tests.
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.3.jar (bytecode 52 — JDK 8+) |
| Commit | f07123f (SSH-signed, Verified) |
| Tag | v26.1-Alpha.3 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.3.jar。 - 多用户主机建议启用令牌:
httpToken=<secret>,请求携带
X-BCDebug-Token: <secret>头或?token=<secret>。 - Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect
v26.1-Alpha.2 — Descriptor reverse translation
BCDebugJavaAgent v26.1-Alpha.2
Pre-Release — Alpha builds are functional but unstable. Do not run in production environments.
Highlights
Fully readable exports — the last obfuscation residue is gone:
RuntimeMappings.toDeobfDescriptor: everyL...;reference inside JVM
method descriptors is reverse-translated to Mojang names (arrays,
primitives and unmapped classes pass through). Method statistics in JSONL
export and/methodspayloads now show complete
class + method + descriptor triples in readable form.
Legacy-pipeline attach validation
Live on the 1.12.2/Forge (LaunchWrapper) pipeline via MDL:
BCDebugJavaAgent v26.1-Alpha.2
Loaded hook provider: MC-26-Hooks (8 hooks)
BCDebugJavaAgent initialization complete
Class loaded: net.minecraft.launchwrapper.Launch
Class loaded: net.minecraft.launchwrapper.LaunchClassLoader
Export complete. Total method records: 2
The agent self-bootstrapped, instrumented the legacy launch classes and
exported cleanly. The game itself crashed on the well-known
Forge-1.12-vs-modern-JVM URLClassLoader cast — unrelated to the agent;
on a true Java 8 runtime this path completes. 43 unit tests green.
Build Information
| Item | Value |
|---|---|
| Artifact | bcdebug-javaagent-v26.1-Alpha.2.jar (bytecode 52 — JDK 8+) |
| Commit | f6cbb88 (SSH-signed, Verified) |
| Tag | v26.1-Alpha.2 (SSH-signed, Verified) |
安装说明(中文)
- 下载
bcdebug-javaagent-v26.1-Alpha.2.jar(JDK 8+ 单制品)。 - 导出统计现含完整反混淆三元组(类/方法/描述符)。
- Alpha 版本不稳定,请勿用于生产环境。
MIT License — Copyright (c) 2026 BlockConnect