方块装饰器
基本信息
| 属性 | 值 |
|---|---|
| 方块侧接口 | mcp.mobius.waila.api.IWailaBlockDecorator(IWailaBlockDecorator.java:14) |
| FMP 侧接口 | mcp.mobius.waila.api.IWailaFMPDecorator(IWailaFMPDecorator.java,25 行) |
| 注册方法 | registerDecorator(IWailaBlockDecorator, Class)(IWailaRegistrar.java:75) |
| FMP 注册方法 | registerDecorator(IWailaFMPDecorator, String)(IWailaRegistrar.java:77) |
| 存储位置 | ModuleRegistrar.blockClassDecorators / FMPClassDecorators(ModuleRegistrar.java:38、ModuleRegistrar.java:50) |
装饰器是在世界内、方块位置上绘制 3D 图形的扩展点(典型用途:选中高亮框、覆盖层),与只影响屏幕 HUD 文本的 provider 完全不同。
功能
IWailaBlockDecorator
单个回调方法(IWailaBlockDecorator.java:24):
void decorateBlock(ItemStack itemStack, IWailaDataAccessor accessor, IWailaConfigHandler config);
javadoc 契约(IWailaBlockDecorator.java:16-23):回调提供一个已定位到该方块上的标准 GL 栈;实现方不需自行做射线检测或矩阵平移。触发条件为通过 IWailaRegistrar.registerDecorator 注册。
IWailaFMPDecorator
对应 FMP 版本(IWailaFMPDecorator.java):
void decorateBlock(ItemStack itemStack, IWailaFMPAccessor accessor, IWailaConfigHandler config);
唯一差异是 accessor 类型为 IWailaFMPAccessor,且匹配目标是部件名字符串而非 Class。
数值
| 项 | 值 | 来源 |
|---|---|---|
IWailaBlockDecorator 方法数 |
1 | IWailaBlockDecorator.java:24 |
IWailaFMPDecorator 方法数 |
1 | IWailaFMPDecorator.java |
| Waila 自带 FMP 装饰器 | DecoratorFMP(ProxyServer.java:107) |
— |
FMP 装饰器仅在 ForgeMultipart 加载时注册(ProxyServer.java:105-108),检测标志为 LoadedMods.FORGE_MULTIPART = Loader.isModLoaded("ForgeMultipart")(LoadedMods.java:7)。
交互
装饰器在渲染阶段执行,由 DecoratorRenderer 驱动。Waila.preInit(Waila.java:62)与 Waila.initialize(Waila.java:69)各向 MinecraftForge.EVENT_BUS 注册一次 DecoratorRenderer 实例;客户端启用条件在 Waila.java:68(Side.CLIENT 判断)。
相关条目
- IWailaRegistrar -
registerDecorator两个重载的消歧规则 - 数据访问器 -
IWailaDataAccessor/IWailaFMPAccessor字段 - 配置 API -
config参数的读取方式 - HUD 渲染管线 - 装饰器与 HUD 文本的渲染分工