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。

相关条目