IWailaDataProvider
基本信息
| 属性 | 值 |
|---|---|
| 接口全名 | mcp.mobius.waila.api.IWailaDataProvider |
| 源码 | src/main/java/mcp/mobius/waila/api/IWailaDataProvider.java:20 |
| 作用对象 | 方块 / TileEntity |
| 抽象方法数 | 5(getWailaStack + Head/Body/Tail + getNBTData) |
| default 方法数 | 2(高级 Body 扩展) |
这是第三方 addon 想给方块或 TileEntity 加 HUD 文本时最常实现的接口。接口 javadoc 明确说明:其所有方法都不应由实现方主动调用,只应注册实例(IWailaDataProvider.java:12-15)。
功能
三个文本区的回调
| 方法 | 签名要点 | 行 | 触发注册方法 |
|---|---|---|---|
getWailaHead |
(ItemStack, List<String>, IWailaDataAccessor, IWailaConfigHandler) → List<String> |
46 | registerHeadProvider |
getWailaBody |
同上 | 55 | registerBodyProvider |
getWailaTail |
同上 | 107 | registerTailProvider |
三个方法的 javadoc 契约一致:currenttip 是已被其他 provider 处理过的当前行列表,允许任意增删改;实现方必须返回修改后的入参 currenttip(IWailaDataProvider.java:37-44、IWailaDataProvider.java:50-56、IWailaDataProvider.java:94-106)。三者均只在客户端执行(javadoc 中的 client side,如 IWailaDataProvider.java:35-36)。
Stack 覆盖
getWailaStack(IWailaDataAccessor, IWailaConfigHandler) → ItemStack(IWailaDataProvider.java:31)用于覆盖 Waila 默认的方块→ItemStack 查询。返回 null 表示不覆盖,交回默认查询系统(IWailaDataProvider.java:29)。仅在通过 registerStackProvider 注册时生效(IWailaDataProvider.java:23-25)。
NBT 同步
getNBTData(EntityPlayerMP, TileEntity, NBTTagCompound, World, int x, int y, int z) → NBTTagCompound(IWailaDataProvider.java:126-127)在服务端执行,用于定制要同步给客户端的 NBT。tag 入参同样可能已被其他 provider 处理过,实现方须返回修改后的 tag(IWailaDataProvider.java:114-124)。此方法在服务端与客户端两侧都需注册(IWailaDataProvider.java:112-113),因此它是实现跨端一致性的关键点。
高级 Body 扩展(本分支特有)
| 方法 | 默认值 | 行 |
|---|---|---|
hasWailaAdvancedBody(ItemStack, IWailaDataAccessor, IWailaConfigHandler) → boolean |
false(IWailaDataProvider.java:75-77) |
75 |
getWailaAdvancedBody(ItemStack, List<String>, IWailaDataAccessor, IWailaConfigHandler) → List<String> |
原样返回 currenttip(IWailaDataProvider.java:89-92) |
89 |
这是两个 default 方法,实现方可以完全不写。语义(IWailaDataProvider.java:67-68、IWailaDataProvider.java:80-81):hasWailaAdvancedBody 返回 true 时,Waila 会显示 “Hold <KEY> for more info” 提示,并在玩家按住高级键位时调用 getWailaAdvancedBody。默认返回 false 是为了向后兼容既有 addon。
数值
| 项 | 值 | 来源 |
|---|---|---|
| 抽象回调方法数 | 5 | IWailaDataProvider.java |
| default 回调方法数 | 2 | IWailaDataProvider.java:75、IWailaDataProvider.java:89 |
| 文本区数量 | 3(Head / Body / Tail) | IWailaDataProvider.java:34 |
hasWailaAdvancedBody 默认返回 |
false |
IWailaDataProvider.java:76 |
交互
调用方传入的 IWailaDataAccessor 提供 world / player / block / metadata / TileEntity / NBT / partialFrame 等,见 数据访问器。配置读取见 配置 API。输出字符串可用 Waila 自定义控制符排版,见 Tooltip 控制符。
Waila 自身在 ProxyClient.java:46-47 把 HUDHandlerBlocks 注册为 Block.class 的 Head 与 Tail provider,即所有方块的 Head/Tail 都有基础实现,addon 只需追加 Body。
相关条目
- IWailaRegistrar - 注册本接口实例的方法
- 数据访问器 - 回调参数
IWailaDataAccessor的可用字段 - IWailaEntityProvider - 实体侧的对应接口
- Tooltip 控制符 - 输出行的格式化与自定义渲染调用
- 模块配置项 - addon 常见的
addConfig用法实例