跳到正文
烈焰甘蔗Wiki

Drone(无人机实体)

基本信息

属性 值
注册名 opencomputers:Drone(FML 注册名 Drone,mod 域 opencomputers 全小写)
实体类 li.cil.oc.common.entity.Drone(不叫 EntityDrone —— 本 fork 仓内没有 EntityDrone 这个类)
实体 ID 0
跟踪范围 / 更新频率 80 / 1 tick,发送速度更新
碰撞箱 setSize(12/16f, 6/16f) = 0.75 × 0.375 格
免疫火焰 是(isImmuneToFire = true)
重力 0.05
空气阻力 0.8
最大速度 0.4 格/刻
最大加速度 0.1 格/刻²
物品栏 最多 8 格(maxInventorySize = 8)

注册真源:common/Proxy.scala:101

EntityRegistry.registerModEntity(classOf[Drone], "Drone", 0, OpenComputers, 80, 1, true)

这是本 mod 唯一注册的实体(全仓仅此一处 registerModEntity)。

概述

Drone 是可移动的内嵌计算机。它自带一套完整的计算机环境(CPU / 内存 / GPU / 组件总线),由 OpenOS 或其他 OpenOS 兼容程序控制,在世界中自主移动、挖掘、放置方块。

组件与物品栏

  • 内部组件槽来自 DroneData.components;getSizeInventory 直接返回组件数(common/entity/Drone.scala:83)。
  • 无人机自身另有 8 格主物品栏(Drone.scala:57 maxInventorySize = 8,:113 Array.fill[Option[ItemStack]](8)(None))。
  • 装上 Fluid Tank 升级后可携带流体。

出现方式

⚠️ 无人机实体不是「用 Drone Case 直接生成」的 —— 这条原 wiki 说法有误。真实流程是两步:

  1. 组装:在 组装机 中用 Drone Case(droneCase1 / droneCase2 / droneCaseCreative,见 dronecase)+ 组件 + EEPROM 组装出 opencomputers:drone 物品。该物品 showInItemList = false 且 NEI.hide(this)(common/item/Drone.scala:18-20),在物品列表与 NEI 中都不可见。
  2. 放置实体:玩家手持该 drone 物品右键方块,item/Drone.scala:36-53 的 onItemUse 才会 new entity.Drone(world) → initializeAfterPlacement → spawnEntityInWorld,并把玩家名 / UUID 记为 owner。

移动与物理

  • 低重力(0.05)导致下落缓慢;速度与加速度都被硬性钳制在 maxVelocity / maxAcceleration。
  • 阻力分两种:运行中三分量统一 *= drag(:443-445);停止时水平分量还要乘下方方块的 slipperiness(:448-450),着地时垂直分量额外 *= -0.5(反弹)。
  • 目标位置由 Lua 侧设置,内部走 targetAcceleration(:277、:320,写入 dataWatcher 槽 6)。

交互

触发 行为 源码
右键(不潜行) 打开无人机 GUI Drone.scala:486-488
潜行 + 右键(手持扳手) kill() 回收无人机 Drone.scala:476-480
潜行 + 右键(非扳手,机器未运行) start() 启动 Drone.scala:482-484
被其他实体撞击 沿撞击反方向反弹(motion -= direction,再 * 0.5)并向 Lua 发 hit 信号 Drone.scala:458-471

hit 信号参数为方向向量 x, z, y;当配置项 Settings.get.inputUsername 为真时,额外追加撞击者用户名作为第 4 个参数(:462-465)。

状态

  • 运行中:执行 OpenOS 程序,受 maxVelocity / maxAcceleration 约束。
  • 停止:机器已停,改为受方块 slipperiness 影响的下落。
  • 步态音效被静音(func_145780_a 仅在 EventHandler.isItTime 时放行,:493-495)。

第三方集成

集成 Mod 集成类型 功能
ComputerCraft 外设/媒体 CC 外设和媒体驱动
CoFH / Thermal Expansion RF 能量 能量处理器驱动
IC2 EU 能量 EU 能量驱动
GregTech 能量容器 BEC / 能量容器驱动
MineFactory Reloaded SAFARIAIR / DSU SafariNet 和 DSU 驱动
Forestry 蜜蜂/分析器 蜜蜂和分析器驱动
Applied Energistics 2 ME 网络 ME 存储/接口/总线驱动
Thaumcraft 要素容器 要素容器和灌注矩阵驱动

相关条目

已订正:

  1. 原「注册名」写作 opencomputers.drone —— 分隔符错。FML registerModEntity 传的名字是 "Drone",域由 modid OpenComputers 小写化成 opencomputers,合成 opencomputers:Drone(ResourceLocation 全小写后落为 opencomputers:drone),不是点号形式。
  2. 原条目通篇暗示实体类名是 EntityDrone —— 仓内没有 EntityDrone.scala,真实类是 li.cil.oc.common.entity.Drone。真正叫 Drone 的还有三个同名不同物:common/item/Drone.scala(drone 物品)、common/container/Drone.scala(GUI 容器)、server/component/Drone.scala(Lua 组件)—— 这正是本 mod 最容易看错的地方。
  3. 原「生成方式」写「使用 Drone Case(无人机外壳)生成」—— 错。Drone Case 只是组装配方里的外壳;实体由右键放置已组装好的 opencomputers:drone 物品触发(common/item/Drone.scala:36-53)。
  4. 原条目未说明本 mod 只注册了这 1 个实体,容易让人以为机器人(Robot)也是实体 —— 实际上 Robot 是方块 opencomputers:robot + TileEntity RobotProxy,没有对应实体类。
  5. 原「碰撞箱 / 重力 / 阻力 / 速度 / 加速度 / 免疫火焰」六项数值经核对全部正确(Drone.scala:52-59),已补上对应行号。
  6. 原「物品栏 8 槽」表述含糊 —— 实际是「组件槽数 = 无人机自身物品栏格数」加「另 8 格主物品栏」,已按 Drone.scala:57/83/113 拆开写明。
  7. 原「潜行 + 右键(未运行)启动 Drone」漏了前置条件「且未手持扳手」,两个潜行分支是互斥的(Drone.scala:476-484),已按源码补全。
浏览全部模组