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)。

相关条目