磁带实体

基本信息

属性 值
实体名 computronics:itemTape
实体类 pl.asie.computronics.item.entity.EntityItemIndestructable(继承 EntityItem)
Entity ID 1(CommonProxy.java:31-32)
跟踪范围 / 更新频率 64 / 20 tick(CommonProxy.java:34-35)
可被追踪 true(CommonProxy.java:36)
中文名 entity.computronics.itemTape.name = 损坏的磁带(zh_CN.lang)

注册条件(本条的重点)

CommonProxy.registerEntities() 在 Computronics.java:289 被调用,而该调用位于 if (Mods.isLoaded(Mods.GregTech)) 内部(Computronics.java:285-289):

if (isEnabled("tape", true)) {                     // Computronics.java:281
    itemTape = new ItemTape(Config.TAPE_LENGTHS);
    GameRegistry.registerItem(itemTape, "computronics.tape");
    if (Mods.isLoaded(Mods.GregTech)) {            // :285
        itemPartsGreg = new ItemPartsGreg();
        GameRegistry.registerItem(itemPartsGreg, "computronics.gt_parts");
        proxy.registerEntities();                  // :289
    }
    ...
}

因此没有 GregTech 时,computronics.itemTape 实体根本不会注册。而 ItemTape.hasCustomEntity 对所有 meta 都返回 true(ItemTape.java:246-248)——它不区分 meta 9 或其它 meta。

这构成一个真实的条件缺陷:

条件 结果
有录音带(enable.tape)且有 GregTech 实体已注册,createEntity 正常工作
有录音带但无 GregTech 实体未注册,但 hasCustomEntity 仍返回 true,createEntity(ItemTape.java:252-264)仍会构造 EntityItemIndestructable 并返回

在没有注册的情况下,Forge 无法为该实体分配网络 ID,掉落物实体在客户端不会被识别——表现为磁带掉落物不可见 / 无法拾取。实践后果:任何不装 GregTech 的 1.7.10 环境启用 Computronics 都会命中这个问题。

EntityItemIndestructable 唯一的使用者就是 ItemTape.createEntity(ItemTape.java:253),全文再无第二处引用。

功能

把被丢弃的磁带变成不可销毁的掉落物实体,避免磁带数据在掉落 / 移动中丢失。

createEntity 中除构造实体外还做两件事(ItemTape.java:259-262):

操作 值 作用
delayBeforeCanPickup 40 tick 拾取延迟,防止刚丢出就被吸回
motionX/Y/Z 继承原实体 保留抛出速度

类本身没有重写任何方法——4 个构造器(EntityItemIndestructable.java:14、:19、:24)之外是继承的 EntityItem 行为。名字里的 “Indestructable”(原文拼写如此)只体现在它不实现任何销毁路径。

交互

触发 行为
丢弃任意 meta 磁带 变为 EntityItemIndestructable
2 秒后 可被拾取

相关条目