数据访问器
基本信息
| 属性 | 值 |
|---|---|
| 数量 | 4 个访问器接口 |
| 源码目录 | src/main/java/mcp/mobius/waila/api/ |
| 实现在 | mcp.mobius.waila.api.impl.DataAccessorCommon |
Waila 向 addon 回调注入的一组只读上下文接口,让 addon 无需直接持有游戏引擎引用即可取数。四个接口的 javadoc 均声明:它们返回的是未经覆盖系统修改的原始数据(例如不会被 getWailaStack 覆盖影响)(IWailaDataAccessor.java:14-17、IWailaEntityAccessor.java:11-14)。
四个接口对照
| 接口 | 源码行 | 方法数 | 适用回调 |
|---|---|---|---|
IWailaDataAccessor |
IWailaDataAccessor.java:23 |
14 | 方块 / TileEntity provider |
IWailaEntityAccessor |
IWailaEntityAccessor.java:20 |
7 | 实体 provider |
IWailaCommonAccessor |
IWailaCommonAccessor.java(53 行) |
17 | 自定义 tooltip 渲染器 |
IWailaFMPAccessor |
IWailaFMPAccessor.java(41 行) |
10 | FMP provider / decorator |
IWailaDataAccessor 字段
摘自 IWailaDataAccessor.java:25-51:
| 方法 | 返回类型 | 行 |
|---|---|---|
getWorld() |
World |
25 |
getPlayer() |
EntityPlayer |
27 |
getBlock() |
Block |
29 |
getBlockID() |
int |
31 |
getBlockQualifiedName() |
String |
33 |
getMetadata() |
int |
35 |
getTileEntity() |
TileEntity |
37 |
getPosition() |
MovingObjectPosition |
39 |
getRenderingPosition() |
Vec3 |
41 |
getNBTData() |
NBTTagCompound |
43 |
getNBTInteger(NBTTagCompound,String) |
int |
45 |
getPartialFrame() |
double |
47 |
getSide() |
ForgeDirection |
49 |
getStack() |
ItemStack |
51 |
各接口差异
IWailaEntityAccessor
只有 7 个方法(IWailaEntityAccessor.java:22-36):getWorld、getPlayer、getEntity、getPosition、getRenderingPosition、getNBTData、getNBTInteger、getPartialFrame。没有 getBlock* / getMetadata / getSide / getStack。
IWailaCommonAccessor
供 Tooltip 渲染器 使用,是方块与实体的并集:含 IWailaDataAccessor 全部 14 个方法,另加 getEntity()(IWailaCommonAccessor.java)与 getStack(),共 17 个。渲染器因此能在同一份上下文里同时处理两类目标。
IWailaFMPAccessor
服务 ForgeMultipart,独有两个方法:
| 方法 | 返回类型 | 用途 |
|---|---|---|
getFullNBTData() |
NBTTagCompound |
未经选择性裁剪的完整 NBT |
getID() |
String |
FMP 部件标识串 |
其余 8 个(getWorld、getPlayer、getTileEntity、getPosition、getNBTData、getNBTInteger、getPartialFrame、getRenderingPosition)与方块版同名。FMP 通路仅在 LoadedMods.FORGE_MULTIPART 为真时启用(LoadedMods.java:7、ProxyServer.java:104-108)。
数值
| 项 | 值 | 来源 |
|---|---|---|
IWailaDataAccessor 方法数 |
14 | IWailaDataAccessor.java:25-51 |
IWailaEntityAccessor 方法数 |
8 | IWailaEntityAccessor.java:22-36 |
IWailaCommonAccessor 方法数 |
17 | IWailaCommonAccessor.java |
IWailaFMPAccessor 方法数 |
10 | IWailaFMPAccessor.java |
IWailaEntityAccessor逐行清点为 8 个方法声明(getWorld、getPlayer、getEntity、getPosition、getRenderingPosition、getNBTData、getNBTInteger、getPartialFrame),与IWailaDataAccessor的 14 个形成对照。
交互
客户端世界卸载时 DataAccessorCommon.instance 会被重置(ProxyClient.java:76-84),因此 addon 不应长期持有 accessor 引用,只应在回调期间使用。
相关条目
- IWailaDataProvider - 使用
IWailaDataAccessor的方块回调 - IWailaEntityProvider - 使用
IWailaEntityAccessor的实体回调 - Tooltip 渲染器 API - 使用
IWailaCommonAccessor的渲染回调 - HUD 渲染管线 - accessor 数据在渲染管线中的填充时机