穿透物品实体 No-Clip Item

基本信息

属性 值
注册名 gadomancy:EntityPermItem
注册位置 common/registration/RegisteredEntities.java:21
继承 thaumcraft.common.entities.EntityPermanentItem(EntityPermNoClipItem.java:20)
追踪距离 32
更新频率 40
发送速度更新 否(false)
Datawatcher 数量 2
客户端渲染 RenderSpecialItem(ClientProxy.java:219)

功能

这不是投掷物,而是**「物品主人」(item master)实体**——让 灵气塔 与 知识之书 能把物品送入机器内部、再原样取回,而不需要真的把物品丢进方块里。

它实现了 IItemMasterTile 接口(EntityPermNoClipItem.java:153)作为与主人方块通信的契约:

接口方法 作用
canStillHoldItem() 主人方块是否仍能持有该物品
informMaster() 通知主人方块
informItemRemoval() 物品被移除时通知主人

已注册为主人的方块(实现 IItemMasterTile 的 Tile):

主人方块 位置
TileAuraPylon TileAuraPylon.java:40
TileKnowledgeBook TileKnowledgeBook.java:47

固定坐标机制

实体记录两套坐标:

字段 含义
masterX/Y/Z 主人方块坐标
fixPosX/Y/Z 实体的固定位置

两者都通过 Datawatcher 同步,坐标用 Float.floatToIntBits 编码(EntityPermNoClipItem.java 构造函数)。源码注释说明 fixPos* 初始值 -1「永远不会真的取到这些值,因为塔的坐标永远不是 .0」。

移除事件处理

EventHandlerEntityServer 监听实体移除事件,检测 instanceof EntityPermNoClipItem 后回调主人方块的 informItemRemoval()(EventHandlerEntityServer.java:94-99)。

数值

数值名 值
追踪距离 32
更新频率 40 tick
发送速度更新 否
Datawatcher 数量 2
Datawatcher 类型 均为类型 6(addObjectByDataType(..., 6),entityInit())
已注册主人方块数 2

交互

触发 行为
主人方块请求持有物品 生成实体并固定在机器内部坐标
玩家取回物品 实体交还 ItemStack
实体被移除 回调 informItemRemoval()

相关条目