diff --git a/mcfold/backends/base.py b/mcfold/backends/base.py index be84791..5339ba1 100644 --- a/mcfold/backends/base.py +++ b/mcfold/backends/base.py @@ -426,8 +426,13 @@ class RenderBackend: # ---------------- 元信息 ---------------- - def api_notes(self) -> dict: - """本世代的 API 特征(子类覆写)。""" + @staticmethod + def api_notes() -> dict: + """本世代的 API 特征(子类覆写)。 + + ★ 静态信息(不依赖实例)⇒ 定义成 staticmethod, + 这样才能在**不启动后端**的前提下做世代对照(测试用)。 + """ return {} def describe(self) -> str: diff --git a/mcfold/backends/gen_1_20.py b/mcfold/backends/gen_1_20.py index 4cfd320..2f57f60 100644 --- a/mcfold/backends/gen_1_20.py +++ b/mcfold/backends/gen_1_20.py @@ -28,7 +28,8 @@ class Gen_1_20(RenderBackend): # 判据类(用于自动识别) markers: tuple[str, ...] = () - def api_notes(self) -> dict: + @staticmethod + def api_notes() -> dict: return { "setLevel": "Minecraft.setLevel(ClientLevel)", "render": "GameRenderer.render(float, long, boolean)", diff --git a/mcfold/backends/gen_1_21.py b/mcfold/backends/gen_1_21.py index 3a20631..dfc1ba9 100644 --- a/mcfold/backends/gen_1_21.py +++ b/mcfold/backends/gen_1_21.py @@ -26,7 +26,8 @@ class Gen_1_21(RenderBackend): java_dir = "java/gen_1_21" markers = ("net/minecraft/client/DeltaTracker.class",) - def api_notes(self) -> dict: + @staticmethod + def api_notes() -> dict: return { "setLevel": "Minecraft.setLevel(ClientLevel, ReceivingLevelScreen$Reason)", "render": "GameRenderer.render(DeltaTracker, boolean)", diff --git a/scaffold/build.sh b/scaffold/build.sh index a797544..33bacc3 100755 --- a/scaffold/build.sh +++ b/scaffold/build.sh @@ -74,12 +74,24 @@ else fi # ── 4. classpath(去 asm 重复,Fabric 需要) + natives ──────── +# classpath.txt **只含第三方 libraries** —— client-named.jar 与 classes/ 由使用方拼接 +# (build.sh 自己在下面拼,测试/后端则从各自路径取)。 +# ★ 别在这里把 named/classes 也写进去:那会让「libraries 清单」与「运行 classpath」 +# 两个概念混成一列,而 Fabric 路线需要把 asm 从 libraries 里剔掉后**另行**拼 8 个库。 find "$STORE/libraries" -name "*.jar" ! -name "*-sources.jar" ! -name "*natives*" 2>/dev/null \ | grep -vE "minecraftforge|neoforge" > "$OUT/classpath.txt" NATLIST=$(find "$STORE/libraries" -name "*natives-linux*.jar" 2>/dev/null) if [ -n "$NATLIST" ]; then - rm -rf "$OUT/natives/linux"; mkdir -p "$OUT/natives" - while read -r j; do [ -f "$j" ] && unzip -o -q "$j" -d "$OUT/natives" 2>/dev/null || true; done <<< "$NATLIST" + rm -rf "$OUT/natives"; mkdir -p "$OUT/natives" + # ★ 必须**平铺**。natives jar 里的路径是 linux/x64/org/lwjgl//lib*.so, + # 而 LWJGL 是经 java.library.path/LD_LIBRARY_PATH 按**文件名**找库的 —— + # 嵌套一层的目录它**找不到**(实测 UnsatisfiedLinkError: Failed to locate library: liblwjgl.so)。 + while read -r j; do + [ -f "$j" ] || continue + unzip -o -q "$j" -d "$OUT/natives.tmp" 2>/dev/null || true + done <<< "$NATLIST" + find "$OUT/natives.tmp" -name '*.so' -exec cp {} "$OUT/natives/" \; 2>/dev/null + rm -rf "$OUT/natives.tmp" fi echo "[4/5] 库 $(wc -l < "$OUT/classpath.txt") 个, natives $(find "$OUT/natives" -name '*.so' | wc -l) 个"