TileEntityMinerBase(采矿机基座)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Astro Miner Base |
planets/asteroids/AsteroidsModule.java:323 |
| 所属 modid | GalacticraftMars(小行星带内容也归 Mars modid) |
core/Constants.java:8,@Mod 见 planets/GalacticraftPlanets.java:37-38 |
| 注册方法入口 | AsteroidsModule.registerTileEntities(),由 planets/asteroids/AsteroidsModule.java:270 调用 |
planets/asteroids/AsteroidsModule.java:316-324 |
| 关联方块 | AsteroidBlocks.minerBaseFull = new BlockMinerBaseFull("minerBaseFull") |
planets/asteroids/blocks/AsteroidBlocks.java:47 |
| 方块→TE 分派 | 无条件 new TileEntityMinerBase() |
planets/asteroids/blocks/BlockMinerBaseFull.java:50-52 |
| 父类 | TileBaseElectricBlockWithInventory(→ TileBaseElectricBlock → … → EnergyStorageTile) |
planets/asteroids/tile/TileEntityMinerBase.java:35 |
| 实现接口 | ISidedInventory / IMultiBlock(父类另带 IInventory / IDisableableMachine / IConnector / IWrenchable) |
planets/asteroids/tile/TileEntityMinerBase.java:35、core/energy/tile/TileBaseElectricBlock.java:22-24 |
| 槽位数 | 73 | 见下节 |
⚠ 本方块由 TileEntityMinerBaseSingle 凑齐 2×2×2 后自动替换生成,
玩家不能直接放置 minerBaseFull 得到可用基座(planets/asteroids/tile/TileEntityMinerBaseSingle.java:30-34)。
槽位与字段
planets/asteroids/tile/TileEntityMinerBase.java:37-38:
public static final int HOLDSIZE = 72;
private ItemStack[] containingItems = new ItemStack[HOLDSIZE + 1];
getSizeInventory()(:615-618)显式返回 HOLDSIZE + 1 → 73。
slotArray 在构造时填成 {1, 2, …, 72}(:59-62),跳过槽 0。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池槽(getBatteryInSlot() → getStackInSlot(0)) |
planets/asteroids/tile/TileEntityMinerBase.java:602-613、:540 |
| 1–72 | 采矿机缓存(addToInventory 从 k = 1 起循环) |
planets/asteroids/tile/TileEntityMinerBase.java:224-276、:502-504 |
| 可接受性 | 源码 |
|---|---|
侧面可达槽:除 facing + 2 面外全部 72 个货物槽 |
planets/asteroids/tile/TileEntityMinerBase.java:502-504 |
canInsertItem 恒为 false——机器只进不出,插入交给玩家/GUI |
planets/asteroids/tile/TileEntityMinerBase.java:516-518 |
canExtractItem:非电力面时 slotID > 0 或物品是耗尽的电池 |
planets/asteroids/tile/TileEntityMinerBase.java:521-535 |
| 每槽堆叠上限 64 | planets/asteroids/tile/TileEntityMinerBase.java:208-211 |
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 16000 gJ(STANDARD_CAPACITY,构造未覆写) |
core/energy/tile/EnergyStorageTile.java:18、:21 |
| 最大输入 | 25 gJ/t——new EnergyStorage(STANDARD_CAPACITY, 10) 两参构造展开为 maxReceive = 2.5F * 10 |
core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21 |
| 最大输出 | 12 gJ/t(困难模式 ConfigManagerCore.hardMode 下 20) |
planets/asteroids/tile/TileEntityMinerBase.java:57-63 |
| 电力输入面 | ForgeDirection.getOrientation(facing + 2) |
planets/asteroids/tile/TileEntityMinerBase.java:464-474 |
⚠ 从块(非主块)每 tick 会被改写能量参数:
容量 / maxExtract / maxReceive 全部被设为「主块剩余电量」energyLimit,并把自身存量
转给主块(:83-99)。真正储能的是主块。
⚠ shouldUseEnergy() 被覆写为 false(:331-334)——本机自身不耗电,
采矿机实体直接从缓冲取电。
结构(多方块 / 主从)
2×2×2 结构,可旋转(updateFacing 按 0→3→1→2→0 循环,:414-445)。
| 行为 | 说明 | 源码 |
|---|---|---|
onCreate |
空实现——结构由 TileEntityMinerBaseSingle 组装,本类只认主块关系 |
planets/asteroids/tile/TileEntityMinerBase.java:384 |
onDestroy |
拆 2×2×2 共 8 格 | planets/asteroids/tile/TileEntityMinerBase.java:386-395 |
| 主块判定 | setMainBlockPos(x,y,z) 传入自身坐标即为 master |
planets/asteroids/tile/TileEntityMinerBase.java:336-346 |
| 代理行为 | 非主块的 getStackInSlot / decrStackSize / getAccessibleSlotsFromSide 等全部转发给主块 |
planets/asteroids/tile/TileEntityMinerBase.java:502-600 |
| 失主处理 | 找不到主块就把自己或主块位置的方块删掉 | planets/asteroids/tile/TileEntityMinerBase.java:132-157 |
| 扳手效果 | setDisabled 被重载成**「召回采矿机」**(linkedMiner.recall()) |
planets/asteroids/tile/TileEntityMinerBase.java:699-714 |
⚠ onCreate 为空 + IMultiBlock 接口——这与 NASA 制造台那种
「TE 自己铺假方块」的框架不是同一套,此处结构由方块级占位 TE 完成。
tick / 特殊机制
| 行为 | 值 | 源码 |
|---|---|---|
| 网络范围 / 冷却 | 20.0 / 3,isNetworkedTile() = true |
planets/asteroids/tile/TileEntityMinerBase.java:303-316 |
| 采矿目标点 | findTargetPoints():小行星带维度取 100 格内最近小行星,否则按固定偏移表生成 1~10 个点 |
planets/asteroids/tile/TileEntityMinerBase.java:633-697 |
| 客户端朝向同步 | PacketSimpleAsteroids.S_REQUEST_MINERBASE_FACING / C_UPDATE_MINERBASE_FACING |
planets/asteroids/tile/TileEntityMinerBase.java:278-287、:447-462 |
| 链接的采矿机 | EntityAstroMiner linkedMiner + UUID linkedMinerID |
planets/asteroids/tile/TileEntityMinerBase.java:54-55、:476-499 |
⚠ getMaster() 找不到主块时会 setBlockToAir 或 removeTileEntity(:146、:153)——
结构被拆散后残留的单块会自毁,不是卡死。
GUI / Container
| GUI 类 | Container 类 | 分派处 |
|---|---|---|
planets.asteroids.client.gui.GuiAstroMinerDock |
planets.asteroids.inventory.ContainerAstroMinerDock |
Container planets/asteroids/AsteroidsModule.java:256-257、Gui planets/asteroids/AsteroidsModuleClient.java:133-134 |
两者挂在 GuiIdsPlanets.MACHINE_ASTEROIDS 下(planets/asteroids/AsteroidsModuleClient.java:129、:252)。
Container 按 HOLDSIZE + 1 布槽(planets/asteroids/inventory/ContainerAstroMinerDock.java:53)。