不起完整客户端、不连服、不登录,只初始化 MC 渲染栈并喂入我们自己造的世界数据。
已验证(全绿):
countRenderedChunks=29 distinct colors=1450
画面:草地/原木/树叶/天空/HUD/英文文字(sample-world-render.png)
打通的关卡:
- 反混淆(client-named.jar)+ GL 离屏 + new Minecraft(cfg) 不进主循环
- 资源同步重载:22 listener(ModelManager/FontManager/Dispatcher)
★ 不能 join reloadResourcePacks(等主循环→死锁),直接调各 listener reload()
- 注册表从客户端自带 data/ 加载(dimension_type=4)
- 区块注入:LevelChunk + setBlockState → ClientChunkCache.Storage.chunks
+ LightEngine.queueSectionData(全亮)→ allChanged()
- 每帧 mc.tick() 推进网格重建队列(不跑则 countRenderedChunks=0)
踩坑记录(10 条,README 详列):
LoadingOverlay/ReceivingLevelScreen 遮挡、FolderData 参数序、
assetIndex 用落盘名、reloadShaders 包私有、读像素必须绑 FBO、
判据用 distinct colors 而非 non-black
更正附录 D:state_id=1003 → note_block 不是误映射(note_block 有 800 状态)
—— 真客户端给完整状态,是 1.20.1 上 mod 方块语义的唯一权威来源
15 lines
506 B
Java
15 lines
506 B
Java
package net.minecraft.client.renderer;
|
||
|
||
import net.minecraft.server.packs.resources.ResourceProvider;
|
||
|
||
/**
|
||
* 包私有成员桥(GameRenderer.reloadShaders 是 package-private)。
|
||
* 官方由匿名内部类 GameRenderer$1 在资源重载时调用;
|
||
* 我们不跑主循环 ⇒ 用同包类直接调用,跳过整个 reload 基础设施。
|
||
*/
|
||
public class McfoldBridge {
|
||
public static void reloadShaders(GameRenderer gr, ResourceProvider provider) {
|
||
gr.reloadShaders(provider);
|
||
}
|
||
}
|