P8: scaffold —— 反混淆 + MC 渲染栈离屏初始化 + 真渲染出图

实测链路(全绿):
  1. 官方 ProGuard 映射 → SRG → SpecialSource 重映射 → client-named.jar
  2. 反编译确认 MC 渲染器挂在 Minecraft 单例上,不能独立 new
  3. 权威序列:tryDetectVersion → Bootstrap → RenderSystem → new Minecraft(cfg)
  4. 渲 3 帧 + glReadPixels → PNG,画面是 Mojang 加载屏(真渲染,非清屏)

三个坑(实测证据):
  - 漏 tryDetectVersion → Game version not set
  - FolderData 参数顺序错 → icons/ 404
  - assetIndex 用 id(5) 而非落盘名(1.20.1) → 资源全找不到

下一步:ClientLevel 构造只需 listener.registryAccess(),
ClientChunkCache.replaceWithPacketData 接收 map_chunk 原始字节
(与 chunk.py 同格式)⇒ 这就是数据喂渲染器的落点。
This commit is contained in:
JianFeeeee
2026-09-25 15:39:41 +08:00
parent 5038c7f679
commit e223be2571
6 changed files with 472 additions and 0 deletions

21
scaffold/GlProbe.java Normal file
View File

@ -0,0 +1,21 @@
import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.NULL;
public class GlProbe {
public static void main(String[] a) {
GLFWErrorCallback.createPrint(System.err).set();
if (!glfwInit()) { System.out.println("FAIL: glfwInit"); return; }
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
long win = glfwCreateWindow(320, 240, "probe", NULL, NULL);
if (win == NULL) { System.out.println("FAIL: createWindow"); return; }
glfwMakeContextCurrent(win);
GL.createCapabilities();
System.out.println("OK gl=" + glGetString(GL_VERSION));
System.out.println("OK renderer=" + glGetString(GL_RENDERER));
glfwDestroyWindow(win); glfwTerminate();
}
}