客户端渲染映射

vexatos.tgregworks.proxy.ClientProxy 的 addToolRenderMappings()。 在 TGregworks.init 阶段调用,每个入选材料注册一条 TiC 材质渲染映射, 让工具模型在客户端能正确按材料上色。

代码

@Override
public void addToolRenderMappings() {
    for (Materials m : TGregworks.registry.toolMaterials)
        TConstructClientRegistry.addMaterialRenderMapping(TGregworks.registry.matIDs.get(m), "tgregworks", "", true);
}
参数 值 含义
第 1 matIDs.get(m) TGregworks 的材料 ID(从 1500 起分配的那一套)
第 2 "tgregworks" 资源域(纹理目录)
第 3 "" 空字符串——不指定具体文件名
第 4 true 覆写已有映射(GTNH 上同名材料可能被别的 mod 抢先注册过)

因为第 3 个参数是空串,每个部件只靠物品本身的 getColorFromItemStack 染色, 不加载任何额外贴图——见 部件材料 NBT 的颜色一节。

代理结构

@SidedProxy(clientSide = "vexatos.tgregworks.proxy.ClientProxy",
            serverSide  = "vexatos.tgregworks.proxy.CommonProxy")
public static CommonProxy proxy;

TGregworks.init 里三个调用:

调用 客户端 服务端
proxy.addToolRenderMappings() 遍历材料注册映射 CommonProxy 的实现是空方法体(注释 // NO-OP)
proxy.registerRenderers() 整个方法体被注释掉(原本要 RenderingRegistry.registerEntityRenderingHandler(TGregDaggerEntity.class, …)) 空方法体
registry.registerFluids() 不走代理,客户端服务端都执行 同左

CommonProxy 只有 2 个方法,且两个方法体都是注释掉的 // NO-OP。 服务端不加载任何渲染代码——这与本 mod 无实体、无方块一致。

时序

init 阶段的执行顺序是:

proxy.addToolRenderMappings();      // ① 需要 toolMaterials 与 matIDs 已在 preInit 填好
registry.registerFluids();           // ②
proxy.registerRenderers();           // ③ 空
IntegrationITT.init();               // ④ 条件注册部件替换修饰符

① 在 ② 之前,两者在服务端都是空操作,相对顺序不影响任何东西。

未使用的死代码

ClientProxy.registerRenderers() 的方法体只剩一行注释:

// RenderingRegistry.registerEntityRenderingHandler(TGregDaggerEntity.class, new DaggerRenderCustom());

TGregDaggerEntity 位于 unused/entity/ 目录,不在 src/main/java 下,不参与编译。 见分类页的"本 mod 没有的内容"。

相关条目