TileMiningWell

事实基准:/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。 全部数值均标注文件:行号;未在源码中出现的数值一律不写。

注册信息

属性 值 来源
TileEntity 注册名 MiningWell BuildCraftFactory.java:103
注册类 buildcraft.factory.TileMiningWell 同上
所属 modid BuildCraft|Factory BuildCraftFactory.java:71 @Mod
注册方式 BCRegistry.INSTANCE.registerTileEntity(...) core/BCRegistry.java:90-92
关联方块 Mining Well(注册变量 miningWellBlock) BuildCraftFactory.java:103 同块
父类 TileBuildCraft factory/TileMiningWell.java
实现接口 IHasWork / IPipeConnection / IControllable / ILEDProvider factory/TileMiningWell.java 类声明
是否配置门控 否(registerTileEntity 无条件调用) BuildCraftFactory.java:103

⚠️ BCRegistry.registerTileEntity 内部走 GameRegistry.registerTileEntity(CompatHooks.INSTANCE.getTile(clas), ident) (core/BCRegistry.java:90-91),即实际注册的可能不是传入的类本身,而是 CompatHooks 的替换结果。

槽位数量与布局

无物品槽位。TileMiningWell 不实现 IInventory,也没有 SimpleInventory 字段—— 它的产物直接掉进世界,不经 GUI 缓冲。

唯一的内部状态是:

字段 类型 含义
miner BlockMiner 采矿机工作对象,失效时置 null
isDigging boolean 当前是否正在挖
ticksSinceAction int 初始 9001(:40),用于「多久没动作」判定
ledState int LED 状态

能量(回源码读常量)

构造函数 factory/TileMiningWell.java:36-43:

this.setBattery(new RFBattery(
        2 * 64 * BuilderAPI.BREAK_ENERGY,
        BuilderAPI.BREAK_ENERGY * 4 + BuilderAPI.BUILD_ENERGY,
        0));
参数 表达式 源码常量 算出的值
容量 maxEnergy 2 * 64 * BREAK_ENERGY BREAK_ENERGY = 160(api/blueprints/BuilderAPI.java:14) 2*64*160 = 20480
每 tick 接收上限 BREAK_ENERGY * 4 + BUILD_ENERGY BUILD_ENERGY = 240(api/blueprints/BuilderAPI.java:15) 160*4+240 = 880
最小接收量 字面量 — 0

吞吐上限推算(非源码直接给出,为上面两个常量的算术结果): 880 RF/tick × 20 tick/s = 17600 RF/s;打空一次满电需 20480 / 880 = 23.27 → 约 24 tick。

处理速率 / 耗时

  • 网络更新节流:SafeTimeTracker(BuildCraftCore.updateFactor)(:34), 节流周期取 updateFactor 这个配置项,不是硬编码常量,不写死数值。
  • 无固定加工耗时:采矿是「挖一个方块一次」的事件驱动,没有「N tick 出一个产物」这种节拍。
  • 实际单次破坏的能耗走 BuilderAPI.BREAK_ENERGY(160)这条常量。

GUI / Container 配对

没有 GUI,也没有 Container。FactoryGuiHandler(factory/FactoryGuiHandler.java)的 getClientGuiElement 分支里不含 MiningWell 分支(该文件 :25-61 只处理 AutoWorkbench / Refinery / Hopper / Pump / FloodGate / Tank)。

网络封包

走 TileEntity 通用的 sendNetworkUpdate()(updateEntity() 内 updateTracker.markTimeIfDelay(worldObj) 守卫,:34 定义 / :57-59 触发), 节流周期为 BuildCraftCore.updateFactor。未使用独立的 BuildCraft 封包 ID。

相关条目