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。