Files
agentmc/mcfold/backends/gen_1_20.py
JianFeeeee 8c7d5b9d38 世代分派体系:Python 层 switch + 各世代独立编译的 Java 后端
用户定向:在 python 层写 switch,调用不同 java 后端(而非一个文件里 switch)。

新增:
  mcfold/backends/{__init__,base,gen_1_20,gen_1_21}.py  后端体系与分派
  scaffold/java/gen_1_20/  对 1.20.x client jar 编译
  scaffold/java/gen_1_21/  对 1.21.1 client jar 编译(✅ 实测编译通过)
  scaffold/java/VERSION-DIFFS.md  实测差异全表

判据:DeltaTracker 类是否存在(1.21 引入,正是 render 签名变化的根源)
  ⇒ 比硬编码版本号稳

实测差异共 11 处(21 个检查点里 13 个跨世代完全一致):
  setLevel / GameRenderer.render / countRendered* / createPackRepository /
  ResourceLocation 构造 / enableDataFixerOptimizations(移除) / User 构造 /
  ChunkStatus 包路径 / ClientPacketListener 构造(参数个数语义都变) /
  loadEffect(变 private)

为什么必须分后端:DeltaTracker 在 1.20.x jar 中不存在,
两代调用无法共存于一份源码(实测编译报 cannot find symbol)。

1.21.1 反混淆已验证(29MB named jar,DeltaTracker 3 处)
2026-09-25 18:21:08 +08:00

38 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""1.20.x 渲染后端。
对应 Java 源码:scaffold/java/gen_1_20/
编译目标:1.20.x 的 client jar(重映射为可读名后)
API 特征(实测):
setLevel(ClientLevel)
GameRenderer.render(float partialTick, long nanoTime, boolean renderLevel)
LevelRenderer.countRenderedChunks()
"""
from __future__ import annotations
from .base import RenderBackend
class Gen_1_20(RenderBackend):
"""1.20.x 系列(含 1.20 / 1.20.1 / 1.20.2 / 1.20.3 / 1.20.4 / 1.20.5 / 1.20.6)。"""
generation = "gen_1_20"
# ★ 诚实标注:仅实测过 1.20.1 与 1.20.2(以及 1.20.1 的 mappings 对比)。
# 1.16~1.19 未验证 —— 不要因为「看起来同代」就宣称支持。
verified_versions = ("1.20.1", "1.20.2")
min_mc_version = "(未验证)"
max_mc_version = "1.20.6" # 1.21 起换世代(由 DeltaTracker 判据确定)
# 该世代的 Java 源码目录(相对 scaffold/java/)
java_dir = "java/gen_1_20"
# 判据类(用于自动识别)
markers: tuple[str, ...] = ()
def api_notes(self) -> dict:
return {
"setLevel": "Minecraft.setLevel(ClientLevel)",
"render": "GameRenderer.render(float, long, boolean)",
"count": "LevelRenderer.countRenderedChunks()",
"deltaTracker": False,
}