TileEntityLaunchController(发射控制器)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Launch Controller planets/mars/MarsModule.java:250
所属 modid GalacticraftMars core/Constants.java:8,@Mod 见 planets/GalacticraftPlanets.java:37-38
注册方法入口 MarsModule.registerTileEntities(),由 planets/mars/MarsModule.java:153 调用 planets/mars/MarsModule.java:241-252
关联方块 MarsBlocks.machine = new BlockMachineMars().setBlockName("marsMachine") planets/mars/blocks/MarsBlocks.java:35
方块→TE 分派 metadata >= LAUNCH_CONTROLLER_METADATA(=8)时装发射控制器 planets/mars/blocks/BlockMachineMars.java:307-310、:49
父类 TileBaseElectricBlockWithInventory(→ TileBaseElectricBlock → TileBaseUniversalElectrical → EnergyStorageTile) planets/mars/tile/TileEntityLaunchController.java:38-39
实现接口 IChunkLoader / ISidedInventory / ILandingPadAttachable(父类另带 IInventory / IDisableableMachine / IConnector / IWrenchable) planets/mars/tile/TileEntityLaunchController.java:38-39、core/energy/tile/TileBaseElectricBlock.java:22-24
槽位数 1 见下节

槽位与字段

planets/mars/tile/TileEntityLaunchController.java:42:

private ItemStack[] containingItems = new ItemStack[1];

getSizeInventory() 本类未覆写,继承 core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48 → return this.getContainingItems().length; → 恒为 1(getContainingItems() 见 planets/mars/tile/TileEntityLaunchController.java:267-270)。

槽位 用途 源码
0 唯一的电池槽(isItemValidForSlot 只认 slotID == 0 的 GC 电力物品) planets/mars/tile/TileEntityLaunchController.java:283-285
可接受性 源码
侧面可达槽 {0};canExtractItem 对槽 0 恒为 true planets/mars/tile/TileEntityLaunchController.java:288-300

能量

项目 值 来源
缓冲容量 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
最大输出 10 gJ/t——构造里 setMaxExtract(10) 与默认值相同,是显式重写而非改动 planets/mars/tile/TileEntityLaunchController.java:81-84

⚠ 类里有个 public static final int WATTS_PER_TICK = 1(planets/mars/tile/TileEntityLaunchController.java:41), 但全源码库中除声明处与 TileEntityTerraformer 的同名常量外无任何引用,不能据此推断耗电速率。

构造时 this.noRedstoneControl = true(:83)——不受红石控制,但 getDisabled(0)(扳手)仍生效(:303-305)。

tick / 特殊机制

行为 频率 源码
校验本机 / 目标频率 每 40 tick planets/mars/tile/TileEntityLaunchController.java:129-132
清理已失效的着陆台票 每 20 tick,台方块不是 GCBlocks.landingPadFull 就 unforceChunk planets/mars/tile/TileEntityLaunchController.java:134-146
客户端频率占位请求 客户端侧、且本机与目标频率都为 −1 时才发 planets/mars/tile/TileEntityLaunchController.java:147-152

区块加载(IChunkLoader)

  • 开关:ConfigManagerMars.launchControllerChunkLoad(:176)。
  • 扫描自身 5×5(x/z 各 −2…+2)找 BlockLandingPadFull,只记录跨区块的台(:190-196)。
  • 票据存在 chunkLoadTicket,invalidate() 时 releaseTicket(:165-172)。
  • 客户端侧频率与目标频率用 PacketSimpleMars 同步(:147-152)。

频率机制

setFrequency / checkDestFrequencyValid(:347-408)遍历所有世界的 loadedTileEntityList, 找 frequency 相同的其它发射控制器,据此置 frequencyValid / destFrequencyValid—— 同频率不能重复。validFrequency() 还要求未被扳手禁用且有电(:410-413)。

⚠ getDisabled / setDisabled 被重载成三路开关(:307-338): index 0 = 机器禁用、index 1 = 发射计划启用、index 2 = 隐藏目标目的地。 后两者共用 disableCooldown = 10 的冷却。

GUI / Container

GUI 类 Container 类 分派处
planets.mars.client.gui.GuiLaunchController planets.mars.inventory.ContainerLaunchController Container planets/mars/MarsModule.java:318-319、Gui planets/mars/MarsModuleClient.java:150-151

两者都挂在 GuiIdsPlanets.MACHINE_MARS 下(planets/mars/MarsModule.java:314、planets/mars/MarsModuleClient.java:146)。

相关条目